diff options
Diffstat (limited to 'epan/dissectors/packet-mausb.c')
-rw-r--r-- | epan/dissectors/packet-mausb.c | 253 |
1 files changed, 129 insertions, 124 deletions
diff --git a/epan/dissectors/packet-mausb.c b/epan/dissectors/packet-mausb.c index 913cc8ab71..dcdc6e4f77 100644 --- a/epan/dissectors/packet-mausb.c +++ b/epan/dissectors/packet-mausb.c @@ -25,17 +25,20 @@ void proto_reg_handoff_mausb(void); void proto_register_mausb(void); +static dissector_handle_t mausb_tcp_handle; +static dissector_handle_t mausb_pkt_handle; + /* For SNAP Packets */ -static int hf_llc_mausb_pid = -1; +static int hf_llc_mausb_pid; /* Initialize the protocol and registered fields */ -static int proto_mausb = -1; -static int hf_mausb_version = -1; -static int hf_mausb_flags = -1; -static int hf_mausb_flag_host = -1; -static int hf_mausb_flag_retry = -1; -static int hf_mausb_flag_timestamp = -1; -static int hf_mausb_flag_reserved = -1; +static int proto_mausb; +static int hf_mausb_version; +static int hf_mausb_flags; +static int hf_mausb_flag_host; +static int hf_mausb_flag_retry; +static int hf_mausb_flag_timestamp; +static int hf_mausb_flag_reserved; static int * const mausb_flag_fields[] = { @@ -46,83 +49,83 @@ static int * const mausb_flag_fields[] = { NULL }; -static int hf_mausb_type = -1; -static int hf_mausb_length = -1; -static int hf_mausb_dev_handle = -1; -static int hf_mausb_ep_handle = -1; -static int hf_mausb_ep_handle_d = -1; -static int hf_mausb_ep_handle_ep_num = -1; -static int hf_mausb_ep_handle_dev_addr = -1; -static int hf_mausb_ep_handle_bus_num = -1; -static int hf_mausb_ma_dev_addr = -1; -static int hf_mausb_ssid = -1; -static int hf_mausb_status = -1; +static int hf_mausb_type; +static int hf_mausb_length; +static int hf_mausb_dev_handle; +static int hf_mausb_ep_handle; +static int hf_mausb_ep_handle_d; +static int hf_mausb_ep_handle_ep_num; +static int hf_mausb_ep_handle_dev_addr; +static int hf_mausb_ep_handle_bus_num; +static int hf_mausb_ma_dev_addr; +static int hf_mausb_ssid; +static int hf_mausb_status; /* management packet specific */ -static int hf_mausb_token = -1; -static int hf_mausb_mgmt_pad = -1; -static int hf_mausb_mgmt_ep_handle_num = -1; -static int hf_mausb_mgmt_ep_handle_pad = -1; -static int hf_mausb_mgmt_ep_des_num = -1; -static int hf_mausb_mgmt_ep_des_size = -1; -static int hf_mausb_mgmt_ep_des_pad = -1; -static int hf_mausb_mgmt_type_spec = -1; -static int hf_mausb_mgmt_type_spec_generic = -1; +static int hf_mausb_token; +static int hf_mausb_mgmt_pad; +static int hf_mausb_mgmt_ep_handle_num; +static int hf_mausb_mgmt_ep_handle_pad; +static int hf_mausb_mgmt_ep_des_num; +static int hf_mausb_mgmt_ep_des_size; +static int hf_mausb_mgmt_ep_des_pad; +static int hf_mausb_mgmt_type_spec; +static int hf_mausb_mgmt_type_spec_generic; /* CapResp packet specific */ -static int hf_mausb_cap_resp_num_ep = -1; -static int hf_mausb_cap_resp_num_dev = -1; -static int hf_mausb_cap_resp_num_stream = -1; -static int hf_mausb_cap_resp_dev_type = -1; -static int hf_mausb_cap_resp_desc_count = -1; -static int hf_mausb_cap_resp_desc_len = -1; -static int hf_mausb_cap_resp_transfer_req = -1; -static int hf_mausb_cap_resp_mgmt_req = -1; -static int hf_mausb_cap_resp_rsvd = -1; - -static int hf_mausb_dev_cap_len = -1; -static int hf_mausb_dev_cap_type = -1; -static int hf_mausb_dev_cap_generic = -1; +static int hf_mausb_cap_resp_num_ep; +static int hf_mausb_cap_resp_num_dev; +static int hf_mausb_cap_resp_num_stream; +static int hf_mausb_cap_resp_dev_type; +static int hf_mausb_cap_resp_desc_count; +static int hf_mausb_cap_resp_desc_len; +static int hf_mausb_cap_resp_transfer_req; +static int hf_mausb_cap_resp_mgmt_req; +static int hf_mausb_cap_resp_rsvd; + +static int hf_mausb_dev_cap_len; +static int hf_mausb_dev_cap_type; +static int hf_mausb_dev_cap_generic; /* EPHandleReq & Resp packet specific */ -static int hf_mausb_ep_handle_req_pad = -1; -static int hf_mausb_ep_handle_resp_dir = -1; -static int hf_mausb_ep_handle_resp_iso = -1; -static int hf_mausb_ep_handle_resp_lman = -1; -static int hf_mausb_ep_handle_resp_valid = -1; -static int hf_mausb_ep_handle_resp_ccu = -1; -static int hf_mausb_ep_handle_resp_buf_size = -1; -static int hf_mausb_ep_handle_resp_iso_prog_dly = -1; -static int hf_mausb_ep_handle_resp_iso_resp_dly = -1; +static int hf_mausb_ep_handle_req_pad; +static int hf_mausb_ep_handle_resp_dir; +static int hf_mausb_ep_handle_resp_iso; +static int hf_mausb_ep_handle_resp_lman; +static int hf_mausb_ep_handle_resp_valid; +static int hf_mausb_ep_handle_resp_ccu; +static int hf_mausb_ep_handle_resp_buf_size; +static int hf_mausb_ep_handle_resp_iso_prog_dly; +static int hf_mausb_ep_handle_resp_iso_resp_dly; /* (Clear/Cancel)TransferReq & Resp packet specific */ -static int hf_mausb_clear_transfers_info_block = -1; -static int hf_mausb_clear_transfers_status_block = -1; -static int hf_mausb_cancel_transfer_rsvd = -1; -static int hf_mausb_clear_transfers_req_num = -1; -static int hf_mausb_clear_transfers_req_rsvd = -1; -static int hf_mausb_clear_transfers_resp_num = -1; -static int hf_mausb_clear_transfers_resp_rsvd = -1; -static int hf_mausb_cancel_transfer_status = -1; -static int hf_mausb_cancel_transfer_rsvd_2 = -1; -static int hf_mausb_clear_transfers_status = -1; -static int hf_mausb_clear_transfers_partial = -1; -static int hf_mausb_clear_transfers_start_req_id = -1; -static int hf_mausb_clear_transfers_last_req_id = -1; -static int hf_mausb_clear_transfers_req_block_rsvd = -1; -static int hf_mausb_clear_transfers_resp_block_rsvd = -1; -static int hf_mausb_cancel_transfer_seq_num = -1; -static int hf_mausb_cancel_transfer_byte_offset = -1; +static int hf_mausb_clear_transfers_info_block; +static int hf_mausb_clear_transfers_status_block; +static int hf_mausb_cancel_transfer_rsvd; +static int hf_mausb_clear_transfers_req_num; +static int hf_mausb_clear_transfers_req_rsvd; +static int hf_mausb_clear_transfers_resp_num; +static int hf_mausb_clear_transfers_resp_rsvd; +static int hf_mausb_cancel_transfer_status; +static int hf_mausb_cancel_transfer_rsvd_2; +static int hf_mausb_clear_transfers_status; +static int hf_mausb_clear_transfers_partial; +static int hf_mausb_clear_transfers_start_req_id; +static int hf_mausb_clear_transfers_last_req_id; +static int hf_mausb_clear_transfers_req_block_rsvd; +static int hf_mausb_clear_transfers_resp_block_rsvd; +static int hf_mausb_cancel_transfer_seq_num; +static int hf_mausb_cancel_transfer_byte_offset; /* data packet specific */ -static int hf_mausb_eps = -1; -static int hf_mausb_eps_rsvd = -1; -static int hf_mausb_tflags = -1; -static int hf_mausb_tflag_arq = -1; -static int hf_mausb_tflag_neg = -1; -static int hf_mausb_tflag_eot = -1; -static int hf_mausb_tflag_type = -1; -static int hf_mausb_tflag_rsvd = -1; +static int hf_mausb_eps; +static int hf_mausb_eps_rsvd; +static int hf_mausb_tflags; +static int hf_mausb_tflag_arq; +static int hf_mausb_tflag_neg; +static int hf_mausb_tflag_eot; +static int hf_mausb_tflag_type; +static int hf_mausb_tflag_rsvd; static int * const mausb_tflag_fields[] = { &hf_mausb_tflag_arq, @@ -133,11 +136,11 @@ static int * const mausb_tflag_fields[] = { NULL }; -static int hf_mausb_num_iso_hdr = -1; -static int hf_mausb_iflags = -1; -static int hf_mausb_iflag_mtd = -1; -static int hf_mausb_iflag_hdr_format = -1; -static int hf_mausb_iflag_asap = -1; +static int hf_mausb_num_iso_hdr; +static int hf_mausb_iflags; +static int hf_mausb_iflag_mtd; +static int hf_mausb_iflag_hdr_format; +static int hf_mausb_iflag_asap; static int * const mausb_iflag_fields[] = { &hf_mausb_iflag_mtd, @@ -146,32 +149,32 @@ static int * const mausb_iflag_fields[] = { NULL }; -static int hf_mausb_stream_id = -1; -static int hf_mausb_seq_num = -1; -static int hf_mausb_req_id = -1; -static int hf_mausb_present_time = -1; -static int hf_mausb_uframe = -1; -static int hf_mausb_frame = -1; -static int hf_mausb_num_segs = -1; +static int hf_mausb_stream_id; +static int hf_mausb_seq_num; +static int hf_mausb_req_id; +static int hf_mausb_present_time; +static int hf_mausb_uframe; +static int hf_mausb_frame; +static int hf_mausb_num_segs; -static int hf_mausb_timestamp = -1; -static int hf_mausb_delta = -1; -static int hf_mausb_nom_interval = -1; +static int hf_mausb_timestamp; +static int hf_mausb_delta; +static int hf_mausb_nom_interval; -static int hf_mausb_mtd = -1; -static int hf_mausb_rem_size_credit = -1; +static int hf_mausb_mtd; +static int hf_mausb_rem_size_credit; /* expert info fields */ -static expert_field ei_ep_handle_len = EI_INIT; -static expert_field ei_len = EI_INIT; -static expert_field ei_mgmt_type_undef = EI_INIT; -static expert_field ei_mgmt_type_spec_len_long = EI_INIT; -static expert_field ei_mgmt_type_spec_len_short = EI_INIT; -static expert_field ei_dev_cap_len = EI_INIT; -static expert_field ei_dev_cap_resp_desc_len = EI_INIT; -static expert_field ei_cap_resp_desc_len = EI_INIT; +static expert_field ei_ep_handle_len; +static expert_field ei_len; +static expert_field ei_mgmt_type_undef; +static expert_field ei_mgmt_type_spec_len_long; +static expert_field ei_mgmt_type_spec_len_short; +static expert_field ei_dev_cap_len; +static expert_field ei_dev_cap_resp_desc_len; +static expert_field ei_cap_resp_desc_len; /* MAUSB Version, per 6.2.1.1 */ #define MAUSB_VERSION_1_0 0x0 @@ -449,7 +452,7 @@ static const value_string mausb_status_string[] = { #define MAUSB_TOKEN_MASK 0x03ff #define MAUSB_MGMT_PAD_MASK 0xfffc -#define MAUSB_MGMT_NUM_EP_DES_MASK 0x001f +#define MAUSB_MGMT_NUM_EP_DES_MASK 0x1f #define MAUSB_MGMT_SIZE_EP_DES_OFFSET 5 #define MAUSB_MGMT_SIZE_EP_DES_MASK (0x003f << MAUSB_MGMT_SIZE_EP_DES_OFFSET) @@ -641,6 +644,10 @@ static gboolean mausb_is_setup_response(struct mausb_header *header) /*** EP Handle parsing helper functions */ +guint8 mausb_ep_handle_ep_d(guint16 handle) { + return (handle & MAUSB_EP_HANDLE_D) >> MAUSB_EP_HANDLE_D_OFFSET; +} + guint8 mausb_ep_handle_ep_num(guint16 handle) { return (handle & MAUSB_EP_HANDLE_EP_NUM) >> MAUSB_EP_HANDLE_EP_NUM_OFFSET; } @@ -661,16 +668,16 @@ static guint mausb_get_pkt_len(packet_info *pinfo _U_, tvbuff_t *tvb, } /* Initialize the subtree pointers */ -static gint ett_mausb = -1; -static gint ett_mausb_flags = -1; -static gint ett_mausb_ep_handle = -1; -static gint ett_mausb_tflags = -1; -static gint ett_mausb_iflags = -1; -static gint ett_mausb_present_time = -1; -static gint ett_mausb_timestamp = -1; -static gint ett_mgmt = -1; -static gint ett_dev_cap = -1; -static gint ett_clear_transfers_block = -1; +static gint ett_mausb; +static gint ett_mausb_flags; +static gint ett_mausb_ep_handle; +static gint ett_mausb_tflags; +static gint ett_mausb_iflags; +static gint ett_mausb_present_time; +static gint ett_mausb_timestamp; +static gint ett_mgmt; +static gint ett_dev_cap; +static gint ett_clear_transfers_block; #define USB_DT_EP_SIZE 7 @@ -1033,7 +1040,7 @@ static guint16 dissect_mausb_mgmt_pkt_ep_handle( proto_tree *tree, tvbuff_t *tvb size_ep_des = mausb_get_size_ep_des(tvb, offset); size_field = proto_tree_add_item(tree, hf_mausb_mgmt_ep_des_size, tvb, - offset, 2, ENC_LITTLE_ENDIAN); /* really 6 bits over a byte boundry */ + offset, 2, ENC_LITTLE_ENDIAN); /* really 6 bits over a byte boundary */ offset += 1; /* Padding to DWORD */ @@ -1069,7 +1076,7 @@ static guint16 dissect_mausb_mgmt_pkt_ep_handle( proto_tree *tree, tvbuff_t *tvb /* Standard USB Endpoint Descriptor */ dissect_usb_endpoint_descriptor(pinfo, tree, tvb, loop_offset, - &usb_conv_info, &last_ep_type); + &usb_conv_info, &last_ep_type, USB_SPEED_UNKNOWN); loop_offset += USB_DT_EP_SIZE; /* If there are more descriptors to read */ @@ -1324,7 +1331,7 @@ static guint16 dissect_mausb_mgmt_pkt_flds(struct mausb_header *header, break; - /* Managment packets with no additional data */ + /* Management packets with no additional data */ case DevResetReq: case DevResetResp: case UpdateDevResp: @@ -1743,7 +1750,7 @@ proto_register_mausb(void) } }, - /* Managment Packets Only */ + /* Management Packets Only */ { &hf_mausb_token, { "Token", "mausb.token", FT_UINT16, BASE_DEC, NULL, MAUSB_TOKEN_MASK, NULL, HFILL @@ -1915,7 +1922,7 @@ proto_register_mausb(void) { &hf_mausb_cap_resp_num_ep, { "Number of Endpoints", "mausb.cap_resp.num_ep", - FT_UINT8, BASE_DEC, NULL, 0, + FT_UINT16, BASE_DEC, NULL, 0, "the maximum number of endpoints for this device", HFILL } @@ -2140,7 +2147,7 @@ proto_register_mausb(void) }, { &hf_mausb_clear_transfers_partial, { "Partial Delivery", "mausb.clear_transfers.partial", FT_BOOLEAN, 6, - TFS(&tfs_true_false), MAUSB_CLEAR_TRANSFERS_PARTIAL_MASK, + NULL, MAUSB_CLEAR_TRANSFERS_PARTIAL_MASK, NULL, HFILL } }, @@ -2251,18 +2258,16 @@ proto_register_mausb(void) expert_register_field_array(expert_mausb, ei, array_length(ei)); llc_add_oui(OUI_WFA, "llc.wfa_pid", "LLC WFA OUI PID", oui_hf, proto_mausb); + + /* Register the dissectors */ + mausb_tcp_handle = register_dissector("mausb", dissect_mausb, proto_mausb); + mausb_pkt_handle = register_dissector("mausb.pkt", dissect_mausb_pkt, proto_mausb); + } void proto_reg_handoff_mausb(void) { - dissector_handle_t mausb_tcp_handle; - dissector_handle_t mausb_pkt_handle; - - mausb_tcp_handle = create_dissector_handle(dissect_mausb, proto_mausb); - - mausb_pkt_handle = create_dissector_handle(dissect_mausb_pkt, proto_mausb); - dissector_add_uint("llc.wfa_pid", PID_MAUSB, mausb_pkt_handle); dissector_add_uint_range_with_preference("tcp.port", "", mausb_tcp_handle); |