From dd2eb5e5686655c996ae95285b8ad7eb73d63d0b Mon Sep 17 00:00:00 2001
From: Brandon Stepler <brandon@stepler.net>
Date: Mon, 15 Feb 2021 10:30:00 -0500
Subject: dhcp: T3300: add DHCP default route distance

---
 .../dhcp/dhclient-enter-hooks.d/03-vyos-ipwrapper  | 28 +++++++++++++++-------
 src/etc/dhcp/dhclient-exit-hooks.d/01-vyos-cleanup |  8 +++++--
 2 files changed, 25 insertions(+), 11 deletions(-)

(limited to 'src')

diff --git a/src/etc/dhcp/dhclient-enter-hooks.d/03-vyos-ipwrapper b/src/etc/dhcp/dhclient-enter-hooks.d/03-vyos-ipwrapper
index d1161e704..8d996209f 100644
--- a/src/etc/dhcp/dhclient-enter-hooks.d/03-vyos-ipwrapper
+++ b/src/etc/dhcp/dhclient-enter-hooks.d/03-vyos-ipwrapper
@@ -1,5 +1,8 @@
 # redefine ip command to use FRR when it is available
 
+# default route distance
+IF_METRIC=${IF_METRIC:-210}
+
 # get status of FRR
 function frr_alive () {
     /usr/lib/frr/watchfrr.sh all_status
@@ -15,11 +18,12 @@ function frr_alive () {
 # convert ip route command to vtysh
 function iptovtysh () {
     # prepare variables for vtysh command
-    local VTYSH_DISTANCE="210"
-    local VTYSH_TAG="210"
+    local VTYSH_ACTION=$3
     local VTYSH_NETADDR=""
     local VTYSH_GATEWAY=""
     local VTYSH_DEV=""
+    local VTYSH_TAG="210"
+    local VTYSH_DISTANCE=""
     # convert default route to 0.0.0.0/0
     if [ "$4" == "default" ] ; then
         VTYSH_NETADDR="0.0.0.0/0"
@@ -30,15 +34,21 @@ function iptovtysh () {
     if [[ ! $VTYSH_NETADDR =~ ^.*/[[:digit:]]+$ ]] ; then
         VTYSH_NETADDR="$VTYSH_NETADDR/32"
     fi
+    shift 4
     # get gateway address
-    if [ "$5" == "via" ] ; then
-        VTYSH_GATEWAY=$6
+    if [ "$1" == "via" ] ; then
+        VTYSH_GATEWAY=$2
+        shift 2
     fi
     # get device name
-    if [ "$5" == "dev" ]; then
-        VTYSH_DEV=$6
-    elif [ "$7" == "dev" ]; then
-        VTYSH_DEV=$8
+    if [ "$1" == "dev" ]; then
+        VTYSH_DEV=$2
+        shift 2
+    fi
+    # get distance
+    if [ "$1" == "metric" ]; then
+        VTYSH_DISTANCE=$2
+        shift 2
     fi
 
     # Add route to VRF routing table
@@ -49,7 +59,7 @@ function iptovtysh () {
     VTYSH_CMD="ip route $VTYSH_NETADDR $VTYSH_GATEWAY $VTYSH_DEV tag $VTYSH_TAG $VTYSH_DISTANCE $VTYSH_VRF"
 
     # delete route if the command is "del"
-    if [ "$3" == "del" ] ; then
+    if [ "$VTYSH_ACTION" == "del" ] ; then
         VTYSH_CMD="no $VTYSH_CMD"
     fi
     logmsg info "Converted vtysh command: \"$VTYSH_CMD\""
diff --git a/src/etc/dhcp/dhclient-exit-hooks.d/01-vyos-cleanup b/src/etc/dhcp/dhclient-exit-hooks.d/01-vyos-cleanup
index b768e1ae5..edb7c7b27 100644
--- a/src/etc/dhcp/dhclient-exit-hooks.d/01-vyos-cleanup
+++ b/src/etc/dhcp/dhclient-exit-hooks.d/01-vyos-cleanup
@@ -13,6 +13,8 @@ if [[ $reason =~ (EXPIRE|FAIL|RELEASE|STOP) ]]; then
     $hostsd_client --delete-name-servers --tag "dhcp-${interface}"
     hostsd_changes=y
 
+    if_metric="$IF_METRIC"
+
     # try to delete default ip route 
     for router in $old_routers; do
         # check if we are bound to a VRF
@@ -21,8 +23,10 @@ if [[ $reason =~ (EXPIRE|FAIL|RELEASE|STOP) ]]; then
             vrf="vrf $vrf_name"
         fi
 
-        logmsg info "Deleting default route: via $router dev ${interface} ${vrf}"
-        ip -4 route del default via $router dev ${interface} ${vrf}
+        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
-- 
cgit v1.2.3