-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
+Index: linux-2.6.21.7/include/net/xfrmudp.h
+===================================================================
+--- /dev/null
++++ linux-2.6.21.7/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
-@@ -266,6 +266,12 @@
+Index: linux-2.6.21.7/net/ipv4/Kconfig
+===================================================================
+--- linux-2.6.21.7.orig/net/ipv4/Kconfig
++++ linux-2.6.21.7/net/ipv4/Kconfig
+@@ -266,6 +266,12 @@ config NET_IPGRE_BROADCAST
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
+Index: linux-2.6.21.7/net/ipv4/udp.c
+===================================================================
+--- linux-2.6.21.7.orig/net/ipv4/udp.c
++++ linux-2.6.21.7/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];
-@@ -915,6 +918,42 @@
+@@ -915,6 +918,42 @@ int udp_disconnect(struct sock *sk, int
return 0;
}
/* return:
* 1 if the the UDP system should process it
* 0 if we should drop this packet
-@@ -922,7 +961,7 @@
+@@ -922,7 +961,7 @@ int udp_disconnect(struct sock *sk, int
*/
static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
{
return 1;
#else
struct udp_sock *up = udp_sk(sk);
-@@ -937,11 +976,11 @@
+@@ -937,11 +976,11 @@ static int udp_encap_rcv(struct sock * s
/* 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. */
-@@ -964,7 +1003,7 @@
+@@ -964,7 +1003,7 @@ static int udp_encap_rcv(struct sock * s
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. */
-@@ -977,7 +1016,7 @@
+@@ -977,7 +1016,7 @@ static int udp_encap_rcv(struct sock * s
len = sizeof(struct udphdr) + 2 * sizeof(u32);
} else
/* Must be an IKE packet.. pass it through */
break;
}
-@@ -988,6 +1027,8 @@
+@@ -988,6 +1027,8 @@ static int udp_encap_rcv(struct sock * s
*/
if (skb_cloned(skb) && pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
return 0;
/* Now we can update and verify the packet length... */
iph = skb->nh.iph;
-@@ -1051,9 +1092,13 @@
+@@ -1051,9 +1092,13 @@ int udp_queue_rcv_skb(struct sock * sk,
return 0;
}
if (ret < 0) {
return -ret;
}
/* FALLTHROUGH -- it's a UDP Packet */
-@@ -1733,3 +1778,9 @@
+@@ -1733,3 +1778,9 @@ EXPORT_SYMBOL(udp_poll);
EXPORT_SYMBOL(udp_proc_register);
EXPORT_SYMBOL(udp_proc_unregister);
#endif