mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ip: IP cmsg cleanup
Move the IP_CMSG_* constants from ip_sockglue.c to inet_sock.h so that they can be referenced in other source files. Restructure ip_cmsg_recv to not go through flags using shift, check for flags by 'and'. This eliminates both the shift and a conditional per flag check. Signed-off-by: Tom Herbert <therbert@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									224d019c4f
								
							
						
					
					
						commit
						c44d13d6f3
					
				
					 2 changed files with 47 additions and 28 deletions
				
			
		| 
						 | 
				
			
			@ -16,7 +16,7 @@
 | 
			
		|||
#ifndef _INET_SOCK_H
 | 
			
		||||
#define _INET_SOCK_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <linux/bitops.h>
 | 
			
		||||
#include <linux/kmemcheck.h>
 | 
			
		||||
#include <linux/string.h>
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -195,6 +195,15 @@ struct inet_sock {
 | 
			
		|||
#define IPCORK_OPT	1	/* ip-options has been held in ipcork.opt */
 | 
			
		||||
#define IPCORK_ALLFRAG	2	/* always fragment (for ipv6 for now) */
 | 
			
		||||
 | 
			
		||||
/* cmsg flags for inet */
 | 
			
		||||
#define IP_CMSG_PKTINFO		BIT(0)
 | 
			
		||||
#define IP_CMSG_TTL		BIT(1)
 | 
			
		||||
#define IP_CMSG_TOS		BIT(2)
 | 
			
		||||
#define IP_CMSG_RECVOPTS	BIT(3)
 | 
			
		||||
#define IP_CMSG_RETOPTS		BIT(4)
 | 
			
		||||
#define IP_CMSG_PASSSEC		BIT(5)
 | 
			
		||||
#define IP_CMSG_ORIGDSTADDR	BIT(6)
 | 
			
		||||
 | 
			
		||||
static inline struct inet_sock *inet_sk(const struct sock *sk)
 | 
			
		||||
{
 | 
			
		||||
	return (struct inet_sock *)sk;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,14 +45,6 @@
 | 
			
		|||
#include <linux/errqueue.h>
 | 
			
		||||
#include <asm/uaccess.h>
 | 
			
		||||
 | 
			
		||||
#define IP_CMSG_PKTINFO		1
 | 
			
		||||
#define IP_CMSG_TTL		2
 | 
			
		||||
#define IP_CMSG_TOS		4
 | 
			
		||||
#define IP_CMSG_RECVOPTS	8
 | 
			
		||||
#define IP_CMSG_RETOPTS		16
 | 
			
		||||
#define IP_CMSG_PASSSEC		32
 | 
			
		||||
#define IP_CMSG_ORIGDSTADDR     64
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	SOL_IP control messages.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -150,37 +142,55 @@ void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb)
 | 
			
		|||
	unsigned int flags = inet->cmsg_flags;
 | 
			
		||||
 | 
			
		||||
	/* Ordered by supposed usage frequency */
 | 
			
		||||
	if (flags & 1)
 | 
			
		||||
	if (flags & IP_CMSG_PKTINFO) {
 | 
			
		||||
		ip_cmsg_recv_pktinfo(msg, skb);
 | 
			
		||||
	if ((flags >>= 1) == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (flags & 1)
 | 
			
		||||
		flags &= ~IP_CMSG_PKTINFO;
 | 
			
		||||
		if (!flags)
 | 
			
		||||
			return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (flags & IP_CMSG_TTL) {
 | 
			
		||||
		ip_cmsg_recv_ttl(msg, skb);
 | 
			
		||||
	if ((flags >>= 1) == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (flags & 1)
 | 
			
		||||
		flags &= ~IP_CMSG_TTL;
 | 
			
		||||
		if (!flags)
 | 
			
		||||
			return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (flags & IP_CMSG_TOS) {
 | 
			
		||||
		ip_cmsg_recv_tos(msg, skb);
 | 
			
		||||
	if ((flags >>= 1) == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (flags & 1)
 | 
			
		||||
		flags &= ~IP_CMSG_TOS;
 | 
			
		||||
		if (!flags)
 | 
			
		||||
			return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (flags & IP_CMSG_RECVOPTS) {
 | 
			
		||||
		ip_cmsg_recv_opts(msg, skb);
 | 
			
		||||
	if ((flags >>= 1) == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (flags & 1)
 | 
			
		||||
		flags &= ~IP_CMSG_RECVOPTS;
 | 
			
		||||
		if (!flags)
 | 
			
		||||
			return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (flags & IP_CMSG_RETOPTS) {
 | 
			
		||||
		ip_cmsg_recv_retopts(msg, skb);
 | 
			
		||||
	if ((flags >>= 1) == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (flags & 1)
 | 
			
		||||
		flags &= ~IP_CMSG_RETOPTS;
 | 
			
		||||
		if (!flags)
 | 
			
		||||
			return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (flags & IP_CMSG_PASSSEC) {
 | 
			
		||||
		ip_cmsg_recv_security(msg, skb);
 | 
			
		||||
 | 
			
		||||
	if ((flags >>= 1) == 0)
 | 
			
		||||
		flags &= ~IP_CMSG_PASSSEC;
 | 
			
		||||
		if (!flags)
 | 
			
		||||
			return;
 | 
			
		||||
	if (flags & 1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (flags & IP_CMSG_ORIGDSTADDR)
 | 
			
		||||
		ip_cmsg_recv_dstaddr(msg, skb);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue