From a9a819c80cf6451a0b6d80c18825c7d174ac2728 Mon Sep 17 00:00:00 2001 From: jake Date: Tue, 2 Jun 2009 21:44:00 +0000 Subject: Remove the module globals. Clean up the source code. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@28615 f5534014-38df-0310-8fa8-9805f1628bb7 --- epan/dissectors/packet-capwap.c | 534 +++++++++++++++++++--------------------- 1 file changed, 257 insertions(+), 277 deletions(-) (limited to 'epan/dissectors/packet-capwap.c') diff --git a/epan/dissectors/packet-capwap.c b/epan/dissectors/packet-capwap.c index ecb15ee07f..5076afc3b8 100644 --- a/epan/dissectors/packet-capwap.c +++ b/epan/dissectors/packet-capwap.c @@ -46,8 +46,8 @@ static guint global_capwap_data_udp_port = UDP_PORT_CAPWAP_DATA; /* TODO LIST ! * add support of optional Header (Radio Mac/Wireless Specific Information : Section 4.3) -* add dencryption of DLTS Message -* add Support of All Messages Element Type +* add decryption of DLTS Message +* add support of all Messages Element Type */ /* Forward declaration we need below */ @@ -96,7 +96,6 @@ static int hf_capwap_msg_element_type_ac_descriptor_stations = -1; static int hf_capwap_msg_element_type_ac_descriptor_limit = -1; static int hf_capwap_msg_element_type_ac_descriptor_active_wtp = -1; static int hf_capwap_msg_element_type_ac_descriptor_max_wtp = -1; - /* AC Descriptor Security Flags... */ static int hf_capwap_msg_element_type_ac_descriptor_security = -1; static int hf_capwap_msg_element_type_ac_descriptor_security_s = -1; @@ -104,7 +103,6 @@ static int hf_capwap_msg_element_type_ac_descriptor_security_x = -1; static int hf_capwap_msg_element_type_ac_descriptor_security_r = -1; static int hf_capwap_msg_element_type_ac_descriptor_rmac_field = -1; static int hf_capwap_msg_element_type_ac_descriptor_reserved = -1; - /* AC Descriptor DTLS Policy Flags... */ static int hf_capwap_msg_element_type_ac_descriptor_dtls_policy = -1; static int hf_capwap_msg_element_type_ac_descriptor_dtls_policy_d = -1; @@ -163,20 +161,18 @@ static dissector_handle_t data_handle; /* Initialize the subtree pointers */ static gint ett_capwap = -1; + /* ************************************************************************* */ -/* Header Type */ +/* Header Type */ /* ************************************************************************* */ - static const value_string type_header_vals[] = { { 0, "CAPWAP Header" }, { 1, "CAPWAP DTLS Header" }, { 0, NULL } }; - /* ************************************************************************* */ /* Wireless Binding IDentifier (WBID) */ /* ************************************************************************* */ - static const value_string type_wbid[] = { { 0, "Reserved" }, { 1, "IEEE 802.11" }, @@ -184,57 +180,50 @@ static const value_string type_wbid[] = { { 3, "EPCGlobal" }, { 0, NULL } }; - /* ************************************************************************* */ -/* flag Type Transported (payload) */ +/* flag Type Transported (payload) */ /* ************************************************************************* */ static const true_false_string flag_type_t = { "Native frame format (see Wireless Binding ID field)", "IEEE 802.3 frame" }; - /* ************************************************************************* */ -/* flag Type Fragment */ +/* flag Type Fragment */ /* ************************************************************************* */ static const true_false_string flag_type_f = { "Fragmented", "Don't Fragment" }; - /* ************************************************************************* */ -/* flag Type Last Fragment */ +/* flag Type Last Fragment */ /* ************************************************************************* */ static const true_false_string flag_type_l = { "This is the last fragment", "More fragments follow" }; - /* ************************************************************************* */ -/* flag Type Wireless */ +/* flag Type Wireless */ /* ************************************************************************* */ static const true_false_string flag_type_w = { "Wireless Specific Information is present", "No Wireless Specific Information" }; - /* ************************************************************************* */ -/* flag Type Radio Mac */ +/* flag Type Radio Mac */ /* ************************************************************************* */ static const true_false_string flag_type_m = { "Radio MAC Address is present", "No Radio MAC Address" }; - /* ************************************************************************* */ -/* flag Type Keep Alive */ +/* flag Type Keep Alive */ /* ************************************************************************* */ static const true_false_string flag_type_k = { "Keep-Alive Packet", "No Keep-Alive" }; - /* ************************************************************************* */ -/* Message Type Value */ +/* Message Type Value */ /* ************************************************************************* */ static const value_string message_type[] = { { 1, "Discovery Request" }, @@ -265,12 +254,11 @@ static const value_string message_type[] = { { 26, "Station Configuration Response" }, { 0, NULL } }; - /* ************************************************************************* */ -/* Message Element Type */ +/* Message Element Type */ /* ************************************************************************* */ -#define TYPE_AC_DESCRIPTOR 1 -#define TYPE_AC_IPV4_LIST 2 +#define TYPE_AC_DESCRIPTOR 1 +#define TYPE_AC_IPV4_LIST 2 #define TYPE_AC_IPV6_LIST 3 #define TYPE_AC_NAME 4 #define TYPE_AC_NAME_W_PRIORITY 5 @@ -279,7 +267,7 @@ static const value_string message_type[] = { #define TYPE_ADD_STATION 8 #define TYPE_RESERVED_9 9 #define TYPE_CAPWAP_CONTROL_IPV4_ADDRESS 10 -#define TYPE_CAPWAP_CONTROL_IPV6_ADDRESS 11 +#define TYPE_CAPWAP_CONTROL_IPV6_ADDRESS 11 #define TYPE_CAPWAP_TIMERS 12 #define TYPE_DATA_TRANSFER_DATA 13 #define TYPE_DATA_TRANSFER_MODE 14 @@ -287,7 +275,7 @@ static const value_string message_type[] = { #define TYPE_DECRYPTION_ERROR_REPORT_PERIOD 16 #define TYPE_DELETE_MAC_ENTRY 17 #define TYPE_DELETE_STATION 18 -#define TYPE_RESERVED_19 19 +#define TYPE_RESERVED_19 19 #define TYPE_DISCOVERY_TYPE 20 #define TYPE_DUPLICATE_IPV4_ADDRESS 21 #define TYPE_DUPLICATE_IPV6_ADDRESS 22 @@ -322,9 +310,8 @@ static const value_string message_type[] = { #define TYPE_CAPWAP_TRANSPORT_PROTOCOL 51 #define TYPE_MTU_DISCOVERY_PADDING 52 #define TYPE_ECN_SUPPORT 53 - /* ************************************************************************* */ -/* Message Element Type Value */ +/* Message Element Type Value */ /* ************************************************************************* */ static const value_string message_element_type_vals[] = { { TYPE_AC_DESCRIPTOR, "AC Descriptor" }, @@ -345,7 +332,7 @@ static const value_string message_element_type_vals[] = { { TYPE_DECRYPTION_ERROR_REPORT_PERIOD, "Decryption Error Report Period" }, { TYPE_DELETE_MAC_ENTRY, "Delete MAC ACL Entry" }, { TYPE_DELETE_STATION, "Delete Station" }, - { TYPE_RESERVED_19, "Reserved" }, + { TYPE_RESERVED_19, "Reserved" }, { TYPE_DISCOVERY_TYPE, "Discovery Type" }, { TYPE_DUPLICATE_IPV4_ADDRESS, "Duplicate IPv4 Address" }, { TYPE_DUPLICATE_IPV6_ADDRESS, "Duplicate IPv6 Address" }, @@ -382,9 +369,8 @@ static const value_string message_element_type_vals[] = { { TYPE_ECN_SUPPORT, "ECN Support" }, { 0, NULL } }; - /* ************************************************************************* */ -/* Discovery Type */ +/* Discovery Type */ /* ************************************************************************* */ static const value_string discovery_type_vals[] = { { 0, "Unknown" }, @@ -394,9 +380,8 @@ static const value_string discovery_type_vals[] = { { 4, "AC Referral" }, { 0, NULL } }; - /* ************************************************************************* */ -/* Radio MAC Address Field */ +/* Radio MAC Address Field */ /* ************************************************************************* */ static const value_string rmac_field_vals[] = { { 0, "Reserved" }, @@ -404,9 +389,8 @@ static const value_string rmac_field_vals[] = { { 2, "Not Supported" }, { 0, NULL } }; - /* ************************************************************************* */ -/* Board Data Type Value */ +/* Board Data Type Value */ /* ************************************************************************* */ #define BOARD_DATA_WTP_MODEL_NUMBER 0 #define BOARD_DATA_WTP_SERIAL_NUMBER 1 @@ -422,9 +406,8 @@ static const value_string board_data_type_vals[] = { { BOARD_DATA_BASE_MAC_ADDRESS, "Base MAC Address" }, { 0, NULL } }; - /* ************************************************************************* */ -/* Descriptor WTP Type Value */ +/* Descriptor WTP Type Value */ /* ************************************************************************* */ #define WTP_DESCRIPTOR_HARDWARE_VERSION 0 #define WTP_DESCRIPTOR_ACTIVE_SOFTWARE_VERSION 1 @@ -438,9 +421,8 @@ static const value_string wtp_descriptor_type_vals[] = { { WTP_DESCRIPTOR_OTHER_SOFTWARE_VERSION, "WTP Other Software Version" }, { 0, NULL } }; - /* ************************************************************************* */ -/* AC Information Type Value */ +/* AC Information Type Value */ /* ************************************************************************* */ #define AC_INFORMATION_HARDWARE_VERSION 4 #define AC_INFORMATION_SOFTWARE_VERSION 5 @@ -450,9 +432,8 @@ static const value_string ac_information_type_vals[] = { { AC_INFORMATION_SOFTWARE_VERSION, "AC Software Version" }, { 0, NULL } }; - /* ************************************************************************* */ -/* WTP MAC Type */ +/* WTP MAC Type */ /* ************************************************************************* */ static const value_string wtp_mac_vals[] = { { 0, "Local MAC" }, @@ -461,10 +442,6 @@ static const value_string wtp_mac_vals[] = { { 0, NULL } }; -/* Variable */ -static guint8 type_header = 0; -static guint8 payload_type = 0; -static guint8 payload_wbid = 0; static void dissect_capwap_encryption_capabilities(tvbuff_t *tvb, proto_tree *encryption_capabilities_tree, guint offset) @@ -472,16 +449,16 @@ dissect_capwap_encryption_capabilities(tvbuff_t *tvb, proto_tree *encryption_cap guint wbid,encryption_capabilities = 0; proto_item *encryption_capabilities_item; proto_tree *sub_encryption_capabilities_tree; - + encryption_capabilities = tvb_get_ntohs(tvb, offset+1); wbid = tvb_get_bits8(tvb, offset*8+3,5); - encryption_capabilities_item = proto_tree_add_text(encryption_capabilities_tree, tvb, offset, 3, "Encryption Capabilities: (WBID=%d) %d", wbid,encryption_capabilities); + encryption_capabilities_item = proto_tree_add_text(encryption_capabilities_tree, tvb, offset, 3, "Encryption Capabilities: (WBID=%d) %d", wbid, encryption_capabilities); sub_encryption_capabilities_tree = proto_item_add_subtree(encryption_capabilities_item, ett_capwap); - proto_tree_add_uint(sub_encryption_capabilities_tree,hf_capwap_msg_element_type_wtp_descriptor_encrypt_reserved, tvb, offset, 1, tvb_get_bits8(tvb, offset*8,3)); + proto_tree_add_uint(sub_encryption_capabilities_tree,hf_capwap_msg_element_type_wtp_descriptor_encrypt_reserved, tvb, offset, 1, tvb_get_bits8(tvb, offset*8,3)); - proto_tree_add_uint(sub_encryption_capabilities_tree,hf_capwap_msg_element_type_wtp_descriptor_encrypt_wbid, tvb, offset, 1, wbid); + proto_tree_add_uint(sub_encryption_capabilities_tree,hf_capwap_msg_element_type_wtp_descriptor_encrypt_wbid, tvb, offset, 1, wbid); proto_tree_add_item(sub_encryption_capabilities_tree, hf_capwap_msg_element_type_wtp_descriptor_encrypt_capabilities, tvb, offset+1, 2, FALSE); } @@ -493,18 +470,18 @@ dissect_capwap_ac_information(tvbuff_t *tvb, proto_tree *ac_information_type_tre guint optlen,ac_information_type = 0; proto_item *ac_information_type_item; proto_tree *sub_ac_information_type_tree; - + ac_information_type = tvb_get_ntohs(tvb, offset+4); optlen = tvb_get_ntohs(tvb, offset+6); - ac_information_type_item = proto_tree_add_text(ac_information_type_tree, tvb, offset, 4+2+2+optlen, "AC Information Type: (t=%d,l=%d) %s", ac_information_type, optlen, val_to_str(ac_information_type,ac_information_type_vals,"Unknown AC Information Type (%02d)") ); + ac_information_type_item = proto_tree_add_text(ac_information_type_tree, tvb, offset, 4+2+2+optlen, "AC Information Type: (t=%d,l=%d) %s", ac_information_type, optlen, val_to_str(ac_information_type,ac_information_type_vals,"Unknown AC Information Type (%02d)") ); sub_ac_information_type_tree = proto_item_add_subtree(ac_information_type_item, ett_capwap); - proto_tree_add_item(sub_ac_information_type_tree, hf_capwap_msg_element_type_ac_information_vendor, tvb, offset, 4, FALSE); + proto_tree_add_item(sub_ac_information_type_tree, hf_capwap_msg_element_type_ac_information_vendor, tvb, offset, 4, FALSE); + + proto_tree_add_item(sub_ac_information_type_tree, hf_capwap_msg_element_type_ac_information_type, tvb, offset+4, 2, FALSE); - proto_tree_add_item(sub_ac_information_type_tree, hf_capwap_msg_element_type_ac_information_type, tvb, offset+4, 2, FALSE ); - proto_tree_add_item(sub_ac_information_type_tree, hf_capwap_msg_element_type_ac_information_length, tvb, offset+6, 2, FALSE); - + proto_tree_add_item(sub_ac_information_type_tree, hf_capwap_msg_element_type_ac_information_value, tvb, offset+8, optlen, FALSE); switch (ac_information_type) { case AC_INFORMATION_HARDWARE_VERSION: @@ -519,7 +496,6 @@ dissect_capwap_ac_information(tvbuff_t *tvb, proto_tree *ac_information_type_tre /* No Default Action */ break; } - return 4+2+2+optlen; } @@ -530,18 +506,18 @@ dissect_capwap_wtp_descriptor(tvbuff_t *tvb, proto_tree *wtp_descriptor_type_tre guint optlen,wtp_descriptor_type = 0; proto_item *wtp_descriptor_type_item; proto_tree *sub_wtp_descriptor_type_tree; - + wtp_descriptor_type = tvb_get_ntohs(tvb, offset+4); optlen = tvb_get_ntohs(tvb, offset+6); - wtp_descriptor_type_item = proto_tree_add_text(wtp_descriptor_type_tree, tvb, offset, 4+2+2+optlen, "WTP Descriptor Type: (t=%d,l=%d) %s", wtp_descriptor_type, optlen, val_to_str(wtp_descriptor_type,wtp_descriptor_type_vals,"Unknown WTP Descriptor Type (%02d)") ); + wtp_descriptor_type_item = proto_tree_add_text(wtp_descriptor_type_tree, tvb, offset, 4+2+2+optlen, "WTP Descriptor Type: (t=%d,l=%d) %s", wtp_descriptor_type, optlen, val_to_str(wtp_descriptor_type,wtp_descriptor_type_vals,"Unknown WTP Descriptor Type (%02d)") ); sub_wtp_descriptor_type_tree = proto_item_add_subtree(wtp_descriptor_type_item, ett_capwap); - proto_tree_add_item(sub_wtp_descriptor_type_tree, hf_capwap_msg_element_type_wtp_descriptor_vendor, tvb, offset, 4, FALSE); + proto_tree_add_item(sub_wtp_descriptor_type_tree, hf_capwap_msg_element_type_wtp_descriptor_vendor, tvb, offset, 4, FALSE); + + proto_tree_add_item(sub_wtp_descriptor_type_tree, hf_capwap_msg_element_type_wtp_descriptor_type, tvb, offset+4, 2, FALSE); - proto_tree_add_item(sub_wtp_descriptor_type_tree, hf_capwap_msg_element_type_wtp_descriptor_type, tvb, offset+4, 2, FALSE ); - proto_tree_add_item(sub_wtp_descriptor_type_tree, hf_capwap_msg_element_type_wtp_descriptor_length, tvb, offset+6, 2, FALSE); - + proto_tree_add_item(sub_wtp_descriptor_type_tree, hf_capwap_msg_element_type_wtp_descriptor_value, tvb, offset+8, optlen, FALSE); switch (wtp_descriptor_type) { @@ -576,16 +552,16 @@ dissect_capwap_board_data(tvbuff_t *tvb, proto_tree *board_data_type_tree, guint guint optlen,board_data_type = 0; proto_item *board_data_type_item; proto_tree *sub_board_data_type_tree; - + board_data_type = tvb_get_ntohs(tvb, offset); optlen = tvb_get_ntohs(tvb, offset+2); - board_data_type_item = proto_tree_add_text(board_data_type_tree, tvb, offset, 2+2+optlen, "Board Data Type: (t=%d,l=%d) %s", board_data_type, optlen, val_to_str(board_data_type,board_data_type_vals,"Unknown Board Data Type (%02d)") ); + board_data_type_item = proto_tree_add_text(board_data_type_tree, tvb, offset, 2+2+optlen, "Board Data Type: (t=%d,l=%d) %s", board_data_type, optlen, val_to_str(board_data_type,board_data_type_vals,"Unknown Board Data Type (%02d)") ); sub_board_data_type_tree = proto_item_add_subtree(board_data_type_item, ett_capwap); - proto_tree_add_item(sub_board_data_type_tree, hf_capwap_msg_element_type_wtp_board_data_type,tvb, offset, 2, FALSE ); - + proto_tree_add_item(sub_board_data_type_tree, hf_capwap_msg_element_type_wtp_board_data_type,tvb, offset, 2, FALSE); + proto_tree_add_item(sub_board_data_type_tree, hf_capwap_msg_element_type_wtp_board_data_length, tvb, offset+2, 2, FALSE); - + proto_tree_add_item(sub_board_data_type_tree, hf_capwap_msg_element_type_wtp_board_data_value, tvb, offset+4, optlen, FALSE); switch (board_data_type) { case BOARD_DATA_WTP_MODEL_NUMBER: @@ -605,16 +581,17 @@ dissect_capwap_board_data(tvbuff_t *tvb, proto_tree *board_data_type_tree, guint break; case BOARD_DATA_BASE_MAC_ADDRESS: - proto_tree_add_item (sub_board_data_type_tree, hf_capwap_msg_element_type_wtp_board_data_base_mac_address , tvb, offset+4, 6,FALSE); + proto_tree_add_item(sub_board_data_type_tree, hf_capwap_msg_element_type_wtp_board_data_base_mac_address, tvb, offset+4, 6, FALSE); break; default: /* No Default Action */ - break; + break; } return 2+2+optlen; } + /* Returns the number of bytes consumed by this option. */ static int dissect_capwap_message_element_type(tvbuff_t *tvb, proto_tree *msg_element_type_tree, guint offset) @@ -625,15 +602,14 @@ dissect_capwap_message_element_type(tvbuff_t *tvb, proto_tree *msg_element_type_ msg_element_type = tvb_get_ntohs(tvb, offset); optlen = tvb_get_ntohs(tvb, offset+2); - msg_element_type_item = proto_tree_add_text(msg_element_type_tree, tvb, offset, 2+2+optlen, "Type: (t=%d,l=%d) %s", msg_element_type, optlen, val_to_str(msg_element_type,message_element_type_vals,"Unknown Message Element Type (%02d)") ); + msg_element_type_item = proto_tree_add_text(msg_element_type_tree, tvb, offset, 2+2+optlen, "Type: (t=%d,l=%d) %s", msg_element_type, optlen, val_to_str(msg_element_type,message_element_type_vals,"Unknown Message Element Type (%02d)") ); sub_msg_element_type_tree = proto_item_add_subtree(msg_element_type_item, ett_capwap); - proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type,tvb, offset, 2, FALSE ); + proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type,tvb, offset, 2, FALSE); proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_length, tvb, offset+2, 2, FALSE); - - proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_value, tvb, offset+4, optlen, FALSE); + proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_value, tvb, offset+4, optlen, FALSE); switch (msg_element_type) { case TYPE_AC_DESCRIPTOR: /* AC Descriptor (1) */ @@ -643,28 +619,28 @@ dissect_capwap_message_element_type(tvbuff_t *tvb, proto_tree *msg_element_type_ proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_ac_descriptor_max_wtp, tvb, offset+10, 2, FALSE); /* AC Descriptor Security Flags... */ - msg_element_type_item_flag = proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_ac_descriptor_security, tvb, offset+12, 1 ,FALSE); - sub_msg_element_type_flag_tree = proto_item_add_subtree(msg_element_type_item_flag, ett_capwap); + msg_element_type_item_flag = proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_ac_descriptor_security, tvb, offset+12, 1, FALSE); + sub_msg_element_type_flag_tree = proto_item_add_subtree(msg_element_type_item_flag, ett_capwap); - proto_tree_add_boolean(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_security_r, tvb, offset+12, 1,FALSE); - proto_tree_add_boolean(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_security_s, tvb, offset+12, 1,FALSE); - proto_tree_add_boolean (sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_security_x, tvb, offset+12, 1,FALSE); + proto_tree_add_boolean(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_security_r, tvb, offset+12, 1, FALSE); + proto_tree_add_boolean(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_security_s, tvb, offset+12, 1, FALSE); + proto_tree_add_boolean(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_security_x, tvb, offset+12, 1, FALSE); proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_ac_descriptor_rmac_field, tvb, offset+13, 1, FALSE); proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_ac_descriptor_reserved, tvb, offset+14, 1, FALSE); /* AC Descriptor DTLS Flags... */ - msg_element_type_item_flag = proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_ac_descriptor_dtls_policy, tvb, offset+15, 1 ,FALSE); - sub_msg_element_type_flag_tree = proto_item_add_subtree(msg_element_type_item_flag, ett_capwap); + msg_element_type_item_flag = proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_ac_descriptor_dtls_policy, tvb, offset+15, 1, FALSE); + sub_msg_element_type_flag_tree = proto_item_add_subtree(msg_element_type_item_flag, ett_capwap); - proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_dtls_policy_r, tvb, offset+15, 1,FALSE); - proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_dtls_policy_d, tvb, offset+15, 1,FALSE); - proto_tree_add_item (sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_dtls_policy_c, tvb, offset+15, 1,FALSE); + proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_dtls_policy_r, tvb, offset+15, 1, FALSE); + proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_dtls_policy_d, tvb, offset+15, 1, FALSE); + proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_ac_descriptor_dtls_policy_c, tvb, offset+15, 1, FALSE); - offset_end = offset + optlen -4; + offset_end = offset + optlen -4; offset += 4 + 12; while (offset < offset_end) { - offset += dissect_capwap_ac_information(tvb, sub_msg_element_type_tree, offset); + offset += dissect_capwap_ac_information(tvb, sub_msg_element_type_tree, offset); } break; @@ -683,10 +659,10 @@ dissect_capwap_message_element_type(tvbuff_t *tvb, proto_tree *msg_element_type_ case TYPE_WTP_BOARD_DATA: /* WTP Board Data (38) */ proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_wtp_board_data_vendor, tvb, offset+4, 4, FALSE); - offset += 8; + offset += 8; offset_end = offset + optlen -4; while (offset < offset_end) { - offset += dissect_capwap_board_data(tvb, sub_msg_element_type_tree, offset); + offset += dissect_capwap_board_data(tvb, sub_msg_element_type_tree, offset); } break; @@ -695,27 +671,27 @@ dissect_capwap_message_element_type(tvbuff_t *tvb, proto_tree *msg_element_type_ proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_wtp_descriptor_radio_in_use, tvb, offset+5, 1, FALSE); number_encrypt = tvb_get_guint8(tvb,offset+6); - msg_element_type_item_flag = proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_wtp_descriptor_number_encrypt, tvb, offset+6, 1,FALSE); - sub_msg_element_type_flag_tree = proto_item_add_subtree(msg_element_type_item_flag, ett_capwap); + msg_element_type_item_flag = proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_wtp_descriptor_number_encrypt, tvb, offset+6, 1, FALSE); + sub_msg_element_type_flag_tree = proto_item_add_subtree(msg_element_type_item_flag, ett_capwap); for (i=0; i < number_encrypt; i++) { dissect_capwap_encryption_capabilities(tvb, sub_msg_element_type_flag_tree, offset+4+3+i*3); } - offset_end = offset + optlen -4; + offset_end = offset + optlen -4; offset += 4 + 3 + number_encrypt * 3; while (offset < offset_end) { - offset += dissect_capwap_wtp_descriptor(tvb, sub_msg_element_type_tree, offset); + offset += dissect_capwap_wtp_descriptor(tvb, sub_msg_element_type_tree, offset); } break; case TYPE_WTP_FRAME_TUNNEL_MODE: /* WTP Frame Tunnel Mode (41) */ - msg_element_type_item_flag = proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode, tvb, offset+4, 1 ,FALSE); - sub_msg_element_type_flag_tree = proto_item_add_subtree(msg_element_type_item_flag, ett_capwap); + msg_element_type_item_flag = proto_tree_add_item(sub_msg_element_type_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode, tvb, offset+4, 1, FALSE); + sub_msg_element_type_flag_tree = proto_item_add_subtree(msg_element_type_item_flag, ett_capwap); - proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode_n, tvb, offset+4, 1,FALSE); - proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode_e, tvb, offset+4, 1,FALSE); - proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode_l, tvb, offset+4, 1,FALSE); - proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode_r, tvb, offset+4, 1,FALSE); + proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode_n, tvb, offset+4, 1, FALSE); + proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode_e, tvb, offset+4, 1, FALSE); + proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode_l, tvb, offset+4, 1, FALSE); + proto_tree_add_item(sub_msg_element_type_flag_tree, hf_capwap_msg_element_type_wtp_frame_tunnel_mode_r, tvb, offset+4, 1, FALSE); break; case TYPE_WTP_MAC_TYPE: /* WTP MAC Type (44) */ @@ -724,7 +700,7 @@ dissect_capwap_message_element_type(tvbuff_t *tvb, proto_tree *msg_element_type_ default: /* No Default Action */ - break; + break; } return 2+2+optlen; @@ -737,13 +713,13 @@ dissect_capwap_message_element(tvbuff_t *tvb, proto_tree *capwap_control_tree, g guint plen = 0, offset_end; proto_item *ti; proto_tree *capwap_message_element_tree; - - ti = proto_tree_add_item(capwap_control_tree, hf_capwap_message_element, tvb, offset, tvb_reported_length(tvb) - offset,FALSE); - capwap_message_element_tree = proto_item_add_subtree(ti, ett_capwap); - + + ti = proto_tree_add_item(capwap_control_tree, hf_capwap_message_element, tvb, offset, tvb_reported_length(tvb) - offset, FALSE); + capwap_message_element_tree = proto_item_add_subtree(ti, ett_capwap); + offset_end = tvb_reported_length(tvb); - while (offset+plen < offset_end) { + while (offset+plen < offset_end) { plen += dissect_capwap_message_element_type(tvb, capwap_message_element_tree, offset+plen); } @@ -752,19 +728,19 @@ dissect_capwap_message_element(tvbuff_t *tvb, proto_tree *capwap_control_tree, g /* Returns the number of bytes consumed by this option. */ static int -dissect_capwap_control_header(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offset, packet_info *pinfo ) +dissect_capwap_control_header(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offset, packet_info *pinfo) { guint plen = 0; proto_item *ti, *ti_flag; proto_tree *capwap_control_header_tree; proto_tree *capwap_control_msg_type_tree; - - ti = proto_tree_add_item(capwap_control_tree, hf_capwap_control_header, tvb, offset, 8,FALSE); - capwap_control_header_tree = proto_item_add_subtree(ti, ett_capwap); - /* Message Type 32 bits*/ - ti_flag = proto_tree_add_item(capwap_control_header_tree, hf_capwap_control_header_msg_type, tvb, offset, 4, FALSE); - capwap_control_msg_type_tree = proto_item_add_subtree(ti_flag, ett_capwap); + ti = proto_tree_add_item(capwap_control_tree, hf_capwap_control_header, tvb, offset, 8, FALSE); + capwap_control_header_tree = proto_item_add_subtree(ti, ett_capwap); + + /* Message Type 32 bits */ + ti_flag = proto_tree_add_item(capwap_control_header_tree, hf_capwap_control_header_msg_type, tvb, offset, 4, FALSE); + capwap_control_msg_type_tree = proto_item_add_subtree(ti_flag, ett_capwap); proto_tree_add_item(capwap_control_msg_type_tree, hf_capwap_control_header_msg_type_enterprise_nbr, tvb, offset, 3, FALSE); proto_tree_add_item(capwap_control_msg_type_tree, hf_capwap_control_header_msg_type_enterprise_specific, tvb, offset+3, 1, FALSE); @@ -772,25 +748,22 @@ dissect_capwap_control_header(tvbuff_t *tvb, proto_tree *capwap_control_tree, gu col_append_fstr(pinfo->cinfo, COL_INFO, " - %s",val_to_str(tvb_get_guint8(tvb, offset+3),message_type,"Unknown Message Type (0x%02x)")); plen += 4; - /* Sequence 8 bits */ proto_tree_add_uint(capwap_control_header_tree, hf_capwap_control_header_seq_number, tvb, offset+plen, 1, tvb_get_guint8(tvb, offset)); plen += 1; - + /* Message Element Length 16 bits */ proto_tree_add_item(capwap_control_header_tree, hf_capwap_control_header_msg_element_length, tvb, offset+plen, 2, FALSE); plen += 2; - /* Flags 8 bits */ proto_tree_add_item(capwap_control_header_tree, hf_capwap_control_header_flags, tvb, offset+plen, 1, FALSE); plen += 1; - return plen; } /* Returns the number of bytes consumed by this option. */ static int -dissect_capwap_header(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offset) +dissect_capwap_header(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offset, guint8 *payload_type, guint8 *payload_wbid) { guint plen = 0; proto_item *ti, *ti_flag; @@ -798,8 +771,8 @@ dissect_capwap_header(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offs proto_tree *capwap_header_flags_tree; guint flags = 0; - ti = proto_tree_add_item(capwap_control_tree, hf_capwap_header, tvb, offset+plen, tvb_get_bits8(tvb, (offset+plen)*8, 5),FALSE); - capwap_header_tree = proto_item_add_subtree(ti, ett_capwap); + ti = proto_tree_add_item(capwap_control_tree, hf_capwap_header, tvb, offset+plen, tvb_get_bits8(tvb, (offset+plen)*8, 5), FALSE); + capwap_header_tree = proto_item_add_subtree(ti, ett_capwap); /* Header Length : 5 Bits */ proto_tree_add_uint(capwap_header_tree, hf_capwap_header_hlen, tvb, offset+plen, 1, tvb_get_bits8(tvb, (offset+plen)*8, 5)); @@ -808,63 +781,60 @@ dissect_capwap_header(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offs plen++; /* Wireless Binding ID : 5 Bits */ proto_tree_add_uint(capwap_header_tree, hf_capwap_header_wbid, tvb, offset+plen, 1, tvb_get_bits8(tvb, (offset+plen)*8+10, 5)); - + /* Flags : 9 Bits */ - flags = tvb_get_bits16(tvb, (offset+plen)*8+7, 9,0); - ti_flag = proto_tree_add_uint_format(capwap_header_tree, hf_capwap_header_flags, tvb, offset+plen, 1 ,0,"Header flags"); - capwap_header_flags_tree = proto_item_add_subtree(ti_flag, ett_capwap); - - proto_tree_add_boolean (capwap_header_flags_tree, hf_capwap_header_flags_t, tvb, offset+plen, 1,flags); - proto_tree_add_boolean (capwap_header_flags_tree, hf_capwap_header_flags_f, tvb, offset+plen, 1,flags); - proto_tree_add_boolean (capwap_header_flags_tree, hf_capwap_header_flags_l, tvb, offset+plen, 1,flags); - proto_tree_add_boolean (capwap_header_flags_tree, hf_capwap_header_flags_w, tvb, offset+plen, 1,flags); - proto_tree_add_boolean (capwap_header_flags_tree, hf_capwap_header_flags_m, tvb, offset+plen, 1,flags); - proto_tree_add_boolean (capwap_header_flags_tree, hf_capwap_header_flags_k, tvb, offset+plen, 1,flags); - proto_tree_add_boolean (capwap_header_flags_tree, hf_capwap_header_flags_r, tvb, offset+plen, 1,flags); + flags = tvb_get_bits16(tvb, (offset+plen)*8+7, 9, 0); + ti_flag = proto_tree_add_uint_format(capwap_header_tree, hf_capwap_header_flags, tvb, offset+plen, 1, 0, "Header flags"); + capwap_header_flags_tree = proto_item_add_subtree(ti_flag, ett_capwap); + + proto_tree_add_boolean(capwap_header_flags_tree, hf_capwap_header_flags_t, tvb, offset+plen, 1, flags); + proto_tree_add_boolean(capwap_header_flags_tree, hf_capwap_header_flags_f, tvb, offset+plen, 1, flags); + proto_tree_add_boolean(capwap_header_flags_tree, hf_capwap_header_flags_l, tvb, offset+plen, 1, flags); + proto_tree_add_boolean(capwap_header_flags_tree, hf_capwap_header_flags_w, tvb, offset+plen, 1, flags); + proto_tree_add_boolean(capwap_header_flags_tree, hf_capwap_header_flags_m, tvb, offset+plen, 1, flags); + proto_tree_add_boolean(capwap_header_flags_tree, hf_capwap_header_flags_k, tvb, offset+plen, 1, flags); + proto_tree_add_boolean(capwap_header_flags_tree, hf_capwap_header_flags_r, tvb, offset+plen, 1, flags); /* Type of Payload (for CAPWAP Data Packet) */ - payload_wbid = tvb_get_bits8(tvb, (offset+plen)*8+10, 5); - payload_type = tvb_get_bits8(tvb, (offset+plen)*8+7,1); + *payload_wbid = tvb_get_bits8(tvb, (offset+plen)*8+10, 5); + *payload_type = tvb_get_bits8(tvb, (offset+plen)*8+7,1); plen += 2; - /* Fragment ID : 16 Bits */ + /* Fragment ID : 16 Bits */ proto_tree_add_item(capwap_header_tree, hf_capwap_header_fragment_id, tvb, offset+plen, 2, FALSE); plen += 2; - /* Fragment offset : 13 Bits */ - proto_tree_add_uint(capwap_header_tree, hf_capwap_header_fragment_offset, tvb, offset+plen, 2, tvb_get_bits16(tvb, (offset+plen)*8, 13,0)); - - /* Reserved 3bits */ - proto_tree_add_uint(capwap_header_tree, hf_capwap_header_reserved, tvb, offset+plen+1, 1, tvb_get_bits8(tvb, (offset+plen)*8+13, 3)); - plen += 2; + /* Fragment offset : 13 Bits */ + proto_tree_add_uint(capwap_header_tree, hf_capwap_header_fragment_offset, tvb, offset+plen, 2, tvb_get_bits16(tvb, (offset+plen)*8, 13, 0)); + /* Reserved 3 Bits */ + proto_tree_add_uint(capwap_header_tree, hf_capwap_header_reserved, tvb, offset+plen+1, 1, tvb_get_bits8(tvb, (offset+plen)*8+13, 3)); + plen += 2; return plen; } /* Returns the number of bytes consumed by this option. */ static int -dissect_capwap_preamble(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offset) +dissect_capwap_preamble(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offset, guint8 *type_header) { guint plen = 0; proto_item *ti; - proto_tree *capwap_preamble_tree; + proto_tree *capwap_preamble_tree; - ti = proto_tree_add_item(capwap_control_tree, hf_capwap_preamble, tvb, offset+plen, -1,FALSE); - capwap_preamble_tree = proto_item_add_subtree(ti, ett_capwap); + ti = proto_tree_add_item(capwap_control_tree, hf_capwap_preamble, tvb, offset+plen, -1, FALSE); + capwap_preamble_tree = proto_item_add_subtree(ti, ett_capwap); proto_tree_add_uint(capwap_preamble_tree, hf_capwap_preamble_version, tvb, offset+plen, 1, hi_nibble(tvb_get_guint8(tvb, offset+plen))); proto_tree_add_uint(capwap_preamble_tree, hf_capwap_preamble_type, tvb, offset+plen, 1, lo_nibble(tvb_get_guint8(tvb, offset+plen))); - type_header = lo_nibble(tvb_get_guint8(tvb, offset+plen)); + *type_header = lo_nibble(tvb_get_guint8(tvb, offset+plen)); plen++; - /* DTLS Header ? */ - if (type_header == 1) { + if (*type_header == 1) { proto_tree_add_item(capwap_preamble_tree, hf_capwap_preamble_reserved, tvb, offset+plen, 3, FALSE); plen +=3; } - proto_item_set_len(ti,plen); - + proto_item_set_len(ti, plen); return plen; } @@ -872,12 +842,14 @@ dissect_capwap_preamble(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint of static void dissect_capwap_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - /* Set up structures needed to add the protocol subtree and manage it */ proto_item *ti; proto_tree *capwap_control_tree; - guint offset = 0; + guint offset = 0; tvbuff_t *next_tvb; + guint8 type_header; + guint8 payload_type; + guint8 payload_wbid; /* Make entries in Protocol column and Info column on summary display */ col_set_str(pinfo->cinfo, COL_PROTOCOL, "CAPWAP"); @@ -885,35 +857,44 @@ dissect_capwap_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) ti = proto_tree_add_item(tree, proto_capwap, tvb, 0, -1, FALSE); capwap_control_tree = proto_item_add_subtree(ti, ett_capwap); - + /* CAPWAP Preamble */ - offset += dissect_capwap_preamble(tvb, capwap_control_tree, offset); - + + offset += dissect_capwap_preamble(tvb, capwap_control_tree, offset, &type_header); + if (type_header == 1) { next_tvb = tvb_new_subset (tvb, offset, -1, -1); call_dissector(dtls_handle, next_tvb, pinfo, tree); return; } - + /* CAPWAP Header */ - offset += dissect_capwap_header(tvb, capwap_control_tree, offset); + + offset += dissect_capwap_header(tvb, capwap_control_tree, offset, &payload_type, &payload_wbid); /* CAPWAP Control Header */ - offset += dissect_capwap_control_header(tvb, capwap_control_tree, offset, pinfo); + + offset += dissect_capwap_control_header(tvb, capwap_control_tree, offset, pinfo); /* CAPWAP Message Element */ - offset += dissect_capwap_message_element(tvb, capwap_control_tree, offset); + + offset += dissect_capwap_message_element(tvb, capwap_control_tree, offset); + } /* Code to actually dissect the packets */ static void dissect_capwap_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + /* Set up structures needed to add the protocol subtree and manage it */ proto_item *ti; proto_tree *capwap_data_tree; - guint offset = 0; + guint offset = 0; tvbuff_t *next_tvb; + guint8 type_header; + guint8 payload_type; + guint8 payload_wbid; /* Make entries in Protocol column and Info column on summary display */ col_set_str(pinfo->cinfo, COL_PROTOCOL, "CAPWAP"); @@ -921,34 +902,41 @@ dissect_capwap_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) ti = proto_tree_add_item(tree, proto_capwap, tvb, 0, -1, FALSE); capwap_data_tree = proto_item_add_subtree(ti, ett_capwap); - + /* CAPWAP Preamble */ - offset += dissect_capwap_preamble(tvb, capwap_data_tree, offset); - + + offset += dissect_capwap_preamble(tvb, capwap_data_tree, offset, &type_header); + if (type_header == 1) { next_tvb = tvb_new_subset (tvb, offset, -1, -1); call_dissector(dtls_handle, next_tvb, pinfo, tree); return; } - + /* CAPWAP Header */ - offset += dissect_capwap_header(tvb, capwap_data_tree, offset); + + offset += dissect_capwap_header(tvb, capwap_data_tree, offset, &payload_type, &payload_wbid); /* CAPWAP Data Payload */ + next_tvb = tvb_new_subset (tvb, offset, -1, -1); - + if (payload_type == 0) { - /* IEEE 802.3 Frame */ + /* IEEE 802.3 Frame */ call_dissector(ieee8023_handle, next_tvb, pinfo, tree); - } else if (payload_wbid == 1) { - /* IEEE 802.11 */ - call_dissector(ieee80211_handle, next_tvb, pinfo, tree); } else { - /* Unknown Data */ - call_dissector(data_handle, next_tvb, pinfo, tree); + switch (payload_wbid) { + case 1: /* IEEE 802.11 */ + call_dissector(ieee80211_handle, next_tvb, pinfo, tree); + break; + default: /* Unknown Data */ + call_dissector(data_handle, next_tvb, pinfo, tree); + break; + } } } + void proto_register_capwap_control(void) { @@ -972,115 +960,112 @@ proto_register_capwap_control(void) { "Reserved", "capwap.preamble.reserved", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - /* CAPWAP Header */ { &hf_capwap_header, { "Header", "capwap.header", FT_NONE, BASE_NONE, NULL, 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_header_hlen, - { "Header Length", "capwap.header.length", + { "Header Length", "capwap.header.length", FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_header_rid, - { "Radio ID", "capwap.header.rid", + { "Radio ID", "capwap.header.rid", FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_header_wbid, - { "Wireless Binding ID", "capwap.header.wbid", + { "Wireless Binding ID", "capwap.header.wbid", FT_UINT8, BASE_DEC, VALS(type_wbid), 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_header_flags, - { "Header Flags", "capwap.header.flags", + { "Header Flags", "capwap.header.flags", FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_header_flags_t, - { "Payload Type", "capwap.header.flags.t", - FT_BOOLEAN, 9, TFS (&flag_type_t), 0x100, + { "Payload Type", "capwap.header.flags.t", + FT_BOOLEAN, 9, TFS(&flag_type_t), 0x100, NULL, HFILL }}, { &hf_capwap_header_flags_f, { "Fragment", "capwap.header.flags.f", - FT_BOOLEAN, 9, TFS (&flag_type_f), 0x80, + FT_BOOLEAN, 9, TFS(&flag_type_f), 0x80, NULL, HFILL }}, { &hf_capwap_header_flags_l, - { "Last Fragment", "capwap.header.flags.l", - FT_BOOLEAN, 9, TFS (&flag_type_l), 0x40, + { "Last Fragment", "capwap.header.flags.l", + FT_BOOLEAN, 9, TFS(&flag_type_l), 0x40, NULL, HFILL }}, { &hf_capwap_header_flags_w, - { "Wireless header", "capwap.header.flags.w", - FT_BOOLEAN, 9, TFS (&flag_type_w), 0x20, - NULL, HFILL }}, + { "Wireless header", "capwap.header.flags.w", + FT_BOOLEAN, 9, TFS(&flag_type_w), 0x20, + NULL, HFILL }}, { &hf_capwap_header_flags_m, - { "Radio MAC header", "capwap.header.flags.m", - FT_BOOLEAN, 9, TFS (&flag_type_m), 0x10, + { "Radio MAC header", "capwap.header.flags.m", + FT_BOOLEAN, 9, TFS(&flag_type_m), 0x10, NULL, HFILL }}, { &hf_capwap_header_flags_k, - { "Keep-Alive", "capwap.header.flags.k", - FT_BOOLEAN, 9, TFS (&flag_type_k), 0x08, - NULL, HFILL }}, + { "Keep-Alive", "capwap.header.flags.k", + FT_BOOLEAN, 9, TFS(&flag_type_k), 0x08, + NULL, HFILL }}, { &hf_capwap_header_flags_r, - { "Reserved", "capwap.header.flags.r", + { "Reserved", "capwap.header.flags.r", FT_BOOLEAN, 9, TFS(&tfs_set_notset), 0x07, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_header_fragment_id, - { "Fragment ID", "capwap.header.fragment.id", + { "Fragment ID", "capwap.header.fragment.id", FT_UINT16, BASE_DEC, NULL, 0x00, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_header_fragment_offset, - { "Fragment Offset", "capwap.header.fragment.offset", + { "Fragment Offset", "capwap.header.fragment.offset", FT_UINT16, BASE_DEC, NULL, 0x00, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_header_reserved, - { "Reserved", "capwap.header.fragment.reserved", + { "Reserved", "capwap.header.fragment.reserved", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }}, + /* CAPWAP Control Header Message */ - /* CAPWAP Control Header Message */ { &hf_capwap_control_header, { "Control Header", "capwap.control.header", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_control_header_msg_type, - { "Message Type", "capwap.control.header.message_type", + { "Message Type", "capwap.control.header.message_type", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_control_header_msg_type_enterprise_nbr, - { "Message Type (Entreprise Number)", "capwap.control.header.message_type.enterprise_number", + { "Message Type (Enterprise Number)", "capwap.control.header.message_type.enterprise_number", FT_UINT32, BASE_DEC, VALS(sminmpec_values), 0x00, NULL, HFILL }}, { &hf_capwap_control_header_msg_type_enterprise_specific, - { "Message Type (Entreprise Specific)", "capwap.control.header.message_type.enterprise_specific", + { "Message Type (Enterprise Specific)", "capwap.control.header.message_type.enterprise_specific", FT_UINT8, BASE_DEC, VALS(message_type), 0x00, NULL, HFILL }}, { &hf_capwap_control_header_seq_number, - { "Sequence Number", "capwap.control.header.sequence_number", + { "Sequence Number", "capwap.control.header.sequence_number", FT_UINT8, BASE_DEC, NULL, 0x00, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_control_header_msg_element_length, - { "Message Element Length", "capwap.control.header.message_element_length", + { "Message Element Length", "capwap.control.header.message_element_length", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_control_header_flags, - { "Flags", "capwap.control.header.flags", + { "Flags", "capwap.control.header.flags", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }}, - /* CAPWAP Protocol Message Elements */ + /* CAPWAP Protocol Message Elements */ + { &hf_capwap_message_element, - { "Message Element", "capwap.message_element", + { "Message Element", "capwap.message_element", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }}, - { &hf_capwap_msg_element_type, { "Type", "capwap.message_element.type", FT_UINT16, BASE_DEC, VALS(message_element_type_vals), 0x00, "CAPWAP Message Element type", HFILL }}, - { &hf_capwap_msg_element_length, { "Length", "capwap.message_element.length", FT_UINT16, BASE_DEC, NULL, 0x00, "CAPWAP Message Element length", HFILL }}, - { &hf_capwap_msg_element_value, { "Value", "capwap.message_element.value", FT_BYTES, BASE_NONE, NULL, 0x00, @@ -1090,73 +1075,71 @@ proto_register_capwap_control(void) /* AC Descriptor */ { &hf_capwap_msg_element_type_ac_descriptor_stations, - { "Stations", "capwap.control.message_element.ac_descriptor.stations", + { "Stations", "capwap.control.message_element.ac_descriptor.stations", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_limit, - { "Limit Stations", "capwap.control.message_element.ac_descriptor.limit", + { "Limit Stations", "capwap.control.message_element.ac_descriptor.limit", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_active_wtp, - { "Active WTPs", "capwap.control.message_element.ac_descriptor.active_wtp", + { "Active WTPs", "capwap.control.message_element.ac_descriptor.active_wtp", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_max_wtp, - { "Max WTPs", "capwap.control.message_element.ac_descriptor.max_wtp", + { "Max WTPs", "capwap.control.message_element.ac_descriptor.max_wtp", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }}, - /* AC Descriptor Security Flags... */ { &hf_capwap_msg_element_type_ac_descriptor_security, - { "Security Flags", "capwap.control.message_element.ac_descriptor.security", + { "Security Flags", "capwap.control.message_element.ac_descriptor.security", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_security_s, - { "AC supports the pre-shared", "capwap.control.message_element.ac_descriptor.security.s", + { "AC supports the pre-shared", "capwap.control.message_element.ac_descriptor.security.s", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_security_x, - { "AC supports X.509 Certificate", "capwap.control.message_element.ac_descriptor.security.x", + { "AC supports X.509 Certificate", "capwap.control.message_element.ac_descriptor.security.x", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x02, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_security_r, - { "Reserved", "capwap.control.message_element.ac_descriptor.security.r", + { "Reserved", "capwap.control.message_element.ac_descriptor.security.r", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0xF9, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_rmac_field, - { "R-MAC Field", "capwap.control.message_element.ac_descriptor.rmac_field", + { "R-MAC Field", "capwap.control.message_element.ac_descriptor.rmac_field", FT_UINT8, BASE_DEC, VALS(rmac_field_vals), 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_reserved, - { "Reserved", "capwap.control.message_element.ac_descriptor.reserved", + { "Reserved", "capwap.control.message_element.ac_descriptor.reserved", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }}, - /* AC Descriptor DTLS Policy Flags... */ { &hf_capwap_msg_element_type_ac_descriptor_dtls_policy, - { "DTLS Policy Flags", "capwap.control.message_element.ac_descriptor.dtls_policy", + { "DTLS Policy Flags", "capwap.control.message_element.ac_descriptor.dtls_policy", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_dtls_policy_d, - { "DTLS-Enabled Data Channel Supported", "capwap.control.message_element.ac_descriptor.dtls_policy.d", + { "DTLS-Enabled Data Channel Supported", "capwap.control.message_element.ac_descriptor.dtls_policy.d", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_dtls_policy_c, - { "Clear Text Data Channel Supported", "capwap.control.message_element.ac_descriptor.dtls_policy.c", + { "Clear Text Data Channel Supported", "capwap.control.message_element.ac_descriptor.dtls_policy.c", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x02, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_descriptor_dtls_policy_r, - { "Reserved", "capwap.control.message_element.ac_descriptor.dtls_policy.r", + { "Reserved", "capwap.control.message_element.ac_descriptor.dtls_policy.r", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0xF9, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_information_vendor, - { "AC Information Vendor", "capwap.control.message_element.ac_information.vendor", + { "AC Information Vendor", "capwap.control.message_element.ac_information.vendor", FT_UINT32, BASE_DEC, VALS(sminmpec_values), 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_information_type, - { "AC Information Type", "capwap.control.message_element.ac_information.type", + { "AC Information Type", "capwap.control.message_element.ac_information.type", FT_UINT16, BASE_DEC, VALS(ac_information_type_vals), 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_information_length, @@ -1167,7 +1150,7 @@ proto_register_capwap_control(void) { &hf_capwap_msg_element_type_ac_information_value, { "AC Information Value", "capwap.control.message_element.ac_information.value", FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_information_hardware_version, { "AC Hardware Version", "capwap.control.message_element.ac_information.hardware_version", FT_STRING, BASE_NONE, NULL, 0x0, @@ -1179,88 +1162,87 @@ proto_register_capwap_control(void) /* CAPWAP Control IPvX Address*/ { &hf_capwap_msg_element_type_capwap_control_ipv4, - { "Control IP Address", "capwap.control.message_element.message_element.capwap_control_ipv4", + { "Control IP Address", "capwap.control.message_element.message_element.capwap_control_ipv4", FT_IPv4, BASE_NONE, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_capwap_control_wtp_count, - { "Control WTP Count", "capwap.control.message_element.capwap_control_wtp_count", + { "Control WTP Count", "capwap.control.message_element.capwap_control_wtp_count", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_ac_name, - { "AC Name", "capwap.control.message_element.ac_name", + { "AC Name", "capwap.control.message_element.ac_name", FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_discovery_type, - { "Discovery Type", "capwap.control.message_element.discovery_type", + { "Discovery Type", "capwap.control.message_element.discovery_type", FT_UINT8, BASE_DEC, VALS(discovery_type_vals), 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_board_data_vendor, - { "WTP Board Data Vendor", "capwap.control.message_element.wtp_board_data.vendor", + { "WTP Board Data Vendor", "capwap.control.message_element.wtp_board_data.vendor", FT_UINT32, BASE_DEC, VALS(sminmpec_values), 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_board_data_type, { "Board Data Type", "capwap.control.message_element.wtp_board_data.type", FT_UINT16, BASE_DEC, VALS(board_data_type_vals), 0x00, NULL, HFILL }}, - { &hf_capwap_msg_element_type_wtp_board_data_length, { "Board Data Length", "capwap.control.message_element.wtp_board_data.length", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }}, - { &hf_capwap_msg_element_type_wtp_board_data_value, { "Board Data Value", "capwap.control.message_element.wtp_board_data.value", FT_BYTES, BASE_NONE, NULL, 0x00, - NULL, HFILL }}, + NULL, HFILL }}, + { &hf_capwap_msg_element_type_wtp_board_data_wtp_model_number, { "WTP Model Number", "capwap.control.message_element.wtp_board_data.wtp_model_number", FT_STRING, BASE_DEC, NULL, 0x00, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_board_data_wtp_serial_number, { "WTP Serial Number", "capwap.control.message_element.wtp_board_data.wtp_serial_number", FT_STRING, BASE_NONE, NULL, 0x00, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_board_data_wtp_board_id, { "WTP Board ID", "capwap.control.message_element.wtp_board_data.wtp_board_id", FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_board_data_wtp_board_revision, { "WTP Board Revision", "capwap.control.message_element.wtp_board_data.wtp_board_revision", FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_board_data_base_mac_address, { "Base Mac Address", "capwap.control.message_element.wtp_board_data.base_mac_address", FT_ETHER, BASE_NONE, NULL, 0x0, - NULL, HFILL }}, + NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_descriptor_max_radios, - { "Max Radios", "capwap.control.message_element.wtp_descriptor.max_radios", + { "Max Radios", "capwap.control.message_element.wtp_descriptor.max_radios", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_descriptor_radio_in_use, - { "Radio in use", "capwap.control.message_element.wtp_descriptor.radio_in_use", + { "Radio in use", "capwap.control.message_element.wtp_descriptor.radio_in_use", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_descriptor_number_encrypt, - { "Encryption Capabilities (Number)", "capwap.control.message_element.wtp_descriptor.number_encrypt", + { "Encryption Capabilities (Number)", "capwap.control.message_element.wtp_descriptor.number_encrypt", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_descriptor_encrypt_reserved, - { "Reserved (Encrypt)", "capwap.control.message_element.wtp_descriptor.encrypt_reserved", + { "Reserved (Encrypt)", "capwap.control.message_element.wtp_descriptor.encrypt_reserved", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_descriptor_encrypt_wbid, - { "Encrypt WBID", "capwap.control.message_element.wtp_descriptor.encrypt_wbid", + { "Encrypt WBID", "capwap.control.message_element.wtp_descriptor.encrypt_wbid", FT_UINT8, BASE_DEC, VALS(type_wbid), 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_descriptor_encrypt_capabilities, - { "Encryption Capabilities", "capwap.control.message_element.wtp_descriptor.encrypt_capabilities", + { "Encryption Capabilities", "capwap.control.message_element.wtp_descriptor.encrypt_capabilities", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_descriptor_vendor, - { "WTP Descriptor Vendor", "capwap.control.message_element.wtp_descriptor.vendor", + { "WTP Descriptor Vendor", "capwap.control.message_element.wtp_descriptor.vendor", FT_UINT32, BASE_DEC, VALS(sminmpec_values), 0x00, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_descriptor_type, @@ -1293,35 +1275,35 @@ proto_register_capwap_control(void) NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_frame_tunnel_mode, - { "WTP Frame Tunnel Mode", "capwap.control.message_element.wtp_frame_tunnel_mode", + { "WTP Frame Tunnel Mode", "capwap.control.message_element.wtp_frame_tunnel_mode", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_frame_tunnel_mode_n, - { "Native Frame Tunnel Mode", "capwap.control.message_element.wtp_frame_tunnel_mode.n", + { "Native Frame Tunnel Mode", "capwap.control.message_element.wtp_frame_tunnel_mode.n", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_frame_tunnel_mode_e, - { "802.3 Frame Tunnel Mode", "capwap.control.message_element.wtp_frame_tunnel_mode.e", + { "802.3 Frame Tunnel Mode", "capwap.control.message_element.wtp_frame_tunnel_mode.e", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_frame_tunnel_mode_l, - { "Local Bridging", "capwap.control.message_element.wtp_frame_tunnel_mode.l", + { "Local Bridging", "capwap.control.message_element.wtp_frame_tunnel_mode.l", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x02, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_frame_tunnel_mode_r, - { "Reserved", "capwap.control.message_element.wtp_frame_tunnel_mode.r", + { "Reserved", "capwap.control.message_element.wtp_frame_tunnel_mode.r", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0xF1, NULL, HFILL }}, { &hf_capwap_msg_element_type_wtp_mac_type, - { "WTP MAC Type", "capwap.control.message_element.wtp_mac_type", + { "WTP MAC Type", "capwap.control.message_element.wtp_mac_type", FT_UINT8, BASE_DEC, VALS(wtp_mac_vals), 0x0, - "The MAC mode of operation supported by the WTP", HFILL }}, + "The MAC mode of operation supported by the WTP", HFILL }} }; /* Setup protocol subtree array */ static gint *ett[] = { - &ett_capwap, + &ett_capwap }; /* Register the protocol name and description */ @@ -1333,43 +1315,41 @@ proto_register_capwap_control(void) proto_register_subtree_array(ett, array_length(ett)); /* Register preferences module (See Section 2.6 for more on preferences) */ - capwap_module = prefs_register_protocol(proto_capwap,proto_reg_handoff_capwap); + capwap_module = prefs_register_protocol(proto_capwap, proto_reg_handoff_capwap); - prefs_register_uint_preference(capwap_module, "udp.port.control", "CAPWAP Control UDP Port", - "Set the port for CAPWAP Control messages (if other" - " than the default of 5246)", - 10, &global_capwap_control_udp_port); + prefs_register_uint_preference(capwap_module, "udp.port.control", "CAPWAP Control UDP Port", + "Set the port for CAPWAP Control messages (if other than the default of 5246)", + 10, &global_capwap_control_udp_port); prefs_register_uint_preference(capwap_module, "udp.port.data", "CAPWAP Data UDP Port", - "Set the port for CAPWAP Data messages (if other" - " than the default of 5247)", - 10, &global_capwap_data_udp_port); + "Set the port for CAPWAP Data messages (if other than the default of 5247)", + 10, &global_capwap_data_udp_port); + } void proto_reg_handoff_capwap(void) { static gboolean inited = FALSE; - static dissector_handle_t capwap_control_handle, capwap_data_handle; + static dissector_handle_t capwap_control_handle, capwap_data_handle; static guint capwap_control_udp_port, capwap_data_udp_port; - + if (!inited) { - capwap_control_handle = create_dissector_handle(dissect_capwap_control, proto_capwap); + capwap_control_handle = create_dissector_handle(dissect_capwap_control, proto_capwap); capwap_data_handle = create_dissector_handle(dissect_capwap_data, proto_capwap); - dtls_handle = find_dissector("dtls"); + dtls_handle = find_dissector("dtls"); ieee8023_handle = find_dissector("eth_withoutfcs"); ieee80211_handle = find_dissector("wlan"); data_handle = find_dissector("data"); - inited = TRUE; + inited = TRUE; } else { dissector_delete("udp.port", capwap_control_udp_port, capwap_control_handle); dissector_delete("udp.port", capwap_data_udp_port, capwap_data_handle); } - dissector_add("udp.port", global_capwap_control_udp_port, capwap_control_handle); dissector_add("udp.port", global_capwap_data_udp_port, capwap_data_handle); capwap_control_udp_port = global_capwap_control_udp_port; - capwap_data_udp_port = global_capwap_data_udp_port; - + capwap_data_udp_port = global_capwap_data_udp_port; } + -- cgit v1.2.3