networkd: Restore logic for enslaving to a master bonding interface.
---

Bonding support seems to have been removed right after being added,
between 52433f6 (22 Jan) and 54abf46 (25 Jan).

http://cgit.freedesktop.org/systemd/systemd/log/src/network/networkd-link.c

With this patch, networkd successfully configures the links.

Currently, networkd will not dhcp on the bonding interface.  Here is my
configuration:

# /etc/systemd/network/dhcp.network
[Match]
Name=bond0

[Network]
DHCP=true

# /etc/systemd/network/ethernet.network
[Match]
Name=enp5s0

[Network]
Bond=bond0

# /etc/systemd/network/virtual.netdev
[NetDev]
Name=bond0
Kind=bond

# /etc/systemd/network/wireless.network
[Match]
Name=wlp2s0

[Network]
Bond=bond0

… and the network after manually adding address/route to bond0:
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group 
default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp5s0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
master bond0 state UP group default qlen 1000
    link/ether f0:bf:97:ec:3e:ba brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master 
bond0 state UP group default qlen 1000
    link/ether f0:bf:97:ec:3e:ba brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state 
UP group default 
    link/ether f0:bf:97:ec:3e:ba brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.201/24 scope global bond0
       valid_lft forever preferred_lft forever
$ ip r
default via 192.168.1.1 dev bond0 
192.168.1.0/24 dev bond0  proto kernel  scope link  src 192.168.1.201 

--- networkd-link.c.orig	2014-03-04 19:15:23.565904831 -0500
+++ networkd-link.c	2014-03-04 19:15:08.532572770 -0500
@@ -925,6 +925,27 @@
                 link->enslaving ++;
         }
 
+        if (link->network->bond) {
+                log_struct_link(LOG_DEBUG, link,
+                                "MESSAGE=%s: enslaving by '%s'",
+                                link->ifname, link->network->bond->name,
+                                NETDEV(link->network->bond),
+                                NULL);
+
+                r = netdev_enslave(link->network->bond, link, &enslave_handler);
+                if (r < 0) {
+                        log_struct_link(LOG_WARNING, link,
+                                        "MESSAGE=%s: could not enslave by '%s': %s",
+                                        link->ifname, link->network->bond->name, strerror(-r),
+                                        NETDEV(link->network->bond),
+                                        NULL);
+                        link_enter_failed(link);
+                        return r;
+                }
+
+                link->enslaving ++;
+        }
+
         HASHMAP_FOREACH(vlan, link->network->vlans, i) {
                 log_struct_link(LOG_DEBUG, link,
                                 "MESSAGE=%s: enslaving by '%s'",
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to