From e515acd7be347ba853dcb3b7cc26d277e6d4d2b9 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Thu, 22 Aug 2013 17:45:12 -0700 Subject: [PATCH] CLOUDSTACK-4199: Only use ifdown/ifup for the un-configured eth2 Seems the behavior of ifdown/ifup changed in new version, that it would only enable the default IP of eth2, regardless we can configure additional ips for it. So we would always use ifconfig for interface control whenever possible(a.k.a eth2 already got ip addresses). When VR is booting up, ipassoc command hasn't been delivered, it's possible that eth2 doesn't have any ip address, then ifconfig would fail because it doesn't know how to find the ip for eth2. So in this only case, we would use ifdown/ifup to set the ip address according to /etc/network/interfaces. It can potentially racy againest ipassoc command, but biglock should prevent racy condition from happening. --- .../config/root/redundant_router/enable_pubip.sh.templ | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/patches/systemvm/debian/config/root/redundant_router/enable_pubip.sh.templ b/patches/systemvm/debian/config/root/redundant_router/enable_pubip.sh.templ index 3e22c0d0a55..0e2d03a9041 100644 --- a/patches/systemvm/debian/config/root/redundant_router/enable_pubip.sh.templ +++ b/patches/systemvm/debian/config/root/redundant_router/enable_pubip.sh.templ @@ -16,14 +16,18 @@ # specific language governing permissions and limitations # under the License. +ip link|grep BROADCAST|grep -v eth0|grep -v eth1|cut -d ":" -f 2 > /tmp/iflist +ip addr show eth2 | grep "inet" 2>&1 > /dev/null +is_init=$? + set -e -ip link|grep BROADCAST|grep -v eth0|grep -v eth1|cut -d ":" -f 2 > /tmp/iflist while read i do - if [ "$i" == "eth2" ] + # if eth2'ip has already been configured, we would use ifconfig rather than ifdown/ifup + if [ "$i" == "eth2" -a "$is_init" != "0" ] then - ifdown $i --force + ifdown $i ifup $i else ifconfig $i down