]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
lxc-alpine: autodetect standard bridges and set hwaddress
authorNatanael Copa <ncopa@alpinelinux.org>
Wed, 13 Feb 2013 13:47:11 +0000 (14:47 +0100)
committerStéphane Graber <stgraber@ubuntu.com>
Mon, 18 Feb 2013 20:58:38 +0000 (15:58 -0500)
Check for lxcbr0, virbr0 and br0 and use one of those if they exist.

Set mac address if network type is veth.

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
templates/lxc-alpine.in

index b06215f4aeaa5a055b29bcada0ea8c8b34235fa3..962d274e86da5dc7fcc91d5ef55ed12722de63c3 100644 (file)
@@ -76,7 +76,36 @@ copy_configuration() {
     if [ -n "$lxc_arch" ]; then
         echo "lxc.arch = $lxc_arch" >> $path/config
     fi
+
+    lxc_network_link_line="# lxc.network.link = br0"
+    for br in lxcbr0 virbr0 br0; do
+        if [ -d /sys/class/net/$br/bridge ]; then
+            lxc_network_link_line="lxc.network.link = $br"
+            break
+        fi
+    done
+
+    if ! grep -q "^lxc.network.type" $path/config 2>/dev/null; then
+        cat <<EOF >> $path/config
+lxc.network.type = veth
+$lxc_network_link_line
+lxc.network.flags = up
+EOF
+    fi
+
+    # if there is exactly one veth network entry, make sure it has an
+    # associated mac address.
+    nics=$(grep -e '^lxc\.network\.type[ \t]*=[ \t]*veth' $path/config | wc -l)
+    if [ "$nics" -eq 1 ] && ! grep -q "^lxc.network.hwaddr" $path/config; then
+        # see http://sourceforge.net/tracker/?func=detail&aid=3411497&group_id=163076&atid=826303
+        hwaddr="fe:$(dd if=/dev/urandom bs=8 count=1 2>/dev/null |od -t x8 | \
+                      head -1 |awk '{print $2}' | cut -c1-10 |\
+                      sed 's/\(..\)/\1:/g; s/.$//')"
+        echo "lxc.network.hwaddr = $hwaddr" >> $path/config
+    fi
+
     cat <<EOF >> $path/config
+
 lxc.tty = 4
 lxc.pts = 1024
 lxc.utsname = $hostname
@@ -84,15 +113,6 @@ lxc.utsname = $hostname
 # When using LXC with apparmor, uncomment the next line to run unconfined:
 #lxc.aa_profile = unconfined
 
-# network interface
-lxc.network.name = eth0
-lxc.network.type = veth
-lxc.network.flags = up
-# enable for bridging
-#lxc.network.link = br0
-#lxc.network.ipv4 = n.n.n.n
-#lxc.network.ipv4.gateway = auto
-
 # devices
 lxc.cgroup.devices.deny = a
 # /dev/null and zero