Hi,
I've done this patch for my own need. It allows to configure multiple network 
interfaces within the containers.

You can integrate it if you wish.

Exemple of use: 
cat >/etc/default/lxc-net <<@@@
USE_LXC_BRIDGE="true"
LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_BRIDGE[1]="lxcbr1"
LXC_ADDR[1]="10.0.4.1"
LXC_NETMASK[1]="255.255.255.0"
LXC_NETWORK[1]="10.0.4.0/24"
LXC_DHCP_RANGE="10.0.3.200,10.0.3.254"
LXC_DHCP_RANGE[1]="10.0.4.200,10.0.4.254"
LXC_DHCP_MAX="253"
@@@

Regard.


--- /usr/lib/x86_64-linux-gnu/lxc/lxc-net	2017-03-07 10:18:14.000000000 -1000
+++ /usr/lib/x86_64-linux-gnu/lxc/lxc-net.new	2017-05-19 23:43:11.622452896 -1000
@@ -1,4 +1,4 @@
-#!/bin/sh -
+#!/bin/bash -
 
 distrosysconfdir="/etc/default"
 varrun="/run/lxc"
@@ -122,8 +122,8 @@
 }
 
 ifup() {
-    MASK=`_netmask2cidr ${LXC_NETMASK}`
-    CIDR_ADDR="${LXC_ADDR}/${MASK}"
+    MASK=`_netmask2cidr ${3}`
+    CIDR_ADDR="${2}/${MASK}"
     ip addr add ${CIDR_ADDR} dev $1
     ip link set dev $1 address $LXC_BRIDGE_MAC
     ip link set dev $1 up
@@ -133,7 +133,7 @@
     set +e
     if [ "$FAILED" = "1" ]; then
         echo "Failed to setup lxc-net." >&2
-        stop force
+        stop_all force
     fi
 }
 
@@ -145,15 +145,23 @@
 
     [ ! -f "${varrun}/network_up" ] || { echo "lxc-net is already running"; exit 1; }
 
-    if [ -d /sys/class/net/${LXC_BRIDGE} ]; then
-        stop force || true
-    fi
-
     FAILED=1
 
     trap cleanup EXIT HUP INT TERM
     set -e
 
+  for i in ${!LXC_BRIDGE[@]} ; do (
+   LXC_BRIDGE=${LXC_BRIDGE[$i]}
+   LXC_ADDR=${LXC_ADDR[$i]}
+   LXC_NETWORK=${LXC_NETWORK[$i]}
+   LXC_NETMASK=${LXC_NETMASK[0$([ -z "${LXC_NETMASK[$i]}" ] || echo $i)]}
+   LXC_IPV6_ADDR=${LXC_IPV6_ADDR[$i]}
+   LXC_IPV6_MASK=${LXC_IPV6_MASK[$i]}
+   LXC_IPV6_NETWORK=${LXC_IPV6_NETWORK[$i]}
+   LXC_DHCP_RANGE=${LXC_DHCP_RANGE[$i]}
+   if [ -n "$LXC_BRIDGE" -a -n "$LXC_ADDR" -a -n "$LXC_NETWORK" ]; then
+    [ ! -d /sys/class/net/${LXC_BRIDGE} ] || stop force
+
     # set up the lxc network
     [ ! -d /sys/class/net/${LXC_BRIDGE} ] && ip link add dev ${LXC_BRIDGE} type bridge
     echo 1 > /proc/sys/net/ipv4/ip_forward
@@ -208,13 +216,16 @@
         fi
     done
 
+    [ -z "$LXC_DHCP_RANGE" ] || \
     dnsmasq $LXC_DHCP_CONFILE_ARG $LXC_DOMAIN_ARG -u ${DNSMASQ_USER} \
-            --strict-order --bind-interfaces --pid-file="${varrun}"/dnsmasq.pid \
+            --strict-order --bind-interfaces --pid-file="${varrun}"/dnsmasq.pid$i \
             --listen-address ${LXC_ADDR} --dhcp-range ${LXC_DHCP_RANGE} \
             --dhcp-lease-max=${LXC_DHCP_MAX} --dhcp-no-override \
             --except-interface=lo --interface=${LXC_BRIDGE} \
             --dhcp-leasefile="${varlib}"/misc/dnsmasq.${LXC_BRIDGE}.leases \
             --dhcp-authoritative $LXC_IPV6_ARG || cleanup
+   fi
+  );done
 
     touch "${varrun}"/network_up
     FAILED=0
@@ -240,11 +251,18 @@
             ip6tables $use_iptables_lock -t nat -D POSTROUTING -s ${LXC_IPV6_NETWORK} ! -d ${LXC_IPV6_NETWORK} -j MASQUERADE
         fi
 
-        pid=`cat "${varrun}"/dnsmasq.pid 2>/dev/null` && kill -9 $pid
-        rm -f "${varrun}"/dnsmasq.pid
+        pid=`cat "${varrun}"/dnsmasq.pid$i 2>/dev/null` && kill -9 $pid
+        rm -f "${varrun}"/dnsmasq.pid$i
         # if $LXC_BRIDGE has attached interfaces, don't destroy the bridge
         ls /sys/class/net/${LXC_BRIDGE}/brif/* > /dev/null 2>&1 || ip link delete ${LXC_BRIDGE}
     fi
+}; stop_all() {
+    for i in ${!LXC_BRIDGE[@]} ; do (
+        LXC_BRIDGE=${LXC_BRIDGE[$i]}
+        LXC_NETWORK=${LXC_NETWORK[$i]}
+        LXC_IPV6_NETWORK=${LXC_IPV6_NETWORK[$i]}
+        stop $*
+    );done
 
     rm -f "${varrun}"/network_up
 }
@@ -256,11 +274,11 @@
     ;;
 
     stop)
-        stop
+        stop_all
     ;;
 
     restart|reload|force-reload)
-        $0 stop
+        $0 stop_all
         $0 start
     ;;
 
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to