net/ipv6: UDP-Lite v6 support
Subsystems (2)
PATCH v2 3/3 net/ipv6: UDP-Lite v6 support
RFC 3828-compliant kernel support for UDP-Lite over IPv6.
Signed-off-by Gerrit Renker <[email protected]>
Signed-off-by William Stanislaus <[email protected]>
---
net/ipv6/Makefile | 1 net/ipv6/af_inet6.c | 8 net/ipv6/proc.c | 22 net/ipv6/udplite.c | 1276 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1307 insertions(+)
net/ipv6/af_inet6.c +8 -0
@@ -49,6 +49,7 @@#include <net/ip.h> #include <net/ipv6.h> #include <net/udp.h> +#include <net/udplite.h> #include <net/tcp.h> #include <net/ipip.h> #include <net/protocol.h>
@@ -836,6 +837,8 @@ static int __init inet6_init(void) goto proc_tcp6_fail;if (udp6_proc_init ()) goto proc_udp6_fail; +if (udplite6_proc_init ()) + goto proc_udplite6_fail;if (ipv6_misc_proc_init ()) goto proc_misc6_fail;
@@ -859,6 +862,7 @@ static int __init inet6_init(void)/* Init v6 transport protocols. */ udpv6_init (); +udplitev6_init ();tcpv6_init ();ipv6_packet_init ();
@@ -876,6 +880,8 @@ proc_if6_fail: proc_anycast6_fail:ipv6_misc_proc_exit (); proc_misc6_fail: +udplite6_proc_exit (); +proc_udplite6_fail:udp6_proc_exit (); proc_udp6_fail:tcp6_proc_exit ();
@@ -915,6 +921,7 @@ static void __exit inet6_exit(void)if6_proc_exit ();ac6_proc_exit ();ipv6_misc_proc_exit (); +udplite6_proc_exit ();udp6_proc_exit ();tcp6_proc_exit ();raw6_proc_exit ();
@@ -933,6 +940,7 @@ static void __exit inet6_exit(void)ipv6_sysctl_unregister ();#endif cleanup_ipv6_mibs (); +udplitev6_exit ();proto_unregister (&rawv6_prot);proto_unregister (&udpv6_prot);proto_unregister (&tcpv6_prot);
net/ipv6/udplite.c +1276 -0
1,276 lines not on this page · raw message
net/ipv6/proc.c +22 -0
@@ -26,6 +26,7 @@#include <linux/stddef.h> #include <net/sock.h> #include <net/tcp.h> +#include <net/udplite.h> #include <net/transp_v6.h> #include <net/ipv6.h>
@@ -49,6 +50,10 @@ static int sockstat6_seq_show(struct seq fold_prot_inuse(&tcpv6_prot));seq_printf (seq,"UDP6: inuse %d\n" ,fold_prot_inuse (&udpv6_prot)); +#ifdef CONFIG_IP_UDPLITE +seq_printf (seq,"UDPLITE6: inuse %d\n" , +fold_prot_inuse (&udplitev6_prot)); +#endif seq_printf (seq,"RAW6: inuse %d\n" ,fold_prot_inuse (&rawv6_prot)); seq_printf(seq, "FRAG6: inuse %d memory %d\n",
@@ -133,6 +138,20 @@ static struct snmp_mib snmp6_udp6_list[] SNMP_MIB_SENTINEL }; +#ifdef CONFIG_IP_UDPLITE +static struct snmp_mib snmp6_udplite_list[] = { +SNMP_MIB_ITEM ("UdpLite6InDatagrams" ,UDPLITE_MIB_INDATAGRAMS ), +SNMP_MIB_ITEM ("UdpLite6InPartialCov" ,UDPLITE_MIB_IN_PARTIALCOV ), +SNMP_MIB_ITEM ("UdpLite6NoPorts" ,UDPLITE_MIB_NOPORTS ), +SNMP_MIB_ITEM ("UdpLite6InErrors" ,UDPLITE_MIB_INERRORS ), +SNMP_MIB_ITEM ("UdpLite6InBadCoverage" ,UDPLITE_MIB_IN_BAD_COV ), +SNMP_MIB_ITEM ("UdpLite6InBadChecksum" ,UDPLITE_MIB_IN_BAD_CSUM ), +SNMP_MIB_ITEM ("UdpLite6OutDatagrams" ,UDPLITE_MIB_OUTDATAGRAMS ), +SNMP_MIB_ITEM ("UdpLite6OutPartialCov" ,UDPLITE_MIB_OUT_PARTIALCOV ), +SNMP_MIB_SENTINEL +}; +#endif +static unsigned long fold_field (void *mib[],int offt) {
@@ -166,6 +185,9 @@ static int snmp6_seq_show(struct seq_filsnmp6_seq_show_item (seq, (void **)ipv6_statistics, snmp6_ipstats_list);snmp6_seq_show_item (seq, (void **)icmpv6_statistics, snmp6_icmp6_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_udplite_list); +#endif }return 0 ; }
net/ipv6/Makefile +1 -0
@@ -13,6 +13,7 @@ ipv6-objs := af_inet6.o anycast.o ip6_ou ipv6-$(CONFIG_XFRM) += xfrm6_policy.o xfrm6_state.o xfrm6_input.o \ xfrm6_output.o ipv6-$(CONFIG_NETFILTER) += netfilter.o +ipv6-$(CONFIG_IP_UDPLITE) += udplite.o ipv6-objs += $(ipv6-y) obj-$(CONFIG_INET6_AH) += ah6.o