From 23a53d483ffa55d88e9ebe3a6b240c373ab55434 Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Tue, 12 Mar 2002 18:47:34 +0000 Subject: [PATCH] hcidump: Use btoh[sl] and htob[sl] instead of cpu_to_xx and xx_to_cpu. PAN support. --- tools/hcidump.c | 13 +++++++------ tools/parser/hci.c | 8 ++++---- tools/parser/l2cap.c | 7 +++++++ tools/parser/parser.h | 7 +++++++ tools/parser/sdp.c | 27 ++++++++++++++++++--------- tools/parser/sdp.h | 9 +++++++++ 6 files changed, 52 insertions(+), 19 deletions(-) diff --git a/tools/hcidump.c b/tools/hcidump.c index 000be83dd..eb41b7b01 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 6b2441870..10794b5a3 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 8d7364163..17df664f8 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 d2662be15..cc2b2826e 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 0b04facdc..cdd1d28f9 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 b24011078..281a0358f 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 -- 2.47.3