]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: replace udev_device by sd_device
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 22 Aug 2018 05:30:49 +0000 (14:30 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 22 Aug 2018 19:57:39 +0000 (04:57 +0900)
21 files changed:
src/libsystemd-network/dhcp-identifier.c
src/libsystemd-network/network-internal.c
src/libsystemd-network/network-internal.h
src/libsystemd-network/sd-dhcp-lease.c
src/network/netdev/netdev.c
src/network/networkd-address.c
src/network/networkd-ipv4ll.c
src/network/networkd-link.c
src/network/networkd-link.h
src/network/networkd-manager-bus.c
src/network/networkd-manager.c
src/network/networkd-manager.h
src/network/networkd-ndisc.c
src/network/networkd-network.c
src/network/networkd-network.h
src/network/networkd-radv.c
src/network/networkd-routing-policy-rule.c
src/network/networkd.c
src/network/test-network.c
src/network/wait-online/manager.c
src/udev/net/link-config.c

index 91c485c6c25dd767bcd8cd20a9038664b30d69dd..d1e929ba7b2db7bbfcf70a60555796dd79991b2e 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 
-#include "libudev.h"
+#include "sd-device.h"
 #include "sd-id128.h"
 
 #include "dhcp-identifier.h"
@@ -8,7 +8,6 @@
 #include "network-internal.h"
 #include "siphash24.h"
 #include "sparse-endian.h"
-#include "udev-util.h"
 #include "virt.h"
 
 #define SYSTEMD_PEN 43793
@@ -71,25 +70,23 @@ int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len) {
 }
 
 int dhcp_identifier_set_iaid(int ifindex, uint8_t *mac, size_t mac_len, void *_id) {
-        /* name is a pointer to memory in the udev_device struct, so must
-           have the same scope */
-        _cleanup_(udev_device_unrefp) struct udev_device *device = NULL;
+        /* name is a pointer to memory in the sd_device struct, so must
+         * have the same scope */
+        _cleanup_(sd_device_unrefp) sd_device *device = NULL;
         const char *name = NULL;
         uint64_t id;
 
         if (detect_container() <= 0) {
                 /* not in a container, udev will be around */
-                _cleanup_(udev_unrefp) struct udev *udev;
                 char ifindex_str[2 + DECIMAL_STR_MAX(int)];
-
-                udev = udev_new();
-                if (!udev)
-                        return -ENOMEM;
+                int initialized, r;
 
                 sprintf(ifindex_str, "n%d", ifindex);
-                device = udev_device_new_from_device_id(udev, ifindex_str);
-                if (device) {
-                        if (udev_device_get_is_initialized(device) <= 0)
+                if (sd_device_new_from_device_id(&device, ifindex_str) >= 0) {
+                        r = sd_device_get_is_initialized(device, &initialized);
+                        if (r < 0)
+                                return r;
+                        if (!initialized)
                                 /* not yet ready */
                                 return -EBUSY;
 
index 9d16d6c747ac46949f5a2bbad07b28e809dadbd9..949798a1d3cdea6fd4c446b6ee1b3ea639bfee08 100644 (file)
 #include "utf8.h"
 #include "util.h"
 
-const char *net_get_name(struct udev_device *device) {
+const char *net_get_name(sd_device *device) {
         const char *name, *field;
 
         assert(device);
 
         /* fetch some persistent data unique (on this machine) to this device */
-        FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC") {
-                name = udev_device_get_property_value(device, field);
-                if (name)
+        FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC")
+                if (sd_device_get_property_value(device, field, &name) >= 0)
                         return name;
-        }
 
         return NULL;
 }
 
 #define HASH_KEY SD_ID128_MAKE(d3,1e,48,fa,90,fe,4b,4c,9d,af,d5,d7,a1,b1,2e,8a)
 
-int net_get_unique_predictable_data(struct udev_device *device, uint64_t *result) {
+int net_get_unique_predictable_data(sd_device *device, uint64_t *result) {
         size_t l, sz = 0;
         const char *name = NULL;
         int r;
index c4d79cca223d0a494535fc10e5417fb2f18cea88..45020c2bcf541296cb565d5fbd401facc35d6806 100644 (file)
@@ -3,12 +3,12 @@
 
 #include <stdbool.h>
 
+#include "sd-device.h"
 #include "sd-dhcp-lease.h"
 
 #include "condition.h"
 #include "conf-parser.h"
 #include "set.h"
-#include "udev.h"
 
 #define LINK_BRIDGE_PORT_PRIORITY_INVALID 128
 #define LINK_BRIDGE_PORT_PRIORITY_MAX 63
@@ -38,8 +38,8 @@ CONFIG_PARSER_PROTOTYPE(config_parse_ifalias);
 CONFIG_PARSER_PROTOTYPE(config_parse_iaid);
 CONFIG_PARSER_PROTOTYPE(config_parse_bridge_port_priority);
 
-int net_get_unique_predictable_data(struct udev_device *device, uint64_t *result);
-const char *net_get_name(struct udev_device *device);
+int net_get_unique_predictable_data(sd_device *device, uint64_t *result);
+const char *net_get_name(sd_device *device);
 
 void serialize_in_addrs(FILE *f, const struct in_addr *addresses, size_t size);
 int deserialize_in_addrs(struct in_addr **addresses, const char *string);
index dbd80442e6efdd833b79e60e4e2e1c6c044e3e49..8b6f5ad34fbf6b62c1d9df1db8487b73474b9ecd 100644 (file)
@@ -25,6 +25,7 @@
 #include "parse-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
+#include "strv.h"
 #include "unaligned.h"
 
 int sd_dhcp_lease_get_address(sd_dhcp_lease *lease, struct in_addr *addr) {
index 82ce88402f1ae402e0c0099aa8f2fbbd28de399d..17bfa518dca0e6adf5a10a08e6b7c63b628f27f5 100644 (file)
@@ -16,6 +16,7 @@
 #include "stat-util.h"
 #include "string-table.h"
 #include "string-util.h"
+#include "strv.h"
 
 #include "netdev/bridge.h"
 #include "netdev/bond.h"
index eae129b95cac4e199846f6ad29b32599a4529826..b07196b6b995ab695dc228996b15fffa7de0d8a7 100644 (file)
@@ -12,6 +12,7 @@
 #include "set.h"
 #include "socket-util.h"
 #include "string-util.h"
+#include "strv.h"
 #include "utf8.h"
 #include "util.h"
 
index 66f775432fe9685c6c19e739420232020f0d1446..ce50a674001d31ecd54d783cade7ad77144c8079 100644 (file)
@@ -202,13 +202,11 @@ int ipv4ll_configure(Link *link) {
                         return r;
         }
 
-        if (link->udev_device) {
-                r = net_get_unique_predictable_data(link->udev_device, &seed);
-                if (r >= 0) {
-                        r = sd_ipv4ll_set_address_seed(link->ipv4ll, seed);
-                        if (r < 0)
-                                return r;
-                }
+        if (link->sd_device &&
+            net_get_unique_predictable_data(link->sd_device, &seed) >= 0) {
+                r = sd_ipv4ll_set_address_seed(link->ipv4ll, seed);
+                if (r < 0)
+                        return r;
         }
 
         r = sd_ipv4ll_attach_event(link->ipv4ll, NULL, 0);
index 4c534e685d9103680f9c8421697fe5db08ddac2f..619a3141d5e944a1a027f462fbcd74323127c492 100644 (file)
@@ -23,7 +23,7 @@
 #include "socket-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
-#include "udev-util.h"
+#include "strv.h"
 #include "util.h"
 #include "virt.h"
 
@@ -549,7 +549,7 @@ static void link_free(Link *link) {
         (void) unlink(link->state_file);
         free(link->state_file);
 
-        udev_device_unref(link->udev_device);
+        sd_device_unref(link->sd_device);
 
         HASHMAP_FOREACH (carrier, link->bound_to_links, i)
                 hashmap_remove(link->bound_to_links, INT_TO_PTR(carrier->ifindex));
@@ -2908,7 +2908,7 @@ static int link_initialized_and_synced(sd_netlink *rtnl, sd_netlink_message *m,
                 return r;
 
         if (!link->network) {
-                r = network_get(link->manager, link->udev_device, link->ifname,
+                r = network_get(link->manager, link->sd_device, link->ifname,
                                 &link->mac, &network);
                 if (r == -ENOENT) {
                         link_enter_unmanaged(link);
@@ -2946,7 +2946,7 @@ static int link_initialized_and_synced(sd_netlink *rtnl, sd_netlink_message *m,
         return 1;
 }
 
-int link_initialized(Link *link, struct udev_device *device) {
+int link_initialized(Link *link, sd_device *device) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
         int r;
 
@@ -2958,12 +2958,12 @@ int link_initialized(Link *link, struct udev_device *device) {
         if (link->state != LINK_STATE_PENDING)
                 return 0;
 
-        if (link->udev_device)
+        if (link->sd_device)
                 return 0;
 
         log_link_debug(link, "udev initialized link");
 
-        link->udev_device = udev_device_ref(device);
+        link->sd_device = sd_device_ref(device);
 
         /* udev has initialized the link, but we don't know if we have yet
          * processed the NEWLINK messages with the latest state. Do a GETLINK,
@@ -3176,10 +3176,10 @@ ipv4ll_address_fail:
 }
 
 int link_add(Manager *m, sd_netlink_message *message, Link **ret) {
-        Link *link;
-        _cleanup_(udev_device_unrefp) struct udev_device *device = NULL;
+        _cleanup_(sd_device_unrefp) sd_device *device = NULL;
         char ifindex_str[2 + DECIMAL_STR_MAX(int)];
-        int r;
+        int initialized, r;
+        Link *link;
 
         assert(m);
         assert(m->rtnl);
@@ -3201,13 +3201,18 @@ int link_add(Manager *m, sd_netlink_message *message, Link **ret) {
         if (detect_container() <= 0) {
                 /* not in a container, udev will be around */
                 sprintf(ifindex_str, "n%d", link->ifindex);
-                device = udev_device_new_from_device_id(m->udev, ifindex_str);
-                if (!device) {
-                        r = log_link_warning_errno(link, errno, "Could not find udev device: %m");
+                r = sd_device_new_from_device_id(&device, ifindex_str);
+                if (r < 0) {
+                        log_link_warning_errno(link, r, "Could not find device: %m");
                         goto failed;
                 }
 
-                if (udev_device_get_is_initialized(device) <= 0) {
+                r = sd_device_get_is_initialized(device, &initialized);
+                if (r < 0) {
+                        log_link_warning_errno(link, r, "Could not determine whether the device is initialized or not: %m");
+                        goto failed;
+                }
+                if (!initialized) {
                         /* not yet ready */
                         log_link_debug(link, "link pending udev initialization...");
                         return 0;
index d3028bae50af1074f0180891c5b417d9eb7f20b4..b6f8ce1385832a218edff1f7564a3c66857fcee3 100644 (file)
@@ -4,6 +4,7 @@
 #include <endian.h>
 
 #include "sd-bus.h"
+#include "sd-device.h"
 #include "sd-dhcp-client.h"
 #include "sd-dhcp-server.h"
 #include "sd-dhcp6-client.h"
@@ -57,7 +58,7 @@ typedef struct Link {
         struct ether_addr mac;
         struct in6_addr ipv6ll_address;
         uint32_t mtu;
-        struct udev_device *udev_device;
+        sd_device *sd_device;
 
         unsigned flags;
         uint8_t kernel_operstate;
@@ -136,7 +137,7 @@ int link_address_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *u
 int link_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata);
 
 void link_enter_failed(Link *link);
-int link_initialized(Link *link, struct udev_device *device);
+int link_initialized(Link *link, sd_device *device);
 
 void link_check_ready(Link *link);
 
index 6e2c79bce15b64970828f3dbc7778292f60172ca..8c527837f8e6eb17e336077a0f50e2643d4091c1 100644 (file)
@@ -3,6 +3,7 @@
 #include "alloc-util.h"
 #include "bus-util.h"
 #include "networkd-manager.h"
+#include "strv.h"
 
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_operational_state, link_operstate, LinkOperationalState);
 
index 3792f3d7002e5b9e86ce265d5230c169c201909c..7462a622155279f1ce5a0fcb9c5818ab374a3257 100644 (file)
@@ -22,7 +22,6 @@
 #include "ordered-set.h"
 #include "path-util.h"
 #include "set.h"
-#include "udev-util.h"
 #include "virt.h"
 
 /* use 8 MB for receive socket kernel queue. */
@@ -183,18 +182,20 @@ int manager_connect_bus(Manager *m) {
         return 0;
 }
 
-static int manager_udev_process_link(Manager *m, struct udev_device *device) {
+static int manager_udev_process_link(Manager *m, sd_device *device) {
+        const char *action;
         Link *link = NULL;
         int r, ifindex;
 
         assert(m);
         assert(device);
 
-        if (!streq_ptr(udev_device_get_action(device), "add"))
+        r = sd_device_get_property_value(device, "ACTION", &action);
+        if (r < 0 || !streq_ptr(action, "add"))
                 return 0;
 
-        ifindex = udev_device_get_ifindex(device);
-        if (ifindex <= 0) {
+        r = sd_device_get_ifindex(device, &ifindex);
+        if (r < 0 || ifindex <= 0) {
                 log_debug("Ignoring udev ADD event for device with invalid ifindex");
                 return 0;
         }
@@ -215,11 +216,12 @@ static int manager_udev_process_link(Manager *m, struct udev_device *device) {
 static int manager_dispatch_link_udev(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
         Manager *m = userdata;
         struct udev_monitor *monitor = m->udev_monitor;
-        _cleanup_(udev_device_unrefp) struct udev_device *device = NULL;
+        _cleanup_(sd_device_unrefp) sd_device *device = NULL;
+        int r;
 
-        device = udev_monitor_receive_device(monitor);
-        if (!device)
-                return -ENOMEM;
+        r = udev_monitor_receive_sd_device(monitor, &device);
+        if (r < 0)
+                return r;
 
         (void) manager_udev_process_link(m, device);
 
@@ -235,11 +237,7 @@ static int manager_connect_udev(Manager *m) {
         if (detect_container() > 0)
                 return 0;
 
-        m->udev = udev_new();
-        if (!m->udev)
-                return -ENOMEM;
-
-        m->udev_monitor = udev_monitor_new_from_netlink(m->udev, "udev");
+        m->udev_monitor = udev_monitor_new_from_netlink(NULL, "udev");
         if (!m->udev_monitor)
                 return -ENOMEM;
 
@@ -1481,7 +1479,6 @@ void manager_free(Manager *m) {
 
         sd_event_source_unref(m->udev_event_source);
         udev_monitor_unref(m->udev_monitor);
-        udev_unref(m->udev);
 
         sd_bus_unref(m->bus);
 
index a6cb1e2d44ad08bd832956a78a10eb8a092e982f..edaafb6a0663f704d564961665e9287a416f6be9 100644 (file)
@@ -7,7 +7,7 @@
 #include "sd-event.h"
 #include "sd-netlink.h"
 #include "sd-resolve.h"
-#include "udev.h"
+#include "libudev.h"
 
 #include "dhcp-identifier.h"
 #include "hashmap.h"
@@ -26,7 +26,6 @@ struct Manager {
         sd_event *event;
         sd_resolve *resolve;
         sd_bus *bus;
-        struct udev *udev;
         struct udev_monitor *udev_monitor;
         sd_event_source *udev_event_source;
 
index 8284e3a2993fcb52bd7e0ba6d902f791e28420fa..4709d9c9c76f87c348ef33331de4ae524020cd09 100644 (file)
@@ -10,6 +10,7 @@
 
 #include "networkd-ndisc.h"
 #include "networkd-route.h"
+#include "strv.h"
 
 #define NDISC_DNSSL_MAX 64U
 #define NDISC_RDNSS_MAX 64U
index 77ba8c678ee32dd0a9f5b54fb2144ebdaad45848..10c5cb4163d986dbbbb09db1c1832c5f6d6bec73 100644 (file)
@@ -450,26 +450,25 @@ int network_get_by_name(Manager *manager, const char *name, Network **ret) {
         return 0;
 }
 
-int network_get(Manager *manager, struct udev_device *device,
+int network_get(Manager *manager, sd_device *device,
                 const char *ifname, const struct ether_addr *address,
                 Network **ret) {
-        Network *network;
-        struct udev_device *parent;
         const char *path = NULL, *parent_driver = NULL, *driver = NULL, *devtype = NULL;
+        sd_device *parent;
+        Network *network;
 
         assert(manager);
         assert(ret);
 
         if (device) {
-                path = udev_device_get_property_value(device, "ID_PATH");
+                (void) sd_device_get_property_value(device, "ID_PATH", &path);
 
-                parent = udev_device_get_parent(device);
-                if (parent)
-                        parent_driver = udev_device_get_driver(parent);
+                if (sd_device_get_parent(device, &parent) >= 0)
+                        (void) sd_device_get_driver(parent, &parent_driver);
 
-                driver = udev_device_get_property_value(device, "ID_NET_DRIVER");
+                (void) sd_device_get_property_value(device, "ID_NET_DRIVER", &driver);
 
-                devtype = udev_device_get_devtype(device);
+                (void) sd_device_get_devtype(device, &devtype);
         }
 
         LIST_FOREACH(networks, network, manager->networks) {
@@ -484,8 +483,7 @@ int network_get(Manager *manager, struct udev_device *device,
                                 const char *attr;
                                 uint8_t name_assign_type = NET_NAME_UNKNOWN;
 
-                                attr = udev_device_get_sysattr_value(device, "name_assign_type");
-                                if (attr)
+                                if (sd_device_get_sysattr_value(device, "name_assign_type", &attr) >= 0)
                                         (void) safe_atou8(attr, &name_assign_type);
 
                                 if (name_assign_type == NET_NAME_ENUM)
index 0cd1c75f14f7e898d398ad1dfa41a5929a1d9c3f..efb9efc560d621a1e9a34d8c38eccfc408b6cf26 100644 (file)
@@ -2,7 +2,7 @@
 #pragma once
 
 #include "sd-bus.h"
-#include "udev.h"
+#include "sd-device.h"
 
 #include "condition.h"
 #include "conf-parser.h"
@@ -268,7 +268,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
 int network_load(Manager *manager);
 
 int network_get_by_name(Manager *manager, const char *name, Network **ret);
-int network_get(Manager *manager, struct udev_device *device, const char *ifname, const struct ether_addr *mac, Network **ret);
+int network_get(Manager *manager, sd_device *device, const char *ifname, const struct ether_addr *mac, Network **ret);
 int network_apply(Network *network, Link *link);
 void network_apply_anonymize_if_set(Network *network);
 
index 04a657a87ffcb92691bc3c10cca5ac566e766862..c7d6ac2558711a2b60fdb7a21e9d6d88bc11d25b 100644 (file)
@@ -12,6 +12,7 @@
 #include "parse-util.h"
 #include "sd-radv.h"
 #include "string-util.h"
+#include "strv.h"
 
 int config_parse_router_prefix_delegation(
                 const char *unit,
index dbb06a807469a288ef139a61cd48dc2ea7d83314..588e618351ca543e85220998d325fa1c36ac216f 100644 (file)
@@ -12,6 +12,7 @@
 #include "parse-util.h"
 #include "socket-util.h"
 #include "string-util.h"
+#include "strv.h"
 
 int routing_policy_rule_new(RoutingPolicyRule **ret) {
         RoutingPolicyRule *rule;
index 8f7b5b74fd40ee84d1956b8d9fe4e373f53d2d66..d398be987f5773418108f061d9ac10d1fc6afb8c 100644 (file)
@@ -4,6 +4,7 @@
 #include "sd-event.h"
 
 #include "capability-util.h"
+#include "mkdir.h"
 #include "networkd-conf.h"
 #include "networkd-manager.h"
 #include "signal-util.h"
index 35c982a91d78fbdfc5ad3bd866e0021adbddca3a..31112a8a961baa948ad3f4a3b59024a03a7f97a3 100644 (file)
@@ -2,13 +2,14 @@
 
 #include <sys/param.h>
 
+#include "sd-device.h"
+
 #include "alloc-util.h"
 #include "dhcp-lease-internal.h"
 #include "hostname-util.h"
 #include "network-internal.h"
 #include "networkd-manager.h"
 #include "string-util.h"
-#include "udev-util.h"
 
 static void test_deserialize_in_addr(void) {
         _cleanup_free_ struct in_addr *addresses = NULL;
@@ -117,7 +118,7 @@ static int test_load_config(Manager *manager) {
         return 0;
 }
 
-static void test_network_get(Manager *manager, struct udev_device *loopback) {
+static void test_network_get(Manager *manager, sd_device *loopback) {
         Network *network;
         const struct ether_addr mac = {};
 
@@ -219,9 +220,8 @@ static void test_dhcp_hostname_shorten_overlong(void) {
 
 int main(void) {
         _cleanup_(manager_freep) Manager *manager = NULL;
-        _cleanup_(udev_unrefp) struct udev *udev = NULL;
-        _cleanup_(udev_device_unrefp) struct udev_device *loopback = NULL;
-        int r;
+        _cleanup_(sd_device_unrefp) sd_device *loopback = NULL;
+        int ifindex, r;
 
         test_deserialize_in_addr();
         test_deserialize_dhcp_routes();
@@ -234,12 +234,10 @@ int main(void) {
         if (r == -EPERM)
                 return EXIT_TEST_SKIP;
 
-        udev = udev_new();
-        assert_se(udev);
-
-        loopback = udev_device_new_from_syspath(udev, "/sys/class/net/lo");
+        assert_se(sd_device_new_from_syspath(&loopback, "/sys/class/net/lo") >= 0);
         assert_se(loopback);
-        assert_se(udev_device_get_ifindex(loopback) == 1);
+        assert_se(sd_device_get_ifindex(loopback, &ifindex) >= 0);
+        assert_se(ifindex == 1);
 
         test_network_get(manager, loopback);
 
index ccda93babe84ecb4089dbd4c4650f2be7b70288b..25072cc5b140a952628ade9eb43917a9df190f3a 100644 (file)
@@ -9,6 +9,7 @@
 #include "manager.h"
 #include "netlink-util.h"
 #include "network-internal.h"
+#include "strv.h"
 #include "time-util.h"
 #include "util.h"
 
index 1a397ece8c4754c2c57476d2a753fc760bdab07f..7d0dee5902f310efa69601fb7709d316ff8f3be6 100644 (file)
@@ -9,6 +9,7 @@
 #include "conf-parser.h"
 #include "ethtool-util.h"
 #include "fd-util.h"
+#include "libudev-device-internal.h"
 #include "libudev-private.h"
 #include "link-config.h"
 #include "log.h"
@@ -332,7 +333,7 @@ static int get_mac(struct udev_device *device, bool want_random,
         else {
                 uint64_t result;
 
-                r = net_get_unique_predictable_data(device, &result);
+                r = net_get_unique_predictable_data(device->device, &result);
                 if (r < 0)
                         return r;