#!/bin/sh # As PPPoE is an "on demand" interface we need to re-configure it when it # becomes up if [ "$6" != "{{ ifname }}" ]; then exit fi {% if ipv6 is defined and ipv6.address is defined and ipv6.address.autoconf is defined %} # add some info to syslog DIALER_PID=$(cat /var/run/{{ ifname }}.pid) logger -t pppd[$DIALER_PID] "executing $0" logger -t pppd[$DIALER_PID] "configuring interface {{ ifname }} via {{ source_interface }}" # Configure interface-specific Host/Router behaviour. # Note: It is recommended to have the same setting on all interfaces; mixed # router/host scenarios are rather uncommon. Possible values are: # # 0 Forwarding disabled # 1 Forwarding enabled # echo 1 > /proc/sys/net/ipv6/conf/{{ ifname }}/forwarding # Accept Router Advertisements; autoconfigure using them. # # It also determines whether or not to transmit Router # Solicitations. If and only if the functional setting is to # accept Router Advertisements, Router Solicitations will be # transmitted. Possible values are: # # 0 Do not accept Router Advertisements. # 1 Accept Router Advertisements if forwarding is disabled. # 2 Overrule forwarding behaviour. Accept Router Advertisements # even if forwarding is enabled. # echo 2 > /proc/sys/net/ipv6/conf/{{ ifname }}/accept_ra {% if default_route == 'none' %} # Prevent learning of default router from router advertisements echo 0 > /proc/sys/net/ipv6/conf/{{ ifname }}/accept_ra_defrtr {% else %} # Enable learning of default router from router advertisements echo 1 > /proc/sys/net/ipv6/conf/{{ ifname }}/accept_ra_defrtr {% endif %} # Autoconfigure addresses using Prefix Information in Router Advertisements. echo 1 > /proc/sys/net/ipv6/conf/{{ ifname }}/autoconf {% endif %} {% if dhcpv6_options is defined and dhcpv6_options.pd is defined %} # Start wide dhcpv6 client systemctl restart dhcp6c@{{ ifname }}.service {% endif %} {% if default_route != 'none' %} # See https://vyos.dev/T2248 & T2220. Determine if we are enslaved # to a VRF, this is needed to properly insert the default route. SED_OPT="^ipv6 route" VRF_NAME="" if [ -d /sys/class/net/{{ ifname }}/upper_* ]; then # Determine upper (VRF) interface VRF=$(basename $(ls -d /sys/class/net/{{ ifname }}/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 {% if default_route == 'auto' %} # Only insert a new default route if there is no default route configured routes=$(vtysh -c "show running-config" | sed -n "/${SED_OPT}/,/!/p" | grep ::/0 | wc -l) if [ "$routes" -ne 0 ]; then exit 1 fi {% elif default_route == 'force' %} # Retrieve current static default routes and remove it from the routing table vtysh -c "show running-config" | sed -n "/${SED_OPT}/,/!/p" | grep ::/0 | while read route ; do vtysh -c "conf t" ${VTY_OPT} -c "no ${route} ${VRF_NAME}" done {% endif %} # Add default route to default or VRF routing table vtysh -c "conf t" ${VTY_OPT} -c "ipv6 route ::/0 {{ ifname }} ${VRF_NAME}" logger -t pppd[$DIALER_PID] "added default route via {{ ifname }} ${VRF_NAME}" {% endif %}