]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Haiku: Introduce basic platform / tun support
authorAlexander von Gluck <alex@terarocket.io>
Thu, 28 Nov 2024 10:15:38 +0000 (11:15 +0100)
committerGert Doering <gert@greenie.muc.de>
Thu, 28 Nov 2024 11:19:38 +0000 (12:19 +0100)
* Special thanks to Sean Brady's hard work in GSoC 2023 towards creating
  a TUN/TAP driver for Haiku!
* More kudos to Augustin Cavalier for making it functional :-)

Signed-off-by: Alexander von Gluck <alex@terarocket.io>
Acked-by: Gert Doering <gert@greenie.muc.de>
Change-Id: I9a278374f492a538f0c174ced1746c3b1f82b8c9
Message-Id: <20241128101538.12810-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg29947.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
INSTALL
configure.ac
src/openvpn/tun.c

diff --git a/INSTALL b/INSTALL
index 6007338f5e5015f8b35a8f11f04cde10332b6551..973927222eaac50677d15e7e777d00c4a0aade65 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -263,6 +263,16 @@ TUN/TAP Driver References:
 
     http://www.whiteboard.ne.jp/~admin2/tuntap/
 
+* Haiku:
+
+   Haiku can't yet dynamically create TUN/TAP devices, so you need to manually
+   create one before running openvpn:
+
+     # ifconfig tun/0 up
+
+   A standard reference the dev as "tun" in your config is all that's needed
+   to use the tunnel device.
+
 * Windows
 
   OpenVPN on Windows needs a TUN/TAP kernel driver to work. OpenVPN installers
index 0876a6a5834c1b9085fdf6638c7b2427be01751d..7f6e43dd5b1b9c5962b66599e7309b21315d1f31 100644 (file)
@@ -368,6 +368,11 @@ case "$host" in
                have_tap_header="yes"
                ac_cv_header_net_if_h="no"      # exists, but breaks things
                ;;
+       *-*-haiku*)
+               AC_DEFINE([TARGET_HAIKU], [1], [Are we running Haiku?])
+               AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["H"], [Target prefix])
+               LIBS="${LIBS} -lnetwork"
+               ;;
        *)
                AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["X"], [Target prefix])
                have_tap_header="yes"
index 85fe01afa0ab99b5b44e99d4b7d05c9d5fc597bf..29d823ddfe0a4a2c9bc22dc6dd2ca7f4afea3993 100644 (file)
@@ -1631,6 +1631,13 @@ do_ifconfig_ipv4(struct tuntap *tt, const char *ifname, int tun_mtu,
     {
         windows_set_mtu(tt->adapter_index, AF_INET, tun_mtu);
     }
+#elif defined(TARGET_HAIKU)
+    /* example: ifconfig tun/0 inet 1.1.1.1 255.255.255.0 mtu 1450 up */
+    argv_printf(&argv, "%s %s inet %s %s mtu %d up", IFCONFIG_PATH,
+                ifname, ifconfig_local, ifconfig_remote_netmask, tun_mtu);
+
+    argv_msg(M_INFO, &argv);
+    openvpn_execve_check(&argv, es, S_FATAL, "Haiku ifconfig failed");
 #else  /* if defined(TARGET_LINUX) */
     msg(M_FATAL, "Sorry, but I don't know how to do 'ifconfig' commands on this operating system.  You should ifconfig your TUN/TAP device manually or use an --up script.");
 #endif /* if defined(TARGET_LINUX) */
@@ -1909,10 +1916,15 @@ open_tun_generic(const char *dev, const char *dev_type, const char *dev_node,
         {
             for (int i = 0; i < 256; ++i)
             {
+                /* some platforms have a dedicated directory per driver */
+                char *sep = "";
+#if defined(TARGET_HAIKU)
+                sep = "/";
+#endif
                 snprintf(tunname, sizeof(tunname),
-                         "/dev/%s%d", dev, i);
+                         "/dev/%s%s%d", dev, sep, i);
                 snprintf(dynamic_name, sizeof(dynamic_name),
-                         "%s%d", dev, i);
+                         "%s%s%d", dev, sep, i);
                 if ((tt->fd = open(tunname, O_RDWR)) > 0)
                 {
                     dynamic_opened = true;