]> www.infradead.org Git - users/dwmw2/vpnc-scripts.git/commitdiff
iproute2 5.1+ doesn't allow prefixlen!=32 in get
authorRafał Florczak <rafal.florczak@nokia.com>
Sun, 29 Sep 2019 20:05:46 +0000 (22:05 +0200)
committerRafał Florczak <rafal.florczak@nokia.com>
Sun, 29 Sep 2019 20:25:37 +0000 (22:25 +0200)
In order to set up routing exclusions properly, we now ask for routes without
specified prefixlen and later add it manually before calling `ip route add`.
Older versions of `ip` silently ignored the prefixlen -- as confirmed in:
https://www.spinics.net/lists/netdev/msg570803.html.

Reproduction:
$ ip route get 1.2.0.0/24
Error: ipv4: Invalid values in header for route get request.

Signed-off-by: Rafał Florczak <rafal.florczak@nokia.com>
vpnc-script

index 93c70cc51b8ed59fe5d2ccfefda2a78cb981f961..0133eb74c0769a8a4440340120f712629f18933e 100755 (executable)
@@ -226,7 +226,8 @@ destroy_tun_device() {
 if [ -n "$IPROUTE" ]; then
        fix_ip_get_output () {
                sed -e 's/ /\n/g' | \
-                   sed -ne '1p;/via/{N;p};/dev/{N;p};/src/{N;p};/mtu/{N;p}'
+                   sed -ne '1p;/via/{N;p};/dev/{N;p};/src/{N;p};/mtu/{N;p}' | \
+                   sed -e "1 s|$|${1}|"
        }
 
        set_vpngateway_route() {
@@ -265,7 +266,7 @@ if [ -n "$IPROUTE" ]; then
                NETWORK="$1"
                NETMASK="$2"
                NETMASKLEN="$3"
-               $IPROUTE route add `$IPROUTE route get "$NETWORK/$NETMASKLEN" | fix_ip_get_output`
+               $IPROUTE route add `$IPROUTE route get "$NETWORK" | fix_ip_get_output "/$NETMASKLEN"`
                $IPROUTE route flush cache 2>/dev/null
        }
 
@@ -320,7 +321,7 @@ if [ -n "$IPROUTE" ]; then
                # (keep traffic separate from VPN tunnel)
                NETWORK="$1"
                NETMASKLEN="$2"
-               $IPROUTE -6 route add `$IPROUTE route get "$NETWORK/$NETMASKLEN" | fix_ip_get_output`
+               $IPROUTE -6 route add `$IPROUTE route get "$NETWORK" | fix_ip_get_output "/$NETMASKLEN"`
                $IPROUTE route flush cache 2>/dev/null
        }