chiark / gitweb /
networkd: bridge - remove redundant state
authorTom Gundersen <teg@jklm.no>
Sat, 11 Jan 2014 20:20:14 +0000 (20:20 +0000)
committerTom Gundersen <teg@jklm.no>
Sun, 12 Jan 2014 14:37:21 +0000 (15:37 +0100)
We will not insist on getting the reply from rtnl that the bridge
was created before considering the bridge ready, as we will be
notified about that via udev. We will listen for the rtnl response
however, in case the creation of the bridge failed.

src/network/networkd-bridge.c
src/network/networkd.h

index 7de7546358a7ab6e25882de8c5fcda928abde239..ce48878991be24f5a336fd5efaad76a26e11ecb4 100644 (file)
@@ -113,6 +113,9 @@ static int bridge_join_ready(Bridge *bridge, Link* link, sd_rtnl_message_handler
 static int bridge_enter_ready(Bridge *bridge) {
         bridge_join_callback *callback;
 
+        assert(bridge);
+        assert(bridge->name);
+
         bridge->state = BRIDGE_STATE_READY;
 
         log_info_bridge(bridge, "bridge ready");
@@ -130,7 +133,7 @@ static int bridge_create_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userda
         Bridge *bridge = userdata;
         int r;
 
-        assert(bridge->state == BRIDGE_STATE_CREATING);
+        assert(bridge->state != _BRIDGE_STATE_INVALID);
 
         r = sd_rtnl_message_get_errno(m);
         if (r < 0) {
@@ -140,11 +143,6 @@ static int bridge_create_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userda
                 return 1;
         }
 
-        if (bridge->link)
-                bridge_enter_ready(bridge);
-        else
-                bridge->state = BRIDGE_STATE_CREATED;
-
         return 1;
 }
 
@@ -234,18 +232,18 @@ int bridge_join(Bridge *bridge, Link *link, sd_rtnl_message_handler_t callback)
 
 int bridge_set_link(Manager *m, Link *link) {
         Bridge *bridge;
+        int r;
 
-        bridge = hashmap_get(m->bridges, link->ifname);
-        if (!bridge)
-                return -ENOENT;
+        r = bridge_get(m, link->ifname, &bridge);
+        if (r < 0)
+                return r;
 
         if (bridge->link && bridge->link != link)
                 return -EEXIST;
 
         bridge->link = link;
 
-        if (bridge->state == BRIDGE_STATE_CREATED)
-                bridge_enter_ready(bridge);
+        bridge_enter_ready(bridge);
 
         return 0;
 }
index 4f44f78655597265a47a0f0e411d498dfd6292b4..55181f2bbc53f1624ab4ab0572d3376b44e5cc63 100644 (file)
@@ -52,7 +52,6 @@ struct bridge_join_callback {
 typedef enum BridgeState {
         BRIDGE_STATE_FAILED,
         BRIDGE_STATE_CREATING,
-        BRIDGE_STATE_CREATED,
         BRIDGE_STATE_READY,
         _BRIDGE_STATE_MAX,
         _BRIDGE_STATE_INVALID = -1,