From 78467d27ff1b397e979633c8413d67b63372ac48 Mon Sep 17 00:00:00 2001 From: alarig Date: Fri, 25 Jan 2019 13:45:25 +0100 Subject: [PATCH] Reinsert IPv4 in case of failure --- creationRoutesVM.sh | 46 ++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/creationRoutesVM.sh b/creationRoutesVM.sh index b8b2e73..21b2d66 100755 --- a/creationRoutesVM.sh +++ b/creationRoutesVM.sh @@ -20,6 +20,30 @@ write_log() { fi } +add_ipv4_route(){ + VM_IPV4=$1 + IFACE=$2 + MAC=$3 + + # Ajout de la route associée + COMMAND="ip -4 route add ${VM_IPV4}/32 dev ${IFACE}" + echo "${COMMAND}" + write_log INFO "${COMMAND}" + ${COMMAND} + + # Updating ARP + COMMAND="ip neigh add ${VM_IPV4} lladdr ${MAC} dev ${IFACE}" + echo "${COMMAND}" + write_log INFO "${COMMAND}" + ${COMMAND} + + # If the previous command fails, it’s because trafic has + # already be sent to the VM + if [ $? = 2 ]; then + ip neigh replace ${VM_IPV4} lladdr ${MAC} dev ${IFACE} + fi +} + # IPAM creds CREDS_FILE='/usr/local/etc/proxmox-routing/creds' if [ -f $CREDS_FILE ]; then @@ -183,23 +207,11 @@ for ID_RANGE_V4 in ${ID_RANGES_V4}; do # Si la valeur n'est pas vide et correspond à une IPV4 if [ -n "${VM_IPV4}" ]; then - # Ajout de la route associée - COMMAND="ip -4 route add ${VM_IPV4}/32 dev ${IFACE}" - echo "${COMMAND}" - write_log INFO "${COMMAND}" - ${COMMAND} - - # Updating ARP - COMMAND="ip neigh add ${VM_IPV4} lladdr ${MAC} dev ${IFACE}" - echo "${COMMAND}" - write_log INFO "${COMMAND}" - ${COMMAND} - - # If the previous command fails, it’s because trafic has - # already be sent to the VM - if [ $? = 2 ]; then - ip neigh replace ${VM_IPV4} lladdr ${MAC} dev ${IFACE} - fi + add_ipv4_route ${VM_IPV4} ${IFACE} ${MAC} + while [ "$( ip route sh dev ${IFACE})" = "" ]; do + add_ipv4_route ${VM_IPV4} ${IFACE} ${MAC} + sleep 1 + done GW_IPv4=$(jq -r ".data[] | select(.is_gateway==\"1\") | .ip" ${CHEMIN_CACHE}/${ID_RANGE_V4}) else