aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-usb.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2006-10-14 05:02:40 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2006-10-14 05:02:40 +0000
commit24ef4fcef051696b2c25080a1ecc5d9fa6d4314d (patch)
treed77f070bff2837452b5dd308a5cdf5cc82d04164 /epan/dissectors/packet-usb.c
parent057c7a0555f99d7800ec79b055983d174f470194 (diff)
create a new address type AT_USB and start populating the packet list
with nice data svn path=/trunk/; revision=19524
Diffstat (limited to 'epan/dissectors/packet-usb.c')
-rw-r--r--epan/dissectors/packet-usb.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/epan/dissectors/packet-usb.c b/epan/dissectors/packet-usb.c
index ba83ae2a5a..977421ef94 100644
--- a/epan/dissectors/packet-usb.c
+++ b/epan/dissectors/packet-usb.c
@@ -30,6 +30,7 @@
#include <epan/prefs.h>
#include <epan/etypes.h>
#include <epan/addr_resolv.h>
+#include <string.h>
typedef enum {
URB_CONTROL_INPUT,
@@ -94,6 +95,8 @@ dissect_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent)
int type;
gboolean setup;
proto_tree *tree = NULL;
+ static guint32 src_addr=0xffffffff, dst_addr=0xffffffff; /* has to be static due to SET_ADDRESS */
+ guint32 tmpaddr;
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "USB");
@@ -110,8 +113,31 @@ dissect_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent)
type = tvb_get_ntohl(tvb, offset);
proto_tree_add_item(tree, hf_usb_urb_type, tvb, offset, 4, FALSE);
offset += 4;
+
+#define USB_ADDR_LEN 4
proto_tree_add_item(tree, hf_usb_device_address, tvb, offset, 4, FALSE);
+ switch(type){
+ case URB_CONTROL_INPUT:
+ case URB_ISOCHRONOUS_INPUT:
+ case URB_INTERRUPT_INPUT:
+ case URB_BULK_INPUT:
+ src_addr=tvb_get_ntohl(tvb, offset);
+ break;
+ case URB_CONTROL_OUTPUT:
+ case URB_ISOCHRONOUS_OUTPUT:
+ case URB_INTERRUPT_OUTPUT:
+ case URB_BULK_OUTPUT:
+ dst_addr=tvb_get_ntohl(tvb, offset);
+ break;
+ default:
+ break;
+ }
offset += 4;
+ 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);
+ SET_ADDRESS(&pinfo->net_dst, AT_USB, USB_ADDR_LEN, (char *)&dst_addr);
+ SET_ADDRESS(&pinfo->dst, AT_USB, USB_ADDR_LEN, (char *)&dst_addr);
+
proto_tree_add_item(tree, hf_usb_endpoint_number, tvb, offset, 4, FALSE);
offset += 4;