diff options
author | tuexen <tuexen@f5534014-38df-0310-8fa8-9805f1628bb7> | 2005-08-06 12:02:34 +0000 |
---|---|---|
committer | tuexen <tuexen@f5534014-38df-0310-8fa8-9805f1628bb7> | 2005-08-06 12:02:34 +0000 |
commit | 01e304b13d4b16e4969e149925b5fbe69d5e27a7 (patch) | |
tree | e1b02bf106b93c337770d1b76e7e51855b4d2aed | |
parent | f7030ee16531b21bf281489752a9a335540b1b6a (diff) |
Update to
* http://www.ietf.org/internet-drafts/draft-ietf-rserpool-common-param-09.txt
* http://www.ietf.org/internet-drafts/draft-ietf-rserpool-enrp-12.txt
* http://www.ietf.org/internet-drafts/draft-ietf-rserpool-asap-12.txt
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@15243 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r-- | epan/dissectors/packet-asap.c | 242 | ||||
-rw-r--r-- | epan/dissectors/packet-enrp.c | 183 |
2 files changed, 275 insertions, 150 deletions
diff --git a/epan/dissectors/packet-asap.c b/epan/dissectors/packet-asap.c index bfbd30fdcf..b991a0cb87 100644 --- a/epan/dissectors/packet-asap.c +++ b/epan/dissectors/packet-asap.c @@ -1,10 +1,17 @@ /* packet-asap.c - * Routines for Aggregate Server Access Protocol + * Routines for Aggregate Server Access Protocol (ASAP) * It is hopefully (needs testing) compilant to - * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-common-param-06.txt - * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-asap-09.txt + * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-common-param-09.txt + * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-asap-12.txt * - * Copyright 2004, Michael Tuexen <tuexen [AT] fh-muenster.de> + * The code is not as simple as possible for the current protocol + * but allows to be easily adopted to future versions of the protocol. + * I will reconsider this after the protocol is an RFC. + * + * TODO: + * - check message lengths + * + * Copyright 2004, 2005 Michael Tuexen <tuexen [AT] fh-muenster.de> * * $Id$ * @@ -68,14 +75,22 @@ static int hf_reserved = -1; static int hf_cookie = -1; static int hf_pe_identifier = -1; static int hf_pe_checksum = -1; +static int hf_pe_checksum_reserved = -1; +static int hf_home_enrp_server_bit = -1; +static int hf_reject_bit = -1; /* Initialize the subtree pointers */ static gint ett_asap = -1; static gint ett_asap_parameter = -1; static gint ett_asap_cause = -1; +static gint ett_asap_flags = -1; static void dissect_parameters(tvbuff_t *, proto_tree *); +static void +dissect_parameter(tvbuff_t *, proto_tree *); +static void +dissect_asap_message(tvbuff_t *, packet_info *, proto_tree *); #define NETWORK_BYTE_ORDER FALSE #define ADD_PADDING(x) ((((x) + 3) >> 2) << 2) @@ -83,7 +98,8 @@ dissect_parameters(tvbuff_t *, proto_tree *); #define ASAP_UDP_PORT 3863 #define ASAP_TCP_PORT 3863 -/* Dissectors for error causes */ +/* Dissectors for error causes. This is common for ASAP and ENRP. */ + #define CAUSE_CODE_LENGTH 2 #define CAUSE_LENGTH_LENGTH 2 #define CAUSE_HEADER_LENGTH (CAUSE_CODE_LENGTH + CAUSE_LENGTH_LENGTH) @@ -115,6 +131,7 @@ dissect_unknown_cause(tvbuff_t *cause_tvb, proto_tree *cause_tree, proto_item *c #define LACK_OF_RESOURCES_CAUSE_CODE 6 #define INCONSISTENT_TRANSPORT_TYPE_CAUSE_CODE 7 #define INCONSISTENT_DATA_CONTROL_CONFIGURATION_CAUSE_CODE 8 +#define UNKNOWN_POOL_HANDLE 9 static const value_string cause_code_values[] = { { UNRECOGNIZED_PARAMETER_CAUSE_CODE, "Unrecognized parameter" }, @@ -125,6 +142,7 @@ static const value_string cause_code_values[] = { { LACK_OF_RESOURCES_CAUSE_CODE, "Lack of resources" }, { INCONSISTENT_TRANSPORT_TYPE_CAUSE_CODE, "Inconsistent transport type" }, { INCONSISTENT_DATA_CONTROL_CONFIGURATION_CAUSE_CODE, "Inconsistent data/control type" }, + { UNKNOWN_POOL_HANDLE, "Unknown pool handle" }, { 0, NULL } }; static void @@ -133,6 +151,7 @@ dissect_error_cause(tvbuff_t *cause_tvb, proto_tree *parameter_tree) guint16 code, length, padding_length; proto_item *cause_item; proto_tree *cause_tree; + tvbuff_t *parameter_tvb, *message_tvb; code = tvb_get_ntohs(cause_tvb, CAUSE_CODE_OFFSET); length = tvb_get_ntohs(cause_tvb, CAUSE_LENGTH_OFFSET); @@ -145,6 +164,35 @@ dissect_error_cause(tvbuff_t *cause_tvb, proto_tree *parameter_tree) proto_tree_add_item(cause_tree, hf_cause_length, cause_tvb, CAUSE_LENGTH_OFFSET, CAUSE_LENGTH_LENGTH, NETWORK_BYTE_ORDER); switch(code) { + case UNRECOGNIZED_PARAMETER_CAUSE_CODE: + parameter_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_parameter(parameter_tvb, parameter_tree); + break; + case UNRECONGNIZED_MESSAGE_CAUSE_CODE: + message_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_asap_message(message_tvb, NULL, parameter_tree); + break; + break; + case INVALID_VALUES: + parameter_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_parameter(parameter_tvb, parameter_tree); + break; + case NON_UNIQUE_PE_IDENTIFIER: + break; + case POOLING_POLICY_INCONSISTENT_CAUSE_CODE: + parameter_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_parameter(parameter_tvb, parameter_tree); + break; + case LACK_OF_RESOURCES_CAUSE_CODE: + break; + case INCONSISTENT_TRANSPORT_TYPE_CAUSE_CODE: + parameter_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_parameter(parameter_tvb, parameter_tree); + break; + case INCONSISTENT_DATA_CONTROL_CONFIGURATION_CAUSE_CODE: + break; + case UNKNOWN_POOL_HANDLE: + break; default: dissect_unknown_cause(cause_tvb, cause_tree, cause_item); break; @@ -170,7 +218,7 @@ dissect_error_causes(tvbuff_t *error_causes_tvb, proto_tree *parameter_tree) } } -/* Dissectors for parameters. This is common for ASAP and ENRP */ +/* Dissectors for parameters. This is common for ASAP and ENRP. */ #define PARAMETER_TYPE_LENGTH 2 #define PARAMETER_LENGTH_LENGTH 2 @@ -378,14 +426,18 @@ dissect_pe_identifier_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_t proto_item_append_text(parameter_item, " (0x%x)", tvb_get_ntohl(parameter_tvb, PE_IDENTIFIER_OFFSET)); } -#define PE_CHECKSUM_LENGTH 4 +#define PE_CHECKSUM_LENGTH 2 +#define PE_CHECKSUM_RESERVED_LENGTH 2 + #define PE_CHECKSUM_OFFSET PARAMETER_VALUE_OFFSET +#define PE_CHECKSUM_RESERVED_OFFSET (PE_CHECKSUM_OFFSET + PE_CHECKSUM_LENGTH) static void dissect_pe_checksum_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { - proto_tree_add_item(parameter_tree, hf_pe_checksum, parameter_tvb, PE_CHECKSUM_OFFSET, PE_CHECKSUM_LENGTH, NETWORK_BYTE_ORDER); - proto_item_append_text(parameter_item, " (0x%x)", tvb_get_ntohl(parameter_tvb, PE_CHECKSUM_OFFSET)); + proto_tree_add_item(parameter_tree, hf_pe_checksum, parameter_tvb, PE_CHECKSUM_OFFSET, PE_CHECKSUM_LENGTH, NETWORK_BYTE_ORDER); + proto_tree_add_item(parameter_tree, hf_pe_checksum_reserved, parameter_tvb, PE_CHECKSUM_RESERVED_OFFSET, PE_CHECKSUM_RESERVED_LENGTH, NETWORK_BYTE_ORDER); + proto_item_append_text(parameter_item, " (0x%x)", tvb_get_ntohs(parameter_tvb, PE_CHECKSUM_OFFSET)); } static void @@ -522,6 +574,8 @@ dissect_parameters(tvbuff_t *parameters_tvb, proto_tree *tree) } } +/* Dissectors for messages. This is specific to ASAP */ + #define MESSAGE_TYPE_LENGTH 1 #define MESSAGE_FLAGS_LENGTH 1 #define MESSAGE_LENGTH_LENGTH 2 @@ -531,51 +585,85 @@ dissect_parameters(tvbuff_t *parameters_tvb, proto_tree *tree) #define MESSAGE_LENGTH_OFFSET (MESSAGE_FLAGS_OFFSET + MESSAGE_FLAGS_LENGTH) #define MESSAGE_VALUE_OFFSET (MESSAGE_LENGTH_OFFSET + MESSAGE_LENGTH_LENGTH) -#define REGISTRATION_MESSAGE_TYPE 0x01 -#define DEREGISTRATION_MESSAGE_TYPE 0x02 -#define REGISTRATION_RESPONSE_MESSAGE_TYPE 0x03 -#define DEREGISTRATION_RESPONSE_MESSAGE_TYPE 0x04 -#define NAME_RESOLUTION_MESSAGE_TYPE 0x05 -#define NAME_RESOLUTION_RESPONSE_MESSAGE_TYPE 0x06 -#define ENDPOINT_KEEP_ALIVE_MESSAGE_TYPE 0x07 -#define ENDPOINT_KEEP_ALIVE_ACK_MESSAGE_TYPE 0x08 -#define ENDPOINT_UNREACHABLE_MESSAGE_TYPE 0x09 -#define SERVER_ANNOUNCE_MESSAGE_TYPE 0x0a -#define COOKIE_MESSAGE_TYPE 0x0b -#define COOKIE_ECHO_MESSAGE_TYPE 0x0c -#define BUSINESS_CARD_MESSAGE_TYPE 0x0d -#define PEER_ERROR_MESSAGE_TYPE 0x0e +#define REGISTRATION_MESSAGE_TYPE 0x01 +#define DEREGISTRATION_MESSAGE_TYPE 0x02 +#define REGISTRATION_RESPONSE_MESSAGE_TYPE 0x03 +#define DEREGISTRATION_RESPONSE_MESSAGE_TYPE 0x04 +#define HANDLE_RESOLUTION_MESSAGE_TYPE 0x05 +#define HANDLE_RESOLUTION_RESPONSE_MESSAGE_TYPE 0x06 +#define ENDPOINT_KEEP_ALIVE_MESSAGE_TYPE 0x07 +#define ENDPOINT_KEEP_ALIVE_ACK_MESSAGE_TYPE 0x08 +#define ENDPOINT_UNREACHABLE_MESSAGE_TYPE 0x09 +#define SERVER_ANNOUNCE_MESSAGE_TYPE 0x0a +#define COOKIE_MESSAGE_TYPE 0x0b +#define COOKIE_ECHO_MESSAGE_TYPE 0x0c +#define BUSINESS_CARD_MESSAGE_TYPE 0x0d +#define ERROR_MESSAGE_TYPE 0x0e static const value_string message_type_values[] = { - { REGISTRATION_MESSAGE_TYPE, "Registration" }, - { DEREGISTRATION_MESSAGE_TYPE, "Deregistration" }, - { REGISTRATION_RESPONSE_MESSAGE_TYPE, "Registration response" }, - { DEREGISTRATION_RESPONSE_MESSAGE_TYPE, "Deregistration response" }, - { NAME_RESOLUTION_MESSAGE_TYPE, "Name resolution" }, - { NAME_RESOLUTION_RESPONSE_MESSAGE_TYPE, "Name resolution response" }, - { ENDPOINT_KEEP_ALIVE_MESSAGE_TYPE, "Endpoint keep alive" }, - { ENDPOINT_KEEP_ALIVE_ACK_MESSAGE_TYPE, "Endpoint keep alive acknowledgement" }, - { ENDPOINT_UNREACHABLE_MESSAGE_TYPE, "Endpoint unreachable" }, - { SERVER_ANNOUNCE_MESSAGE_TYPE, "Server announce" }, - { COOKIE_MESSAGE_TYPE, "Cookie" }, - { COOKIE_ECHO_MESSAGE_TYPE, "Cookie echo" }, - { BUSINESS_CARD_MESSAGE_TYPE, "Business card" }, - { PEER_ERROR_MESSAGE_TYPE, "Peer error" }, - { 0, NULL } }; + { REGISTRATION_MESSAGE_TYPE, "ASAP Registration" }, + { DEREGISTRATION_MESSAGE_TYPE, "ASAP Deregistration" }, + { REGISTRATION_RESPONSE_MESSAGE_TYPE, "ASAP Registration response" }, + { DEREGISTRATION_RESPONSE_MESSAGE_TYPE, "ASAP Deregistration response" }, + { HANDLE_RESOLUTION_MESSAGE_TYPE, "ASAP Name resolution" }, + { HANDLE_RESOLUTION_RESPONSE_MESSAGE_TYPE, "ASAP Name resolution response" }, + { ENDPOINT_KEEP_ALIVE_MESSAGE_TYPE, "ASAP Endpoint keep alive" }, + { ENDPOINT_KEEP_ALIVE_ACK_MESSAGE_TYPE, "ASAP Endpoint keep alive acknowledgement" }, + { ENDPOINT_UNREACHABLE_MESSAGE_TYPE, "ASAP Endpoint unreachable" }, + { SERVER_ANNOUNCE_MESSAGE_TYPE, "ASAP Server announce" }, + { COOKIE_MESSAGE_TYPE, "ASAP Cookie" }, + { COOKIE_ECHO_MESSAGE_TYPE, "ASAP Cookie echo" }, + { BUSINESS_CARD_MESSAGE_TYPE, "ASAP Business card" }, + { ERROR_MESSAGE_TYPE, "ASAP Peer error" }, + { 0, NULL } }; + +#define SERVER_IDENTIFIER_OFFSET MESSAGE_VALUE_OFFSET +#define SERVER_IDENTIFIER_LENGTH 4 + +#define HOME_ENRP_SERVER_BIT_MASK 0x01 +#define REJECT_BIT_MASK 0x01 + +static const true_false_string home_enrp_server_bit_value = { + "Want to be new ENRP server", + "Do not want to be new ENRP server" +}; + +static const true_false_string reject_bit_value = { + "Rejected", + "Accepted" +}; static void dissect_asap_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *asap_tree) { tvbuff_t *parameters_tvb; - - if (check_col(pinfo->cinfo, COL_INFO)) - col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(tvb_get_guint8(message_tvb, MESSAGE_TYPE_OFFSET), message_type_values, "Unknown ASAP type")); + proto_item *flags_item; + proto_tree *flags_tree; + guint8 type; + + /* pinfo is NULL only if dissect_enrp_message is called from dissect_error cause */ + + type = tvb_get_guint8(message_tvb, MESSAGE_TYPE_OFFSET); + if (pinfo && (check_col(pinfo->cinfo, COL_INFO))) + col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(type, message_type_values, "Unknown ASAP type")); if (asap_tree) { proto_tree_add_item(asap_tree, hf_message_type, message_tvb, MESSAGE_TYPE_OFFSET, MESSAGE_TYPE_LENGTH, NETWORK_BYTE_ORDER); - proto_tree_add_item(asap_tree, hf_message_flags, message_tvb, MESSAGE_FLAGS_OFFSET, MESSAGE_FLAGS_LENGTH, NETWORK_BYTE_ORDER); + flags_item = proto_tree_add_item(asap_tree, hf_message_flags, message_tvb, MESSAGE_FLAGS_OFFSET, MESSAGE_FLAGS_LENGTH, NETWORK_BYTE_ORDER); + flags_tree = proto_item_add_subtree(flags_item, ett_asap_flags); + if (type == REGISTRATION_RESPONSE_MESSAGE_TYPE) { + proto_tree_add_item(flags_tree, hf_reject_bit, message_tvb, MESSAGE_FLAGS_OFFSET, MESSAGE_FLAGS_LENGTH, NETWORK_BYTE_ORDER); + } + if (type == ENDPOINT_KEEP_ALIVE_MESSAGE_TYPE) { + proto_tree_add_item(flags_tree, hf_home_enrp_server_bit, message_tvb, MESSAGE_FLAGS_OFFSET, MESSAGE_FLAGS_LENGTH, NETWORK_BYTE_ORDER); + } proto_tree_add_item(asap_tree, hf_message_length, message_tvb, MESSAGE_LENGTH_OFFSET, MESSAGE_LENGTH_LENGTH, NETWORK_BYTE_ORDER); - parameters_tvb = tvb_new_subset(message_tvb, MESSAGE_VALUE_OFFSET, -1, -1); + if (type == SERVER_ANNOUNCE_MESSAGE_TYPE) { + proto_tree_add_item(asap_tree, hf_server_identifier, message_tvb, SERVER_IDENTIFIER_OFFSET, SERVER_IDENTIFIER_LENGTH, NETWORK_BYTE_ORDER); + parameters_tvb = tvb_new_subset(message_tvb, MESSAGE_VALUE_OFFSET + SERVER_IDENTIFIER_LENGTH, -1, -1); + } else { + parameters_tvb = tvb_new_subset(message_tvb, MESSAGE_VALUE_OFFSET, -1, -1); + } dissect_parameters(parameters_tvb, asap_tree); } } @@ -586,8 +674,8 @@ dissect_asap(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *tree) proto_item *asap_item; proto_tree *asap_tree; - /* make entry in the Protocol column on summary display */ - if (check_col(pinfo->cinfo, COL_PROTOCOL)) + /* pinfo is NULL only if dissect_asap_message is called from dissect_error cause */ + if (pinfo && (check_col(pinfo->cinfo, COL_PROTOCOL))) col_set_str(pinfo->cinfo, COL_PROTOCOL, "ASAP"); /* In the interest of speed, if "tree" is NULL, don't do any work not @@ -610,41 +698,45 @@ proto_register_asap(void) /* Setup list of header fields */ static hf_register_info hf[] = { - { &hf_message_type, { "Type", "asap.message_type", FT_UINT8, BASE_DEC, VALS(message_type_values), 0x0, "", HFILL } }, - { &hf_message_flags, { "Flags", "asap.message_flags", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL } }, - { &hf_message_length, { "Length", "asap.message_length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_cause_code, { "Cause code", "asap.cause_code", FT_UINT16, BASE_HEX, VALS(cause_code_values), 0x0, "", HFILL } }, - { &hf_cause_length, { "Cause length", "asap.cause_length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_cause_info, { "Cause info", "asap.cause_info", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL } }, - { &hf_cause_padding, { "Padding", "asap.cause_padding", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL } }, - { &hf_parameter_type, { "Parameter Type", "asap.parameter_type", FT_UINT16, BASE_HEX, VALS(parameter_type_values), 0x0, "", HFILL } }, - { &hf_parameter_length, { "Parameter length", "asap.parameter_length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_parameter_value, { "Parameter value", "asap.parameter_value", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL } }, - { &hf_parameter_padding, { "Padding", "asap.parameter_padding", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL } }, - { &hf_parameter_ipv4_address, { "IP Version 4 address", "asap.ipv4_address", FT_IPv4, BASE_NONE, NULL, 0x0, "", HFILL } }, - { &hf_parameter_ipv6_address, { "IP Version 6 address", "asap.ipv6_address", FT_IPv6, BASE_NONE, NULL, 0x0, "", HFILL } }, - { &hf_sctp_port, { "Port", "asap.sctp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_transport_use, { "Transport use", "asap.transport_use", FT_UINT16, BASE_DEC, VALS(transport_use_values), 0x0, "", HFILL } }, - { &hf_tcp_port, { "Port", "asap.tcp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_udp_port, { "Port", "asap.udp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_udp_reserved, { "Reserved", "asap.udp_transport_reserved", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_policy_type, { "Policy type", "asap.pool_member_slection_policy_type", FT_UINT8, BASE_DEC, VALS(policy_type_values), 0x0, "", HFILL } }, - { &hf_policy_value, { "Policy value", "asap.pool_member_slection_policy_value", FT_INT24, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_pool_handle, { "Pool handle", "asap.pool_handle_pool_handle", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL } }, - { &hf_pe_pe_identifier, { "PE identifier", "asap.pool_element_pe_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, - { &hf_home_enrp_id, { "Home ENRP server identifier", "asap.pool_element_home_enrp_server_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, - { &hf_reg_life, { "Registration life", "asap.pool_element_registration_life", FT_INT32, BASE_DEC, NULL, 0x0, "", HFILL } }, - { &hf_server_identifier, { "Server identifier", "asap.server_information_server_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, - { &hf_m_bit, { "M-Bit", "asap.server_information_m_bit", FT_BOOLEAN, 32, NULL, M_BIT_MASK, "", HFILL } }, - { &hf_reserved, { "Reserved", "asap.server_information_reserved", FT_UINT32, BASE_HEX, NULL, RESERVED_MASK, "", HFILL } }, - { &hf_cookie, { "Cookie", "asap.cookie", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL } }, - { &hf_pe_identifier, { "PE identifier", "asap.pe_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, - { &hf_pe_checksum, { "PE checksum", "asap.pe_checksum", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_message_type, { "Type", "asap.message_type", FT_UINT8, BASE_DEC, VALS(message_type_values), 0x0, "", HFILL } }, + { &hf_message_flags, { "Flags", "asap.message_flags", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_message_length, { "Length", "asap.message_length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_cause_code, { "Cause code", "asap.cause_code", FT_UINT16, BASE_HEX, VALS(cause_code_values), 0x0, "", HFILL } }, + { &hf_cause_length, { "Cause length", "asap.cause_length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_cause_info, { "Cause info", "asap.cause_info", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL } }, + { &hf_cause_padding, { "Padding", "asap.cause_padding", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL } }, + { &hf_parameter_type, { "Parameter Type", "asap.parameter_type", FT_UINT16, BASE_HEX, VALS(parameter_type_values), 0x0, "", HFILL } }, + { &hf_parameter_length, { "Parameter length", "asap.parameter_length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_parameter_value, { "Parameter value", "asap.parameter_value", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL } }, + { &hf_parameter_padding, { "Padding", "asap.parameter_padding", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL } }, + { &hf_parameter_ipv4_address, { "IP Version 4 address", "asap.ipv4_address", FT_IPv4, BASE_NONE, NULL, 0x0, "", HFILL } }, + { &hf_parameter_ipv6_address, { "IP Version 6 address", "asap.ipv6_address", FT_IPv6, BASE_NONE, NULL, 0x0, "", HFILL } }, + { &hf_sctp_port, { "Port", "asap.sctp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_transport_use, { "Transport use", "asap.transport_use", FT_UINT16, BASE_DEC, VALS(transport_use_values), 0x0, "", HFILL } }, + { &hf_tcp_port, { "Port", "asap.tcp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_udp_port, { "Port", "asap.udp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_udp_reserved, { "Reserved", "asap.udp_transport_reserved", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_policy_type, { "Policy type", "asap.pool_member_slection_policy_type", FT_UINT8, BASE_DEC, VALS(policy_type_values), 0x0, "", HFILL } }, + { &hf_policy_value, { "Policy value", "asap.pool_member_slection_policy_value", FT_INT24, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_pool_handle, { "Pool handle", "asap.pool_handle_pool_handle", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_pe_pe_identifier, { "PE identifier", "asap.pool_element_pe_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_home_enrp_id, { "Home ENRP server identifier", "asap.pool_element_home_enrp_server_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_reg_life, { "Registration life", "asap.pool_element_registration_life", FT_INT32, BASE_DEC, NULL, 0x0, "", HFILL } }, + { &hf_m_bit, { "M-Bit", "asap.server_information_m_bit", FT_BOOLEAN, 32, NULL, M_BIT_MASK, "", HFILL } }, + { &hf_reserved, { "Reserved", "asap.server_information_reserved", FT_UINT32, BASE_HEX, NULL, RESERVED_MASK, "", HFILL } }, + { &hf_cookie, { "Cookie", "asap.cookie", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_pe_identifier, { "PE identifier", "asap.pe_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_pe_checksum, { "PE checksum", "asap.pe_checksum", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_pe_checksum_reserved, { "Reserved", "asap.pe_checksum_reserved", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_server_identifier, { "Server identifier", "asap.server_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_home_enrp_server_bit, { "H bit", "asap.h_bit", FT_BOOLEAN, 8, TFS(&home_enrp_server_bit_value), HOME_ENRP_SERVER_BIT_MASK, "", HFILL } }, + { &hf_reject_bit, { "R bit", "asap.r_bit", FT_BOOLEAN, 8, TFS(&reject_bit_value), REJECT_BIT_MASK, "", HFILL } }, }; /* Setup protocol subtree array */ static gint *ett[] = { &ett_asap, + &ett_asap_flags, &ett_asap_parameter, &ett_asap_cause, }; diff --git a/epan/dissectors/packet-enrp.c b/epan/dissectors/packet-enrp.c index e78a5a82da..5e289cbc2b 100644 --- a/epan/dissectors/packet-enrp.c +++ b/epan/dissectors/packet-enrp.c @@ -1,8 +1,8 @@ /* packet-enrp.c * Routines for Endpoint Name Resolution Protocol (ENRP) * It is hopefully (needs testing) compilant to - * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-common-param-06.txt - * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-enrp-09.txt + * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-common-param-09.txt + * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-enrp-12.txt * * The code is not as simple as possible for the current protocol * but allows to be easily adopted to future versions of the protocol. @@ -11,7 +11,7 @@ * TODO: * - check message lengths * - * Copyright 2004, Michael Tuexen <tuexen [AT] fh-muenster.de> + * Copyright 2004, 2005 Michael Tuexen <tuexen [AT] fh-muenster.de> * * $Id$ * @@ -76,6 +76,7 @@ static int hf_reserved = -1; static int hf_cookie = -1; static int hf_pe_identifier = -1; static int hf_pe_checksum = -1; +static int hf_pe_checksum_reserved = -1; static int hf_sender_servers_id = -1; static int hf_receiver_servers_id = -1; static int hf_target_servers_id = -1; @@ -94,10 +95,18 @@ static gint ett_enrp_flags = -1; static void dissect_parameters(tvbuff_t *, proto_tree *); +static void +dissect_parameter(tvbuff_t *, proto_tree *); +static void +dissect_enrp_message(tvbuff_t *, packet_info *, proto_tree *); #define NETWORK_BYTE_ORDER FALSE #define ADD_PADDING(x) ((((x) + 3) >> 2) << 2) +/* These following ports are NOT reserved. */ +#define ENRP_UDP_PORT 3864 +#define ASAP_SCTP_PORT 3864 + /* Dissectors for error causes. This is common for ASAP and ENRP. */ #define CAUSE_CODE_LENGTH 2 @@ -131,6 +140,7 @@ dissect_unknown_cause(tvbuff_t *cause_tvb, proto_tree *cause_tree, proto_item *c #define LACK_OF_RESOURCES_CAUSE_CODE 6 #define INCONSISTENT_TRANSPORT_TYPE_CAUSE_CODE 7 #define INCONSISTENT_DATA_CONTROL_CONFIGURATION_CAUSE_CODE 8 +#define UNKNOWN_POOL_HANDLE 9 static const value_string cause_code_values[] = { { UNRECOGNIZED_PARAMETER_CAUSE_CODE, "Unrecognized parameter" }, @@ -141,6 +151,7 @@ static const value_string cause_code_values[] = { { LACK_OF_RESOURCES_CAUSE_CODE, "Lack of resources" }, { INCONSISTENT_TRANSPORT_TYPE_CAUSE_CODE, "Inconsistent transport type" }, { INCONSISTENT_DATA_CONTROL_CONFIGURATION_CAUSE_CODE, "Inconsistent data/control type" }, + { UNKNOWN_POOL_HANDLE, "Unknown pool handle" }, { 0, NULL } }; static void @@ -149,6 +160,7 @@ dissect_error_cause(tvbuff_t *cause_tvb, proto_tree *parameter_tree) guint16 code, length, padding_length; proto_item *cause_item; proto_tree *cause_tree; + tvbuff_t *parameter_tvb, *message_tvb; code = tvb_get_ntohs(cause_tvb, CAUSE_CODE_OFFSET); length = tvb_get_ntohs(cause_tvb, CAUSE_LENGTH_OFFSET); @@ -161,6 +173,35 @@ dissect_error_cause(tvbuff_t *cause_tvb, proto_tree *parameter_tree) proto_tree_add_item(cause_tree, hf_cause_length, cause_tvb, CAUSE_LENGTH_OFFSET, CAUSE_LENGTH_LENGTH, NETWORK_BYTE_ORDER); switch(code) { + case UNRECOGNIZED_PARAMETER_CAUSE_CODE: + parameter_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_parameter(parameter_tvb, parameter_tree); + break; + case UNRECONGNIZED_MESSAGE_CAUSE_CODE: + message_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_enrp_message(message_tvb, NULL, parameter_tree); + break; + break; + case INVALID_VALUES: + parameter_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_parameter(parameter_tvb, parameter_tree); + break; + case NON_UNIQUE_PE_IDENTIFIER: + break; + case POOLING_POLICY_INCONSISTENT_CAUSE_CODE: + parameter_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_parameter(parameter_tvb, parameter_tree); + break; + case LACK_OF_RESOURCES_CAUSE_CODE: + break; + case INCONSISTENT_TRANSPORT_TYPE_CAUSE_CODE: + parameter_tvb = tvb_new_subset(cause_tvb, CAUSE_INFO_OFFSET, -1, -1); + dissect_parameter(parameter_tvb, parameter_tree); + break; + case INCONSISTENT_DATA_CONTROL_CONFIGURATION_CAUSE_CODE: + break; + case UNKNOWN_POOL_HANDLE: + break; default: dissect_unknown_cause(cause_tvb, cause_tree, cause_item); break; @@ -394,14 +435,18 @@ dissect_pe_identifier_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_t proto_item_append_text(parameter_item, " (0x%x)", tvb_get_ntohl(parameter_tvb, PE_IDENTIFIER_OFFSET)); } -#define PE_CHECKSUM_LENGTH 4 +#define PE_CHECKSUM_LENGTH 2 +#define PE_CHECKSUM_RESERVED_LENGTH 2 + #define PE_CHECKSUM_OFFSET PARAMETER_VALUE_OFFSET +#define PE_CHECKSUM_RESERVED_OFFSET (PE_CHECKSUM_OFFSET + PE_CHECKSUM_LENGTH) static void dissect_pe_checksum_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { - proto_tree_add_item(parameter_tree, hf_pe_checksum, parameter_tvb, PE_CHECKSUM_OFFSET, PE_CHECKSUM_LENGTH, NETWORK_BYTE_ORDER); - proto_item_append_text(parameter_item, " (0x%x)", tvb_get_ntohl(parameter_tvb, PE_CHECKSUM_OFFSET)); + proto_tree_add_item(parameter_tree, hf_pe_checksum, parameter_tvb, PE_CHECKSUM_OFFSET, PE_CHECKSUM_LENGTH, NETWORK_BYTE_ORDER); + proto_tree_add_item(parameter_tree, hf_pe_checksum_reserved, parameter_tvb, PE_CHECKSUM_RESERVED_OFFSET, PE_CHECKSUM_RESERVED_LENGTH, NETWORK_BYTE_ORDER); + proto_item_append_text(parameter_item, " (0x%x)", tvb_get_ntohs(parameter_tvb, PE_CHECKSUM_OFFSET)); } static void @@ -565,7 +610,7 @@ static const true_false_string reply_required_bit_value = { }; static void -dissect_peer_presence_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree) +dissect_enrp_presence_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree) { tvbuff_t *parameters_tvb; @@ -585,7 +630,7 @@ static const true_false_string own_children_only_bit_value = { static void -dissect_peer_name_table_request_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree) +dissect_enrp_handle_table_request_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree) { /* FIXME: ensure that the length is 12 bytes. */ proto_tree_add_item(flags_tree, hf_own_children_only_bit, message_tvb, MESSAGE_FLAGS_OFFSET, MESSAGE_FLAGS_LENGTH, NETWORK_BYTE_ORDER); @@ -607,7 +652,7 @@ static const true_false_string more_to_send_bit_value = { }; static void -dissect_peer_name_table_response_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree) +dissect_enrp_handle_table_response_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree) { tvbuff_t *parameters_tvb; @@ -632,7 +677,7 @@ static const value_string update_action_values[] = { { 0, NULL } }; static void -dissect_peer_name_update_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) +dissect_enrp_handle_update_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) { tvbuff_t *parameters_tvb; @@ -645,7 +690,7 @@ dissect_peer_name_update_message(tvbuff_t *message_tvb, proto_tree *message_tree } static void -dissect_peer_list_request_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) +dissect_enrp_list_request_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) { /* FIXME: ensure that the length is 12 bytes. */ proto_tree_add_item(message_tree, hf_sender_servers_id, message_tvb, SENDER_SERVERS_ID_OFFSET, SENDER_SERVERS_ID_LENGTH, NETWORK_BYTE_ORDER); @@ -653,7 +698,7 @@ dissect_peer_list_request_message(tvbuff_t *message_tvb, proto_tree *message_tre } static void -dissect_peer_list_response_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree) +dissect_enrp_list_response_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree) { tvbuff_t *parameters_tvb; @@ -668,7 +713,7 @@ dissect_peer_list_response_message(tvbuff_t *message_tvb, proto_tree *message_tr #define TARGET_SERVERS_ID_OFFSET (RECEIVER_SERVERS_ID_OFFSET + RECEIVER_SERVERS_ID_LENGTH) static void -dissect_peer_init_takeover_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) +dissect_enrp_init_takeover_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) { /* FIXME: ensure that the length is 16 bytes. */ proto_tree_add_item(message_tree, hf_sender_servers_id, message_tvb, SENDER_SERVERS_ID_OFFSET, SENDER_SERVERS_ID_LENGTH, NETWORK_BYTE_ORDER); @@ -677,7 +722,7 @@ dissect_peer_init_takeover_message(tvbuff_t *message_tvb, proto_tree *message_tr } static void -dissect_peer_init_takeover_ack_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) +dissect_enrp_init_takeover_ack_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) { /* FIXME: ensure that the length is 16 bytes. */ proto_tree_add_item(message_tree, hf_sender_servers_id, message_tvb, SENDER_SERVERS_ID_OFFSET, SENDER_SERVERS_ID_LENGTH, NETWORK_BYTE_ORDER); @@ -686,7 +731,7 @@ dissect_peer_init_takeover_ack_message(tvbuff_t *message_tvb, proto_tree *messag } static void -dissect_peer_init_takeover_server_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) +dissect_enrp_init_takeover_server_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) { /* FIXME: ensure that the length is 16 bytes. */ proto_tree_add_item(message_tree, hf_sender_servers_id, message_tvb, SENDER_SERVERS_ID_OFFSET, SENDER_SERVERS_ID_LENGTH, NETWORK_BYTE_ORDER); @@ -695,18 +740,7 @@ dissect_peer_init_takeover_server_message(tvbuff_t *message_tvb, proto_tree *mes } static void -dissect_peer_ownership_change_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) -{ - tvbuff_t *parameters_tvb; - - proto_tree_add_item(message_tree, hf_sender_servers_id, message_tvb, SENDER_SERVERS_ID_OFFSET, SENDER_SERVERS_ID_LENGTH, NETWORK_BYTE_ORDER); - proto_tree_add_item(message_tree, hf_receiver_servers_id, message_tvb, RECEIVER_SERVERS_ID_OFFSET, RECEIVER_SERVERS_ID_LENGTH, NETWORK_BYTE_ORDER); - parameters_tvb = tvb_new_subset(message_tvb, MESSAGE_PARAMETERS_OFFSET, -1, -1); - dissect_parameters(parameters_tvb, message_tree); -} - -static void -dissect_peer_error_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) +dissect_enrp_error_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_tree *flags_tree _U_) { tvbuff_t *parameters_tvb; @@ -722,31 +756,29 @@ dissect_unknown_message(tvbuff_t *message_tvb, proto_tree *message_tree, proto_t proto_tree_add_item(message_tree, hf_message_value, message_tvb, MESSAGE_VALUE_OFFSET, tvb_length(message_tvb) - MESSAGE_HEADER_LENGTH, NETWORK_BYTE_ORDER); } -#define PEER_PRESENCE_MESSAGE_TYPE 0x01 -#define PEER_NAME_TABLE_REQUEST_MESSAGE_TYPE 0x02 -#define PEER_NAME_TABLE_RESPONSE_MESSAGE_TYPE 0x03 -#define PEER_NAME_UPDATE_MESSAGE_TYPE 0x04 -#define PEER_LIST_REQUEST_MESSAGE_TYPE 0x05 -#define PEER_LIST_RESPONSE_MESSAGE_TYPE 0x06 -#define PEER_INIT_TAKEOVER_MESSAGE_TYPE 0x07 -#define PEER_INIT_TAKEOVER_ACK_MESSAGE_TYPE 0x08 -#define PEER_TAKEOVER_SERVER_MESSAGE_TYPE 0x09 -#define PEER_OWNERSHIP_CHANGE_MESSAGE_TYPE 0x0a -#define PEER_ERROR_MESSAGE_TYPE 0x0b +#define ENRP_PRESENCE_MESSAGE_TYPE 0x01 +#define ENRP_HANDLE_TABLE_REQUEST_MESSAGE_TYPE 0x02 +#define ENRP_HANDLE_TABLE_RESPONSE_MESSAGE_TYPE 0x03 +#define ENRP_HANDLE_UPDATE_MESSAGE_TYPE 0x04 +#define ENRP_LIST_REQUEST_MESSAGE_TYPE 0x05 +#define ENRP_LIST_RESPONSE_MESSAGE_TYPE 0x06 +#define ENRP_INIT_TAKEOVER_MESSAGE_TYPE 0x07 +#define ENRP_INIT_TAKEOVER_ACK_MESSAGE_TYPE 0x08 +#define ENRP_TAKEOVER_SERVER_MESSAGE_TYPE 0x09 +#define ENRP_ERROR_MESSAGE_TYPE 0x0a static const value_string message_type_values[] = { - { PEER_PRESENCE_MESSAGE_TYPE, "Peer presence" }, - { PEER_NAME_TABLE_REQUEST_MESSAGE_TYPE, "Peer name table request" }, - { PEER_NAME_TABLE_RESPONSE_MESSAGE_TYPE, "Peer name table response" }, - { PEER_NAME_UPDATE_MESSAGE_TYPE, "Peer name update" }, - { PEER_LIST_REQUEST_MESSAGE_TYPE, "Peer list request" }, - { PEER_LIST_RESPONSE_MESSAGE_TYPE, "Peer list response" }, - { PEER_INIT_TAKEOVER_MESSAGE_TYPE, "Peer init takeover" }, - { PEER_INIT_TAKEOVER_ACK_MESSAGE_TYPE, "Peer init takeover ack" }, - { PEER_TAKEOVER_SERVER_MESSAGE_TYPE, "Peer takeover server" }, - { PEER_OWNERSHIP_CHANGE_MESSAGE_TYPE, "Peer ownership change" }, - { PEER_ERROR_MESSAGE_TYPE, "Peer error" }, - { 0, NULL } }; + { ENRP_PRESENCE_MESSAGE_TYPE, "ENRP presence" }, + { ENRP_HANDLE_TABLE_REQUEST_MESSAGE_TYPE, "ENRP handle table request" }, + { ENRP_HANDLE_TABLE_RESPONSE_MESSAGE_TYPE, "ENRP handle table response" }, + { ENRP_HANDLE_UPDATE_MESSAGE_TYPE, "ENRP handle update" }, + { ENRP_LIST_REQUEST_MESSAGE_TYPE, "ENRP list request" }, + { ENRP_LIST_RESPONSE_MESSAGE_TYPE, "ENRP list response" }, + { ENRP_INIT_TAKEOVER_MESSAGE_TYPE, "ENRP init takeover" }, + { ENRP_INIT_TAKEOVER_ACK_MESSAGE_TYPE, "ENRP init takeover ack" }, + { ENRP_TAKEOVER_SERVER_MESSAGE_TYPE, "ENRP takeover server" }, + { ENRP_ERROR_MESSAGE_TYPE, "ENRP error" }, + { 0, NULL } }; static void dissect_enrp_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *enrp_tree) @@ -756,7 +788,8 @@ dissect_enrp_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *enrp guint8 type; type = tvb_get_guint8(message_tvb, MESSAGE_TYPE_OFFSET); - if (check_col(pinfo->cinfo, COL_INFO)) + /* pinfo is NULL only if dissect_enrp_message is called from dissect_error cause */ + if (pinfo && (check_col(pinfo->cinfo, COL_INFO))) col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(type, message_type_values, "Unknown ENRP type")); if (enrp_tree) { @@ -765,38 +798,35 @@ dissect_enrp_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *enrp flags_tree = proto_item_add_subtree(flags_item, ett_enrp_flags); proto_tree_add_item(enrp_tree, hf_message_length, message_tvb, MESSAGE_LENGTH_OFFSET, MESSAGE_LENGTH_LENGTH, NETWORK_BYTE_ORDER); switch (type) { - case PEER_PRESENCE_MESSAGE_TYPE: - dissect_peer_presence_message(message_tvb, enrp_tree, flags_tree); - break; - case PEER_NAME_TABLE_REQUEST_MESSAGE_TYPE: - dissect_peer_name_table_request_message(message_tvb, enrp_tree, flags_tree); + case ENRP_PRESENCE_MESSAGE_TYPE: + dissect_enrp_presence_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_NAME_TABLE_RESPONSE_MESSAGE_TYPE: - dissect_peer_name_table_response_message(message_tvb, enrp_tree, flags_tree); + case ENRP_HANDLE_TABLE_REQUEST_MESSAGE_TYPE: + dissect_enrp_handle_table_request_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_NAME_UPDATE_MESSAGE_TYPE: - dissect_peer_name_update_message(message_tvb, enrp_tree, flags_tree); + case ENRP_HANDLE_TABLE_RESPONSE_MESSAGE_TYPE: + dissect_enrp_handle_table_response_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_LIST_REQUEST_MESSAGE_TYPE: - dissect_peer_list_request_message(message_tvb, enrp_tree, flags_tree); + case ENRP_HANDLE_UPDATE_MESSAGE_TYPE: + dissect_enrp_handle_update_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_LIST_RESPONSE_MESSAGE_TYPE: - dissect_peer_list_response_message(message_tvb, enrp_tree, flags_tree); + case ENRP_LIST_REQUEST_MESSAGE_TYPE: + dissect_enrp_list_request_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_INIT_TAKEOVER_MESSAGE_TYPE: - dissect_peer_init_takeover_message(message_tvb, enrp_tree, flags_tree); + case ENRP_LIST_RESPONSE_MESSAGE_TYPE: + dissect_enrp_list_response_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_INIT_TAKEOVER_ACK_MESSAGE_TYPE: - dissect_peer_init_takeover_ack_message(message_tvb, enrp_tree, flags_tree); + case ENRP_INIT_TAKEOVER_MESSAGE_TYPE: + dissect_enrp_init_takeover_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_TAKEOVER_SERVER_MESSAGE_TYPE: - dissect_peer_init_takeover_server_message(message_tvb, enrp_tree, flags_tree); + case ENRP_INIT_TAKEOVER_ACK_MESSAGE_TYPE: + dissect_enrp_init_takeover_ack_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_OWNERSHIP_CHANGE_MESSAGE_TYPE: - dissect_peer_ownership_change_message(message_tvb, enrp_tree, flags_tree); + case ENRP_TAKEOVER_SERVER_MESSAGE_TYPE: + dissect_enrp_init_takeover_server_message(message_tvb, enrp_tree, flags_tree); break; - case PEER_ERROR_MESSAGE_TYPE: - dissect_peer_error_message(message_tvb, enrp_tree, flags_tree); + case ENRP_ERROR_MESSAGE_TYPE: + dissect_enrp_error_message(message_tvb, enrp_tree, flags_tree); break; default: dissect_unknown_message(message_tvb, enrp_tree, flags_tree); @@ -865,7 +895,8 @@ proto_register_enrp(void) { &hf_reserved, { "Reserved", "enrp.server_information_reserved", FT_UINT32, BASE_HEX, NULL, RESERVED_MASK, "", HFILL } }, { &hf_cookie, { "Cookie", "enrp.cookie", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL } }, { &hf_pe_identifier, { "PE identifier", "enrp.pe_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, - { &hf_pe_checksum, { "PE checksum", "enrp.pe_checksum", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_pe_checksum, { "PE checksum", "enrp.pe_checksum", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL } }, + { &hf_pe_checksum_reserved, { "Reserved", "enrp.pe_checksum_reserved", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL } }, { &hf_sender_servers_id, { "Sender server's ID", "enrp.sender_servers_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, { &hf_receiver_servers_id, { "Receiver server's ID", "enrp.receiver_servers_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, { &hf_target_servers_id, { "Target server's ID", "enrp.target_servers_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } }, @@ -901,4 +932,6 @@ proto_reg_handoff_enrp(void) enrp_handle = create_dissector_handle(dissect_enrp, proto_enrp); dissector_add("sctp.ppi", ENRP_PAYLOAD_PROTOCOL_ID, enrp_handle); +/* The following line will be uncommented AFTER a port number is assinged. */ +/* dissector_add("udp.port", ENRP_UDP_PORT, enrp_handle); */ } |