monitor: Decode L2CAP channel mode
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 13 Sep 2019 10:54:07 +0000 (13:54 +0300)
committerhimanshu <h.himanshu@samsung.com>
Tue, 11 Feb 2020 08:57:59 +0000 (14:27 +0530)
This decodes the L2CAP channel mode of each frame:

> ACL Data RX: Handle 3585 flags 0x02 dlen 12
      Channel: 64 len 8 [PSM 127 mode Basic (0x00)] {chan 0}
< ACL Data TX: Handle 3585 flags 0x00 dlen 9
      Channel: 65 len 5 sdu 3 [PSM 127 mode LE Flow Control (0x80)] {chan 1}

Change-Id: I45d093dbb336b00e16c96bc99d3c693d416563c2
Signed-off-by: himanshu <h.himanshu@samsung.com>
monitor/l2cap.c

index 04dafb3..5389972 100755 (executable)
@@ -401,6 +401,26 @@ static char *supervisory2str(uint8_t supervisory)
        }
 }
 
+static char *mode2str(uint8_t mode)
+{
+       switch (mode) {
+       case L2CAP_MODE_BASIC:
+               return "Basic";
+       case L2CAP_MODE_RETRANS:
+               return "Retransmission";
+       case L2CAP_MODE_FLOWCTL:
+               return "Flow Control";
+       case L2CAP_MODE_ERTM:
+               return "Enhanced Retransmission";
+       case L2CAP_MODE_STREAMING:
+               return "Streaming";
+       case L2CAP_MODE_LE_FLOWCTL:
+               return "LE Flow Control";
+       default:
+               return "Unknown";
+       }
+}
+
 static void l2cap_ctrl_ext_parse(struct l2cap_frame *frame, uint32_t ctrl)
 {
        printf("      %s:",
@@ -798,7 +818,8 @@ static void print_config_options(const struct l2cap_frame *frame,
                                assign_mode(frame, data[consumed + 2], cid);
 
                        print_field("  Mode: %s (0x%2.2x)",
-                                               str, data[consumed + 2]);
+                                       mode2str(data[consumed + 2]),
+                                       data[consumed + 2]);
                        print_field("  TX window size: %d", data[consumed + 3]);
                        print_field("  Max transmit: %d", data[consumed + 4]);
                        print_field("  Retransmission timeout: %d",
@@ -3071,16 +3092,18 @@ void l2cap_frame(uint16_t index, bool in, uint16_t handle, uint16_t cid,
                        }
                        print_indent(6, COLOR_CYAN, "Channel:", "",
                                        COLOR_OFF, " %d len %d sdu %d"
-                                       " [PSM %d mode %d] {chan %d}",
+                                       " [PSM %d mode %s (0x%02x)] {chan %d}",
                                        cid, size, chan->sdu, frame.psm,
-                                       frame.mode, frame.chan);
+                                       mode2str(frame.mode), frame.mode,
+                                       frame.chan);
                        chan->sdu -= frame.size;
                        break;
                case L2CAP_MODE_BASIC:
                        print_indent(6, COLOR_CYAN, "Channel:", "", COLOR_OFF,
-                                       " %d len %d [PSM %d mode %d] {chan %d}",
-                                               cid, size, frame.psm,
-                                               frame.mode, frame.chan);
+                                       " %d len %d [PSM %d mode %s (0x%02x)] "
+                                       "{chan %d}", cid, size, frame.psm,
+                                       mode2str(frame.mode), frame.mode,
+                                       frame.chan);
                        break;
                default:
                        ext_ctrl = get_ext_ctrl(&frame);
@@ -3092,8 +3115,9 @@ void l2cap_frame(uint16_t index, bool in, uint16_t handle, uint16_t cid,
                                print_indent(6, COLOR_CYAN, "Channel:", "",
                                                COLOR_OFF, " %d len %d"
                                                " ext_ctrl 0x%8.8x"
-                                               " [PSM %d mode %d] {chan %d}",
-                                               cid, size, ctrl32, frame.psm,
+                                               " [PSM %d mode %s (0x%02x)] "
+                                               "{chan %d}", cid, size, ctrl32,
+                                               frame.psm, mode2str(frame.mode),
                                                frame.mode, frame.chan);
 
                                l2cap_ctrl_ext_parse(&frame, ctrl32);
@@ -3104,8 +3128,9 @@ void l2cap_frame(uint16_t index, bool in, uint16_t handle, uint16_t cid,
                                print_indent(6, COLOR_CYAN, "Channel:", "",
                                                COLOR_OFF, " %d len %d"
                                                " ctrl 0x%4.4x"
-                                               " [PSM %d mode %d] {chan %d}",
-                                               cid, size, ctrl16, frame.psm,
+                                               " [PSM %d mode %s (0x%02x)] "
+                                               "{chan %d}", cid, size, ctrl16,
+                                               frame.psm, mode2str(frame.mode),
                                                frame.mode, frame.chan);
 
                                l2cap_ctrl_parse(&frame, ctrl16);