summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-04-15 08:34:58 +0200
committerGitHub <noreply@github.com>2021-04-15 08:34:58 +0200
commit7a48396731ff41007c083440e2aae01dda747e72 (patch)
tree6109cb02589d2c2870f7aa0c7188f6099c8a0bc6
parentbafdc46e7af94b32aa3fed90c287ac170d764b7d (diff)
parent9ec8e2b6dc8144d4d5a17e53b1c183e22497580f (diff)
downloadvyos-1x-7a48396731ff41007c083440e2aae01dda747e72.tar.gz
vyos-1x-7a48396731ff41007c083440e2aae01dda747e72.zip
Merge pull request #807 from zdc/T3392-sagitta
dhclient: T3392: Changed dhclient-script hooks for VRF
-rw-r--r--src/etc/dhcp/dhclient-enter-hooks.d/03-vyos-ipwrapper21
-rw-r--r--src/etc/dhcp/dhclient-exit-hooks.d/01-vyos-cleanup10
2 files changed, 11 insertions, 20 deletions
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 fc035766b..74a7e83bf 100644
--- a/src/etc/dhcp/dhclient-enter-hooks.d/03-vyos-ipwrapper
+++ b/src/etc/dhcp/dhclient-enter-hooks.d/03-vyos-ipwrapper
@@ -3,6 +3,9 @@
# default route distance
IF_METRIC=${IF_METRIC:-210}
+# Check if interface is inside a VRF
+VRF_OPTION=$(/usr/sbin/ip -j -d link show ${interface} | awk '{if(match($0, /.*"master":"(\w+)".*"info_slave_kind":"vrf"/, IFACE_DETAILS)) printf("vrf %s", IFACE_DETAILS[1])}')
+
# get status of FRR
function frr_alive () {
/usr/lib/frr/watchfrr.sh all_status
@@ -51,12 +54,7 @@ function iptovtysh () {
shift 2
fi
- # Add route to VRF routing table
- local VTYSH_VRF_NAME=$(/usr/sbin/ip link show dev $VTYSH_DEV | sed -nre '1s/.* master ([^ ]*) .*/\1/p')
- if /usr/sbin/ip -d link show dev $VTYSH_DEV | grep -q "vrf_slave"; then
- VTYSH_VRF="vrf $VTYSH_VRF_NAME"
- fi
- VTYSH_CMD="ip route $VTYSH_NETADDR $VTYSH_GATEWAY $VTYSH_DEV tag $VTYSH_TAG $VTYSH_DISTANCE $VTYSH_VRF"
+ VTYSH_CMD="ip route $VTYSH_NETADDR $VTYSH_GATEWAY $VTYSH_DEV tag $VTYSH_TAG $VTYSH_DISTANCE $VRF_OPTION"
# delete route if the command is "del"
if [ "$VTYSH_ACTION" == "del" ] ; then
@@ -67,10 +65,10 @@ function iptovtysh () {
# delete the same route from kernel before adding new one
function delroute () {
- logmsg info "Checking if the route presented in kernel: $@"
- if /usr/sbin/ip route show $@ | grep -qx "$1 " ; then
- logmsg info "Deleting IP route: \"/usr/sbin/ip route del $@\""
- /usr/sbin/ip route del $@
+ logmsg info "Checking if the route presented in kernel: $@ $VRF_OPTION"
+ if /usr/sbin/ip route show $@ $VRF_OPTION | grep -qx "$1 " ; then
+ logmsg info "Deleting IP route: \"/usr/sbin/ip route del $@ $VRF_OPTION\""
+ /usr/sbin/ip route del $@ $VRF_OPTION
fi
}
@@ -90,8 +88,7 @@ function ip () {
else
# add ip route to kernel
logmsg info "Modifying routes in kernel: \"/usr/sbin/ip $@\""
- /usr/sbin/ip $@
+ /usr/sbin/ip $@ $VRF_OPTION
fi
fi
}
-
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 edb7c7b27..694d53b6b 100644
--- a/src/etc/dhcp/dhclient-exit-hooks.d/01-vyos-cleanup
+++ b/src/etc/dhcp/dhclient-exit-hooks.d/01-vyos-cleanup
@@ -17,14 +17,8 @@ if [[ $reason =~ (EXPIRE|FAIL|RELEASE|STOP) ]]; then
# 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 [ -n $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}
+ logmsg info "Deleting default route: via $router dev ${interface} ${if_metric:+metric $if_metric}"
+ ip -4 route del default via $router dev ${interface} ${if_metric:+metric $if_metric}
if_metric=$((if_metric+1))
done