From 92d359dcc8d20ab1f47ae65de6610fe529ca957e Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Thu, 12 Sep 2019 10:57:36 -0700 Subject: [PATCH] [201811][dhcp_relay] Properly wait for routed interfaces to be ready before starting relay agent (#3442) --- dockers/docker-dhcp-relay/wait_for_intf.sh.j2 | 28 +++++++++-------- .../tests/sample_output/wait_for_intf.sh | 30 +++++++------------ 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/dockers/docker-dhcp-relay/wait_for_intf.sh.j2 b/dockers/docker-dhcp-relay/wait_for_intf.sh.j2 index 23133706cb..f697b2432d 100644 --- a/dockers/docker-dhcp-relay/wait_for_intf.sh.j2 +++ b/dockers/docker-dhcp-relay/wait_for_intf.sh.j2 @@ -2,21 +2,17 @@ STATE_DB_IDX="6" -PORT_TABLE_PREFIX="PORT_TABLE" -VLAN_TABLE_PREFIX="VLAN_TABLE" -LAG_TABLE_PREFIX="LAG_TABLE" - function wait_until_iface_ready { - TABLE_PREFIX=$1 - IFACE=$2 + IFACE_NAME=$1 + IFACE_CIDR=$2 - echo "Waiting until interface $IFACE is ready..." + echo "Waiting until interface ${IFACE_NAME} is ready..." # Wait for the interface to come up # (i.e., interface is present in STATE_DB and state is "ok") while true; do - RESULT=$(redis-cli -n ${STATE_DB_IDX} HGET "${TABLE_PREFIX}|${IFACE}" "state" 2> /dev/null) + RESULT=$(redis-cli -n ${STATE_DB_IDX} HGET "INTERFACE_TABLE|${IFACE_NAME}|${IFACE_CIDR}" "state" 2> /dev/null) if [ x"$RESULT" == x"ok" ]; then break fi @@ -24,17 +20,23 @@ function wait_until_iface_ready sleep 1 done - echo "Interface ${IFACE} is ready!" + echo "Interface ${IFACE_NAME} is ready!" } -# Wait for all interfaces to be up and ready +# Wait for all interfaces with IPv4 addresses to be up and ready {% for (name, prefix) in INTERFACE %} -wait_until_iface_ready ${PORT_TABLE_PREFIX} {{ name }} +{% if prefix | ipv4 %} +wait_until_iface_ready {{ name }} {{ prefix }} +{% endif %} {% endfor %} {% for (name, prefix) in VLAN_INTERFACE %} -wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }} +{% if prefix | ipv4 %} +wait_until_iface_ready {{ name }} {{ prefix }} +{% endif %} {% endfor %} {% for (name, prefix) in PORTCHANNEL_INTERFACE %} -wait_until_iface_ready ${LAG_TABLE_PREFIX} {{ name }} +{% if prefix | ipv4 %} +wait_until_iface_ready {{ name }} {{ prefix }} +{% endif %} {% endfor %} diff --git a/src/sonic-config-engine/tests/sample_output/wait_for_intf.sh b/src/sonic-config-engine/tests/sample_output/wait_for_intf.sh index 383f7cb389..918f0b6e16 100644 --- a/src/sonic-config-engine/tests/sample_output/wait_for_intf.sh +++ b/src/sonic-config-engine/tests/sample_output/wait_for_intf.sh @@ -2,21 +2,17 @@ STATE_DB_IDX="6" -PORT_TABLE_PREFIX="PORT_TABLE" -VLAN_TABLE_PREFIX="VLAN_TABLE" -LAG_TABLE_PREFIX="LAG_TABLE" - function wait_until_iface_ready { - TABLE_PREFIX=$1 - IFACE=$2 + IFACE_NAME=$1 + IFACE_CIDR=$2 - echo "Waiting until interface $IFACE is ready..." + echo "Waiting until interface ${IFACE_NAME} is ready..." # Wait for the interface to come up # (i.e., interface is present in STATE_DB and state is "ok") while true; do - RESULT=$(redis-cli -n ${STATE_DB_IDX} HGET "${TABLE_PREFIX}|${IFACE}" "state" 2> /dev/null) + RESULT=$(redis-cli -n ${STATE_DB_IDX} HGET "INTERFACE_TABLE|${IFACE_NAME}|${IFACE_CIDR}" "state" 2> /dev/null) if [ x"$RESULT" == x"ok" ]; then break fi @@ -24,18 +20,14 @@ function wait_until_iface_ready sleep 1 done - echo "Interface ${IFACE} is ready!" + echo "Interface ${IFACE_NAME} is ready!" } -# Wait for all interfaces to be up and ready -wait_until_iface_ready ${VLAN_TABLE_PREFIX} Vlan1000 -wait_until_iface_ready ${LAG_TABLE_PREFIX} PortChannel01 -wait_until_iface_ready ${LAG_TABLE_PREFIX} PortChannel01 -wait_until_iface_ready ${LAG_TABLE_PREFIX} PortChannel02 -wait_until_iface_ready ${LAG_TABLE_PREFIX} PortChannel02 -wait_until_iface_ready ${LAG_TABLE_PREFIX} PortChannel03 -wait_until_iface_ready ${LAG_TABLE_PREFIX} PortChannel03 -wait_until_iface_ready ${LAG_TABLE_PREFIX} PortChannel04 -wait_until_iface_ready ${LAG_TABLE_PREFIX} PortChannel04 +# Wait for all interfaces with IPv4 addresses to be up and ready +wait_until_iface_ready Vlan1000 192.168.0.1/27 +wait_until_iface_ready PortChannel01 10.0.0.56/31 +wait_until_iface_ready PortChannel02 10.0.0.58/31 +wait_until_iface_ready PortChannel03 10.0.0.60/31 +wait_until_iface_ready PortChannel04 10.0.0.62/31