diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c
index acf3fc1..26afacb 100644
--- a/tools/parser/l2cap.c
+++ b/tools/parser/l2cap.c
for (i=0; i<CID_TABLE_SIZE; i++)
if (table[i].cid == cid)
return table[i].psm;
- return 0;
+ return parser.defpsm;
}
static inline void command_rej(int level, struct frame *frm)
diff --git a/tools/parser/parser.c b/tools/parser/parser.c
index 1a7377e..2260030 100644
--- a/tools/parser/parser.c
+++ b/tools/parser/parser.c
struct parser_t parser;
-void init_parser(unsigned long flags, unsigned long filter)
+void init_parser(unsigned long flags, unsigned long filter,
+ unsigned int defpsm)
{
if ((flags & DUMP_RAW) && !(flags & DUMP_TYPE_MASK))
flags |= DUMP_HEX;
parser.flags = flags;
parser.filter = filter;
+ parser.defpsm = defpsm;
parser.state = 0;
}
diff --git a/tools/parser/parser.h b/tools/parser/parser.h
index cc2b282..f8137de 100644
--- a/tools/parser/parser.h
+++ b/tools/parser/parser.h
* $Id$
*/
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <asm/types.h>
+#include <netinet/in.h>
+
struct frame {
void *data;
int data_len;
#define FILT_SCO 0x0010
#define FILT_BNEP 0x0020
+
+#define STRUCT_OFFSET(type, member) ((uint8_t *)&(((type *)NULL)->member) - \
+ (uint8_t *)((type *)NULL))
+
+#define STRUCT_END(type, member) (STRUCT_OFFSET(type, member) + \
+ sizeof(((type *)NULL)->member))
+
struct parser_t {
unsigned long flags;
unsigned long filter;
+ unsigned int defpsm;
int state;
};
extern struct parser_t parser;
-void init_parser(unsigned long flags, unsigned long filter);
+void init_parser(unsigned long flags, unsigned long filter,
+ unsigned int assume_psm);
static inline int p_filter(unsigned long 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);
+/* get_uXX functions do byte swaping */
+
+static inline __u8 get_u8(struct frame *frm)
+{
+ __u8 *u8_ptr = frm->ptr;
+ frm->ptr += 1;
+ frm->len -= 1;
+ return *u8_ptr;
+}
+
+static inline __u16 get_u16(struct frame *frm)
+{
+ __u16 *u16_ptr = frm->ptr;
+ frm->ptr += 2;
+ frm->len -= 2;
+ return ntohs(*u16_ptr);
+}
+
+static inline __u32 get_u32(struct frame *frm)
+{
+ __u32 *u32_ptr = frm->ptr;
+ frm->ptr += 4;
+ frm->len -= 4;
+ return ntohl(*u32_ptr);
+}
+
+char *get_uuid_name(int uuid);
void raw_dump(int level, struct frame *frm);
void hci_dump(int level, struct frame *frm);
diff --git a/tools/parser/sdp.c b/tools/parser/sdp.c
index cdd1d28..c6fadd8 100644
--- a/tools/parser/sdp.c
+++ b/tools/parser/sdp.c
{ SDP_ATTR_ID_IPV6_SUBNET, "IPv6Subnet" } /* PAN */
};
-inline __u8 get_u8(struct frame *frm)
-{
- __u8 *u8_ptr = frm->ptr;
- frm->ptr += 1;
- frm->len -= 1;
- return *u8_ptr;
-}
-
-inline __u16 get_u16(struct frame *frm)
-{
- __u16 *u16_ptr = frm->ptr;
- frm->ptr += 2;
- frm->len -= 2;
- return ntohs(*u16_ptr);
-}
-
-inline __u32 get_u32(struct frame *frm)
-{
- __u32 *u32_ptr = frm->ptr;
- frm->ptr += 4;
- frm->len -= 4;
- return ntohl(*u32_ptr);
-}
-
-
-inline char* get_uuid_name(int uuid)
+char* get_uuid_name(int uuid)
{
int i;
- for (i = 0; i < SDP_UUID_NAM_LOOKUP_TABLE_SIZE; i++)
- {
+ for (i = 0; i < SDP_UUID_NAM_LOOKUP_TABLE_SIZE; i++) {
if (sdp_uuid_nam_lookup_table[i].uuid == uuid)
- {
return sdp_uuid_nam_lookup_table[i].name;
- }
}
return 0;