summaryrefslogtreecommitdiff
path: root/data/templates/pppoe
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-04-04 18:52:15 +0200
committerChristian Poessinger <christian@poessinger.com>2020-04-04 18:52:15 +0200
commit6e0e210920de7984ec4e655cd679ab8c66dfebe5 (patch)
treecd173edbcf8a32ffe15280a5e0664319303a3f23 /data/templates/pppoe
parent9ebef9e13c1bd3718b8fafabdfd78c33412b8722 (diff)
downloadvyos-1x-6e0e210920de7984ec4e655cd679ab8c66dfebe5.tar.gz
vyos-1x-6e0e210920de7984ec4e655cd679ab8c66dfebe5.zip
pppoe: T2219: support adding default route to VRF
Diffstat (limited to 'data/templates/pppoe')
-rw-r--r--data/templates/pppoe/ip-down.script.tmpl18
-rw-r--r--data/templates/pppoe/ip-up.script.tmpl36
2 files changed, 39 insertions, 15 deletions
diff --git a/data/templates/pppoe/ip-down.script.tmpl b/data/templates/pppoe/ip-down.script.tmpl
index f90da02bc..e76875f12 100644
--- a/data/templates/pppoe/ip-down.script.tmpl
+++ b/data/templates/pppoe/ip-down.script.tmpl
@@ -2,7 +2,6 @@
# As PPPoE is an "on demand" interface we need to re-configure it when it
# becomes up
-
if [ "$6" != "{{ intf }}" ]; then
exit
fi
@@ -11,6 +10,17 @@ fi
DIALER_PID=$(cat /var/run/{{ intf }}.pid)
logger -t pppd[$DIALER_PID] "executing $0"
-# Debian PPP version has no support for replacing an existing default route
-# thus we emulate this ba an ip-up script https://phabricator.vyos.net/T2220.
-vtysh -c "conf t" -c "no ip route 0.0.0.0/0 {{ intf }}"
+# Determine if we are enslaved to a VRF, this is needed to properly insert
+# the default route
+VRF_NAME=""
+if [ -d /sys/class/net/{{ intf }}/upper_* ]; then
+ # Determine upper (VRF) interface
+ VRF=$(basename $(ls -d /sys/class/net/{{ intf }}/upper_*))
+ # Remove upper_ prefix from result string
+ VRF=${VRF#"upper_"}
+ # Populate variable to run in VR context
+ VRF_NAME="vrf ${VRF_NAME}"
+fi
+
+# Always delete default route when interface goes down
+vtysh -c "conf t" ${VRF_NAME} -c "no ip route 0.0.0.0/0 {{ intf }} ${VRF_NAME}"
diff --git a/data/templates/pppoe/ip-up.script.tmpl b/data/templates/pppoe/ip-up.script.tmpl
index c6aa02e9e..4cc779914 100644
--- a/data/templates/pppoe/ip-up.script.tmpl
+++ b/data/templates/pppoe/ip-up.script.tmpl
@@ -6,28 +6,42 @@ if [ "$6" != "{{ intf }}" ]; then
exit
fi
+set -x
+
# add some info to syslog
DIALER_PID=$(cat /var/run/{{ intf }}.pid)
logger -t pppd[$DIALER_PID] "executing $0"
+SED_OPT="ip route"
+VRF_NAME=""
+if [ -d /sys/class/net/{{ intf }}/upper_* ]; then
+ # Determine upper (VRF) interface
+ VRF=$(basename $(ls -d /sys/class/net/{{ intf }}/upper_*))
+ # Remove upper_ prefix from result string
+ VRF=${VRF#"upper_"}
+ # generate new SED command
+ SED_OPT="vrf ${VRF}"
+ # generate vtysh option
+ VRF_NAME="vrf ${VRF}"
+fi
+
# Debian PPP version has no support for replacing an existing default route
# thus we emulate this ba an ip-up script https://phabricator.vyos.net/T2220.
-
{% if 'auto' in default_route -%}
-
# only insert a new default route if there is no default route configured
-routes=$(vtysh -c "show running-config" | sed -n "/ip route/,/!/p" | grep 0.0.0.0/0 | wc -l)
-if [ "$routes" -eq 0 ]; then
- # No VRF, use default routing table
- vtysh -c "conf t" -c "ip route 0.0.0.0/0 {{ intf }}"
+routes=$(vtysh -c "show running-config" | sed -n "/${SED_OPT}/,/!/p" | grep 0.0.0.0/0 | wc -l)
+if [ "$routes" -ne 0 ]; then
+ exit 1
fi
{% elif 'force' in default_route -%}
-
# Retrieve current static default routes and remove it from the routing table
-vtysh -c "show running-config" | sed -n "/ip route/,/!/p" | grep 0.0.0.0/0 | while read route ; do
- vtysh -c "conf t" -c "no ${route}"
+vtysh -c "show running-config" | sed -n "/${SED_OPT}/,/!/p" | grep 0.0.0.0/0 | while read route ; do
+ vtysh -c "conf t" ${VTY_OPT} -c "no ${route} ${VRF_NAME}"
done
-# No VRF, use default routing table
-vtysh -c "conf t" -c "ip route 0.0.0.0/0 {{ intf }}"
{% endif %}
+
+# Add default route to default or VRF routing table
+vtysh -c "conf t" ${VTY_OPT} -c "ip route 0.0.0.0/0 {{ intf }} ${VRF_NAME}"
+logger -t pppd[$DIALER_PID] "added default route via {{ intf }} ${VRF_NAME}"
+