]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/netdev: split out netdev_attach() and netdev_attach_name() from netdev_load_one()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 9 Sep 2024 08:41:00 +0000 (17:41 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 10 Sep 2024 10:29:05 +0000 (19:29 +0900)
No functional change, just refactoring and preparation for later
commits.

src/network/netdev/netdev.c
src/network/netdev/netdev.h

index 1b01f7e4533aedca159b20a23c1f71d5ae7adaa1..9949ade363821111252061205a93da628dbf28f1 100644 (file)
@@ -267,6 +267,45 @@ void netdev_drop(NetDev *netdev) {
         netdev_detach(netdev);
 }
 
+int netdev_attach_name(NetDev *netdev, const char *name) {
+        int r;
+
+        assert(netdev);
+        assert(netdev->manager);
+        assert(name);
+
+        r = hashmap_ensure_put(&netdev->manager->netdevs, &string_hash_ops, name, netdev);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r == -EEXIST) {
+                NetDev *n = hashmap_get(netdev->manager->netdevs, name);
+
+                assert(n);
+                if (!streq(netdev->filename, n->filename))
+                        log_netdev_warning_errno(netdev, r,
+                                                 "Device \"%s\" was already configured by \"%s\", ignoring %s.",
+                                                 name, n->filename, netdev->filename);
+
+                return -EEXIST;
+        }
+        assert(r > 0);
+
+        return 0;
+}
+
+static int netdev_attach(NetDev *netdev) {
+        int r;
+
+        assert(netdev);
+        assert(netdev->ifname);
+
+        r = netdev_attach_name(netdev, netdev->ifname);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
 int netdev_get(Manager *manager, const char *name, NetDev **ret) {
         NetDev *netdev;
 
@@ -896,21 +935,9 @@ int netdev_load_one(Manager *manager, const char *filename) {
         if (!netdev->filename)
                 return log_oom();
 
-        r = hashmap_ensure_put(&netdev->manager->netdevs, &string_hash_ops, netdev->ifname, netdev);
-        if (r == -ENOMEM)
-                return log_oom();
-        if (r == -EEXIST) {
-                NetDev *n = hashmap_get(netdev->manager->netdevs, netdev->ifname);
-
-                assert(n);
-                if (!streq(netdev->filename, n->filename))
-                        log_netdev_warning_errno(netdev, r,
-                                                 "Device was already configured by \"%s\", ignoring %s.",
-                                                 n->filename, netdev->filename);
-
-                return -EEXIST;
-        }
-        assert(r > 0);
+        r = netdev_attach(netdev);
+        if (r < 0)
+                return r;
 
         log_netdev_debug(netdev, "loaded \"%s\"", netdev_kind_to_string(netdev->kind));
 
index 2d19c2f042e03eacb451d82f55056559430c3903..c173ed3fd53d9a323d1907aa9f8f71b6c12dc18a 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "conf-parser.h"
 #include "ether-addr-util.h"
+#include "hash-funcs.h"
 #include "list.h"
 #include "log-link.h"
 #include "networkd-link.h"
@@ -195,6 +196,7 @@ extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX];
 /* For casting the various netdev kinds into a netdev */
 #define NETDEV(n) (&(n)->meta)
 
+int netdev_attach_name(NetDev *netdev, const char *name);
 NetDev* netdev_detach_name(NetDev *netdev, const char *name);
 void netdev_detach(NetDev *netdev);