CLOUDSTACK-6062: nic device ids don't always correspond to

'eth' device numbers, but vpc scripts require it. Now we match
based on mac.
This commit is contained in:
Marcus Sorensen 2014-02-07 14:59:40 -07:00
parent 3384633834
commit c39ec1eb8f
3 changed files with 53 additions and 12 deletions

View File

@ -637,6 +637,7 @@ public class VirtualRoutingResource {
String netmask = NetUtils.getSubNet(routerGIP, nic.getNetmask());
String args = " -C";
args += " -M " + nic.getMac();
args += " -d " + dev;
args += " -i " + routerGIP;
args += " -g " + gateway;
@ -677,6 +678,7 @@ public class VirtualRoutingResource {
ExecutionResult result;
String args = " -d " + dev;
args += " -M " + nic.getMac();
if (privateGw != null) {
args += " -a " + rule;
result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), "vpc_privategw_acl.sh", args);

View File

@ -155,11 +155,13 @@ acl_entry_for_guest_network() {
dflag=0
gflag=0
aflag=0
Mflag=0
rules=""
rules_list=""
ip=""
dev=""
while getopts 'd:i:m:a:' OPTION
mac=""
while getopts 'd:i:m:M:a:' OPTION
do
case $OPTION in
d) dflag=1
@ -171,6 +173,9 @@ do
m) mflag=1
mask="$OPTARG"
;;
M) Mflag=1
mac="$OPTARG"
;;
a) aflag=1
rules="$OPTARG"
;;
@ -186,6 +191,18 @@ then
unlock_exit 2 $lock $locked
fi
# override dev with mac address match, if provided
if [[ ! -z "$mac" ]]; then
logger -t cloud "$(basename $0): mac $mac passed, trying to match to device"
for i in `ls /sys/class/net`; do
if grep -q $mac /sys/class/net/$i/address; then
dev=$i
logger -t cloud "$(basename $0): matched dev $i to mac $mac, dev is now $dev"
break
fi
done
fi
gcidr="$ip/$mask"
if [ -n "$rules" ]
then

View File

@ -30,7 +30,7 @@ then
fi
usage() {
printf "Usage:\n %s -A -d <dev> -i <ip address> -g <gateway> -m <network mask> -s <dns ip> -e < domain> [-f] \n" $(basename $0) >&2
printf "Usage:\n %s -A -M <mac> -d <dev> -i <ip address> -g <gateway> -m <network mask> -s <dns ip> -e < domain> [-f] \n" $(basename $0) >&2
printf " %s -D -d <dev> -i <ip address> \n" $(basename $0) >&2
}
@ -131,15 +131,33 @@ desetup_passwdsvcs() {
create_guest_network() {
# need to wait for eth device to appear before configuring it
timer=0
while ! `grep -q $dev /proc/net/dev` ; do
logger -t cloud "$(basename $0):Waiting for interface $dev to appear, $timer seconds"
sleep 1;
if [ $timer -gt 15 ]; then
logger -t cloud "$(basename $0):interface $dev never appeared"
break
fi
timer=$[timer + 1]
done
# match dev based on mac, if passed
if [[ ! -z "$mac" ]]; then
logger -t cloud "$(basename $0): mac $mac passed, trying to match to device"
while [ ! $timer -gt 15 ]; do
for i in `ls /sys/class/net`; do
if grep -q $mac /sys/class/net/$i/address; then
dev=$i
logger -t cloud "$(basename $0): matched dev $i to mac $mac, dev is now $dev"
timer=15
break
fi
done
sleep 1;
timer=$[timer + 1]
done
else
while ! `grep -q $dev /proc/net/dev` ; do
logger -t cloud "$(basename $0):Waiting for interface $dev to appear, $timer seconds"
sleep 1;
if [ $timer -gt 15 ]; then
logger -t cloud "$(basename $0):interface $dev never appeared"
break
fi
timer=$[timer + 1]
done
fi
logger -t cloud " $(basename $0): Create network on interface $dev, gateway $gw, network $ip/$mask "
# setup ip configuration
@ -225,11 +243,12 @@ dflag=
gflag=
Cflag=
Dflag=
Mflag=
op=""
while getopts 'CDn:m:d:i:g:s:e:' OPTION
while getopts 'CDn:m:M:d:i:g:s:e:' OPTION
do
case $OPTION in
C) Cflag=1
@ -244,6 +263,9 @@ do
m) mflag=1
mask="$OPTARG"
;;
M) Mflag=1
mac="$OPTARG"
;;
d) dflag=1
dev="$OPTARG"
;;