[UDP]: Revert udplite and code split.
This reverts commitdb1ed684f6
("[IPV6] UDP: Rename IPv6 UDP files."), commit8be8af8fa4
("[IPV4] UDP: Move IPv4-specific bits to other file.") and commite898d4db27
("[UDP]: Allow users to configure UDP-Lite."). First, udplite is of such small cost, and it is a core protocol just like TCP and normal UDP are. We spent enormous amounts of effort to make udplite share as much code with core UDP as possible. All of that work is less valuable if we're just going to slap a config option on udplite support. It is also causing build failures, as reported on linux-next, showing that the changeset was not tested very well. In fact, this is the second build failure resulting from the udplite change. Finally, the config options provided was a bool, instead of a modular option. Meaning the udplite code does not even get build tested by allmodconfig builds, and furthermore the user is not presented with a reasonable modular build option which is particularly needed by distribution vendors. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ba0fa45994
commit
db8dac20d5
@ -70,10 +70,8 @@ struct udp_sock {
|
|||||||
#define UDPLITE_BIT 0x1 /* set by udplite proto init function */
|
#define UDPLITE_BIT 0x1 /* set by udplite proto init function */
|
||||||
#define UDPLITE_SEND_CC 0x2 /* set via udplite setsockopt */
|
#define UDPLITE_SEND_CC 0x2 /* set via udplite setsockopt */
|
||||||
#define UDPLITE_RECV_CC 0x4 /* set via udplite setsocktopt */
|
#define UDPLITE_RECV_CC 0x4 /* set via udplite setsocktopt */
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
__u8 pcflag; /* marks socket as UDP-Lite if > 0 */
|
__u8 pcflag; /* marks socket as UDP-Lite if > 0 */
|
||||||
__u8 unused[3];
|
__u8 unused[3];
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
* For encapsulation sockets.
|
* For encapsulation sockets.
|
||||||
*/
|
*/
|
||||||
@ -85,15 +83,7 @@ static inline struct udp_sock *udp_sk(const struct sock *sk)
|
|||||||
return (struct udp_sock *)sk;
|
return (struct udp_sock *)sk;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
#define IS_UDPLITE(__sk) (udp_sk(__sk)->pcflag)
|
#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
|
#endif
|
||||||
|
|
||||||
|
@ -599,13 +599,8 @@ extern int tcp6_proc_init(void);
|
|||||||
extern void tcp6_proc_exit(void);
|
extern void tcp6_proc_exit(void);
|
||||||
extern int udp6_proc_init(void);
|
extern int udp6_proc_init(void);
|
||||||
extern void udp6_proc_exit(void);
|
extern void udp6_proc_exit(void);
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
extern int udplite6_proc_init(void);
|
extern int udplite6_proc_init(void);
|
||||||
extern void udplite6_proc_exit(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 int ipv6_misc_proc_init(void);
|
||||||
extern void ipv6_misc_proc_exit(void);
|
extern void ipv6_misc_proc_exit(void);
|
||||||
extern int snmp6_register_dev(struct inet6_dev *idev);
|
extern int snmp6_register_dev(struct inet6_dev *idev);
|
||||||
|
@ -27,13 +27,8 @@ extern int rawv6_init(void);
|
|||||||
extern void rawv6_exit(void);
|
extern void rawv6_exit(void);
|
||||||
extern int udpv6_init(void);
|
extern int udpv6_init(void);
|
||||||
extern void udpv6_exit(void);
|
extern void udpv6_exit(void);
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
extern int udplitev6_init(void);
|
extern int udplitev6_init(void);
|
||||||
extern void udplitev6_exit(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 int tcpv6_init(void);
|
||||||
extern void tcpv6_exit(void);
|
extern void tcpv6_exit(void);
|
||||||
|
|
||||||
|
@ -25,9 +25,7 @@ static __inline__ int udplite_getfrag(void *from, char *to, int offset,
|
|||||||
/* Designate sk as UDP-Lite socket */
|
/* Designate sk as UDP-Lite socket */
|
||||||
static inline int udplite_sk_init(struct sock *sk)
|
static inline int udplite_sk_init(struct sock *sk)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
udp_sk(sk)->pcflag = UDPLITE_BIT;
|
udp_sk(sk)->pcflag = UDPLITE_BIT;
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +69,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)
|
static inline int udplite_sender_cscov(struct udp_sock *up, struct udphdr *uh)
|
||||||
{
|
{
|
||||||
int cscov = up->len;
|
int cscov = up->len;
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
/*
|
/*
|
||||||
* Sender has set `partial coverage' option on UDP-Lite socket
|
* Sender has set `partial coverage' option on UDP-Lite socket
|
||||||
*/
|
*/
|
||||||
@ -95,15 +93,13 @@ static inline int udplite_sender_cscov(struct udp_sock *up, struct udphdr *uh)
|
|||||||
* illegal, we fall back to the defaults here.
|
* illegal, we fall back to the defaults here.
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return cscov;
|
return cscov;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb)
|
static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
__wsum csum = 0;
|
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
int cscov = udplite_sender_cscov(udp_sk(sk), udp_hdr(skb));
|
int cscov = udplite_sender_cscov(udp_sk(sk), udp_hdr(skb));
|
||||||
|
__wsum csum = 0;
|
||||||
|
|
||||||
skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */
|
skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */
|
||||||
|
|
||||||
@ -116,7 +112,6 @@ static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb)
|
|||||||
if ((cscov -= len) <= 0)
|
if ((cscov -= len) <= 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return csum;
|
return csum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -632,15 +632,5 @@ config TCP_MD5SIG
|
|||||||
|
|
||||||
If unsure, say N.
|
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"
|
source "net/ipv4/ipvs/Kconfig"
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ obj-y := route.o inetpeer.o protocol.o \
|
|||||||
inet_timewait_sock.o inet_connection_sock.o \
|
inet_timewait_sock.o inet_connection_sock.o \
|
||||||
tcp.o tcp_input.o tcp_output.o tcp_timer.o tcp_ipv4.o \
|
tcp.o tcp_input.o tcp_output.o tcp_timer.o tcp_ipv4.o \
|
||||||
tcp_minisocks.o tcp_cong.o \
|
tcp_minisocks.o tcp_cong.o \
|
||||||
datagram.o raw.o udp.o udp_ipv4.o \
|
datagram.o raw.o udp.o udplite.o \
|
||||||
arp.o icmp.o devinet.o af_inet.o igmp.o \
|
arp.o icmp.o devinet.o af_inet.o igmp.o \
|
||||||
fib_frontend.o fib_semantics.o \
|
fib_frontend.o fib_semantics.o \
|
||||||
inet_fragment.o
|
inet_fragment.o
|
||||||
@ -49,7 +49,6 @@ obj-$(CONFIG_TCP_CONG_SCALABLE) += tcp_scalable.o
|
|||||||
obj-$(CONFIG_TCP_CONG_LP) += tcp_lp.o
|
obj-$(CONFIG_TCP_CONG_LP) += tcp_lp.o
|
||||||
obj-$(CONFIG_TCP_CONG_YEAH) += tcp_yeah.o
|
obj-$(CONFIG_TCP_CONG_YEAH) += tcp_yeah.o
|
||||||
obj-$(CONFIG_TCP_CONG_ILLINOIS) += tcp_illinois.o
|
obj-$(CONFIG_TCP_CONG_ILLINOIS) += tcp_illinois.o
|
||||||
obj-$(CONFIG_IP_UDPLITE) += udplite_ipv4.o
|
|
||||||
obj-$(CONFIG_NETLABEL) += cipso_ipv4.o
|
obj-$(CONFIG_NETLABEL) += cipso_ipv4.o
|
||||||
|
|
||||||
obj-$(CONFIG_XFRM) += xfrm4_policy.o xfrm4_state.o xfrm4_input.o \
|
obj-$(CONFIG_XFRM) += xfrm4_policy.o xfrm4_state.o xfrm4_input.o \
|
||||||
|
@ -1317,18 +1317,15 @@ static int __init init_ipv4_mibs(void)
|
|||||||
if (snmp_mib_init((void **)udp_statistics,
|
if (snmp_mib_init((void **)udp_statistics,
|
||||||
sizeof(struct udp_mib)) < 0)
|
sizeof(struct udp_mib)) < 0)
|
||||||
goto err_udp_mib;
|
goto err_udp_mib;
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
if (snmp_mib_init((void **)udplite_statistics,
|
if (snmp_mib_init((void **)udplite_statistics,
|
||||||
sizeof(struct udp_mib)) < 0)
|
sizeof(struct udp_mib)) < 0)
|
||||||
goto err_udplite_mib;
|
goto err_udplite_mib;
|
||||||
#endif
|
|
||||||
tcp_mib_init();
|
tcp_mib_init();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
err_udplite_mib:
|
err_udplite_mib:
|
||||||
#endif
|
|
||||||
snmp_mib_free((void **)udp_statistics);
|
snmp_mib_free((void **)udp_statistics);
|
||||||
err_udp_mib:
|
err_udp_mib:
|
||||||
snmp_mib_free((void **)tcp_statistics);
|
snmp_mib_free((void **)tcp_statistics);
|
||||||
@ -1426,10 +1423,8 @@ static int __init inet_init(void)
|
|||||||
/* Setup UDP memory threshold */
|
/* Setup UDP memory threshold */
|
||||||
udp_init();
|
udp_init();
|
||||||
|
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
/* Add UDP-Lite (RFC 3828) */
|
/* Add UDP-Lite (RFC 3828) */
|
||||||
udplite4_register();
|
udplite4_register();
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the ICMP layer up
|
* Set the ICMP layer up
|
||||||
|
@ -59,9 +59,7 @@ static int sockstat_seq_show(struct seq_file *seq, void *v)
|
|||||||
atomic_read(&tcp_memory_allocated));
|
atomic_read(&tcp_memory_allocated));
|
||||||
seq_printf(seq, "UDP: inuse %d mem %d\n", sock_prot_inuse_get(&udp_prot),
|
seq_printf(seq, "UDP: inuse %d mem %d\n", sock_prot_inuse_get(&udp_prot),
|
||||||
atomic_read(&udp_memory_allocated));
|
atomic_read(&udp_memory_allocated));
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
seq_printf(seq, "UDPLITE: inuse %d\n", sock_prot_inuse_get(&udplite_prot));
|
seq_printf(seq, "UDPLITE: inuse %d\n", sock_prot_inuse_get(&udplite_prot));
|
||||||
#endif
|
|
||||||
seq_printf(seq, "RAW: inuse %d\n", sock_prot_inuse_get(&raw_prot));
|
seq_printf(seq, "RAW: inuse %d\n", sock_prot_inuse_get(&raw_prot));
|
||||||
seq_printf(seq, "FRAG: inuse %d memory %d\n",
|
seq_printf(seq, "FRAG: inuse %d memory %d\n",
|
||||||
ip_frag_nqueues(&init_net), ip_frag_mem(&init_net));
|
ip_frag_nqueues(&init_net), ip_frag_mem(&init_net));
|
||||||
@ -351,7 +349,6 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
|
|||||||
snmp_fold_field((void **)udp_statistics,
|
snmp_fold_field((void **)udp_statistics,
|
||||||
snmp4_udp_list[i].entry));
|
snmp4_udp_list[i].entry));
|
||||||
|
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
/* the UDP and UDP-Lite MIBs are the same */
|
/* the UDP and UDP-Lite MIBs are the same */
|
||||||
seq_puts(seq, "\nUdpLite:");
|
seq_puts(seq, "\nUdpLite:");
|
||||||
for (i = 0; snmp4_udp_list[i].name != NULL; i++)
|
for (i = 0; snmp4_udp_list[i].name != NULL; i++)
|
||||||
@ -362,7 +359,7 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
|
|||||||
seq_printf(seq, " %lu",
|
seq_printf(seq, " %lu",
|
||||||
snmp_fold_field((void **)udplite_statistics,
|
snmp_fold_field((void **)udplite_statistics,
|
||||||
snmp4_udp_list[i].entry));
|
snmp4_udp_list[i].entry));
|
||||||
#endif
|
|
||||||
seq_putc(seq, '\n');
|
seq_putc(seq, '\n');
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
1090
net/ipv4/udp.c
1090
net/ipv4/udp.c
File diff suppressed because it is too large
Load Diff
1134
net/ipv4/udp_ipv4.c
1134
net/ipv4/udp_ipv4.c
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,7 @@ obj-$(CONFIG_IPV6) += ipv6.o
|
|||||||
|
|
||||||
ipv6-objs := af_inet6.o anycast.o ip6_output.o ip6_input.o addrconf.o \
|
ipv6-objs := af_inet6.o anycast.o ip6_output.o ip6_input.o addrconf.o \
|
||||||
addrlabel.o \
|
addrlabel.o \
|
||||||
route.o ip6_fib.o ipv6_sockglue.o ndisc.o udp_ipv6.o \
|
route.o ip6_fib.o ipv6_sockglue.o ndisc.o udp.o udplite.o \
|
||||||
raw.o protocol.o icmp.o mcast.o reassembly.o tcp_ipv6.o \
|
raw.o protocol.o icmp.o mcast.o reassembly.o tcp_ipv6.o \
|
||||||
exthdrs.o datagram.o ip6_flowlabel.o inet6_connection_sock.o
|
exthdrs.o datagram.o ip6_flowlabel.o inet6_connection_sock.o
|
||||||
|
|
||||||
@ -17,7 +17,6 @@ ipv6-$(CONFIG_NETFILTER) += netfilter.o
|
|||||||
ipv6-$(CONFIG_IPV6_MULTIPLE_TABLES) += fib6_rules.o
|
ipv6-$(CONFIG_IPV6_MULTIPLE_TABLES) += fib6_rules.o
|
||||||
ipv6-$(CONFIG_PROC_FS) += proc.o
|
ipv6-$(CONFIG_PROC_FS) += proc.o
|
||||||
ipv6-$(CONFIG_SYN_COOKIES) += syncookies.o
|
ipv6-$(CONFIG_SYN_COOKIES) += syncookies.o
|
||||||
ipv6-$(CONFIG_IP_UDPLITE) += udplite_ipv6.o
|
|
||||||
|
|
||||||
ipv6-objs += $(ipv6-y)
|
ipv6-objs += $(ipv6-y)
|
||||||
|
|
||||||
|
@ -813,16 +813,12 @@ static int __init init_ipv6_mibs(void)
|
|||||||
goto err_icmpmsg_mib;
|
goto err_icmpmsg_mib;
|
||||||
if (snmp_mib_init((void **)udp_stats_in6, sizeof (struct udp_mib)) < 0)
|
if (snmp_mib_init((void **)udp_stats_in6, sizeof (struct udp_mib)) < 0)
|
||||||
goto err_udp_mib;
|
goto err_udp_mib;
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
if (snmp_mib_init((void **)udplite_stats_in6,
|
if (snmp_mib_init((void **)udplite_stats_in6,
|
||||||
sizeof (struct udp_mib)) < 0)
|
sizeof (struct udp_mib)) < 0)
|
||||||
goto err_udplite_mib;
|
goto err_udplite_mib;
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
err_udplite_mib:
|
err_udplite_mib:
|
||||||
#endif
|
|
||||||
snmp_mib_free((void **)udp_stats_in6);
|
snmp_mib_free((void **)udp_stats_in6);
|
||||||
err_udp_mib:
|
err_udp_mib:
|
||||||
snmp_mib_free((void **)icmpv6msg_statistics);
|
snmp_mib_free((void **)icmpv6msg_statistics);
|
||||||
@ -841,9 +837,7 @@ static void cleanup_ipv6_mibs(void)
|
|||||||
snmp_mib_free((void **)icmpv6_statistics);
|
snmp_mib_free((void **)icmpv6_statistics);
|
||||||
snmp_mib_free((void **)icmpv6msg_statistics);
|
snmp_mib_free((void **)icmpv6msg_statistics);
|
||||||
snmp_mib_free((void **)udp_stats_in6);
|
snmp_mib_free((void **)udp_stats_in6);
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
snmp_mib_free((void **)udplite_stats_in6);
|
snmp_mib_free((void **)udplite_stats_in6);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int inet6_net_init(struct net *net)
|
static int inet6_net_init(struct net *net)
|
||||||
@ -888,11 +882,9 @@ static int __init inet6_init(void)
|
|||||||
if (err)
|
if (err)
|
||||||
goto out_unregister_tcp_proto;
|
goto out_unregister_tcp_proto;
|
||||||
|
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
err = proto_register(&udplitev6_prot, 1);
|
err = proto_register(&udplitev6_prot, 1);
|
||||||
if (err)
|
if (err)
|
||||||
goto out_unregister_udp_proto;
|
goto out_unregister_udp_proto;
|
||||||
#endif
|
|
||||||
|
|
||||||
err = proto_register(&rawv6_prot, 1);
|
err = proto_register(&rawv6_prot, 1);
|
||||||
if (err)
|
if (err)
|
||||||
@ -1063,10 +1055,8 @@ out_sock_register_fail:
|
|||||||
out_unregister_raw_proto:
|
out_unregister_raw_proto:
|
||||||
proto_unregister(&rawv6_prot);
|
proto_unregister(&rawv6_prot);
|
||||||
out_unregister_udplite_proto:
|
out_unregister_udplite_proto:
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
proto_unregister(&udplitev6_prot);
|
proto_unregister(&udplitev6_prot);
|
||||||
out_unregister_udp_proto:
|
out_unregister_udp_proto:
|
||||||
#endif
|
|
||||||
proto_unregister(&udpv6_prot);
|
proto_unregister(&udpv6_prot);
|
||||||
out_unregister_tcp_proto:
|
out_unregister_tcp_proto:
|
||||||
proto_unregister(&tcpv6_prot);
|
proto_unregister(&tcpv6_prot);
|
||||||
@ -1085,9 +1075,7 @@ static void __exit inet6_exit(void)
|
|||||||
ipv6_sysctl_unregister();
|
ipv6_sysctl_unregister();
|
||||||
#endif
|
#endif
|
||||||
udpv6_exit();
|
udpv6_exit();
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
udplitev6_exit();
|
udplitev6_exit();
|
||||||
#endif
|
|
||||||
tcpv6_exit();
|
tcpv6_exit();
|
||||||
|
|
||||||
/* Cleanup code parts. */
|
/* Cleanup code parts. */
|
||||||
@ -1117,9 +1105,7 @@ static void __exit inet6_exit(void)
|
|||||||
unregister_pernet_subsys(&inet6_net_ops);
|
unregister_pernet_subsys(&inet6_net_ops);
|
||||||
cleanup_ipv6_mibs();
|
cleanup_ipv6_mibs();
|
||||||
proto_unregister(&rawv6_prot);
|
proto_unregister(&rawv6_prot);
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
proto_unregister(&udplitev6_prot);
|
proto_unregister(&udplitev6_prot);
|
||||||
#endif
|
|
||||||
proto_unregister(&udpv6_prot);
|
proto_unregister(&udpv6_prot);
|
||||||
proto_unregister(&tcpv6_prot);
|
proto_unregister(&tcpv6_prot);
|
||||||
}
|
}
|
||||||
|
@ -127,9 +127,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
|
|||||||
struct sk_buff *pktopt;
|
struct sk_buff *pktopt;
|
||||||
|
|
||||||
if (sk->sk_protocol != IPPROTO_UDP &&
|
if (sk->sk_protocol != IPPROTO_UDP &&
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
sk->sk_protocol != IPPROTO_UDPLITE &&
|
sk->sk_protocol != IPPROTO_UDPLITE &&
|
||||||
#endif
|
|
||||||
sk->sk_protocol != IPPROTO_TCP)
|
sk->sk_protocol != IPPROTO_TCP)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -169,7 +167,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
|
|||||||
} else {
|
} else {
|
||||||
struct proto *prot = &udp_prot;
|
struct proto *prot = &udp_prot;
|
||||||
|
|
||||||
if (IS_PROTO_UDPLITE(sk->sk_protocol))
|
if (sk->sk_protocol == IPPROTO_UDPLITE)
|
||||||
prot = &udplite_prot;
|
prot = &udplite_prot;
|
||||||
local_bh_disable();
|
local_bh_disable();
|
||||||
sock_prot_inuse_add(sk->sk_prot, -1);
|
sock_prot_inuse_add(sk->sk_prot, -1);
|
||||||
@ -734,9 +732,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
|||||||
switch (optname) {
|
switch (optname) {
|
||||||
case IPV6_ADDRFORM:
|
case IPV6_ADDRFORM:
|
||||||
if (sk->sk_protocol != IPPROTO_UDP &&
|
if (sk->sk_protocol != IPPROTO_UDP &&
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
sk->sk_protocol != IPPROTO_UDPLITE &&
|
sk->sk_protocol != IPPROTO_UDPLITE &&
|
||||||
#endif
|
|
||||||
sk->sk_protocol != IPPROTO_TCP)
|
sk->sk_protocol != IPPROTO_TCP)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (sk->sk_state != TCP_ESTABLISHED)
|
if (sk->sk_state != TCP_ESTABLISHED)
|
||||||
|
@ -39,10 +39,8 @@ static int sockstat6_seq_show(struct seq_file *seq, void *v)
|
|||||||
sock_prot_inuse_get(&tcpv6_prot));
|
sock_prot_inuse_get(&tcpv6_prot));
|
||||||
seq_printf(seq, "UDP6: inuse %d\n",
|
seq_printf(seq, "UDP6: inuse %d\n",
|
||||||
sock_prot_inuse_get(&udpv6_prot));
|
sock_prot_inuse_get(&udpv6_prot));
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
seq_printf(seq, "UDPLITE6: inuse %d\n",
|
seq_printf(seq, "UDPLITE6: inuse %d\n",
|
||||||
sock_prot_inuse_get(&udplitev6_prot));
|
sock_prot_inuse_get(&udplitev6_prot));
|
||||||
#endif
|
|
||||||
seq_printf(seq, "RAW6: inuse %d\n",
|
seq_printf(seq, "RAW6: inuse %d\n",
|
||||||
sock_prot_inuse_get(&rawv6_prot));
|
sock_prot_inuse_get(&rawv6_prot));
|
||||||
seq_printf(seq, "FRAG6: inuse %d memory %d\n",
|
seq_printf(seq, "FRAG6: inuse %d memory %d\n",
|
||||||
@ -113,7 +111,6 @@ static struct snmp_mib snmp6_udp6_list[] = {
|
|||||||
SNMP_MIB_SENTINEL
|
SNMP_MIB_SENTINEL
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
static struct snmp_mib snmp6_udplite6_list[] = {
|
static struct snmp_mib snmp6_udplite6_list[] = {
|
||||||
SNMP_MIB_ITEM("UdpLite6InDatagrams", UDP_MIB_INDATAGRAMS),
|
SNMP_MIB_ITEM("UdpLite6InDatagrams", UDP_MIB_INDATAGRAMS),
|
||||||
SNMP_MIB_ITEM("UdpLite6NoPorts", UDP_MIB_NOPORTS),
|
SNMP_MIB_ITEM("UdpLite6NoPorts", UDP_MIB_NOPORTS),
|
||||||
@ -121,7 +118,6 @@ static struct snmp_mib snmp6_udplite6_list[] = {
|
|||||||
SNMP_MIB_ITEM("UdpLite6OutDatagrams", UDP_MIB_OUTDATAGRAMS),
|
SNMP_MIB_ITEM("UdpLite6OutDatagrams", UDP_MIB_OUTDATAGRAMS),
|
||||||
SNMP_MIB_SENTINEL
|
SNMP_MIB_SENTINEL
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, void **mib)
|
static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, void **mib)
|
||||||
{
|
{
|
||||||
@ -180,9 +176,7 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
|
|||||||
snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list);
|
snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list);
|
||||||
snmp6_seq_show_icmpv6msg(seq, (void **)icmpv6msg_statistics);
|
snmp6_seq_show_icmpv6msg(seq, (void **)icmpv6msg_statistics);
|
||||||
snmp6_seq_show_item(seq, (void **)udp_stats_in6, snmp6_udp6_list);
|
snmp6_seq_show_item(seq, (void **)udp_stats_in6, snmp6_udp6_list);
|
||||||
#ifdef CONFIG_IP_UDPLITE
|
|
||||||
snmp6_seq_show_item(seq, (void **)udplite_stats_in6, snmp6_udplite6_list);
|
snmp6_seq_show_item(seq, (void **)udplite_stats_in6, snmp6_udplite6_list);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -400,7 +400,7 @@ static inline int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh,
|
|||||||
UDP_SKB_CB(skb)->partial_cov = 0;
|
UDP_SKB_CB(skb)->partial_cov = 0;
|
||||||
UDP_SKB_CB(skb)->cscov = skb->len;
|
UDP_SKB_CB(skb)->cscov = skb->len;
|
||||||
|
|
||||||
if (IS_PROTO_UDPLITE(proto)) {
|
if (proto == IPPROTO_UDPLITE) {
|
||||||
err = udplite_checksum_init(skb, uh);
|
err = udplite_checksum_init(skb, uh);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -489,7 +489,7 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
|
|||||||
|
|
||||||
if (udp_lib_checksum_complete(skb))
|
if (udp_lib_checksum_complete(skb))
|
||||||
goto discard;
|
goto discard;
|
||||||
UDP6_INC_STATS_BH(UDP_MIB_NOPORTS, IS_PROTO_UDPLITE(proto));
|
UDP6_INC_STATS_BH(UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
|
||||||
|
|
||||||
icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0, dev);
|
icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0, dev);
|
||||||
|
|
||||||
@ -510,11 +510,11 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
|
|||||||
|
|
||||||
short_packet:
|
short_packet:
|
||||||
LIMIT_NETDEBUG(KERN_DEBUG "UDP%sv6: short packet: %d/%u\n",
|
LIMIT_NETDEBUG(KERN_DEBUG "UDP%sv6: short packet: %d/%u\n",
|
||||||
IS_PROTO_UDPLITE(proto) ? "-Lite" : "",
|
proto == IPPROTO_UDPLITE ? "-Lite" : "",
|
||||||
ulen, skb->len);
|
ulen, skb->len);
|
||||||
|
|
||||||
discard:
|
discard:
|
||||||
UDP6_INC_STATS_BH(UDP_MIB_INERRORS, IS_PROTO_UDPLITE(proto));
|
UDP6_INC_STATS_BH(UDP_MIB_INERRORS, proto == IPPROTO_UDPLITE);
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -890,7 +890,7 @@ int udpv6_destroy_sock(struct sock *sk)
|
|||||||
int udpv6_setsockopt(struct sock *sk, int level, int optname,
|
int udpv6_setsockopt(struct sock *sk, int level, int optname,
|
||||||
char __user *optval, int optlen)
|
char __user *optval, int optlen)
|
||||||
{
|
{
|
||||||
if (IS_SOL_UDPFAMILY(level))
|
if (level == SOL_UDP || level == SOL_UDPLITE)
|
||||||
return udp_lib_setsockopt(sk, level, optname, optval, optlen,
|
return udp_lib_setsockopt(sk, level, optname, optval, optlen,
|
||||||
udp_v6_push_pending_frames);
|
udp_v6_push_pending_frames);
|
||||||
return ipv6_setsockopt(sk, level, optname, optval, optlen);
|
return ipv6_setsockopt(sk, level, optname, optval, optlen);
|
||||||
@ -900,7 +900,7 @@ int udpv6_setsockopt(struct sock *sk, int level, int optname,
|
|||||||
int compat_udpv6_setsockopt(struct sock *sk, int level, int optname,
|
int compat_udpv6_setsockopt(struct sock *sk, int level, int optname,
|
||||||
char __user *optval, int optlen)
|
char __user *optval, int optlen)
|
||||||
{
|
{
|
||||||
if (IS_SOL_UDPFAMILY(level))
|
if (level == SOL_UDP || level == SOL_UDPLITE)
|
||||||
return udp_lib_setsockopt(sk, level, optname, optval, optlen,
|
return udp_lib_setsockopt(sk, level, optname, optval, optlen,
|
||||||
udp_v6_push_pending_frames);
|
udp_v6_push_pending_frames);
|
||||||
return compat_ipv6_setsockopt(sk, level, optname, optval, optlen);
|
return compat_ipv6_setsockopt(sk, level, optname, optval, optlen);
|
||||||
@ -910,7 +910,7 @@ int compat_udpv6_setsockopt(struct sock *sk, int level, int optname,
|
|||||||
int udpv6_getsockopt(struct sock *sk, int level, int optname,
|
int udpv6_getsockopt(struct sock *sk, int level, int optname,
|
||||||
char __user *optval, int __user *optlen)
|
char __user *optval, int __user *optlen)
|
||||||
{
|
{
|
||||||
if (IS_SOL_UDPFAMILY(level))
|
if (level == SOL_UDP || level == SOL_UDPLITE)
|
||||||
return udp_lib_getsockopt(sk, level, optname, optval, optlen);
|
return udp_lib_getsockopt(sk, level, optname, optval, optlen);
|
||||||
return ipv6_getsockopt(sk, level, optname, optval, optlen);
|
return ipv6_getsockopt(sk, level, optname, optval, optlen);
|
||||||
}
|
}
|
||||||
@ -919,7 +919,7 @@ int udpv6_getsockopt(struct sock *sk, int level, int optname,
|
|||||||
int compat_udpv6_getsockopt(struct sock *sk, int level, int optname,
|
int compat_udpv6_getsockopt(struct sock *sk, int level, int optname,
|
||||||
char __user *optval, int __user *optlen)
|
char __user *optval, int __user *optlen)
|
||||||
{
|
{
|
||||||
if (IS_SOL_UDPFAMILY(level))
|
if (level == SOL_UDP || level == SOL_UDPLITE)
|
||||||
return udp_lib_getsockopt(sk, level, optname, optval, optlen);
|
return udp_lib_getsockopt(sk, level, optname, optval, optlen);
|
||||||
return compat_ipv6_getsockopt(sk, level, optname, optval, optlen);
|
return compat_ipv6_getsockopt(sk, level, optname, optval, optlen);
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user