From 03dd7b7ddec1b0e06f254972a2e05f516a05edaf Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 16 Feb 2019 05:21:59 +0900 Subject: [PATCH 1/3] sd-device: also store properties read from udev database to sd_device::properties_db Follow-up for a3ce813697bcc1c4644e097a2f1cd0459326d6ee and 5ce41697bd3ddc19cd6e1e6834751082ca0c8b02. Before a3ce813697bcc1c4644e097a2f1cd0459326d6ee, all properties in src->properties and src->properties_db are mixed and copied to dst->properties_db by device_copy_properties(). So, it is not necessary to store data from udev database file to sd_device::properties_db before copying properties. But now, properties are not mixed. So, the read data need to be stored to also ::properties_db. Fixes #11721. --- src/libsystemd/sd-device/sd-device.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index 2a69f2e94b..9137a93794 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -1110,6 +1110,7 @@ int device_add_devlink(sd_device *device, const char *devlink) { static int device_add_property_internal_from_string(sd_device *device, const char *str) { _cleanup_free_ char *key = NULL; char *value; + int r; assert(device); assert(str); @@ -1127,7 +1128,13 @@ static int device_add_property_internal_from_string(sd_device *device, const cha if (isempty(++value)) value = NULL; - return device_add_property_internal(device, key, value); + /* Add the property to both sd_device::properties and sd_device::properties_db, + * as this is called by only handle_db_line(). */ + r = device_add_property_aux(device, key, value, false); + if (r < 0) + return r; + + return device_add_property_aux(device, key, value, true); } int device_set_usec_initialized(sd_device *device, usec_t when) { From 96fb7dc30f171fd19d20d2a460259de2dcf2c656 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 16 Feb 2019 05:44:38 +0900 Subject: [PATCH 2/3] test-network: add a tiny test for ID_NET_DRIVER= udev property Test for #11721. --- test/test-network/systemd-networkd-tests.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 442ff094c9..6792e21fe7 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -288,6 +288,11 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.assertNotRegex(output, '1 lo ') self.assertRegex(output, 'dropin-test') + output = subprocess.check_output(['networkctl', 'status', 'dropin-*']).rstrip().decode('utf-8') + self.assertNotRegex(output, '1 lo ') + self.assertRegex(output, 'dropin-test') + self.assertRegex(output, 'Driver: dummy') + def test_bridge(self): self.copy_unit_to_networkd_unit_path('25-bridge.netdev') self.start_networkd() From 4f4daf418f2e750caae6bc26cd49daafc23ad4de Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 17 Feb 2019 00:47:45 +0900 Subject: [PATCH 3/3] udev,network: drop unused parent_driver argument from net_match_config() The argument has never been used. --- src/libsystemd-network/network-internal.c | 1 - src/libsystemd-network/network-internal.h | 1 - src/network/netdev/netdev.c | 2 +- src/network/networkd-network.c | 9 ++------- src/udev/net/link-config.c | 6 +----- 5 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index a0209caf3a..fa7405eba5 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -107,7 +107,6 @@ bool net_match_config(Set *match_mac, Condition *match_arch, const struct ether_addr *dev_mac, const char *dev_path, - const char *dev_parent_driver, const char *dev_driver, const char *dev_type, const char *dev_name) { diff --git a/src/libsystemd-network/network-internal.h b/src/libsystemd-network/network-internal.h index 0c8da848c1..944fd2ca61 100644 --- a/src/libsystemd-network/network-internal.h +++ b/src/libsystemd-network/network-internal.h @@ -25,7 +25,6 @@ bool net_match_config(Set *match_mac, Condition *match_arch, const struct ether_addr *dev_mac, const char *dev_path, - const char *dev_parent_driver, const char *dev_driver, const char *dev_type, const char *dev_name); diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 0263917468..ecd6cf4105 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -673,7 +673,7 @@ int netdev_load_one(Manager *manager, const char *filename) { netdev_raw->match_host, netdev_raw->match_virt, netdev_raw->match_kernel_cmdline, netdev_raw->match_kernel_version, netdev_raw->match_arch, - NULL, NULL, NULL, NULL, NULL, NULL) <= 0) + NULL, NULL, NULL, NULL, NULL) <= 0) return 0; if (netdev_raw->kind == _NETDEV_KIND_INVALID) { diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 2d23322378..4efd013d6e 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -426,8 +426,7 @@ int network_get_by_name(Manager *manager, const char *name, Network **ret) { int network_get(Manager *manager, sd_device *device, const char *ifname, const struct ether_addr *address, Network **ret) { - const char *path = NULL, *parent_driver = NULL, *driver = NULL, *devtype = NULL; - sd_device *parent; + const char *path = NULL, *driver = NULL, *devtype = NULL; Network *network; assert(manager); @@ -436,9 +435,6 @@ int network_get(Manager *manager, sd_device *device, if (device) { (void) sd_device_get_property_value(device, "ID_PATH", &path); - if (sd_device_get_parent(device, &parent) >= 0) - (void) sd_device_get_driver(parent, &parent_driver); - (void) sd_device_get_property_value(device, "ID_NET_DRIVER", &driver); (void) sd_device_get_devtype(device, &devtype); @@ -450,8 +446,7 @@ int network_get(Manager *manager, sd_device *device, network->match_name, network->match_host, network->match_virt, network->match_kernel_cmdline, network->match_kernel_version, network->match_arch, - address, path, parent_driver, driver, - devtype, ifname)) { + address, path, driver, devtype, ifname)) { if (network->match_name && device) { const char *attr; uint8_t name_assign_type = NET_NAME_UNKNOWN; diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index 60da08a86f..1b41b1f6a2 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -243,13 +243,10 @@ int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret) assert(ret); LIST_FOREACH(links, link, ctx->links) { - const char *address = NULL, *id_path = NULL, *parent_driver = NULL, *id_net_driver = NULL, *devtype = NULL, *sysname = NULL; - sd_device *parent; + const char *address = NULL, *id_path = NULL, *id_net_driver = NULL, *devtype = NULL, *sysname = NULL; (void) sd_device_get_sysattr_value(device, "address", &address); (void) sd_device_get_property_value(device, "ID_PATH", &id_path); - if (sd_device_get_parent(device, &parent) >= 0) - (void) sd_device_get_driver(parent, &parent_driver); (void) sd_device_get_property_value(device, "ID_NET_DRIVER", &id_net_driver); (void) sd_device_get_devtype(device, &devtype); (void) sd_device_get_sysname(device, &sysname); @@ -260,7 +257,6 @@ int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret) link->match_kernel_version, link->match_arch, address ? ether_aton(address) : NULL, id_path, - parent_driver, id_net_driver, devtype, sysname)) {