-diff -urN linux-2.6.21.1.old/include/net/xfrmudp.h linux-2.6.21.1.dev/include/net/xfrmudp.h
---- linux-2.6.21.1.old/include/net/xfrmudp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.21.1.dev/include/net/xfrmudp.h 2007-05-26 20:24:53.933599448 +0200
+--- /dev/null
++++ b/include/net/xfrmudp.h
@@ -0,0 +1,10 @@
+/*
+ * pointer to function for type that xfrm4_input wants, to permit
+extern int udp4_register_esp_rcvencap(xfrm4_rcv_encap_t func
+ , xfrm4_rcv_encap_t *oldfunc);
+extern int udp4_unregister_esp_rcvencap(xfrm4_rcv_encap_t func);
-diff -urN linux-2.6.21.1.old/net/ipv4/Kconfig linux-2.6.21.1.dev/net/ipv4/Kconfig
---- linux-2.6.21.1.old/net/ipv4/Kconfig 2007-04-27 23:49:26.000000000 +0200
-+++ linux-2.6.21.1.dev/net/ipv4/Kconfig 2007-05-26 20:24:53.965594584 +0200
+--- a/net/ipv4/Kconfig
++++ b/net/ipv4/Kconfig
@@ -266,6 +266,12 @@
Network), but can be distributed all over the Internet. If you want
to do that, say Y here and to "IP multicast routing" below.
config IP_MROUTE
bool "IP: multicast routing"
depends on IP_MULTICAST
-diff -urN linux-2.6.21.1.old/net/ipv4/udp.c linux-2.6.21.1.dev/net/ipv4/udp.c
---- linux-2.6.21.1.old/net/ipv4/udp.c 2007-04-27 23:49:26.000000000 +0200
-+++ linux-2.6.21.1.dev/net/ipv4/udp.c 2007-05-26 20:24:53.966594432 +0200
+--- a/net/ipv4/udp.c
++++ b/net/ipv4/udp.c
@@ -101,12 +101,15 @@
#include <net/route.h>
#include <net/checksum.h>
DEFINE_SNMP_STAT(struct udp_mib, udp_statistics) __read_mostly;
struct hlist_head udp_hash[UDP_HTABLE_SIZE];
-@@ -1008,6 +1011,42 @@
+@@ -919,6 +922,42 @@
return 0;
}
/* return:
* 1 if the UDP system should process it
* 0 if we should drop this packet
-@@ -1015,7 +1054,7 @@
+@@ -926,7 +965,7 @@
*/
static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
{
return 1;
#else
struct udp_sock *up = udp_sk(sk);
-@@ -1030,11 +1069,11 @@
+@@ -941,11 +980,11 @@
/* if we're overly short, let UDP handle it */
len = skb->len - sizeof(struct udphdr);
if (len <= 0)
/* If this is a paged skb, make sure we pull up
* whatever data we need to look at. */
-@@ -1057,7 +1096,7 @@
+@@ -968,7 +1007,7 @@
len = sizeof(struct udphdr);
} else
/* Must be an IKE packet.. pass it through */
break;
case UDP_ENCAP_ESPINUDP_NON_IKE:
/* Check if this is a keepalive packet. If so, eat it. */
-@@ -1070,7 +1109,7 @@
+@@ -981,7 +1020,7 @@
len = sizeof(struct udphdr) + 2 * sizeof(u32);
} else
/* Must be an IKE packet.. pass it through */
break;
}
-@@ -1081,6 +1120,8 @@
+@@ -992,6 +1031,8 @@
*/
if (skb_cloned(skb) && pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
return 0;
/* Now we can update and verify the packet length... */
iph = ip_hdr(skb);
-@@ -1145,9 +1186,13 @@
+@@ -1056,9 +1097,13 @@
return 0;
}
if (ret < 0) {
return -ret;
}
/* FALLTHROUGH -- it's a UDP Packet */
-@@ -1847,3 +1892,9 @@
+@@ -1742,3 +1787,9 @@
EXPORT_SYMBOL(udp_proc_register);
EXPORT_SYMBOL(udp_proc_unregister);
#endif