]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
rebased to 2.2RC2 (beta 2.2 branch)
authorGert Doering <gert@greenie.muc.de>
Sun, 24 Apr 2011 15:15:56 +0000 (17:15 +0200)
committerGert Doering <gert@greenie.muc.de>
Sun, 24 Apr 2011 15:22:46 +0000 (17:22 +0200)
removed mutex locking stuff (no more threading in 2.2)
fixed rebase/merge artifacts in mroute.c
add current ChangeLog.IPv6 and TODO.IPv6 to commit
tag as ipv6-20110424-2

Signed-off-by: Gert Doering <gert@greenie.muc.de>
ChangeLog.IPv6
TODO.IPv6
mroute.c
options.c
socket.c

index 252450d330ab6a1fda968d58e561a1d06c9e286e..38f444689fdf6bb7dd9e4e87297dc496efbcc842 100644 (file)
@@ -348,3 +348,47 @@ Wed Sep 22 22:20:37 CEST 2010
   * TEST SUCCESS: Linux/iproute2: client-tun/net30+subnet, v4+v6
 
   * options.c: tag as 20100922-1 so "allmerged" users can see IPv6 change
+
+Fri Sep 24 17:57:41 CEST 2010
+
+  * TEST SUCCESS: Linux/<both>: client-tap, v4+v6, ping6 on connected addr
+
+  * TEST FAIL: Linux/<both>: client-tap, v6, route6 (gateway missing)
+
+Do 21. Okt 19:36:49 CEST 2010
+
+  * t_client.sh.in: cherrypick commit f25fe91a40aa3f and 6f1e61b41be52 
+    (proper exit codes to signal "SKIP" if we do not want to run)
+
+So 16. Jan 17:25:23 CET 2011
+
+  * tun.c, route.c: cherrypick 121755c2cb4891f and f0eac1a5979096c67
+    (TAP driver and "topology subnet" support for Solaris)
+
+  * tun.c: add IPv6 configuration for TAP interfaces (<device>:1 inet6)
+
+  * tun.c: on close_tun on Solaris, unplumb IPv6 TUN or TAP interfaces
+
+  * TEST SUCCESS: OpenSolaris: client-tun, v4+v6
+    TEST SUCCESS: OpenSolaris: client-tap, v4+v6, ping6 on connected addr
+    TEST FAIL: OpenSolaris: client-tap, v6, route6 (gateway missing)
+
+So 24. Apr 16:51:45 CEST 2011
+
+  * rebase to "beta2.2" branch (at 2.2RC2 tag)
+
+  * mroute.c: remove mroute_helper_lock/_unlock() calls for IPv6
+  * socket.c: remove locking with L_INET_NTOA mutex
+      (all the threading stuff got removed by David Sommerseth for 2.2)
+
+  * mroute.c: remove duplicate mroute_helper_add_iroute6() and
+              mroute_helper_del_iroute6() - "git rebase" artefact
+
+  * ChangeLog.IPv6 and TODO.IPv6: add to commit
+
+  * options.c: tag as 20110424-2 (2.2RC2)
+
+  * TEST SUCCESS: Linux/ifconfig: client-tun/net30+subnet, v4+v6
+
+  * TEST SUCCESS: Linux/iproute2: client-tun/net30+subnet, v4+v6
+
index c8953a0de8781dfe25ead996d6b4f764b954533e..092a1a32141f4426750a9a698759be95376ea55f 100644 (file)
--- a/TODO.IPv6
+++ b/TODO.IPv6
@@ -1,7 +1,7 @@
 known issues for IPv6 payload support in OpenVPN
 -----------------------------------------------
 
-1.) "--topology subnet" doesn't work together with IPv6 payload
+1.) "--topology subnet" doesn't work together with IPv6 payload on FreeBSD
     (verified for FreeBSD server, Linux/ifconfig client, problems 
     with ICMP6 neighbor solicitations from BSD not being answered by Linux)
 
@@ -36,6 +36,11 @@ tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
     * semi-fixed for NetBSD, 28.2.10, always do tun0 destroy / tun0 create
       before actual ifconfig -- tunnel still lingers after OpenVPN quits
 
+4b.) verify this - on FreeBSD, tun0 is auto-destroyed if created by
+     opening /dev/tun (and lingers if created by "ifconfig tun0 create")
+
+     -> use for persistant tunnels on not-linux?
+
 5.) add new option "ifconfig-ipv6-push"
     (per-client static IPv6 assignment, -> radiusplugin, etc)
 
@@ -52,6 +57,13 @@ tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
 8.) full IPv6 support for TAP interfaces 
     (main issue should be routes+gateway - and testing :-) )
 
+    test 2010/09/24: TAP itself works on linux/ifconfig+iproute2, but 
+    route-via-tap doesn't work at all (route points to "tap0" which fails)
+
+17:51:14.075412 fe:ab:6e:c5:53:71 > 33:33:ff:00:00:01, ethertype IPv6 (0x86dd), length 86: 2001:608:4:a053::1:0 > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has 2001:608:4:a001::1, length 32
+
+    how is iroute-via-tap supposed to work??
+
 9.) verify that iroute-ipv6 and route-ipv6 interact in the same way as
     documented for iroute/route:
 
@@ -98,3 +110,40 @@ tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        - revert ifconfig/open_tun order to "normal" (separate commit!!!)
          (openvpn-devel, Subject: OpenBSD)
        - test
