chiark / gitweb /
networkd: netdev - rename 'enslave' to 'join'
[elogind.git] / src / network / networkd-netdev.c
index a8c1ea3b44a7e3b24f4409c66a2069298611fc46..f6951526fb94c550a19c1a558097d13d8184c62d 100644 (file)
@@ -48,9 +48,10 @@ static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = {
 DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind);
 DEFINE_CONFIG_PARSE_ENUM(config_parse_netdev_kind, netdev_kind, NetDevKind, "Failed to parse netdev kind");
 
+
 static void netdev_cancel_callbacks(NetDev *netdev) {
         _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
-        netdev_enslave_callback *callback;
+        netdev_join_callback *callback;
 
         if (!netdev)
                 return;
@@ -160,6 +161,7 @@ static int netdev_enslave_ready(NetDev *netdev, Link* link, sd_rtnl_message_hand
         assert(netdev->state == NETDEV_STATE_READY);
         assert(netdev->manager);
         assert(netdev->manager->rtnl);
+        assert(IN_SET(netdev->kind, NETDEV_KIND_BRIDGE, NETDEV_KIND_BOND));
         assert(link);
         assert(callback);
 
@@ -196,7 +198,7 @@ static int netdev_enslave_ready(NetDev *netdev, Link* link, sd_rtnl_message_hand
 }
 
 static int netdev_enter_ready(NetDev *netdev) {
-        netdev_enslave_callback *callback, *callback_next;
+        netdev_join_callback *callback, *callback_next;
         int r;
 
         assert(netdev);
@@ -344,25 +346,11 @@ static int netdev_create(NetDev *netdev) {
         return 0;
 }
 
-/* the callback must be called, possibly after a timeout, as otherwise the Link will hang */
-int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
+static int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
         int r;
 
-        switch(netdev->kind) {
-        case NETDEV_KIND_VLAN:
-                return netdev_create_vlan(netdev, link, callback);
-        case NETDEV_KIND_MACVLAN:
-                return netdev_create_macvlan(netdev, link, callback);
-        case NETDEV_KIND_VXLAN:
-                return netdev_create_vxlan(netdev, link, callback);
-        case NETDEV_KIND_IPIP:
-        case NETDEV_KIND_GRE:
-        case NETDEV_KIND_SIT:
-        case NETDEV_KIND_VTI:
-                return netdev_create_tunnel(netdev, link, callback);
-        default:
-                break;
-        }
+        assert(netdev);
+        assert(IN_SET(netdev->kind, NETDEV_KIND_BRIDGE, NETDEV_KIND_BOND));
 
         if (netdev->state == NETDEV_STATE_READY) {
                 r = netdev_enslave_ready(netdev, link, callback);
@@ -370,9 +358,9 @@ int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callbac
                         return r;
         } else {
                 /* the netdev is not yet read, save this request for when it is*/
-                netdev_enslave_callback *cb;
+                netdev_join_callback *cb;
 
-                cb = new0(netdev_enslave_callback, 1);
+                cb = new0(netdev_join_callback, 1);
                 if (!cb)
                         return log_oom();
 
@@ -386,6 +374,33 @@ int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callbac
         return 0;
 }
 
+/* the callback must be called, possibly after a timeout, as otherwise the Link will hang */
+int netdev_join(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
+
+        assert(netdev);
+
+        switch(netdev->kind) {
+        case NETDEV_KIND_VLAN:
+                return netdev_create_vlan(netdev, link, callback);
+        case NETDEV_KIND_MACVLAN:
+                return netdev_create_macvlan(netdev, link, callback);
+        case NETDEV_KIND_VXLAN:
+                return netdev_create_vxlan(netdev, link, callback);
+        case NETDEV_KIND_IPIP:
+        case NETDEV_KIND_GRE:
+        case NETDEV_KIND_SIT:
+        case NETDEV_KIND_VTI:
+                return netdev_create_tunnel(netdev, link, callback);
+        case NETDEV_KIND_BRIDGE:
+        case NETDEV_KIND_BOND:
+                return netdev_enslave(netdev, link, callback);
+        default:
+                assert_not_reached("Enslaving by invalid netdev kind");
+        }
+
+        return 0;
+}
+
 int netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *message) {
         uint16_t type;
         const char *kind;
@@ -565,13 +580,14 @@ static int netdev_load_one(Manager *manager, const char *filename) {
         netdev->state = _NETDEV_STATE_INVALID;
         netdev->kind = _NETDEV_KIND_INVALID;
         netdev->macvlan_mode = _NETDEV_MACVLAN_MODE_INVALID;
+        netdev->bond_mode = _NETDEV_BOND_MODE_INVALID;
         netdev->vlanid = VLANID_MAX + 1;
         netdev->vxlanid = VXLAN_VID_MAX + 1;
         netdev->tunnel_pmtudisc = true;
         netdev->learning = true;
 
         r = config_parse(NULL, filename, file,
-                         "Match\0NetDev\0VLAN\0MACVLAN\0VXLAN\0Tunnel\0Peer\0Tun\0Tap\0",
+                         "Match\0NetDev\0VLAN\0MACVLAN\0VXLAN\0Tunnel\0Peer\0Tun\0Tap\0Bond\0",
                          config_item_perf_lookup, (void*) network_netdev_gperf_lookup,
                          false, false, netdev);
         if (r < 0) {
@@ -694,19 +710,15 @@ static int netdev_load_one(Manager *manager, const char *filename) {
 
                 break;
         case NETDEV_KIND_BRIDGE:
-        case NETDEV_KIND_BOND:
                 r = netdev_create(netdev);
                 if (r < 0)
                         return r;
                 break;
-
-        case NETDEV_KIND_TUN:
-        case NETDEV_KIND_TAP:
-                r = netdev_create_tuntap(netdev);
+        case NETDEV_KIND_BOND:
+                r = netdev_create_bond(netdev, netdev_create_handler);
                 if (r < 0)
                         return r;
                 break;
-
         default:
                 break;
         }