aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/address_to_str.c3
-rw-r--r--epan/dissectors/packet-mausb.c10
-rw-r--r--epan/dissectors/packet-usb.c11
-rw-r--r--epan/dissectors/packet-usb.h5
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,