[Openswan dev]
Re: Openswan NAT-T broken on 2.6.8-rc1 and later (by udp.c changes
perhaps)
Herbert Xu
herbert at gondor.apana.org.au
Fri Aug 6 22:22:00 CEST 2004
On Fri, Aug 06, 2004 at 04:00:54PM +1000, herbert wrote:
>
> Then it tries to enable it with IPv6. There is absolutely no support
> for ESPINUDP over IPv6 in Linux so it fails.
>
> Previous versions of Linux incorrectly reported success in this case.
> In fact, they reported success regardless of the value you pass to it.
> This was fixed recently.
>
> So openswan should be fixed to handle failure in the IPv6 case. I'll
> see if I can whip a patch.
Here is a quick-and-dirty patch. It puts us back in the situation
as when the kernel did not bother to check whether IPv6 NAT-T works.
Actually it's slightly different in that it doesn't create port 4500
for IPv6.
I'm working on a proper fix with per-interface flags on NAT-T support.
But that'll take longer so please apply this patch in the mean time in
order to restore NAT-T support under 26sec when IPv6 is enabled.
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert at gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
-------------- next part --------------
Index: programs/pluto/server.c
===================================================================
RCS file: /public/cvs/openswan-2/programs/pluto/server.c,v
retrieving revision 1.98
diff -u -r1.98 server.c
--- programs/pluto/server.c 22 Jul 2004 14:14:59 -0000 1.98
+++ programs/pluto/server.c 6 Aug 2004 11:21:16 -0000
@@ -710,7 +710,8 @@
break;
#ifdef NAT_TRAVERSAL
- if (nat_traversal_support_non_ike)
+ if (nat_traversal_support_non_ike
+ && addrtypeof(&ifp->addr) == AF_INET)
{
nat_traversal_espinudp_socket(fd, ESPINUDP_WITH_NON_IKE);
}
@@ -727,7 +728,9 @@
openswan_log("adding interface %s/%s %s"
, q->vname, q->rname, ip_str(&q->addr));
#ifdef NAT_TRAVERSAL
- if (nat_traversal_support_port_floating) {
+ if (nat_traversal_support_port_floating
+ && addrtypeof(&ifp->addr) == AF_INET)
+ {
fd = create_socket(ifp, v->name, NAT_T_IKE_FLOAT_PORT);
if (fd < 0)
break;
More information about the Dev
mailing list