diff options
Diffstat (limited to 'net/caif/caif_socket.c')
| -rw-r--r-- | net/caif/caif_socket.c | 45 | 
1 files changed, 15 insertions, 30 deletions
diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c index 2eca2dd0000..1bf0cf50379 100644 --- a/net/caif/caif_socket.c +++ b/net/caif/caif_socket.c @@ -716,8 +716,7 @@ static int setsockopt(struct socket *sock,  {  	struct sock *sk = sock->sk;  	struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); -	int prio, linksel; -	struct ifreq ifreq; +	int linksel;  	if (cf_sk->sk.sk_socket->state != SS_UNCONNECTED)  		return -ENOPROTOOPT; @@ -735,33 +734,6 @@ static int setsockopt(struct socket *sock,  		release_sock(&cf_sk->sk);  		return 0; -	case SO_PRIORITY: -		if (lvl != SOL_SOCKET) -			goto bad_sol; -		if (ol < sizeof(int)) -			return -EINVAL; -		if (copy_from_user(&prio, ov, sizeof(int))) -			return -EINVAL; -		lock_sock(&(cf_sk->sk)); -		cf_sk->conn_req.priority = prio; -		release_sock(&cf_sk->sk); -		return 0; - -	case SO_BINDTODEVICE: -		if (lvl != SOL_SOCKET) -			goto bad_sol; -		if (ol < sizeof(struct ifreq)) -			return -EINVAL; -		if (copy_from_user(&ifreq, ov, sizeof(ifreq))) -			return -EFAULT; -		lock_sock(&(cf_sk->sk)); -		strncpy(cf_sk->conn_req.link_name, ifreq.ifr_name, -			sizeof(cf_sk->conn_req.link_name)); -		cf_sk->conn_req.link_name -			[sizeof(cf_sk->conn_req.link_name)-1] = 0; -		release_sock(&cf_sk->sk); -		return 0; -  	case CAIFSO_REQ_PARAM:  		if (lvl != SOL_CAIF)  			goto bad_sol; @@ -880,6 +852,18 @@ static int caif_connect(struct socket *sock, struct sockaddr *uaddr,  	sock->state = SS_CONNECTING;  	sk->sk_state = CAIF_CONNECTING; +	/* Check priority value comming from socket */ +	/* if priority value is out of range it will be ajusted */ +	if (cf_sk->sk.sk_priority > CAIF_PRIO_MAX) +		cf_sk->conn_req.priority = CAIF_PRIO_MAX; +	else if (cf_sk->sk.sk_priority < CAIF_PRIO_MIN) +		cf_sk->conn_req.priority = CAIF_PRIO_MIN; +	else +		cf_sk->conn_req.priority = cf_sk->sk.sk_priority; + +	/*ifindex = id of the interface.*/ +	cf_sk->conn_req.ifindex = cf_sk->sk.sk_bound_dev_if; +  	dbfs_atomic_inc(&cnt.num_connect_req);  	cf_sk->layer.receive = caif_sktrecv_cb;  	err = caif_connect_client(&cf_sk->conn_req, @@ -905,6 +889,7 @@ static int caif_connect(struct socket *sock, struct sockaddr *uaddr,  	cf_sk->maxframe = mtu - (headroom + tailroom);  	if (cf_sk->maxframe < 1) {  		pr_warn("CAIF Interface MTU too small (%d)\n", dev->mtu); +		err = -ENODEV;  		goto out;  	} @@ -1142,7 +1127,7 @@ static int caif_create(struct net *net, struct socket *sock, int protocol,  	set_rx_flow_on(cf_sk);  	/* Set default options on configuration */ -	cf_sk->conn_req.priority = CAIF_PRIO_NORMAL; +	cf_sk->sk.sk_priority= CAIF_PRIO_NORMAL;  	cf_sk->conn_req.link_selector = CAIF_LINK_LOW_LATENCY;  	cf_sk->conn_req.protocol = protocol;  	/* Increase the number of sockets created. */  |