Diff between d72d95262bfe2de765dc6d399775b5427eacf6b7 and 23a53d483ffa55d88e9ebe3a6b240c373ab55434

Changed Files

File Additions Deletions Status
tools/hcidump.c +7 -6 modified
tools/parser/hci.c +4 -4 modified
tools/parser/l2cap.c +7 -0 modified
tools/parser/parser.h +7 -0 modified
tools/parser/sdp.c +18 -9 modified
tools/parser/sdp.h +9 -0 modified

Full Patch

diff --git a/tools/hcidump.c b/tools/hcidump.c
index 000be83..eb41b7b 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
@@ -117,10 +117,10 @@ static void process_frames(int dev, int sock, int file)
 		switch (mode) {
 		case WRITE:
 			/* Save dump */	
-			dh->len = __cpu_to_le16(frm.data_len);
+			dh->len = htobs(frm.data_len);
 			dh->in  = frm.in;
-			dh->ts_sec  = __cpu_to_le32(frm.ts.tv_sec);
-			dh->ts_usec = __cpu_to_le32(frm.ts.tv_usec);
+			dh->ts_sec  = htobl(frm.ts.tv_sec);
+			dh->ts_usec = htobl(frm.ts.tv_usec);
 			if (write_n(file, buf, frm.data_len + DUMP_HDR_SIZE) < 0) {
 				perror("Write error");
 				exit(1);
@@ -151,7 +151,7 @@ static void read_dump(int file)
 			goto failed;
 		if (!err) return;
 		
-		frm.data_len = __le16_to_cpu(dh.len);
+		frm.data_len = btohs(dh.len);
 
 		if ((err = read_n(file, frm.data, frm.data_len)) < 0)
 			goto failed;
@@ -160,8 +160,8 @@ static void read_dump(int file)
 		frm.ptr = frm.data;
 		frm.len = frm.data_len;
 		frm.in  = dh.in;
-		frm.ts.tv_sec  = __le32_to_cpu(dh.ts_sec);
-		frm.ts.tv_usec = __le32_to_cpu(dh.ts_usec);
+		frm.ts.tv_sec  = btohl(dh.ts_sec);
+		frm.ts.tv_usec = btohl(dh.ts_usec);
 		
 		parse(&frm);
 	}
@@ -255,6 +255,7 @@ static struct {
 	{ "sco",    FILT_SCO    },
 	{ "rfcomm", FILT_RFCOMM },
 	{ "sdp",    FILT_SDP    },
+	{ "bnep",   FILT_BNEP	},
 	{ 0 }
 };
 
diff --git a/tools/parser/hci.c b/tools/parser/hci.c
index 6b24418..10794b5 100644
--- a/tools/parser/hci.c
+++ b/tools/parser/hci.c
@@ -223,7 +223,7 @@ char *cmd_status_map[] = {
 static inline void command_dump(int level, struct frame *frm)
 {
 	hci_command_hdr *hdr = frm->ptr;
-	__u16 opcode = __le16_to_cpu(hdr->opcode);
+	__u16 opcode = btohs(hdr->opcode);
 	__u16 ogf = cmd_opcode_ogf(opcode);
 	__u16 ocf = cmd_opcode_ocf(opcode);
 	char *cmd;
@@ -307,8 +307,8 @@ static inline void event_dump(int level, struct frame *frm)
 static inline void acl_dump(int level, struct frame *frm)
 {
 	hci_acl_hdr *hdr = (void *) frm->ptr;
-	__u16 handle = __le16_to_cpu(hdr->handle);
-	__u16 dlen = __le16_to_cpu(hdr->dlen);
+	__u16 handle = btohs(hdr->handle);
+	__u16 dlen = btohs(hdr->dlen);
 	__u8 flags = acl_flags(handle);
 
 	if (!p_filter(FILT_HCI)) {
@@ -332,7 +332,7 @@ static inline void acl_dump(int level, struct frame *frm)
 static inline void sco_dump(int level, struct frame *frm)
 {
 	hci_sco_hdr *hdr = (void *) frm->ptr;
-	__u16 handle = __le16_to_cpu(hdr->handle);
+	__u16 handle = btohs(hdr->handle);
 
 	if (!p_filter(FILT_SCO)) {
 		p_indent(level, frm);
diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c
index 8d73641..17df664 100644
--- a/tools/parser/l2cap.c
+++ b/tools/parser/l2cap.c
@@ -410,6 +410,13 @@ static void l2cap_parse(int level, struct frame *frm)
 				raw_dump(level+1, frm);
 			break;
 
+		case 0x0f:
+			if (!p_filter(FILT_BNEP))
+				bnep_dump(level, frm);
+			else
+				raw_dump(level+1, frm);
+			break;
+
 		default:
 			if (p_filter(FILT_L2CAP))
 				break;
diff --git a/tools/parser/parser.h b/tools/parser/parser.h
index d2662be..cc2b282 100644
--- a/tools/parser/parser.h
+++ b/tools/parser/parser.h
@@ -49,6 +49,7 @@ struct frame {
 #define FILT_RFCOMM	0x0004
 #define FILT_SDP	0x0008
 #define FILT_SCO	0x0010
+#define FILT_BNEP       0x0020
 
 struct parser_t {
 	unsigned long flags;
@@ -84,11 +85,17 @@ static inline void p_indent(int level, struct frame *f)
 		printf("%*c", (level*2), ' ');
 }
 
+inline __u8 get_u8(struct frame *frm);
+inline __u16 get_u16(struct frame *frm);
+inline __u32 get_u32(struct frame *frm);
+inline char* get_uuid_name(int uuid);
+
 void raw_dump(int level, struct frame *frm);
 void hci_dump(int level, struct frame *frm);
 void l2cap_dump(int level, struct frame *frm);
 void rfcomm_dump(int level, struct frame *frm);
 void sdp_dump(int level, struct frame *frm);
+void bnep_dump(int level, struct frame *frm);
 
 static inline void parse(struct frame *frm)
 {
diff --git a/tools/parser/sdp.c b/tools/parser/sdp.c
index 0b04fac..cdd1d28 100644
--- a/tools/parser/sdp.c
+++ b/tools/parser/sdp.c
@@ -72,6 +72,7 @@ sdp_uuid_nam_lookup_table_t sdp_uuid_nam_lookup_table[] = {
 	{ SDP_UUID_HTTP,                     "HTTP"         },
 	{ SDP_UUID_WSP,                      "WSP"          },
 	{ SDP_UUID_L2CAP,                    "L2CAP"        },
+        { SDP_UUID_BNEP,                     "BNEP"         }, /* PAN */
 	{ SDP_UUID_SERVICE_DISCOVERY_SERVER, "SDServer"     },
 	{ SDP_UUID_BROWSE_GROUP_DESCRIPTOR,  "BrwsGrpDesc"  },
 	{ SDP_UUID_PUBLIC_BROWSE_GROUP,      "PubBrwsGrp"   },
@@ -87,6 +88,9 @@ sdp_uuid_nam_lookup_table_t sdp_uuid_nam_lookup_table[] = {
 	{ SDP_UUID_INTERCOM,                 "Intercom"     },
 	{ SDP_UUID_FAX,                      "Fax"          },
 	{ SDP_UUID_HEADSET_AUDIO_GATEWAY,    "AG"           },
+        { SDP_UUID_PANU,                     "PANU"         }, /* PAN */
+        { SDP_UUID_NAP,                      "NAP"          }, /* PAN */
+        { SDP_UUID_GN,                       "GN"           }, /* PAN */
 	{ SDP_UUID_PNP_INFORMATION,          "PNPInfo"      },
 	{ SDP_UUID_GENERIC_NETWORKING,       "Networking"   },
 	{ SDP_UUID_GENERIC_FILE_TRANSFER,    "FileTrnsf"    },
@@ -115,10 +119,15 @@ sdp_attr_id_nam_lookup_table_t sdp_attr_id_nam_lookup_table[] = {
 	{ SDP_ATTR_ID_VERSION_NUMBER_LIST,               "VersionNumList"     },
 	{ SDP_ATTR_ID_GROUP_ID,                          "GrpID"              },
 	{ SDP_ATTR_ID_SERVICE_DATABASE_STATE,            "SrvDBState"         },
-	{ SDP_ATTR_ID_SERVICE_VERSION,                   "SrvVersion"         }
+	{ SDP_ATTR_ID_SERVICE_VERSION,                   "SrvVersion"         },
+        { SDP_ATTR_ID_SECURITY_DESCRIPTION,              "SecurityDescription"}, /* PAN */
+        { SDP_ATTR_ID_NET_ACCESS_TYPE,                   "NetAccessType"      }, /* PAN */
+        { SDP_ATTR_ID_MAX_NET_ACCESS_RATE,               "MaxNetAccessRate"   }, /* PAN */
+        { SDP_ATTR_ID_IPV4_SUBNET,                       "IPv4Subnet"         }, /* PAN */
+        { SDP_ATTR_ID_IPV6_SUBNET,                       "IPv6Subnet"         }  /* PAN */
 };
 
-static inline __u8 get_u8(struct frame *frm)
+inline __u8 get_u8(struct frame *frm)
 {
 	__u8 *u8_ptr = frm->ptr;
 	frm->ptr += 1;
@@ -126,7 +135,7 @@ static inline __u8 get_u8(struct frame *frm)
 	return *u8_ptr;
 }
 
-static inline __u16 get_u16(struct frame *frm)
+inline __u16 get_u16(struct frame *frm)
 {
 	__u16 *u16_ptr = frm->ptr;
 	frm->ptr += 2;
@@ -134,7 +143,7 @@ static inline __u16 get_u16(struct frame *frm)
 	return ntohs(*u16_ptr);
 }
 
-static inline __u32 get_u32(struct frame *frm)
+inline __u32 get_u32(struct frame *frm)
 {
 	__u32 *u32_ptr = frm->ptr;
 	frm->ptr += 4;
@@ -143,7 +152,7 @@ static inline __u32 get_u32(struct frame *frm)
 }
 
 
-static inline char* get_uuid_name(int uuid)
+inline char* get_uuid_name(int uuid)
 {
 	int i;
 
@@ -199,7 +208,6 @@ static inline __u8 parse_de_hdr(struct frame *frm, int* n)
 static inline void print_des(__u8 de_type, int level, int n, struct frame *frm)
 {
 	int len = frm->len;
-
 	while (len - frm->len < n ) {
 		print_de(level, frm);
 	}
@@ -282,13 +290,13 @@ static inline void print_string(int n, struct frame *frm)
 
 	printf(" str");
 	if ((s = malloc(n + 1))) {
-		s = frm->ptr;
+	        strncpy(s, frm->ptr, n);
 		s[n] = '\0';
 		printf(" \"%s\"", s);
+		free(s);
 	} else {
 		perror("Can't allocate string buffer");
 	}
-
 	frm->ptr += n;
 	frm->len -= n;
 }
@@ -406,8 +414,9 @@ static inline void print_attr_list(int level, struct frame *frm)
 				printf("aid 0x%x (%s)\n", attr_id, get_attr_id_name(attr_id));
 
 				/* Print AttributeValue */
-				p_indent(++level, 0);
+				p_indent(level+1, 0);
 				print_de(level, frm);
+				printf("\n");
 			} else {
 				printf("\nERROR: Unexpected syntax\n");
 				raw_dump(level, frm);
diff --git a/tools/parser/sdp.h b/tools/parser/sdp.h
index b240110..281a035 100644
--- a/tools/parser/sdp.h
+++ b/tools/parser/sdp.h
@@ -54,6 +54,7 @@
 #define SDP_UUID_FTP                                   0x000A
 #define SDP_UUID_HTTP                                  0x000C
 #define SDP_UUID_WSP                                   0x000E
+#define SDP_UUID_BNEP                                  0x000F /* PAN */
 #define SDP_UUID_L2CAP                                 0x0100
 
 /* Bluetooth assigned UUIDs for Service Classes */
@@ -72,6 +73,9 @@
 #define SDP_UUID_INTERCOM                              0x1110
 #define SDP_UUID_FAX                                   0x1111
 #define SDP_UUID_HEADSET_AUDIO_GATEWAY                 0x1112
+#define SDP_UUID_PANU                                  0x1115 /* PAN */
+#define SDP_UUID_NAP                                   0x1116 /* PAN */
+#define SDP_UUID_GN                                    0x1117 /* PAN */
 #define SDP_UUID_PNP_INFORMATION                       0x1200
 #define SDP_UUID_GENERIC_NETWORKING                    0x1201
 #define SDP_UUID_GENERIC_FILE_TRANSFER                 0x1202
@@ -109,6 +113,11 @@
 #define SDP_ATTR_ID_FAX_CLASS_2_0_SUPPORT              0x0303
 #define SDP_ATTR_ID_FAX_CLASS_2_SUPPORT                0x0304
 #define SDP_ATTR_ID_AUDIO_FEEDBACK_SUPPORT             0x0305
+#define SDP_ATTR_ID_SECURITY_DESCRIPTION               0x030a /* PAN */
+#define SDP_ATTR_ID_NET_ACCESS_TYPE                    0x030b /* PAN */
+#define SDP_ATTR_ID_MAX_NET_ACCESS_RATE                0x030c /* PAN */
+#define SDP_ATTR_ID_IPV4_SUBNET                        0x030d /* PAN */
+#define SDP_ATTR_ID_IPV6_SUBNET                        0x030e /* PAN */
 
 /* Data element type descriptor */
 #define SDP_DE_NULL   0