Return-Path: Subject: Re: [PATCH] Add support to hcidump for parsing Enhanced L2CAP configuration options From: Marcel Holtmann To: ngh@isomerica.net Cc: linux-bluetooth@vger.kernel.org In-Reply-To: <1240930749.3441.5873.camel@localhost.localdomain> References: <1240930749.3441.5873.camel@localhost.localdomain> Content-Type: text/plain Date: Tue, 28 Apr 2009 08:17:51 -0700 Message-Id: <1240931871.997.15.camel@localhost.localdomain> Mime-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hi Nathan, > This allows hcidump to parse the FCS and other options that are used to > negotiate an Enhanced Retransmission or Streaming mode L2CAP connection. > > I've add an #indef L2CAP_CONF_FCS to the top of the code which mirrors > a change under the kernel headers to allow building on systems without > the modified kernel headers. this needs to be submitted against libbluetooth. I just added that value to it. > --- > l2cap.c | 19 ++++++++++++++++++- > 1 file changed, 18 insertions(+), 1 deletion(-) > > diff --git a/parser/l2cap.c b/parser/l2cap.c > index a906f42..64839f5 100644 > --- a/parser/l2cap.c > +++ b/parser/l2cap.c > @@ -65,6 +65,10 @@ static cid_info cid_table[2][CID_TABLE_SIZE]; > #define SCID cid_table[0] > #define DCID cid_table[1] > > +#ifndef L2CAP_CONF_FCS > +#define L2CAP_CONF_FCS 0x05 > +#endif > + > static struct frame *add_handle(uint16_t handle) > { > register handle_info *t = handle_table; > @@ -306,6 +310,10 @@ static char *mode2str(uint8_t mode) > return "Retransmission"; > case 0x02: > return "Flow control"; > + case 0x03: > + return "Enhanced Retransmission"; > + case 0x04: > + return "Streaming"; > default: > return "Reserved"; > } > @@ -428,7 +436,7 @@ static void conf_rfc(void *ptr, int len, int in, > uint16_t cid) > set_mode(in, cid, mode); > > printf("RFC 0x%02x (%s", mode, mode2str(mode)); > - if (mode == 0x01 || mode == 0x02) { > + if (mode >= 0x01 && mode <= 0x08) { > uint8_t txwin, maxtrans; > uint16_t rto, mto, mps; > txwin = *((uint8_t *) (ptr + 1)); > @@ -478,6 +486,12 @@ 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: > + printf("FCS Option"); > + if (h->len > 0); > + printf(" 0x%x", get_val(h->val, h->len)); > + break; > + > default: > printf("Unknown (type %2.2x, len %d)", h->type & 0x7f, h->len); > break; > @@ -510,6 +524,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 Option"); > + break; please add proper parsing of FCS Option here. And of course if has to have an extra " " at the end. Regards Marcel