Skip to contentSkip to conversation

net/ipv6: UDP-Lite v6 support

PATCH In review Gerrit Renker 1 participant 1 message Jul 14, 2006

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH v2 3/3 net/ipv6: UDP-Lite v6 support

RFC 3828-compliant kernel support for UDP-Lite over IPv6.

---

 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
diff -Nurp  a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
@@ -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
diff -Nurp  a/net/ipv6/proc.c b/net/ipv6/proc.c
@@ -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_fil
 		snmp6_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
diff -Nurp  a/net/ipv6/Makefile b/net/ipv6/Makefile
@@ -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