* [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code
@ 2007-07-05 16:18 James Chapman
2007-07-05 16:45 ` Patrick McHardy
0 siblings, 1 reply; 8+ messages in thread
From: James Chapman @ 2007-07-05 16:18 UTC (permalink / raw)
To: netdev; +Cc: derek
This cleanup fell out after adding L2TP support where a new encap_rcv
funcptr was added to struct udp_sock. Have XFRM use the new encap_rcv
funcptr, which allows us to move the XFRM encap code from udp.c into
xfrm4_input.c.
Make xfrm4_rcv_encap() static since it is no longer called externally.
Signed-off-by: James Chapman <jchapman@katalix.com>
---
Tested with L2TP and L2TP/IPsec.
Update after comments from Patrick. Fix encapsulated transport mode
case and remove stupid file history comment change.
include/net/xfrm.h | 5 +-
net/ipv4/udp.c | 156 +++++++-----------------------------------------
net/ipv4/xfrm4_input.c | 114 +++++++++++++++++++++++++++++++++--
3 files changed, 133 insertions(+), 142 deletions(-)
95ef33e21f9006ef1406b8b5f80227518f843fcb
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index d3a898b..ae959e9 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1003,7 +1003,7 @@ extern int xfrm6_find_1stfragopt(struct
u8 **prevhdr);
#ifdef CONFIG_XFRM
-extern int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type);
+extern int xfrm4_udp_encap_rcv(struct sock *sk, struct sk_buff *skb);
extern int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen);
extern int xfrm_dst_lookup(struct xfrm_dst **dst, struct flowi *fl, unsigned short family);
#else
@@ -1012,12 +1012,13 @@ static inline int xfrm_user_policy(struc
return -ENOPROTOOPT;
}
-static inline int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type)
+static inline int xfrm4_udp_encap_rcv(struct sock *sk, struct sk_buff *skb)
{
/* should not happen */
kfree_skb(skb);
return 0;
}
+
static inline int xfrm_dst_lookup(struct xfrm_dst **dst, struct flowi *fl, unsigned short family)
{
return -EINVAL;
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index b9276f8..4ec4a25 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -920,108 +920,6 @@ int udp_disconnect(struct sock *sk, int
return 0;
}
-/* return:
- * 1 if the UDP system should process it
- * 0 if we should drop this packet
- * -1 if it should get processed by xfrm4_rcv_encap
- * -2 if it should get processed by l2tp
- */
-static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
-{
- struct udp_sock *up = udp_sk(sk);
- struct udphdr *uh;
- struct iphdr *iph;
- int iphlen, len;
-
- __u8 *udpdata;
- __be32 *udpdata32;
- __u16 encap_type = up->encap_type;
-
- /* if we're overly short, let UDP handle it */
- len = skb->len - sizeof(struct udphdr);
- if (len <= 0)
- return 1;
-
- /* if this is not encapsulated socket, then just return now */
- if (!encap_type)
- return 1;
-
- /* If this is a paged skb, make sure we pull up
- * whatever data we need to look at. */
- if (!pskb_may_pull(skb, sizeof(struct udphdr) + min(len, 8)))
- return 1;
-
- /* Now we can get the pointers */
- uh = udp_hdr(skb);
- udpdata = (__u8 *)uh + sizeof(struct udphdr);
- udpdata32 = (__be32 *)udpdata;
-
- switch (encap_type) {
- default:
- case UDP_ENCAP_ESPINUDP:
- /* Check if this is a keepalive packet. If so, eat it. */
- if (len == 1 && udpdata[0] == 0xff) {
- return 0;
- } else if (len > sizeof(struct ip_esp_hdr) && udpdata32[0] != 0) {
- /* ESP Packet without Non-ESP header */
- len = sizeof(struct udphdr);
- } else
- /* Must be an IKE packet.. pass it through */
- return 1;
- break;
- case UDP_ENCAP_ESPINUDP_NON_IKE:
- /* Check if this is a keepalive packet. If so, eat it. */
- if (len == 1 && udpdata[0] == 0xff) {
- return 0;
- } else if (len > 2 * sizeof(u32) + sizeof(struct ip_esp_hdr) &&
- udpdata32[0] == 0 && udpdata32[1] == 0) {
-
- /* ESP Packet with Non-IKE marker */
- len = sizeof(struct udphdr) + 2 * sizeof(u32);
- } else
- /* Must be an IKE packet.. pass it through */
- return 1;
- break;
- case UDP_ENCAP_L2TPINUDP:
- /* Let caller know to send this to l2tp */
- return -2;
- }
-
-#ifndef CONFIG_XFRM
- return 1;
-#else
- /* At this point we are sure that this is an ESPinUDP packet,
- * so we need to remove 'len' bytes from the packet (the UDP
- * header and optional ESP marker bytes) and then modify the
- * protocol to ESP, and then call into the transform receiver.
- */
- 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);
- iphlen = iph->ihl << 2;
- iph->tot_len = htons(ntohs(iph->tot_len) - len);
- if (skb->len < iphlen + len) {
- /* packet is too small!?! */
- return 0;
- }
-
- /* pull the data buffer up to the ESP header and set the
- * transport header to point to ESP. Keep UDP on the stack
- * for later.
- */
- __skb_pull(skb, len);
- skb_reset_transport_header(skb);
-
- /* modify the protocol (it's ESP!) */
- iph->protocol = IPPROTO_ESP;
-
- /* and let the caller know to send this into the ESP processor... */
- return -1;
-#endif
-}
-
/* returns:
* -1: error
* 0: success
@@ -1044,44 +942,36 @@ int udp_queue_rcv_skb(struct sock * sk,
if (up->encap_type) {
/*
- * This is an encapsulation socket, so let's see if this is
- * an encapsulated packet.
- * If it's a keepalive packet, then just eat it.
- * If it's an encapsulateed packet, then pass it to the
- * IPsec xfrm input and return the response
- * appropriately. Otherwise, just fall through and
- * pass this up the UDP socket.
+ * This is an encapsulation socket so pass the skb to
+ * the socket's udp_encap_rcv() hook. Otherwise, just
+ * fall through and pass this up the UDP socket.
+ * up->encap_rcv() returns the following value:
+ * =0 if skb was successfully passed to the encap
+ * handler or was discarded by it.
+ * >0 if skb should be passed on to UDP.
+ * <0 if skb should be resubmitted as proto -N
*/
- int ret;
-
- ret = udp_encap_rcv(sk, skb);
- if (ret == 0) {
- /* Eat the packet .. */
- kfree_skb(skb);
- return 0;
- }
- if (ret == -1) {
- /* process the ESP packet */
- ret = xfrm4_rcv_encap(skb, up->encap_type);
- UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS, up->pcflag);
- return -ret;
- }
- if (ret == -2) {
- /* process the L2TP packet */
- if (up->encap_rcv != NULL) {
- ret = (*up->encap_rcv)(sk, skb);
- if (ret <= 0) {
- UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS, up->pcflag);
- return ret;
- }
+ unsigned int len;
- /* FALLTHROUGH -- pass up as UDP packet */
+ /* if we're overly short, let UDP handle it */
+ len = skb->len - sizeof(struct udphdr);
+ if (len <= 0)
+ goto udp;
+
+ if (up->encap_rcv != NULL) {
+ int ret;
+
+ ret = (*up->encap_rcv)(sk, skb);
+ if (ret <= 0) {
+ UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS, up->pcflag);
+ return -ret;
}
}
/* FALLTHROUGH -- it's a UDP Packet */
}
+udp:
/*
* UDP-Lite specific tests, ignored on UDP sockets
*/
@@ -1367,6 +1257,8 @@ int udp_lib_setsockopt(struct sock *sk,
case 0:
case UDP_ENCAP_ESPINUDP:
case UDP_ENCAP_ESPINUDP_NON_IKE:
+ up->encap_rcv = xfrm4_udp_encap_rcv;
+ /* FALLTHROUGH */
case UDP_ENCAP_L2TPINUDP:
up->encap_type = val;
break;
diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c
index fa1902d..2fa1082 100644
--- a/net/ipv4/xfrm4_input.c
+++ b/net/ipv4/xfrm4_input.c
@@ -16,13 +16,6 @@
#include <net/ip.h>
#include <net/xfrm.h>
-int xfrm4_rcv(struct sk_buff *skb)
-{
- return xfrm4_rcv_encap(skb, 0);
-}
-
-EXPORT_SYMBOL(xfrm4_rcv);
-
static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, __be32 *spi, __be32 *seq)
{
switch (nexthdr) {
@@ -53,7 +46,7 @@ drop:
}
#endif
-int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type)
+static int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type)
{
__be32 spi, seq;
struct xfrm_state *xfrm_vec[XFRM_MAX_DEPTH];
@@ -167,3 +160,108 @@ drop:
kfree_skb(skb);
return 0;
}
+
+/* If it's a keepalive packet, then just eat it.
+ * If it's an encapsulated packet, then pass it to the
+ * IPsec xfrm input.
+ * Returns 0 if skb passed to xfrm or was dropped.
+ * Returns >0 if skb should be passed to UDP.
+ * Returns <0 if skb should be resubmitted (-ret is protocol)
+ */
+int xfrm4_udp_encap_rcv(struct sock *sk, struct sk_buff *skb)
+{
+ struct udp_sock *up = udp_sk(sk);
+ struct udphdr *uh;
+ struct iphdr *iph;
+ int iphlen, len;
+ int ret;
+
+ __u8 *udpdata;
+ __be32 *udpdata32;
+ __u16 encap_type = up->encap_type;
+
+ /* if this is not encapsulated socket, then just return now */
+ if (!encap_type)
+ return 1;
+
+ /* If this is a paged skb, make sure we pull up
+ * whatever data we need to look at. */
+ len = skb->len - sizeof(struct udphdr);
+ if (!pskb_may_pull(skb, sizeof(struct udphdr) + min(len, 8)))
+ return 1;
+
+ /* Now we can get the pointers */
+ uh = udp_hdr(skb);
+ udpdata = (__u8 *)uh + sizeof(struct udphdr);
+ udpdata32 = (__be32 *)udpdata;
+
+ switch (encap_type) {
+ default:
+ case UDP_ENCAP_ESPINUDP:
+ /* Check if this is a keepalive packet. If so, eat it. */
+ if (len == 1 && udpdata[0] == 0xff) {
+ goto drop;
+ } else if (len > sizeof(struct ip_esp_hdr) && udpdata32[0] != 0) {
+ /* ESP Packet without Non-ESP header */
+ len = sizeof(struct udphdr);
+ } else
+ /* Must be an IKE packet.. pass it through */
+ return 1;
+ break;
+ case UDP_ENCAP_ESPINUDP_NON_IKE:
+ /* Check if this is a keepalive packet. If so, eat it. */
+ if (len == 1 && udpdata[0] == 0xff) {
+ goto drop;
+ } else if (len > 2 * sizeof(u32) + sizeof(struct ip_esp_hdr) &&
+ udpdata32[0] == 0 && udpdata32[1] == 0) {
+
+ /* ESP Packet with Non-IKE marker */
+ len = sizeof(struct udphdr) + 2 * sizeof(u32);
+ } else
+ /* Must be an IKE packet.. pass it through */
+ return 1;
+ break;
+ }
+
+ /* At this point we are sure that this is an ESPinUDP packet,
+ * so we need to remove 'len' bytes from the packet (the UDP
+ * header and optional ESP marker bytes) and then modify the
+ * protocol to ESP, and then call into the transform receiver.
+ */
+ if (skb_cloned(skb) && pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
+ goto drop;
+
+ /* Now we can update and verify the packet length... */
+ iph = ip_hdr(skb);
+ iphlen = iph->ihl << 2;
+ iph->tot_len = htons(ntohs(iph->tot_len) - len);
+ if (skb->len < iphlen + len) {
+ /* packet is too small!?! */
+ goto drop;
+ }
+
+ /* pull the data buffer up to the ESP header and set the
+ * transport header to point to ESP. Keep UDP on the stack
+ * for later.
+ */
+ __skb_pull(skb, len);
+ skb_reset_transport_header(skb);
+
+ /* modify the protocol (it's ESP!) */
+ iph->protocol = IPPROTO_ESP;
+
+ /* process ESP */
+ ret = xfrm4_rcv_encap(skb, encap_type);
+ return ret;
+
+drop:
+ kfree_skb(skb);
+ return 0;
+}
+
+int xfrm4_rcv(struct sk_buff *skb)
+{
+ return xfrm4_rcv_encap(skb, 0);
+}
+
+EXPORT_SYMBOL(xfrm4_rcv);
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code
2007-07-05 16:18 [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code James Chapman
@ 2007-07-05 16:45 ` Patrick McHardy
2007-07-05 16:50 ` Rémi Denis-Courmont
2007-07-06 0:08 ` David Miller
0 siblings, 2 replies; 8+ messages in thread
From: Patrick McHardy @ 2007-07-05 16:45 UTC (permalink / raw)
To: James Chapman; +Cc: netdev, derek
James Chapman wrote:
> This cleanup fell out after adding L2TP support where a new encap_rcv
> funcptr was added to struct udp_sock. Have XFRM use the new encap_rcv
> funcptr, which allows us to move the XFRM encap code from udp.c into
> xfrm4_input.c.
>
> Make xfrm4_rcv_encap() static since it is no longer called externally.
>
> Signed-off-by: James Chapman <jchapman@katalix.com>
>
> ---
> Tested with L2TP and L2TP/IPsec.
>
> Update after comments from Patrick. Fix encapsulated transport mode
> case and remove stupid file history comment change.
Looks good, thanks.
Acked-by: Patrick McHardy <kaber@trash.net>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code
2007-07-05 16:45 ` Patrick McHardy
@ 2007-07-05 16:50 ` Rémi Denis-Courmont
2007-07-05 17:25 ` James Chapman
2007-07-06 0:08 ` David Miller
1 sibling, 1 reply; 8+ messages in thread
From: Rémi Denis-Courmont @ 2007-07-05 16:50 UTC (permalink / raw)
To: netdev; +Cc: remi.denis-courmont
[-- Attachment #1: Type: text/plain, Size: 823 bytes --]
Le jeudi 5 juillet 2007, vous avez écrit :
> James Chapman wrote:
> > This cleanup fell out after adding L2TP support where a new
> > encap_rcv funcptr was added to struct udp_sock. Have XFRM use the
> > new encap_rcv funcptr, which allows us to move the XFRM encap code
> > from udp.c into xfrm4_input.c.
> >
> > Make xfrm4_rcv_encap() static since it is no longer called
> > externally.
> >
> > Signed-off-by: James Chapman <jchapman@katalix.com>
> >
> > ---
> > Tested with L2TP and L2TP/IPsec.
> >
> > Update after comments from Patrick. Fix encapsulated transport mode
> > case and remove stupid file history comment change.
>
> Looks good, thanks.
By the way, couldn't encap_type be remove altogether (using two slightly
different callbacks for ESP) from udp_sock?
--
Rémi Denis-Courmont
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code
2007-07-05 16:50 ` Rémi Denis-Courmont
@ 2007-07-05 17:25 ` James Chapman
2007-07-06 7:55 ` Rémi Denis-Courmont
0 siblings, 1 reply; 8+ messages in thread
From: James Chapman @ 2007-07-05 17:25 UTC (permalink / raw)
To: Rémi Denis-Courmont; +Cc: netdev, remi.denis-courmont
Rémi Denis-Courmont wrote:
> By the way, couldn't encap_type be remove altogether (using two slightly
> different callbacks for ESP) from udp_sock?
The notion of encap_type is needed for the setsockopt call so it would
have to stay in the API. If it were removed from udp_sock, getsockopt
would have to derive the encap_type from encap_rcv funcptr values, which
would be messy. I think it might complicate the logic in ESP too.
--
James Chapman
Katalix Systems Ltd
http://www.katalix.com
Catalysts for your Embedded Linux software development
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code
2007-07-05 16:45 ` Patrick McHardy
2007-07-05 16:50 ` Rémi Denis-Courmont
@ 2007-07-06 0:08 ` David Miller
1 sibling, 0 replies; 8+ messages in thread
From: David Miller @ 2007-07-06 0:08 UTC (permalink / raw)
To: kaber; +Cc: jchapman, netdev, derek
From: Patrick McHardy <kaber@trash.net>
Date: Thu, 05 Jul 2007 18:45:02 +0200
> James Chapman wrote:
> > This cleanup fell out after adding L2TP support where a new encap_rcv
> > funcptr was added to struct udp_sock. Have XFRM use the new encap_rcv
> > funcptr, which allows us to move the XFRM encap code from udp.c into
> > xfrm4_input.c.
> >
> > Make xfrm4_rcv_encap() static since it is no longer called externally.
> >
> > Signed-off-by: James Chapman <jchapman@katalix.com>
> >
> > ---
> > Tested with L2TP and L2TP/IPsec.
> >
> > Update after comments from Patrick. Fix encapsulated transport mode
> > case and remove stupid file history comment change.
>
>
> Looks good, thanks.
>
> Acked-by: Patrick McHardy <kaber@trash.net>
Applied, thanks everyone.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code
2007-07-05 17:25 ` James Chapman
@ 2007-07-06 7:55 ` Rémi Denis-Courmont
2007-07-06 13:31 ` Patrick McHardy
0 siblings, 1 reply; 8+ messages in thread
From: Rémi Denis-Courmont @ 2007-07-06 7:55 UTC (permalink / raw)
To: ext James Chapman; +Cc: netdev
On Thursday 05 July 2007 20:25:50 ext James Chapman wrote:
> Rémi Denis-Courmont wrote:
> > By the way, couldn't encap_type be remove altogether (using two slightly
> > different callbacks for ESP) from udp_sock?
>
> The notion of encap_type is needed for the setsockopt call so it would
> have to stay in the API. If it were removed from udp_sock, getsockopt
> would have to derive the encap_type from encap_rcv funcptr values, which
> would be messy. I think it might complicate the logic in ESP too.
Right. By the way, shouldn't "len" rather be signed in there?
unsigned int len;
/* if we're overly short, let UDP handle it */
len = skb->len - sizeof(struct udphdr);
if (len <= 0)
goto udp;
Regards,
--
Rémi Denis-Courmont
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code
2007-07-06 7:55 ` Rémi Denis-Courmont
@ 2007-07-06 13:31 ` Patrick McHardy
2007-07-11 6:06 ` David Miller
0 siblings, 1 reply; 8+ messages in thread
From: Patrick McHardy @ 2007-07-06 13:31 UTC (permalink / raw)
To: Rémi Denis-Courmont; +Cc: ext James Chapman, netdev
[-- Attachment #1: Type: text/plain, Size: 972 bytes --]
Rémi Denis-Courmont wrote:
> On Thursday 05 July 2007 20:25:50 ext James Chapman wrote:
>
>>Rémi Denis-Courmont wrote:
>>
>>>By the way, couldn't encap_type be remove altogether (using two slightly
>>>different callbacks for ESP) from udp_sock?
>>
>>The notion of encap_type is needed for the setsockopt call so it would
>>have to stay in the API. If it were removed from udp_sock, getsockopt
>>would have to derive the encap_type from encap_rcv funcptr values, which
>>would be messy. I think it might complicate the logic in ESP too.
>
>
> Right. By the way, shouldn't "len" rather be signed in there?
>
> unsigned int len;
>
> /* if we're overly short, let UDP handle it */
> len = skb->len - sizeof(struct udphdr);
> if (len <= 0)
> goto udp;
It should, but the < 0 case can't happen since __udp4_lib_rcv
already makes sure that we have at least a complete UDP header.
Anyways, this patch fixes it.
Signed-off-by: Patrick McHardy <kaber@trash.net>
[-- Attachment #2: x --]
[-- Type: text/plain, Size: 809 bytes --]
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 4ec4a25..2835535 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -951,14 +951,10 @@ int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
* >0 if skb should be passed on to UDP.
* <0 if skb should be resubmitted as proto -N
*/
- unsigned int len;
/* if we're overly short, let UDP handle it */
- len = skb->len - sizeof(struct udphdr);
- if (len <= 0)
- goto udp;
-
- if (up->encap_rcv != NULL) {
+ if (skb->len > sizeof(struct udphdr) &&
+ up->encap_rcv != NULL) {
int ret;
ret = (*up->encap_rcv)(sk, skb);
@@ -971,7 +967,6 @@ int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
/* FALLTHROUGH -- it's a UDP Packet */
}
-udp:
/*
* UDP-Lite specific tests, ignored on UDP sockets
*/
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code
2007-07-06 13:31 ` Patrick McHardy
@ 2007-07-11 6:06 ` David Miller
0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2007-07-11 6:06 UTC (permalink / raw)
To: kaber; +Cc: remi.denis-courmont, jchapman, netdev
From: Patrick McHardy <kaber@trash.net>
Date: Fri, 06 Jul 2007 15:31:56 +0200
> Rémi Denis-Courmont wrote:
> > On Thursday 05 July 2007 20:25:50 ext James Chapman wrote:
> >
> >>Rémi Denis-Courmont wrote:
> >>
> >>>By the way, couldn't encap_type be remove altogether (using two slightly
> >>>different callbacks for ESP) from udp_sock?
> >>
> >>The notion of encap_type is needed for the setsockopt call so it would
> >>have to stay in the API. If it were removed from udp_sock, getsockopt
> >>would have to derive the encap_type from encap_rcv funcptr values, which
> >>would be messy. I think it might complicate the logic in ESP too.
> >
> >
> > Right. By the way, shouldn't "len" rather be signed in there?
> >
> > unsigned int len;
> >
> > /* if we're overly short, let UDP handle it */
> > len = skb->len - sizeof(struct udphdr);
> > if (len <= 0)
> > goto udp;
>
>
> It should, but the < 0 case can't happen since __udp4_lib_rcv
> already makes sure that we have at least a complete UDP header.
>
> Anyways, this patch fixes it.
>
> Signed-off-by: Patrick McHardy <kaber@trash.net>
Applied, thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-07-11 6:34 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-05 16:18 [PATCH net-2.6.23 take2] UDP: Cleanup UDP encapsulation code James Chapman
2007-07-05 16:45 ` Patrick McHardy
2007-07-05 16:50 ` Rémi Denis-Courmont
2007-07-05 17:25 ` James Chapman
2007-07-06 7:55 ` Rémi Denis-Courmont
2007-07-06 13:31 ` Patrick McHardy
2007-07-11 6:06 ` David Miller
2007-07-06 0:08 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).