diff --git a/tools/hcidump.c b/tools/hcidump.c
index 000be83..eb41b7b 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
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);
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;
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);
}
{ "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
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;
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)) {
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
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
#define FILT_RFCOMM 0x0004
#define FILT_SDP 0x0008
#define FILT_SCO 0x0010
+#define FILT_BNEP 0x0020
struct parser_t {
unsigned long flags;
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
{ 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" },
{ 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" },
{ 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;
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;
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;
}
-static inline char* get_uuid_name(int uuid)
+inline char* get_uuid_name(int uuid)
{
int i;
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);
}
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;
}
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
#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 */
#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
#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