Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e898d4db authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki
Browse files

[UDP]: Allow users to configure UDP-Lite.



Let's give users an option for disabling UDP-Lite (~4K).

old:
|    text	   data	    bss	    dec	    hex	filename
|  286498	  12432	   6072	 305002	  4a76a	net/ipv4/built-in.o
|  193830	   8192	   3204	 205226	  321aa	net/ipv6/ipv6.o

new (without UDP-Lite):
|    text	   data	    bss	    dec	    hex	filename
|  284086	  12136	   5432	 301654	  49a56	net/ipv4/built-in.o
|  191835	   7832	   3076	 202743	  317f7	net/ipv6/ipv6.o

Signed-off-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
parent c6aefafb
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -70,8 +70,10 @@ struct udp_sock {
#define UDPLITE_BIT      0x1  		/* set by udplite proto init function */
#define UDPLITE_SEND_CC  0x2  		/* set via udplite setsockopt         */
#define UDPLITE_RECV_CC  0x4		/* set via udplite setsocktopt        */
#ifdef CONFIG_IP_UDPLITE
	__u8		 pcflag;        /* marks socket as UDP-Lite if > 0    */
	__u8		 unused[3];
#endif
	/*
	 * For encapsulation sockets.
	 */
@@ -82,7 +84,16 @@ static inline struct udp_sock *udp_sk(const struct sock *sk)
{
	return (struct udp_sock *)sk;
}

#ifdef CONFIG_IP_UDPLITE
#define IS_UDPLITE(__sk) (udp_sk(__sk)->pcflag)
#define IS_PROTO_UDPLITE(__proto) ((__proto) == IPPROTO_UDPLITE)
#define IS_SOL_UDPFAMILY(level) ((level) == SOL_UDP || (level) == SOL_UDPLITE)
#else
#define IS_UDPLITE(__sk) 0
#define IS_PROTO_UDPLITE(__proto) 0
#define IS_SOL_UDPFAMILY(level) ((level) == SOL_UDP)
#endif

#endif

+5 −0
Original line number Diff line number Diff line
@@ -603,8 +603,13 @@ extern int tcp6_proc_init(void);
extern void tcp6_proc_exit(void);
extern int  udp6_proc_init(void);
extern void udp6_proc_exit(void);
#ifdef CONFIG_IP_UDPLITE
extern int  udplite6_proc_init(void);
extern void udplite6_proc_exit(void);
#else
static inline int udplite6_proc_init(void) { return 0; }
static inline void udplite6_proc_exit(void) { }
#endif
extern int  ipv6_misc_proc_init(void);
extern void ipv6_misc_proc_exit(void);
extern int snmp6_register_dev(struct inet6_dev *idev);
+5 −0
Original line number Diff line number Diff line
@@ -27,8 +27,13 @@ extern int rawv6_init(void);
extern void				rawv6_exit(void);
extern int				udpv6_init(void);
extern void				udpv6_exit(void);
#ifdef CONFIG_IP_UDPLITE
extern int 				udplitev6_init(void);
extern void 				udplitev6_exit(void);
#else
static inline int udplitev6_init(void) { return 0; }
static inline void udplitev6_exit(void) { }
#endif
extern int				tcpv6_init(void);
extern void				tcpv6_exit(void);

+7 −2
Original line number Diff line number Diff line
@@ -25,7 +25,9 @@ static __inline__ int udplite_getfrag(void *from, char *to, int offset,
/* Designate sk as UDP-Lite socket */
static inline int udplite_sk_init(struct sock *sk)
{
#ifdef CONFIG_IP_UDPLITE
	udp_sk(sk)->pcflag = UDPLITE_BIT;
#endif
	return 0;
}

@@ -69,7 +71,7 @@ static inline int udplite_checksum_init(struct sk_buff *skb, struct udphdr *uh)
static inline int udplite_sender_cscov(struct udp_sock *up, struct udphdr *uh)
{
	int cscov = up->len;

#ifdef CONFIG_IP_UDPLITE
	/*
	 * Sender has set `partial coverage' option on UDP-Lite socket
	 */
@@ -93,13 +95,15 @@ static inline int udplite_sender_cscov(struct udp_sock *up, struct udphdr *uh)
	 *       illegal, we fall back to the defaults here.
	 */
	}
#endif
	return cscov;
}

static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb)
{
	int cscov = udplite_sender_cscov(udp_sk(sk), udp_hdr(skb));
	__wsum csum = 0;
#ifdef CONFIG_IP_UDPLITE
	int cscov = udplite_sender_cscov(udp_sk(sk), udp_hdr(skb));

	skb->ip_summed = CHECKSUM_NONE;     /* no HW support for checksumming */

@@ -112,6 +116,7 @@ static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb)
		if ((cscov -= len) <= 0)
			break;
	}
#endif
	return csum;
}

+10 −0
Original line number Diff line number Diff line
@@ -632,5 +632,15 @@ config TCP_MD5SIG

	  If unsure, say N.

config IP_UDPLITE
	bool "IP: UDP-Lite Protocol (RFC 3828)"
	default n
	---help---
	  UDP-Lite (RFC 3828) is a UDP-like protocol with variable-length
	  checksum.  Read <file:Documentation/networking/udplite.txt> for
	  details.

	  If unsure, say N.

source "net/ipv4/ipvs/Kconfig"
Loading