DRBD: Add support for new packets including the P_RS_DAGTAG family
These were recently added to the DRBD protocol. See the following commits at https://github.com/LINBIT/drbd-headers: 098b1fdcdbaa introduce new P_RS_CANCEL_AHEAD e5d5e6fa9af7 add P_DISCONNECT to stop connect-attempts 1681c4b0166e add dagtag resync request packets
This commit is contained in:
parent
91b453a70a
commit
9878026a51
|
@ -108,6 +108,16 @@ enum drbd_packet {
|
|||
|
||||
P_CONFIRM_STABLE = 0x49,
|
||||
|
||||
P_RS_CANCEL_AHEAD = 0x4a,
|
||||
|
||||
P_DISCONNECT = 0x4b,
|
||||
|
||||
P_RS_DAGTAG_REQ = 0x4c,
|
||||
P_RS_CSUM_DAGTAG_REQ = 0x4d,
|
||||
P_RS_THIN_DAGTAG_REQ = 0x4e,
|
||||
P_OV_DAGTAG_REQ = 0x4f,
|
||||
P_OV_DAGTAG_REPLY = 0x50,
|
||||
|
||||
P_INITIAL_META = 0xfff1,
|
||||
P_INITIAL_DATA = 0xfff2,
|
||||
|
||||
|
@ -190,6 +200,16 @@ static const value_string packet_names[] = {
|
|||
|
||||
{ P_CONFIRM_STABLE, "P_CONFIRM_STABLE" },
|
||||
|
||||
{ P_RS_CANCEL_AHEAD, "P_RS_CANCEL_AHEAD" },
|
||||
|
||||
{ P_DISCONNECT, "P_DISCONNECT" },
|
||||
|
||||
{ P_RS_DAGTAG_REQ, "P_RS_DAGTAG_REQ" },
|
||||
{ P_RS_CSUM_DAGTAG_REQ, "P_RS_CSUM_DAGTAG_REQ" },
|
||||
{ P_RS_THIN_DAGTAG_REQ, "P_RS_THIN_DAGTAG_REQ" },
|
||||
{ P_OV_DAGTAG_REQ, "P_OV_DAGTAG_REQ" },
|
||||
{ P_OV_DAGTAG_REPLY, "P_OV_DAGTAG_REPLY" },
|
||||
|
||||
{ P_INITIAL_META, "P_INITIAL_META" },
|
||||
{ P_INITIAL_DATA, "P_INITIAL_DATA" },
|
||||
|
||||
|
@ -343,6 +363,7 @@ static void decode_payload_data(tvbuff_t *tvb, proto_tree *tree);
|
|||
static void decode_payload_data_reply(tvbuff_t *tvb, proto_tree *tree);
|
||||
static void decode_payload_rs_data_reply(tvbuff_t *tvb, proto_tree *tree);
|
||||
static void decode_payload_barrier(tvbuff_t *tvb, proto_tree *tree);
|
||||
static void decode_payload_dagtag_data_request(tvbuff_t *tvb, proto_tree *tree);
|
||||
static void decode_payload_data_request(tvbuff_t *tvb, proto_tree *tree);
|
||||
static void decode_payload_sync_param(tvbuff_t *tvb, proto_tree *tree);
|
||||
static void decode_payload_protocol(tvbuff_t *tvb, proto_tree *tree);
|
||||
|
@ -411,6 +432,12 @@ static const value_payload_decoder payload_decoders[] = {
|
|||
{ P_ZEROES, decode_payload_data_size },
|
||||
{ P_RS_DEALLOCATED, decode_payload_rs_deallocated },
|
||||
{ P_WSAME, decode_payload_data_wsame },
|
||||
{ P_DISCONNECT, NULL },
|
||||
{ P_RS_DAGTAG_REQ, decode_payload_dagtag_data_request },
|
||||
{ P_RS_CSUM_DAGTAG_REQ, decode_payload_dagtag_data_request },
|
||||
{ P_RS_THIN_DAGTAG_REQ, decode_payload_dagtag_data_request },
|
||||
{ P_OV_DAGTAG_REQ, decode_payload_dagtag_data_request },
|
||||
{ P_OV_DAGTAG_REPLY, decode_payload_dagtag_data_request },
|
||||
|
||||
{ P_PING, NULL },
|
||||
{ P_PING_ACK, NULL },
|
||||
|
@ -428,6 +455,7 @@ static const value_payload_decoder payload_decoders[] = {
|
|||
{ P_RS_IS_IN_SYNC, decode_payload_block_ack },
|
||||
{ P_DELAY_PROBE, decode_payload_skip },
|
||||
{ P_RS_CANCEL, decode_payload_block_ack },
|
||||
{ P_RS_CANCEL_AHEAD, decode_payload_block_ack },
|
||||
{ P_CONN_ST_CHG_REPLY, decode_payload_rq_s_reply },
|
||||
{ P_RETRY_WRITE, decode_payload_block_ack },
|
||||
{ P_PEER_ACK, decode_payload_peer_ack },
|
||||
|
@ -515,7 +543,7 @@ static int hf_drbd_nodes_to_reach = -1;
|
|||
static int hf_drbd_reachable_nodes = -1;
|
||||
static int hf_drbd_offset = -1;
|
||||
static int hf_drbd_dagtag = -1;
|
||||
static int hf_drbd_node_id = -1;
|
||||
static int hf_drbd_dagtag_node_id = -1;
|
||||
|
||||
static int hf_drbd_state_role = -1;
|
||||
static int hf_drbd_state_peer = -1;
|
||||
|
@ -842,6 +870,15 @@ static void decode_payload_data_request(tvbuff_t *tvb, proto_tree *tree)
|
|||
proto_tree_add_item(tree, hf_drbd_blksize, tvb, 16, 4, ENC_BIG_ENDIAN);
|
||||
}
|
||||
|
||||
static void decode_payload_dagtag_data_request(tvbuff_t *tvb, proto_tree *tree)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_drbd_sector, tvb, 0, 8, ENC_BIG_ENDIAN);
|
||||
proto_tree_add_item(tree, hf_drbd_block_id, tvb, 8, 8, ENC_BIG_ENDIAN);
|
||||
proto_tree_add_item(tree, hf_drbd_blksize, tvb, 16, 4, ENC_BIG_ENDIAN);
|
||||
proto_tree_add_item(tree, hf_drbd_dagtag_node_id, tvb, 20, 4, ENC_BIG_ENDIAN);
|
||||
proto_tree_add_item(tree, hf_drbd_dagtag, tvb, 24, 8, ENC_BIG_ENDIAN);
|
||||
}
|
||||
|
||||
static void decode_payload_sync_param(tvbuff_t *tvb, proto_tree *tree)
|
||||
{
|
||||
guint length = tvb_reported_length(tvb);
|
||||
|
@ -978,7 +1015,7 @@ static void decode_payload_uuids110(tvbuff_t *tvb, proto_tree *tree)
|
|||
static void decode_payload_peer_dagtag(tvbuff_t *tvb, proto_tree *tree)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_drbd_dagtag, tvb, 0, 8, ENC_BIG_ENDIAN);
|
||||
proto_tree_add_item(tree, hf_drbd_node_id, tvb, 8, 4, ENC_BIG_ENDIAN);
|
||||
proto_tree_add_item(tree, hf_drbd_dagtag_node_id, tvb, 8, 4, ENC_BIG_ENDIAN);
|
||||
}
|
||||
|
||||
static void decode_payload_current_uuid(tvbuff_t *tvb, proto_tree *tree)
|
||||
|
@ -1168,7 +1205,7 @@ void proto_register_drbd(void)
|
|||
{ &hf_drbd_reachable_nodes, { "reachable_nodes", "drbd.reachable_nodes", FT_UINT64, BASE_CUSTOM, format_node_mask, 0x0, NULL, HFILL }},
|
||||
{ &hf_drbd_offset, { "offset", "drbd.offset", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
|
||||
{ &hf_drbd_dagtag, { "dagtag", "drbd.dagtag", FT_UINT64, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
|
||||
{ &hf_drbd_node_id, { "node_id", "drbd.node_id", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||
{ &hf_drbd_dagtag_node_id, { "dagtag_node_id", "drbd.dagtag_node_id", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||
|
||||
{ &hf_drbd_state_role, { "role", "drbd.state.role", FT_UINT32, BASE_DEC, VALS(role_names), STATE_ROLE, NULL, HFILL }},
|
||||
{ &hf_drbd_state_peer, { "peer", "drbd.state.peer", FT_UINT32, BASE_DEC, VALS(role_names), STATE_PEER, NULL, HFILL }},
|
||||
|
|
Loading…
Reference in New Issue