Diff between 8bca3fbd74e366a85d35ce997a548c4c8916f75c and d52d19afe28b5d244d67ff786df3e0b57ca4bb96

Changed Files

File Additions Deletions Status
tools/hcidump.c +3 -1 modified
tools/parser/hci.c +13 -0 modified
tools/parser/l2cap.c +10 -9 modified
tools/parser/obex.c +1 -0 modified
tools/parser/parser.h +1 -0 modified
tools/parser/sdp.c +10 -9 modified

Full Patch

diff --git a/tools/hcidump.c b/tools/hcidump.c
index b7f3e10..f966c36 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
@@ -190,7 +190,7 @@ static void process_frames(int dev, int sock, int fd, unsigned long flags)
 		exit(1);
 	}
 
-	if (device == HCI_DEV_NONE)
+	if (dev == HCI_DEV_NONE)
 		printf("system: ");
 	else
 		printf("device: hci%d ", dev);
@@ -216,7 +216,9 @@ static void process_frames(int dev, int sock, int fd, unsigned long flags)
 
 		/* Process control message */
 		frm.data_len = len;
+		frm.dev_id = dev;
 		frm.in = 0;
+
 		cmsg = CMSG_FIRSTHDR(&msg);
 		while (cmsg) {
 			switch (cmsg->cmsg_type) {
diff --git a/tools/parser/hci.c b/tools/parser/hci.c
index dfcd973..c41dec2 100644
--- a/tools/parser/hci.c
+++ b/tools/parser/hci.c
@@ -2389,6 +2389,19 @@ static inline void vendor_dump(int level, struct frame *frm)
 	if (p_filter(FILT_HCI))
 		return;
 
+	if (frm->dev_id == HCI_DEV_NONE) {
+		uint16_t type = btohs(htons(get_u16(frm)));
+		uint16_t plen = btohs(htons(get_u16(frm)));
+
+		p_indent(level, frm);
+
+		printf("System %s: type 0x%2.2x plen %d\n",
+				frm->in ? "event" : "command", type, plen);
+
+		raw_dump(level, frm);
+		return;
+	}
+
 	if (get_manufacturer() == 12) {
 		bpa_dump(level, frm);
 		return;
diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c
index 7332967..168ad6f 100644
--- a/tools/parser/l2cap.c
+++ b/tools/parser/l2cap.c
@@ -860,15 +860,16 @@ void l2cap_dump(int level, struct frame *frm)
 		}
 		memcpy(fr->data, frm->ptr, frm->len);
 		fr->data_len = dlen + L2CAP_HDR_SIZE;
-		fr->len = frm->len;
-		fr->ptr = fr->data;
-		fr->in  = frm->in;
-		fr->ts  = frm->ts;
-		fr->handle  = frm->handle;
-		fr->cid     = frm->cid;
-		fr->num     = frm->num;
-		fr->dlci    = frm->dlci;
-		fr->channel = frm->channel;
+		fr->len      = frm->len;
+		fr->ptr      = fr->data;
+		fr->dev_id   = frm->dev_id;
+		fr->in       = frm->in;
+		fr->ts       = frm->ts;
+		fr->handle   = frm->handle;
+		fr->cid      = frm->cid;
+		fr->num      = frm->num;
+		fr->dlci     = frm->dlci;
+		fr->channel  = frm->channel;
 	} else {
 		if (!(fr = get_frame(frm->handle))) {
 			fprintf(stderr, "Not enough connection handles\n");
diff --git a/tools/parser/obex.c b/tools/parser/obex.c
index 65baf4a..9e5a509 100644
--- a/tools/parser/obex.c
+++ b/tools/parser/obex.c
@@ -104,6 +104,7 @@ static struct frame *add_frame(struct frame *frm)
 	fr->data_len = fr->len + frm->len;
 	fr->len      = fr->data_len;
 	fr->ptr      = fr->data;
+	fr->dev_id   = frm->dev_id;
 	fr->in       = frm->in;
 	fr->ts       = frm->ts;
 	fr->handle   = frm->handle;
diff --git a/tools/parser/parser.h b/tools/parser/parser.h
index d807a94..d515ddd 100644
--- a/tools/parser/parser.h
+++ b/tools/parser/parser.h
@@ -37,6 +37,7 @@ struct frame {
 	uint32_t	data_len;
 	void		*ptr;
 	uint32_t	len;
+	uint16_t	dev_id;
 	uint8_t		in;
 	uint8_t		master;
 	uint16_t	handle;
diff --git a/tools/parser/sdp.c b/tools/parser/sdp.c
index 3f0f5c5..034e496 100644
--- a/tools/parser/sdp.c
+++ b/tools/parser/sdp.c
@@ -597,16 +597,17 @@ static int add_frame(struct frame *frm, int count)
 	if (fr->data)
 		free(fr->data);
 
-	fr->data = data;
+	fr->data     = data;
 	fr->data_len = len + count;
-	fr->len = fr->data_len;
-	fr->ptr = fr->data;
-	fr->in  = frm->in;
-	fr->ts  = frm->ts;
-	fr->handle  = frm->handle;
-	fr->cid     = frm->cid;
-	fr->num     = frm->num;
-	fr->channel = frm->channel;
+	fr->len      = fr->data_len;
+	fr->ptr      = fr->data;
+	fr->dev_id   = frm->dev_id;
+	fr->in       = frm->in;
+	fr->ts       = frm->ts;
+	fr->handle   = frm->handle;
+	fr->cid      = frm->cid;
+	fr->num      = frm->num;
+	fr->channel  = frm->channel;
 
 	return pos;
 }