diff options
-rw-r--r-- | epan/address_to_str.c | 3 | ||||
-rw-r--r-- | epan/dissectors/packet-mausb.c | 10 | ||||
-rw-r--r-- | epan/dissectors/packet-usb.c | 11 | ||||
-rw-r--r-- | epan/dissectors/packet-usb.h | 5 |
4 files changed, 21 insertions, 8 deletions
diff --git a/epan/address_to_str.c b/epan/address_to_str.c index 361e3a0554..15dd8cd599 100644 --- a/epan/address_to_str.c +++ b/epan/address_to_str.c @@ -372,7 +372,8 @@ usb_addr_to_str_buf(const guint8 *addrp, gchar *buf, int buf_len) if(pletoh32(&addrp[0])==0xffffffff){ g_snprintf(buf, buf_len, "host"); } else { - g_snprintf(buf, buf_len, "%d.%d", pletoh32(&addrp[0]), pletoh32(&addrp[4])); + g_snprintf(buf, buf_len, "%d.%d.%d", pletoh16(&addrp[8]), + pletoh32(&addrp[0]), pletoh32(&addrp[4])); } } diff --git a/epan/dissectors/packet-mausb.c b/epan/dissectors/packet-mausb.c index b79e251784..3999dde1dc 100644 --- a/epan/dissectors/packet-mausb.c +++ b/epan/dissectors/packet-mausb.c @@ -551,6 +551,10 @@ static guint8 mausb_ep_handle_dev_addr(guint16 handle) { return (handle & MAUSB_EP_HANDLE_DEV_ADDR) >> MAUSB_EP_HANDLE_DEV_ADDR_OFFSET; } +static guint8 mausb_ep_handle_bus_num(guint16 handle) { + return (handle & MAUSB_EP_HANDLE_BUS_NUM) >> MAUSB_EP_HANDLE_BUS_NUM_OFFSET; +} + /* returns the length field of the MAUSB packet */ static guint mausb_get_pkt_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset) { @@ -919,15 +923,17 @@ static conversation_t conversation_t *conversation = NULL; static usb_address_t src_addr, dst_addr; /* has to be static due to SET_ADDRESS */ guint16 device_address; + guint16 bus_num; int endpoint; /* Treat data packets the same as URBs */ if (is_data) { device_address = mausb_ep_handle_dev_addr(handle); endpoint = mausb_ep_handle_ep_num(handle); + bus_num = mausb_ep_handle_bus_num(handle); - usb_set_addr(pinfo, &src_addr, &dst_addr, device_address, endpoint, - req); + usb_set_addr(pinfo, &src_addr, &dst_addr, bus_num, device_address, + endpoint, req); conversation = get_usb_conversation(pinfo, &pinfo->src, &pinfo->dst, pinfo->srcport, pinfo->destport); } diff --git a/epan/dissectors/packet-usb.c b/epan/dissectors/packet-usb.c index 1b259f2ddb..8fc3dd5897 100644 --- a/epan/dissectors/packet-usb.c +++ b/epan/dissectors/packet-usb.c @@ -2821,8 +2821,8 @@ dissect_usbpcap_buffer_packet_header(tvbuff_t *tvb, packet_info *pinfo, proto_tr /* Set the usb_address_t fields based on the direction of the urb */ void usb_set_addr(packet_info *pinfo, usb_address_t *src_addr, - usb_address_t *dst_addr, guint16 device_address, int endpoint, - gboolean req) + usb_address_t *dst_addr, guint16 bus_id, guint16 device_address, + int endpoint, gboolean req) { if (req) { /* request */ @@ -2837,6 +2837,8 @@ usb_set_addr(packet_info *pinfo, usb_address_t *src_addr, dst_addr->device = 0xffffffff; dst_addr->endpoint = NO_ENDPOINT; } + src_addr->bus_id = GUINT16_TO_LE(bus_id); + dst_addr->bus_id = GUINT16_TO_LE(bus_id); SET_ADDRESS(&pinfo->net_src, AT_USB, USB_ADDR_LEN, (char *)src_addr); SET_ADDRESS(&pinfo->src, AT_USB, USB_ADDR_LEN, (char *)src_addr); @@ -3120,6 +3122,7 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent, usb_conv_info_t *usb_conv_info; conversation_t *conversation; guint16 device_address; + guint16 bus_id; tvbuff_t *next_tvb = NULL; device_product_data_t *device_product_data = NULL; device_protocol_data_t *device_protocol_data = NULL; @@ -3137,16 +3140,18 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent, urb_type = tvb_get_guint8(tvb, 8); endpoint = tvb_get_guint8(tvb, 10) & 0x7F; device_address = (guint16)tvb_get_guint8(tvb, 11); + bus_id = tvb_get_letohs(tvb, 12); } else if (header_info & USB_HEADER_IS_USBPCAP) { urb_type = tvb_get_guint8(tvb, 16) & 0x01 ? URB_COMPLETE : URB_SUBMIT; device_address = tvb_get_letohs(tvb, 19); endpoint = tvb_get_guint8(tvb, 21) & 0x7F; + bus_id = tvb_get_letohs(tvb, 17); } else return; /* invalid USB pseudo header */ - usb_set_addr(pinfo, &src_addr, &dst_addr, device_address, endpoint, + usb_set_addr(pinfo, &src_addr, &dst_addr, bus_id, device_address, endpoint, (urb_type == URB_SUBMIT)); conversation = get_usb_conversation(pinfo, &pinfo->src, &pinfo->dst, pinfo->srcport, pinfo->destport); diff --git a/epan/dissectors/packet-usb.h b/epan/dissectors/packet-usb.h index ed9658dac2..40c9cd489b 100644 --- a/epan/dissectors/packet-usb.h +++ b/epan/dissectors/packet-usb.h @@ -29,6 +29,7 @@ typedef struct _usb_address_t { guint32 device; guint32 endpoint; + guint16 bus_id; } usb_address_t; #define USB_ADDR_LEN (sizeof(usb_address_t)) @@ -228,8 +229,8 @@ dissect_usb_setup_request(packet_info *pinfo, proto_tree *parent, tvbuff_t *tvb, void usb_set_addr(packet_info *pinfo, usb_address_t *src_addr, - usb_address_t *dst_addr, guint16 device_address, int endpoint, - gboolean req); + usb_address_t *dst_addr, guint16 bus_id, guint16 device_address, + int endpoint, gboolean req); usb_trans_info_t *usb_get_trans_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, |