diff options
Diffstat (limited to 'net/socket.c')
| -rw-r--r-- | net/socket.c | 38 | 
1 files changed, 22 insertions, 16 deletions
diff --git a/net/socket.c b/net/socket.c index 2877647f347..e56162cd65b 100644 --- a/net/socket.c +++ b/net/socket.c @@ -538,6 +538,8 @@ int sock_tx_timestamp(struct sock *sk, __u8 *tx_flags)  		*tx_flags |= SKBTX_HW_TSTAMP;  	if (sock_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE))  		*tx_flags |= SKBTX_SW_TSTAMP; +	if (sock_flag(sk, SOCK_WIFI_STATUS)) +		*tx_flags |= SKBTX_WIFI_STATUS;  	return 0;  }  EXPORT_SYMBOL(sock_tx_timestamp); @@ -549,6 +551,8 @@ static inline int __sock_sendmsg_nosec(struct kiocb *iocb, struct socket *sock,  	sock_update_classid(sock->sk); +	sock_update_netprioidx(sock->sk); +  	si->sock = sock;  	si->scm = NULL;  	si->msg = msg; @@ -674,6 +678,22 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,  }  EXPORT_SYMBOL_GPL(__sock_recv_timestamp); +void __sock_recv_wifi_status(struct msghdr *msg, struct sock *sk, +	struct sk_buff *skb) +{ +	int ack; + +	if (!sock_flag(sk, SOCK_WIFI_STATUS)) +		return; +	if (!skb->wifi_acked_valid) +		return; + +	ack = skb->wifi_acked; + +	put_cmsg(msg, SOL_SOCKET, SCM_WIFI_STATUS, sizeof(ack), &ack); +} +EXPORT_SYMBOL_GPL(__sock_recv_wifi_status); +  static inline void sock_recv_drops(struct msghdr *msg, struct sock *sk,  				   struct sk_buff *skb)  { @@ -2738,10 +2758,10 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32)  	case ETHTOOL_GRXRINGS:  	case ETHTOOL_GRXCLSRLCNT:  	case ETHTOOL_GRXCLSRULE: +	case ETHTOOL_SRXCLSRLINS:  		convert_out = true;  		/* fall through */  	case ETHTOOL_SRXCLSRLDEL: -	case ETHTOOL_SRXCLSRLINS:  		buf_size += sizeof(struct ethtool_rxnfc);  		convert_in = true;  		break; @@ -2883,7 +2903,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd,  		return dev_ioctl(net, cmd, uifr);  	default: -		return -EINVAL; +		return -ENOIOCTLCMD;  	}  } @@ -3210,20 +3230,6 @@ static int compat_sock_ioctl_trans(struct file *file, struct socket *sock,  		return sock_do_ioctl(net, sock, cmd, arg);  	} -	/* Prevent warning from compat_sys_ioctl, these always -	 * result in -EINVAL in the native case anyway. */ -	switch (cmd) { -	case SIOCRTMSG: -	case SIOCGIFCOUNT: -	case SIOCSRARP: -	case SIOCGRARP: -	case SIOCDRARP: -	case SIOCSIFLINK: -	case SIOCGIFSLAVE: -	case SIOCSIFSLAVE: -		return -EINVAL; -	} -  	return -ENOIOCTLCMD;  }  |