diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c
index f7f0c3e..6345f8d 100644
--- a/tools/parser/l2cap.c
+++ b/tools/parser/l2cap.c
static char *confresult2str(uint16_t result)
{
switch (result) {
- case 0x0000:
+ case L2CAP_CONF_SUCCESS:
return "Success";
- case 0x0001:
+ case L2CAP_CONF_UNACCEPT:
return "Failure - unacceptable parameters";
- case 0x0002:
+ case L2CAP_CONF_REJECT:
return "Failure - rejected (no reason provided)";
- case 0x0003:
+ case L2CAP_CONF_UNKNOWN:
return "Failure - unknown options";
+ case L2CAP_CONF_PENDING:
+ return "Pending";
+ case L2CAP_CONF_EFS_REJECT:
+ return "Failure - flowspec reject";
default:
return "Reserved";
}
static char *type2str(uint8_t type)
{
switch (type) {
- case 0x00:
+ case L2CAP_SERVTYPE_NOTRAFFIC:
return "No traffic";
- case 0x01:
- return "Best effort";
- case 0x02:
+ case L2CAP_SERVTYPE_BESTEFFORT:
+ return "Best Effort";
+ case L2CAP_SERVTYPE_GUARANTEED:
return "Guaranteed";
default:
return "Reserved";
printf(")");
}
+static void conf_efs(void *ptr)
+{
+ uint8_t id, ser_type;
+ uint16_t max_sdu;
+ uint32_t sdu_itime, access_lat, flush_to;
+
+ id = get_val(ptr, sizeof(id));
+ ser_type = get_val(ptr + 1, sizeof(ser_type));
+ max_sdu = get_val(ptr + 2, sizeof(max_sdu));
+ sdu_itime = get_val(ptr + 4, sizeof(sdu_itime));
+ access_lat = get_val(ptr + 8, sizeof(access_lat));
+ flush_to = get_val(ptr + 12, sizeof(flush_to));
+
+ printf("EFS (Id 0x%02x, SerType %s, MaxSDU 0x%04x, SDUitime 0x%08x, "
+ "AccLat 0x%08x, FlushTO 0x%08x)",
+ id, type2str(ser_type), max_sdu, sdu_itime,
+ access_lat, flush_to);
+}
+
static void conf_fcs(void *ptr, int len)
{
uint8_t fcs;
static void conf_opt(int level, void *ptr, int len, int in, uint16_t cid)
{
+ int indent = 0;
p_indent(level, 0);
while (len > 0) {
l2cap_conf_opt *h = ptr;
if (h->type & 0x80)
printf("[");
+ if (indent++) {
+ printf("\n");
+ p_indent(level, 0);
+ }
+
switch (h->type & 0x7f) {
case L2CAP_CONF_MTU:
set_mode(in, cid, 0x00);
conf_fcs(h->val, h->len);
break;
+ case L2CAP_CONF_EFS:
+ conf_efs(h->val);
+ break;
+
default:
printf("Unknown (type %2.2x, len %d)", h->type & 0x7f, h->len);
break;
case L2CAP_CONF_FCS:
printf("FCS ");
break;
+ case L2CAP_CONF_EFS:
+ printf("EFS ");
+ break;
default:
printf("%2.2x ", list[i] & 0x7f);
break;