Diff between cedace72c3f71d356fc1895787569c7412ee94b2 and 54601cbcf283468ecb867d3db14ddbd1badbe858

Changed Files

File Additions Deletions Status
lib/l2cap.h +2 -0 modified
tools/l2test.c +21 -1 modified

Full Patch

diff --git a/lib/l2cap.h b/lib/l2cap.h
index 9197800..62cc04b 100644
--- a/lib/l2cap.h
+++ b/lib/l2cap.h
@@ -184,6 +184,8 @@ typedef struct {
 #define L2CAP_MODE_FLOWCTL	0x02
 #define L2CAP_MODE_ERTM		0x03
 #define L2CAP_MODE_STREAMING	0x04
+#define L2CAP_MODE_LE_FLOWCTL	0x80
+#define L2CAP_MODE_ECRED		0x81
 
 #define L2CAP_SERVTYPE_NOTRAFFIC	0x00
 #define L2CAP_SERVTYPE_BESTEFFORT	0x01
diff --git a/tools/l2test.c b/tools/l2test.c
index 232247b..011a68c 100644
--- a/tools/l2test.c
+++ b/tools/l2test.c
@@ -155,6 +155,24 @@ static struct lookup_table bdaddr_types[] = {
 	{ NULL,		0			},
 };
 
+static int bt_mode_to_l2cap_mode(int mode)
+{
+	switch (mode) {
+	case BT_MODE_BASIC:
+		return L2CAP_MODE_BASIC;
+	case BT_MODE_ERTM:
+		return L2CAP_MODE_ERTM;
+	case BT_MODE_STREAMING:
+		return L2CAP_MODE_STREAMING;
+	case BT_MODE_LE_FLOWCTL:
+		return L2CAP_MODE_LE_FLOWCTL;
+	case BT_MODE_EXT_FLOWCTL:
+		return L2CAP_MODE_FLOWCTL;
+	default:
+		return mode;
+	}
+}
+
 static int get_lookup_flag(struct lookup_table *table, char *name)
 {
 	int i;
@@ -287,9 +305,11 @@ static int getopts(int sk, struct l2cap_options *opts, bool connected)
 
 static int setopts(int sk, struct l2cap_options *opts)
 {
-	if (bdaddr_type == BDADDR_BREDR)
+	if (bdaddr_type == BDADDR_BREDR) {
+		opts->mode = bt_mode_to_l2cap_mode(opts->mode);
 		return setsockopt(sk, SOL_L2CAP, L2CAP_OPTIONS, opts,
 								sizeof(*opts));
+	}
 
 	if (opts->mode) {
 		if (setsockopt(sk, SOL_BLUETOOTH, BT_MODE, &opts->mode,