[DHCP relay]: Wait for all interfaces to be assigned IPv4 addresses before starting relay agent(s) (#1173)

This commit is contained in:
Joe LeVeque 2017-11-20 21:07:28 -08:00 committed by GitHub
parent dc9f19e90d
commit 1f9107d044
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 9 deletions

View File

@ -6,7 +6,12 @@ rm -f /var/run/rsyslogd.pid
# Start rsyslog
supervisorctl start rsyslogd
# Wait for all interfaces to come up before starting the DHCP relay agent(s)
# Wait for all interfaces to come up and be assigned IPv4 addresses before
# starting the DHCP relay agent(s). If an interface the relay should listen
# on is down, the relay agent will not start. If an interface the relay should
# listen on is up but does not have an IP address assigned when the relay
# agent starts, it will not listen or send on that interface for the lifetime
# of the process.
/usr/bin/wait_for_intf.sh
# Start the DHCP relay agent(s)

View File

@ -1,27 +1,42 @@
#!/usr/bin/env bash
function wait_until_iface_exists
function wait_until_iface_ready
{
IFACE=$1
echo "Waiting for interface ${IFACE}..."
echo "Waiting until interface $IFACE is up..."
# Wait for the interface to come up (i.e., 'ip link show' returns 0)
until ip link show $IFACE > /dev/null 2>&1; do
until ip link show dev $IFACE up > /dev/null 2>&1; do
sleep 1
done
echo "Interface ${IFACE} is created"
echo "Interface $IFACE is up"
echo "Waiting until interface $IFACE has an IPv4 address..."
# Wait until the interface gets assigned an IPv4 address
while true; do
IP=$(ip -4 addr show dev $IFACE | grep "inet " | awk '{ print $2 }' | cut -d '/' -f1)
if [ -n "$IP" ]; then
break
fi
sleep 1
done
echo "Interface $IFACE is configured with IP $IP"
}
# Wait for all interfaces to come up before starting the DHCP relay
# Wait for all interfaces to come up and have IPv4 addresses assigned
{% for (name, prefix) in INTERFACE %}
wait_until_iface_exists {{ name }}
wait_until_iface_ready {{ name }}
{% endfor %}
{% for (name, prefix) in VLAN_INTERFACE %}
wait_until_iface_exists {{ name }}
wait_until_iface_ready {{ name }}
{% endfor %}
{% for (name, prefix) in PORTCHANNEL_INTERFACE %}
wait_until_iface_exists {{ name }}
wait_until_iface_ready {{ name }}
{% endfor %}