OSDN Git Service

monitor: Add support for system note packet type
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 7 Nov 2015 09:27:01 +0000 (10:27 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 7 Nov 2015 09:27:01 +0000 (10:27 +0100)
monitor/packet.c
src/shared/btsnoop.c
src/shared/btsnoop.h

index 678993e..926e651 100644 (file)
@@ -66,6 +66,7 @@
 #define COLOR_CLOSE_INDEX              COLOR_RED
 #define COLOR_INDEX_INFO               COLOR_GREEN
 #define COLOR_VENDOR_DIAG              COLOR_YELLOW
+#define COLOR_SYSTEM_NOTE              COLOR_BLACK
 
 #define COLOR_HCI_COMMAND              COLOR_BLUE
 #define COLOR_HCI_COMMAND_UNKNOWN      COLOR_WHITE_BG
@@ -3683,6 +3684,13 @@ struct index_data {
 
 static struct index_data index_list[MAX_INDEX];
 
+static void packet_system_note(struct timeval *tv, struct ucred *cred,
+                               uint16_t index, const void *data, uint16_t size)
+{
+       print_packet(tv, cred, index, '=', COLOR_SYSTEM_NOTE,
+                                               "Note", data, NULL);
+}
+
 void packet_monitor(struct timeval *tv, struct ucred *cred,
                                        uint16_t index, uint16_t opcode,
                                        const void *data, uint16_t size)
@@ -3775,6 +3783,9 @@ void packet_monitor(struct timeval *tv, struct ucred *cred,
 
                packet_vendor_diag(tv, index, manufacturer, data, size);
                break;
+       case BTSNOOP_OPCODE_SYSTEM_NOTE:
+               packet_system_note(tv, cred, index, data, size);
+               break;
        default:
                sprintf(extra_str, "(code %d len %d)", opcode, size);
                print_packet(tv, cred, index, '*', COLOR_ERROR,
index a2a169e..3613c33 100644 (file)
@@ -306,24 +306,6 @@ bool btsnoop_write_phy(struct btsnoop *btsnoop, struct timeval *tv,
        return btsnoop_write(btsnoop, tv, flags, data, size);
 }
 
-static uint16_t get_opcode_from_pklg(uint8_t type)
-{
-       switch (type) {
-       case 0x00:
-               return BTSNOOP_OPCODE_COMMAND_PKT;
-       case 0x01:
-               return BTSNOOP_OPCODE_EVENT_PKT;
-       case 0x02:
-               return BTSNOOP_OPCODE_ACL_TX_PKT;
-       case 0x03:
-               return BTSNOOP_OPCODE_ACL_RX_PKT;
-       case 0x0b:
-               return BTSNOOP_OPCODE_VENDOR_DIAG;
-       }
-
-       return 0xffff;
-}
-
 static bool pklg_read_hci(struct btsnoop *btsnoop, struct timeval *tv,
                                        uint16_t *index, uint16_t *opcode,
                                        void *data, uint16_t *size)
@@ -356,8 +338,36 @@ static bool pklg_read_hci(struct btsnoop *btsnoop, struct timeval *tv,
                tv->tv_usec = ts & 0xffffffff;
        }
 
-       *index = 0;
-       *opcode = get_opcode_from_pklg(pkt.type);
+       switch (pkt.type) {
+       case 0x00:
+               *index = 0x0000;
+               *opcode = BTSNOOP_OPCODE_COMMAND_PKT;
+               break;
+       case 0x01:
+               *index = 0x0000;
+               *opcode = BTSNOOP_OPCODE_EVENT_PKT;
+               break;
+       case 0x02:
+               *index = 0x0000;
+               *opcode = BTSNOOP_OPCODE_ACL_TX_PKT;
+               break;
+       case 0x03:
+               *index = 0x0000;
+               *opcode = BTSNOOP_OPCODE_ACL_RX_PKT;
+               break;
+       case 0x0b:
+               *index = 0x0000;
+               *opcode = BTSNOOP_OPCODE_VENDOR_DIAG;
+               break;
+       case 0xfc:
+               *index = 0xffff;
+               *opcode = BTSNOOP_OPCODE_SYSTEM_NOTE;
+               break;
+       default:
+               *index = 0xffff;
+               *opcode = 0xffff;
+               break;
+       }
 
        len = read(btsnoop->fd, data, toread);
        if (len < 0) {
index a0157ff..fadc878 100644 (file)
@@ -47,6 +47,7 @@
 #define BTSNOOP_OPCODE_CLOSE_INDEX     9
 #define BTSNOOP_OPCODE_INDEX_INFO      10
 #define BTSNOOP_OPCODE_VENDOR_DIAG     11
+#define BTSNOOP_OPCODE_SYSTEM_NOTE     12
 
 #define BTSNOOP_MAX_PACKET_SIZE                (1486 + 4)