Am 11.09.15 um 17:33 schrieb Gert Doering:
> - socket.[ch]: add link_socket_current_remote_ipv6() helper to extract
>    current address of remote VPN server (if IPv6, NULL otherwise), IPv6
>    equivalent to link_socket_current_remote()
> 
> - init.c: pass remote VPN server address to init_route_ipv6_list()
>    (link_socket_current_remote_ipv6())
> 
> - route.h: add route_ipv6_gateway_info to route_ipv6_list, and reorder
>    structures so that this actually compiles.  Add iface/adapter_index
>    to struct route_ipv6 (for non-tun/tap routes).
> 
> - route.[ch]: add "const" to *dest argument to get_default_gateway_ipv6()
> 
> - route.c: add route_ipv6_match_host() helper to check whether an IPv6
>    address is matched by a given "route_ipv6" IPv6 route)
> 
> - route.c: init_route_ipv6_list()
>    - call get_default_gateway_ipv6()
>    - check to-be-installed IPv6 routes against VPN server address (if IPv6)
>    - if an overlap is seen, add a host route for the VPN server address
>      via the just-discovered gateway to the list of IPv6 routes to be
>      installed (rl6->routes_ipv6)
>    - warn if overlap is detected but platform code has not been able to
>      discover IPv6 default gateway
> 
> - route.c: add_route_ipv6() / delete_route_ipv6(): set "device" to
>    "external default gateway interface" (r6->iface) instead of TUN/TAP
>    device (if set), which nicely enables arbitrary gateway/interface
>    combinations for Linux
> 
> - ssl.c: add "IV_RGI6=1" to push-peer-info data to let server know we can
>   handle pushed IPv6 routes that overlap with server IPv6 address
> 
> - tun.c: when adding/removing on-link routes, CLEAR(r6) first to
>   ensure new struct route_ipv6 members are cleared
> 
> Tested on Linux with iproute2 and /bin/route, on eth and tun routes.
> 

I think we may need an (explicit) opt out of the mechanism. Currently
the code that inserts the IPv6 host route will always run.

Arne


Reply via email to