forked from mirrors/linux
		
	Bluetooth: Add BT_DEFER_SETUP option to sco socket
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>
This commit is contained in:
		
							parent
							
								
									b9b5ef188e
								
							
						
					
					
						commit
						b96e9c671b
					
				
					 1 changed files with 32 additions and 0 deletions
				
			
		|  | @ -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; | ||||
|  | @ -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; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Frédéric Dalleau
						Frédéric Dalleau