Your patch has been applied to the master branch. Tested with t_client test, one binary with --enable-iproute2, one without.
"Route add"-Diffs look nicely different, including the /128 bypass... Wed Jun 5 11:09:02 2019 /bin/ip route add 194.97.144.0/24 via x.x.x.73 Wed Jun 5 11:09:02 2019 add_route_ipv6(2001:x:x:x::f000:11/128 -> fe80::250:43ff:fe01:dc37 metric 1) dev enp0s25 Wed Jun 5 11:09:02 2019 /bin/ip -6 route add 2001:x:x:x::f000:11/128 dev enp0s25 via fe80::250:43ff:fe01:dc37 metric 1 Wed Jun 5 11:09:02 2019 add_route_ipv6(2001:608::/32 -> 2001:x:x:x::1 metric -1) dev tun0 Wed Jun 5 11:09:02 2019 /bin/ip -6 route add 2001:608::/32 dev tun0 Wed Jun 5 11:09:21 2019 net_route_v4_add: 194.97.144.0/24 via x.x.x.73 dev [NULL] table 0 metric -1 Wed Jun 5 11:09:21 2019 add_route_ipv6(2001:x:x:x::f000:11/128 -> fe80::250:43ff:fe01:dc37 metric 1) dev enp0s25 Wed Jun 5 11:09:21 2019 net_route_v6_add: 2001:x:x:x::f000:11/128 via fe80::250:43ff:fe01:dc37 dev enp0s25 table 0 metric 1 Wed Jun 5 11:09:21 2019 add_route_ipv6(2001:608::/32 -> 2001:x:x:x::1 metric -1) dev tun0 Wed Jun 5 11:09:21 2019 net_route_v6_add: 2001:608::/32 via :: dev tun0 table 0 metric -1 .. but the resulting output of "ip route" + "ip -6 route" is exactly the same. Well done :-) OTOH... :-) - looking at all the changes needed to transport &c->net_ctx, I wonder why you didn't just hide it in c->c1.tuntap, as we did for the windows socket... (tt->options.msg_channel). Almost everything related to "routing and ifconfig" needs to have the tt pointer available already today... Warts: +#else + const char *iface; + int metric; +#endif .. I think this really should be inside the #ifdef TARGET_LINUX block, not outside in an #else for an #if !defined(TARGET_LINUX)... so the code further down would then become #if defined(TARGET_LINUX) const char *ifcace = NULL; if (is_on_link(...)) .. having declaration and initialization in one place, and "where it belongs". Same thing for add_route_ipv6()... +#if defined(TARGET_LINUX) + int metric; +#endif .. this is adding an extra #ifdef and taking 3 extra lines instead of just having "int metric = -1;" down where it's initialized. delete_route() sports this beauty... +#if !defined(TARGET_LINUX) const char *network; #if !defined(ENABLE_IPROUTE) && !defined(TARGET_AIX) const char *netmask; #endif #if !defined(TARGET_LINUX) && !defined(TARGET_ANDROID) const char *gateway; +#endif .. so you have two linux-specific defines (ENABLE_IPROUTE and TARGET_LINUX) *inside* an "#if !defined(TARGET_LINUX)"... plus the "metric" thing... commit aec4a3d1b6a9e4d9e584b368126da061c15b174b Author: Antonio Quartulli Date: Wed Dec 19 15:01:15 2018 +1000 route.c: use new networking API to handle routing table on Linux Signed-off-by: Antonio Quartulli <a...@unstable.cc> Acked-by: Arne Schwabe <a...@rfc2549.org> Message-Id: <20181219050118.6568-...@unstable.cc> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg18029.html Signed-off-by: Gert Doering <g...@greenie.muc.de> -- kind regards, Gert Doering _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel