From 06e4d41372a9f005b05cc2f4a09924f18bf6f6d7 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Thu, 10 Jul 2008 09:38:39 +0000 Subject: Allow link mode settings for outgoing connections --- test/l2test.c | 8 ++++++++ test/rctest.c | 33 ++++++++++++++++++++++----------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/test/l2test.c b/test/l2test.c index a6ff75fa..bc57d6b6 100644 --- a/test/l2test.c +++ b/test/l2test.c @@ -251,6 +251,14 @@ static int do_connect(char *svr) opt = 0; if (reliable) opt |= L2CAP_LM_RELIABLE; + if (master) + opt |= L2CAP_LM_MASTER; + if (auth) + opt |= L2CAP_LM_AUTH; + if (encrypt) + opt |= L2CAP_LM_ENCRYPT; + if (secure) + opt |= L2CAP_LM_SECURE; if (setsockopt(sk, SOL_L2CAP, L2CAP_LM, &opt, sizeof(opt)) < 0) { syslog(LOG_ERR, "Can't set L2CAP link mode: %s (%d)", diff --git a/test/rctest.c b/test/rctest.c index 612855f3..2da87f71 100644 --- a/test/rctest.c +++ b/test/rctest.c @@ -92,7 +92,7 @@ static int do_connect(char *svr) struct sockaddr_rc addr; struct rfcomm_conninfo conn; socklen_t optlen; - int sk; + int sk, opt; /* Create socket */ sk = socket(PF_BLUETOOTH, socktype, BTPROTO_RFCOMM); @@ -102,6 +102,17 @@ static int do_connect(char *svr) return -1; } + /* Bind to local address */ + memset(&addr, 0, sizeof(addr)); + addr.rc_family = AF_BLUETOOTH; + bacpy(&addr.rc_bdaddr, &bdaddr); + + if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + syslog(LOG_ERR, "Can't bind socket: %s (%d)", + strerror(errno), errno); + goto error; + } + #if 0 /* Enable SO_TIMESTAMP */ if (timestamp) { @@ -126,16 +137,16 @@ static int do_connect(char *svr) } } - /* Bind to local address */ - memset(&addr, 0, sizeof(addr)); - addr.rc_family = AF_BLUETOOTH; - bacpy(&addr.rc_bdaddr, &bdaddr); - - if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - syslog(LOG_ERR, "Can't bind socket: %s (%d)", - strerror(errno), errno); - goto error; - } + /* Set link mode */ + opt = 0; + if (master) + opt |= RFCOMM_LM_MASTER; + if (auth) + opt |= RFCOMM_LM_AUTH; + if (encrypt) + opt |= RFCOMM_LM_ENCRYPT; + if (secure) + opt |= RFCOMM_LM_SECURE; /* Connect to remote device */ memset(&addr, 0, sizeof(addr)); -- cgit