summaryrefslogtreecommitdiff
path: root/monitor/l2cap.c
diff options
context:
space:
mode:
authorVikrampal Yadav <vikram.pal@samsung.com>2015-01-07 13:53:19 +0530
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2015-01-12 10:10:49 -0200
commitde132d1c4998624597788ca3dbb50e43f339b252 (patch)
tree3d0754ee0869e9b82c9d3c782c76686aa4cc8b82 /monitor/l2cap.c
parent829edf018227a928d9c8710a951afa49ed300cad (diff)
downloadbluez-de132d1c4998624597788ca3dbb50e43f339b252.tar.gz
monitor: Add support for parsing L2CAP control field
Support for parsing L2CAP control field added.
Diffstat (limited to 'monitor/l2cap.c')
-rw-r--r--monitor/l2cap.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/monitor/l2cap.c b/monitor/l2cap.c
index c65977697..8373b0cba 100644
--- a/monitor/l2cap.c
+++ b/monitor/l2cap.c
@@ -416,6 +416,42 @@ static void l2cap_ctrl_ext_parse(struct l2cap_frame *frame, uint32_t ctrl)
printf(" F-bit");
}
+static void l2cap_ctrl_parse(struct l2cap_frame *frame, uint32_t ctrl)
+{
+ printf(" %s:",
+ ctrl & L2CAP_CTRL_FRAME_TYPE ? "S-frame" : "I-frame");
+
+ if (ctrl & 0x01) {
+ printf(" %s",
+ supervisory2str((ctrl & L2CAP_CTRL_SUPERVISE_MASK) >>
+ L2CAP_CTRL_SUPER_SHIFT));
+
+ if (ctrl & L2CAP_CTRL_POLL)
+ printf(" P-bit");
+ } else {
+ uint8_t sar;
+
+ sar = (ctrl & L2CAP_CTRL_SAR_MASK) >> L2CAP_CTRL_SAR_SHIFT;
+ printf(" %s", sar2str(sar));
+ if (sar == L2CAP_SAR_START) {
+ uint16_t len;
+
+ if (!l2cap_frame_get_le16(frame, &len))
+ return;
+
+ printf(" (len %d)", len);
+ }
+ printf(" TxSeq %d", (ctrl & L2CAP_CTRL_TXSEQ_MASK) >>
+ L2CAP_CTRL_TXSEQ_SHIFT);
+ }
+
+ printf(" ReqSeq %d", (ctrl & L2CAP_CTRL_REQSEQ_MASK) >>
+ L2CAP_CTRL_REQSEQ_SHIFT);
+
+ if (ctrl & L2CAP_CTRL_FINAL)
+ printf(" F-bit");
+}
+
#define MAX_INDEX 16
struct index_data {
@@ -2907,6 +2943,8 @@ static void l2cap_frame(uint16_t index, bool in, uint16_t handle,
" [PSM %d mode %d] {chan %d}",
cid, size, ctrl16, frame.psm,
frame.mode, frame.chan);
+
+ l2cap_ctrl_parse(&frame, ctrl16);
}
printf("\n");