OSDN Git Service

implovement of add-ipaddr command
authorniwa-hideyuki <niwa.hideyuki@jp.fujitsu.com>
Sun, 4 Jan 2015 03:25:59 +0000 (12:25 +0900)
committerniwa-hideyuki <niwa.hideyuki@jp.fujitsu.com>
Sun, 4 Jan 2015 03:25:59 +0000 (12:25 +0900)
lxcf/lib/lxcf-add-ipaddr

index e6aa3be..6ba400e 100755 (executable)
@@ -42,6 +42,7 @@ LXCIP=$2
 LXCBR=$3
 NETDEV=$4
 LXCBRIP=`ip a show $NETDEV | awk 'NR==3{print $2}'`
+LXCMASK=`ip a show $NETDEV | awk 'NR==3{print $2}' | awk -F / '{print $2}'`
 
 LXCPROC=`/usr/lib64/lxcf/lxcf-find-init $LXCNAME`
 if [ $? -ne 0 ]; then
@@ -49,42 +50,64 @@ if [ $? -ne 0 ]; then
        exit -1
 fi
 
-mkdir -p /var/run/netns/
-ln -s /proc/${LXCPROC}/ns/net /var/run/netns/$LXCNAME
 
-brctl show $LXCBR |& egrep 'No such device' >& /dev/null
-if [ $? -eq 0 ]; then
-       brctl addbr $LXCBR
-       ip link set $LXCBR up
-       ip addr add ${LXCBRIP} dev $LXCBR
-       echo "generate new bridge:" $LXCBR "("${LXCBRIP}")"
-fi
-
-ip link add name vh${LXCNAME} type veth peer name vg${LXCNAME}
-ip link set vh${LXCNAME}${LXCNUM} up
-brctl addif $LXCBR vh${LXCNAME}
-
-echo "geterated new veth of host :" vh${LXCNAME}
+set_ipaddr()
+{
+       mkdir -p /var/run/netns/
+       ln -s /proc/${LXCPROC}/ns/net /var/run/netns/$LXCNAME
+
+       ip link add name vh${LXCNAME} type veth peer name vg${LXCNAME} >& /dev/null
+       ip link set vh${LXCNAME}${LXCNUM} up
+
+       brctl show $LXCBR |& egrep 'No such device' >& /dev/null
+       if [ $? -eq 0 ]; then
+               brctl addbr $LXCBR
+               ip link set $LXCBR up
+               ip addr add ${LXCBRIP} dev $LXCBR
+       fi
+       brctl addif $LXCBR vh${LXCNAME} >& /dev/null
+
+       ip link set vg${LXCNAME} netns $LXCNAME >& /dev/null
+
+       # Setting of network in container
+       ip netns exec $LXCNAME ip link set vg${LXCNAME} up
+       IPFLG=""
+       while [ x${IPFLG} == x"inet6" -o x${IPFLG} != x"inet" ]; 
+       do
+               IPFLG=`ip netns exec $LXCNAME ip addr show vg${LXCNAME} | awk 'NR==3{print $1}'`
+               ip netns exec $LXCNAME ip addr add ${LXCIP}/${LXCMASK} dev vg${LXCNAME} >& /dev/null
+               OLDIPADR=`ip netns exec $LXCNAME ip addr show vg${LXCNAME} | awk 'NR==3{print $2}'`
+               sleep 1
+       done
+       while [ x${OLDIPADR} != x${LXCIP}/${LXCMASK} ]; 
+       do 
+               OLDIPADR=`ip netns exec $LXCNAME ip addr show vg${LXCNAME} | awk 'NR==3{print $2}'`
+               if [ x${OLDIPADR} != x${LXCIP}/${LXCMASK} ]; then
+                       ip netns exec $LXCNAME ip addr del ${OLDIPADR} dev vg${LXCNAME}
+                       ip netns exec $LXCNAME ip addr add ${LXCIP}/${LXCMASK} dev vg${LXCNAME} >& /dev/null
+               fi
+               sleep 1
+       done
+       ip netns exec $LXCNAME ip route delete default >& /dev/null
+       IPADDR=`echo $LXCBRIP | awk -F / '{print $1}'`
+       IPMASK=`echo $LXCBRIP | awk -F / '{print $2}'`
+       ip netns exec $LXCNAME ip route add default via ${IPADDR}
+
+       rm -f /var/run/netns/$LXCNAME
+
+       brctl show $LXCBR | egrep -w $NETDEV >& /dev/null
+       if [ $? -ne 0 ]; then
+               brctl addif $LXCBR $NETDEV 
+       fi
 
-ip link set vg${LXCNAME} netns $LXCNAME
+}
 
-# Setting of network in container
-ip netns exec $LXCNAME ip addr add ${LXCIP}/24 dev vg${LXCNAME}
-ip netns exec $LXCNAME ip link set vg${LXCNAME} up
-ip netns exec $LXCNAME ip route delete default >& /dev/null
-IPADDR=`echo $LXCBRIP | awk -F / '{print $1}'`
-IPMASK=`echo $LXCBRIP | awk -F / '{print $2}'`
-ip netns exec $LXCNAME ip route add default via ${IPADDR}
+set_ipaddr;sleep 3;set_ipaddr
 
+echo "generate new bridge:" $LXCBR "("${LXCBRIP}")"
+echo "geterated new veth of host :" vh${LXCNAME}
 echo "geterated new veth of guest : vg${LXCNAME} (${LXCIP}/${IPMASK})"
-
-rm -f /var/run/netns/$LXCNAME
-
-brctl show $LXCBR | egrep -w $NETDEV >& /dev/null
-if [ $? -ne 0 ]; then
-       brctl addif $LXCBR $NETDEV 
-fi
-
+echo
 brctl show $LXCBR
 
 exit 0