Diff between bb197be7ae85a0f0c3c47159f71e874aa4392cd3 and 87303e70fe7ff87dc91ce2e1e80a23b83fe3e4f9

Changed Files

File Additions Deletions Status
tools/parser/l2cap.c +29 -0 modified

Full Patch

diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c
index ee20614..6ef953a 100644
--- a/tools/parser/l2cap.c
+++ b/tools/parser/l2cap.c
@@ -315,6 +315,18 @@ static char *mode2str(uint8_t mode)
 	}
 }
 
+static char *fcs2str(uint8_t fcs)
+{
+	switch (fcs) {
+	case 0x00:
+		return "No FCS";
+	case 0x01:
+		return "CRC16 Check";
+	default:
+		return "Reserved";
+	}
+}
+
 static char *sar2str(uint8_t sar)
 {
 	switch (sar) {
@@ -446,6 +458,16 @@ static void conf_rfc(void *ptr, int len, int in, uint16_t cid)
 	printf(")");
 }
 
+static void conf_fcs(void *ptr, int len)
+{
+	uint8_t fcs;
+
+	fcs = *((uint8_t *) ptr);
+	printf("FCS Option");
+	if (len > 0)
+		printf(" 0x%2.2x (%s)", fcs, fcs2str(fcs));
+}
+
 static void conf_opt(int level, void *ptr, int len, int in, uint16_t cid)
 {
 	p_indent(level, 0);
@@ -482,6 +504,10 @@ static void conf_opt(int level, void *ptr, int len, int in, uint16_t cid)
 			conf_rfc(h->val, h->len, in, cid);
 			break;
 
+		case L2CAP_CONF_FCS:
+			conf_fcs(h->val, h->len);
+			break;
+
 		default:
 			printf("Unknown (type %2.2x, len %d)", h->type & 0x7f, h->len);
 			break;
@@ -514,6 +540,9 @@ static void conf_list(int level, uint8_t *list, int len)
 		case L2CAP_CONF_RFC:
 			printf("RFC ");
 			break;
+		case L2CAP_CONF_FCS:
+			printf("FCS ");
+			break;
 		default:
 			printf("%2.2x ", list[i] & 0x7f);
 			break;