diff options
author | Vikrampal Yadav <vikram.pal@samsung.com> | 2015-01-07 13:53:19 +0530 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2015-01-12 10:10:49 -0200 |
commit | de132d1c4998624597788ca3dbb50e43f339b252 (patch) | |
tree | 3d0754ee0869e9b82c9d3c782c76686aa4cc8b82 /monitor/l2cap.c | |
parent | 829edf018227a928d9c8710a951afa49ed300cad (diff) | |
download | bluez-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.c | 38 |
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"); |