## ## VyOS cleanup ## # NOTE: here we use 'ip' wrapper, therefore a route will be actually deleted via ip or vtysh, according to the system state hostsd_client="/usr/bin/vyos-hostsd-client" hostsd_changes= # check vyos-hostsd status /usr/bin/systemctl -q is-active vyos-hostsd hostsd_status=$? if [[ $reason =~ (EXPIRE|FAIL|RELEASE|STOP) ]]; then if [[ $hostsd_status -eq 0 ]]; then # delete search domains and nameservers via vyos-hostsd logmsg info "Deleting search domains with tag \"dhcp-$interface\" via vyos-hostsd-client" $hostsd_client --delete-search-domains --tag "dhcp-$interface" logmsg info "Deleting nameservers with tag \"dhcp-${interface}\" via vyos-hostsd-client" $hostsd_client --delete-name-servers --tag "dhcp-${interface}" hostsd_changes=y fi if_metric="$IF_METRIC" # try to delete default ip route for router in $old_routers; do # check if we are bound to a VRF local vrf_name=$(basename /sys/class/net/${interface}/upper_* | sed -e 's/upper_//') if [ "$vrf_name" != "*" ]; then vrf="vrf $vrf_name" fi logmsg info "Deleting default route: via $router dev ${interface} ${if_metric:+metric $if_metric} ${vrf}" ip -4 route del default via $router dev ${interface} ${if_metric:+metric $if_metric} ${vrf} if_metric=$((if_metric+1)) done # delete rfc3442 routes if [ -n "$old_rfc3442_classless_static_routes" ]; then set -- $old_rfc3442_classless_static_routes while [ $# -gt 0 ]; do net_length=$1 via_arg='' case $net_length in 32|31|30|29|28|27|26|25) if [ $# -lt 9 ]; then return 1 fi net_address="${2}.${3}.${4}.${5}" gateway="${6}.${7}.${8}.${9}" shift 9 ;; 24|23|22|21|20|19|18|17) if [ $# -lt 8 ]; then return 1 fi net_address="${2}.${3}.${4}.0" gateway="${5}.${6}.${7}.${8}" shift 8 ;; 16|15|14|13|12|11|10|9) if [ $# -lt 7 ]; then return 1 fi net_address="${2}.${3}.0.0" gateway="${4}.${5}.${6}.${7}" shift 7 ;; 8|7|6|5|4|3|2|1) if [ $# -lt 6 ]; then return 1 fi net_address="${2}.0.0.0" gateway="${3}.${4}.${5}.${6}" shift 6 ;; 0) # default route if [ $# -lt 5 ]; then return 1 fi net_address="0.0.0.0" gateway="${2}.${3}.${4}.${5}" shift 5 ;; *) # error return 1 ;; esac # take care of link-local routes if [ "${gateway}" != '0.0.0.0' ]; then via_arg="via ${gateway}" fi # delete route (ip detects host routes automatically) ip -4 route del "${net_address}/${net_length}" \ ${via_arg} dev "${interface}" >/dev/null 2>&1 done fi fi if [[ $reason =~ (EXPIRE6|RELEASE6|STOP6) ]]; then if [[ $hostsd_status -eq 0 ]]; then # delete search domains and nameservers via vyos-hostsd logmsg info "Deleting search domains with tag \"dhcpv6-$interface\" via vyos-hostsd-client" $hostsd_client --delete-search-domains --tag "dhcpv6-$interface" logmsg info "Deleting nameservers with tag \"dhcpv6-${interface}\" via vyos-hostsd-client" $hostsd_client --delete-name-servers --tag "dhcpv6-${interface}" hostsd_changes=y fi fi if [ $hostsd_changes ]; then logmsg info "Applying changes via vyos-hostsd-client" $hostsd_client --apply else logmsg info "No changes to apply via vyos-hostsd-client" fi