Skip to content

Commit

Permalink
Bluetooth: Add BT_DEFER_SETUP option to sco socket
Browse files Browse the repository at this point in the history
This option will set the BT_SK_DEFER_SETUP bit in socket flags.

Signed-off-by: Frédéric Dalleau <frederic.dalleau@linux.intel.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
  • Loading branch information
Frédéric Dalleau authored and Gustavo Padovan committed Dec 3, 2012
1 parent b9b5ef1 commit b96e9c6
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions net/bluetooth/sco.c
Original file line number Diff line number Diff line change
Expand Up @@ -666,12 +666,31 @@ static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char
{
struct sock *sk = sock->sk;
int err = 0;
u32 opt;

BT_DBG("sk %p", sk);

lock_sock(sk);

switch (optname) {

case BT_DEFER_SETUP:
if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
err = -EINVAL;
break;
}

if (get_user(opt, (u32 __user *) optval)) {
err = -EFAULT;
break;
}

if (opt)
set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
else
clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
break;

default:
err = -ENOPROTOOPT;
break;
Expand Down Expand Up @@ -753,6 +772,19 @@ static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char
lock_sock(sk);

switch (optname) {

case BT_DEFER_SETUP:
if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
err = -EINVAL;
break;
}

if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
(u32 __user *) optval))
err = -EFAULT;

break;

default:
err = -ENOPROTOOPT;
break;
Expand Down

0 comments on commit b96e9c6

Please sign in to comment.