+
+17.) client-option (Elwood)
+       - ignore-v6-push-options yes/no
+       - ignore-v6-route-push  ("as for IPv4 routes")
+
+18.) fail-save?  "what if 'ip -6 addr add' fails" -> fail, or fallback to v4?
+       (-> recomment setting "ignore-v6-push-options yes")
+
+19.) safety check: if connecting over IPv6 (v6 transport) and the pushed
+     route-ipv6 network encompasses the server IPv6 address, make sure 
+     we at least log a warning (until we can fiddle with external routing
+     to make this work correctly).
+
+20.) show "route add" / "route delete" commands for IPv6 in log file
+     (we show the "ifconfig" commands, so why not the routes?)
+
+     2010-08-07: this is a null-feature - it's already there, but with
+                 different debug level (M_INFO vs. D_ROUTE) so user 
+                 didn't notice
+
+21.) enable ipv6-only server operations
+      - decouple ipv6 pool handling from ipv4 pool
+      - make sure Rest of OpenVPN doesn't assume "there will always be IPv4"
+
+22.) implement --learn-address for IPv6
+
+23.) FreeBSD 8 seems to require explicit setting of the "ifconfig" IPv6
+     route, while FreeBSD 6+7 don't --> more testing, and code fix
+
+     workaround for the time being: just add
+
+       server-ipv6 2001:608:4:a051::/64
+       route-ipv6 2001:608:4:a051::/64
+
+    to the config
+
+    (problem + workaround applies both to tun and tap style devices)
index 5ef07b223f60999743790ccd84f7eed8018d4927..3182f65fe34991421ca40aae389ada5768eb6f1d 100644 (file)
--- a/mroute.c
+++ b/mroute.c
@@ -499,12 +499,10 @@ mroute_helper_add_iroute6 (struct mroute_helper *mh,
   if (ir6->netbits >= 0)
     {
       ASSERT (ir6->netbits < MR_HELPER_NET_LEN);
-      mroute_helper_lock (mh);
       ++mh->cache_generation;
       ++mh->net_len_refcount[ir6->netbits];
       if (mh->net_len_refcount[ir6->netbits] == 1)
        mroute_helper_regenerate (mh);
-      mroute_helper_unlock (mh);
     }
 }
 
@@ -515,51 +513,11 @@ mroute_helper_del_iroute6 (struct mroute_helper *mh,
   if (ir6->netbits >= 0)
     {
       ASSERT (ir6->netbits < MR_HELPER_NET_LEN);
-      mroute_helper_lock (mh);
       ++mh->cache_generation;
       --mh->net_len_refcount[ir6->netbits];
       ASSERT (mh->net_len_refcount[ir6->netbits] >= 0);
       if (!mh->net_len_refcount[ir6->netbits])
        mroute_helper_regenerate (mh);
-      mroute_helper_unlock (mh);
-    }
-}
-
-/* this is a bit inelegant, we really should have a helper to that 
- * is only passed the netbits value, and not the whole struct iroute *
- * - thus one helper could do IPv4 and IPv6.  For the sake of "not change
- * code unrelated to IPv4" this is left for later cleanup, for now.
- */
-void
-mroute_helper_add_iroute6 (struct mroute_helper *mh, 
-                           const struct iroute_ipv6 *ir6)
-{
-  if (ir6->netbits >= 0)
-    {
-      ASSERT (ir6->netbits < MR_HELPER_NET_LEN);
-      mroute_helper_lock (mh);
-      ++mh->cache_generation;
-      ++mh->net_len_refcount[ir6->netbits];
-      if (mh->net_len_refcount[ir6->netbits] == 1)
-       mroute_helper_regenerate (mh);
-      mroute_helper_unlock (mh);
-    }
-}
-
-void
-mroute_helper_del_iroute6 (struct mroute_helper *mh, 
-                          const struct iroute_ipv6 *ir6)
-{
-  if (ir6->netbits >= 0)
-    {
-      ASSERT (ir6->netbits < MR_HELPER_NET_LEN);
-      mroute_helper_lock (mh);
-      ++mh->cache_generation;
-      --mh->net_len_refcount[ir6->netbits];
-      ASSERT (mh->net_len_refcount[ir6->netbits] >= 0);
-      if (!mh->net_len_refcount[ir6->netbits])
-       mroute_helper_regenerate (mh);
-      mroute_helper_unlock (mh);
     }
 }
 
index 7cecf79321fef2d71f63a7ddb3740b5ea1eb1ad2..6f98d140a14a4558f34e2775bada6ff8119bfb81 100644 (file)
--- a/options.c
+++ b/options.c
@@ -80,7 +80,7 @@ const char title_string[] =
 #ifdef ENABLE_EUREPHIA
   " [eurephia]"
 #endif
-  " [IPv6 payload 20100922-1]"
+  " [IPv6 payload 20110424-2 (2.2RC2)]"
   " built on " __DATE__
 ;
 
index 5d7a8c5128ed974bc672731a7b7ae16a7552bbf9..3520acaf5e4c8b2f79ce0f10f6d05a7c5d211433 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -2053,7 +2053,6 @@ print_in_addr_t (in_addr_t addr, unsigned int flags, struct gc_arena *gc)
 /*
  * Convert an in6_addr in host byte order
  * to an ascii representation of an IPv6 address
- * (we reuse the L_INET_NTOA mutex, no contention here)
  */
 const char *
 print_in6_addr (struct in6_addr a6, unsigned int flags, struct gc_arena *gc)
@@ -2064,10 +2063,8 @@ print_in6_addr (struct in6_addr a6, unsigned int flags, struct gc_arena *gc)
   if ( memcmp(&a6, &in6addr_any, sizeof(a6)) != 0 || 
        !(flags & IA_EMPTY_IF_UNDEF))
     {
-      mutex_lock_static (L_INET_NTOA);
       inet_ntop (AF_INET6, &a6, tmp_out_buf, sizeof(tmp_out_buf)-1);
       buf_printf (&out, "%s", tmp_out_buf );
-      mutex_unlock_static (L_INET_NTOA);
     }
   return BSTR (&out);
 }