3 # Copyright (C) 2015 NIWA Hideyuki
11 echo "usage: net-add [ -d NETDEV ] [ -n NUMBER ] [ -g GATEWAY ] [ -b BRIDGE ] CONTAINER_NAME IPADDR/MASK "
17 FLG_G=0 ; LXCGATEWAY=""
18 FLG_B=0 ; LXCBR="fulcon-br0"
20 while getopts d:n:g:b: OPT ; do
22 d) FLG_D=1 ; NETDEV=$OPTARG ;;
23 n) FLG_N=1 ; NUM=$OPTARG ;;
24 g) FLG_G=1 ; LXCGATEWAY=$OPTARG ;;
25 b) FLG_B=1 ; LXCBR=$OPTARG ;;
37 LXCBRIP=`net-ipv4 -g $2`
39 echo $2 "must be IP_address/Mask format"
43 LXCIP=`echo $2 | awk -F / '{printf "%s",$1}'`
44 LXCMASK=`echo $2 | awk -F / '{printf "%s",$2}'`
46 if [ x$LXCGATEWAY == x"" ]; then
50 if [ x$NETDEV != x"" ]; then
51 LXCBRIP=`ip a show $NETDEV | awk 'NR==3{print $2}' | awk -F / '{print $1}'`
52 DEVMASK=`ip a show $NETDEV | awk 'NR==3{print $2}' | awk -F / '{print $2}'`
53 if [ x$DEVMASK != x$LXCMASK ]; then
54 echo "error: netmask(/$DEVMASK) of NIC is not corresponding to netmask(/$LXCMASK) of IP address"
59 LXCPROC=`find-proc ${LXCNAME}`
61 echo "error: can't find" ${LXCNAME}
67 mkdir -p /var/run/netns/
68 ln -s /proc/${LXCPROC}/ns/net /var/run/netns/${LXCNAME}${NUM}
70 ip link delete ${LXCNAME}${NUM} type veth >& /dev/null
72 ip link add name ${LXCNAME}${NUM} type veth peer name vg${LXCNAME}${NUM} >& /dev/null
73 ip link set ${LXCNAME}${NUM} up
75 brctl show $LXCBR |& egrep 'No such device' >& /dev/null
79 ip addr add ${LXCBRIP}/${LXCMASK} dev $LXCBR
81 brctl addif $LXCBR ${LXCNAME}${NUM} >& /dev/null
83 # setting up of IP address
84 LXCFBROADCAST=`net-ipv4 -b "${LXCIP}/${LXCMASK}"`
85 ip link set vg${LXCNAME}${NUM} netns ${LXCNAME}${NUM}
87 # Setting of network in container
88 ip netns exec ${LXCNAME}${NUM} ip link set vg${LXCNAME}${NUM} up
90 while [ x${IPFLG} == x"inet6" -o x${IPFLG} != x"inet" ];
92 IPFLG=`ip netns exec "${LXCNAME}${NUM}" ip addr show vg${LXCNAME}${NUM} | awk 'NR==3{print $1}'`
93 ip netns exec "${LXCNAME}${NUM}" ip addr add ${LXCIP}/${LXCMASK} dev vg${LXCNAME}${NUM} broadcast $LXCFBROADCAST >& /dev/null
94 OLDIPADR=`ip netns exec "${LXCNAME}${NUM}" ip addr show vg${LXCNAME}${NUM} | awk 'NR==3{print $2}'`
97 while [ x${OLDIPADR} != x${LXCIP}/${LXCMASK} ];
99 OLDIPADR=`ip netns exec "${LXCNAME}${NUM}" ip addr show vg${LXCNAME}${NUM} | awk 'NR==3{print $2}'`
100 if [ x${OLDIPADR} != x${LXCIP}/${LXCMASK} ]; then
101 ip netns exec ${LXCNAME}${NUM} ip addr del ${OLDIPADR} dev vg${LXCNAME}${NUM}
102 ip netns exec ${LXCNAME}${NUM} ip addr add ${LXCIP}/${LXCMASK} dev vg${LXCNAME}${NUM} broadcast $LXCFBROADCAST >& /dev/null
107 # setting up of gateway
108 if [ x$LXCGATEWAY != x"" ]; then
109 ip netns exec ${LXCNAME}${NUM} ip route delete default >& /dev/null
112 ip netns exec ${LXCNAME}${NUM} ip route add default via ${IPADDR}
115 rm -f /var/run/netns/${LXCNAME}${NUM}
117 if [ x$NETDEV != x"" ]; then
118 # setting of promiscuous mode
119 ip link set $NETDEV promisc on
121 brctl show $LXCBR | egrep -w $NETDEV >& /dev/null
122 if [ $? -ne 0 ]; then
123 brctl addif $LXCBR $NETDEV
130 echo "${LXCNAME}${NUM} ${LXCIP}/${IPMASK}"