aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-mausb.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-mausb.c')
-rw-r--r--epan/dissectors/packet-mausb.c253
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);