From 6ce611e57c0df44e914b33603bffeee7a764fe53 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 26 Nov 2018 14:25:50 +0900 Subject: [PATCH 1/3] network: also load foo.netdev.d/*.conf Fixes #9940. --- src/network/netdev/netdev.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 53149636ea..4a07fb5d37 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -705,10 +705,10 @@ int netdev_load_one(Manager *manager, const char *filename) { if (NETDEV_VTABLE(netdev)->init) NETDEV_VTABLE(netdev)->init(netdev); - r = config_parse(NULL, filename, file, - NETDEV_VTABLE(netdev)->sections, - config_item_perf_lookup, network_netdev_gperf_lookup, - CONFIG_PARSE_WARN, netdev); + r = config_parse_many(filename, network_dirs, dropin_dirname, + NETDEV_VTABLE(netdev)->sections, + config_item_perf_lookup, network_netdev_gperf_lookup, + CONFIG_PARSE_WARN, netdev); if (r < 0) return r; From 013c8dc94d9f8e3661d928bb90ba3e7f1b74fdfc Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 26 Nov 2018 15:01:01 +0900 Subject: [PATCH 2/3] test-network: add tests for dropin .conf files --- test/test-network/conf/21-vlan.netdev | 7 ------- test/test-network/conf/21-vlan.netdev.d/override.conf | 6 ++++++ test/test-network/conf/21-vlan.network | 3 --- test/test-network/conf/21-vlan.network.d/override.conf | 2 ++ test/test-network/systemd-networkd-tests.py | 4 ++++ 5 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 test/test-network/conf/21-vlan.netdev.d/override.conf create mode 100644 test/test-network/conf/21-vlan.network.d/override.conf diff --git a/test/test-network/conf/21-vlan.netdev b/test/test-network/conf/21-vlan.netdev index fe9801c8a2..af39404b5f 100644 --- a/test/test-network/conf/21-vlan.netdev +++ b/test/test-network/conf/21-vlan.netdev @@ -1,10 +1,3 @@ [NetDev] Name=vlan99 Kind=vlan - -[VLAN] -Id=99 -GVRP=true -MVRP=true -LooseBinding=true -ReorderHeader=true diff --git a/test/test-network/conf/21-vlan.netdev.d/override.conf b/test/test-network/conf/21-vlan.netdev.d/override.conf new file mode 100644 index 0000000000..cd61be5310 --- /dev/null +++ b/test/test-network/conf/21-vlan.netdev.d/override.conf @@ -0,0 +1,6 @@ +[VLAN] +Id=99 +GVRP=true +MVRP=true +LooseBinding=true +ReorderHeader=true diff --git a/test/test-network/conf/21-vlan.network b/test/test-network/conf/21-vlan.network index a4fa1decde..afe1debe08 100644 --- a/test/test-network/conf/21-vlan.network +++ b/test/test-network/conf/21-vlan.network @@ -1,5 +1,2 @@ [Match] Name=test1 - -[Network] -VLAN=vlan99 diff --git a/test/test-network/conf/21-vlan.network.d/override.conf b/test/test-network/conf/21-vlan.network.d/override.conf new file mode 100644 index 0000000000..363fc90d7b --- /dev/null +++ b/test/test-network/conf/21-vlan.network.d/override.conf @@ -0,0 +1,2 @@ +[Network] +VLAN=vlan99 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index e1ff2dad23..11b4aa1273 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -74,11 +74,15 @@ class Utilities(): def copy_unit_to_networkd_unit_path(self, *units): for unit in units: shutil.copy(os.path.join(networkd_ci_path, unit), network_unit_file_path) + if (os.path.exists(os.path.join(networkd_ci_path, unit + '.d'))): + copytree(os.path.join(networkd_ci_path, unit + '.d'), os.path.join(network_unit_file_path, unit + '.d')) def remove_unit_from_networkd_path(self, units): for unit in units: if (os.path.exists(os.path.join(network_unit_file_path, unit))): os.remove(os.path.join(network_unit_file_path, unit)) + if (os.path.exists(os.path.join(network_unit_file_path, unit + '.d'))): + shutil.rmtree(os.path.join(network_unit_file_path, unit + '.d')) def start_dnsmasq(self): subprocess.check_call('dnsmasq -8 /var/run/networkd-ci/test-dnsmasq-log-file --log-queries=extra --log-dhcp --pid-file=/var/run/networkd-ci/test-test-dnsmasq.pid --conf-file=/dev/null --interface=veth-peer --enable-ra --dhcp-range=2600::10,2600::20 --dhcp-range=192.168.5.10,192.168.5.200 -R --dhcp-leasefile=/var/run/networkd-ci/lease --dhcp-option=26,1492 --dhcp-option=option:router,192.168.5.1 --dhcp-option=33,192.168.5.4,192.168.5.5', shell=True) From d80734f7cd884ef1261ace989549cad28de010f2 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 26 Nov 2018 22:05:48 +0900 Subject: [PATCH 3/3] test-network: add one more test for netdev dropin .conf files For netdev, config files are loaded twice, and the first time, only Match and NetDev setions are read. So, the test given by the previous commit covers only the second loading. This adds another test that also covers the first loading. --- test/test-network/conf/10-dropin-test.netdev | 4 ++++ .../conf/10-dropin-test.netdev.d/mac.conf | 2 ++ .../conf/10-dropin-test.netdev.d/name.conf | 2 ++ test/test-network/systemd-networkd-tests.py | 15 +++++++++++++-- 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 test/test-network/conf/10-dropin-test.netdev create mode 100644 test/test-network/conf/10-dropin-test.netdev.d/mac.conf create mode 100644 test/test-network/conf/10-dropin-test.netdev.d/name.conf diff --git a/test/test-network/conf/10-dropin-test.netdev b/test/test-network/conf/10-dropin-test.netdev new file mode 100644 index 0000000000..d85ea5bb72 --- /dev/null +++ b/test/test-network/conf/10-dropin-test.netdev @@ -0,0 +1,4 @@ +[NetDev] +Name=hoge +Kind=dummy +MACAddress=00:50:56:c0:00:18 diff --git a/test/test-network/conf/10-dropin-test.netdev.d/mac.conf b/test/test-network/conf/10-dropin-test.netdev.d/mac.conf new file mode 100644 index 0000000000..0b3f765932 --- /dev/null +++ b/test/test-network/conf/10-dropin-test.netdev.d/mac.conf @@ -0,0 +1,2 @@ +[NetDev] +MACAddress=00:50:56:c0:00:28 diff --git a/test/test-network/conf/10-dropin-test.netdev.d/name.conf b/test/test-network/conf/10-dropin-test.netdev.d/name.conf new file mode 100644 index 0000000000..99059320a2 --- /dev/null +++ b/test/test-network/conf/10-dropin-test.netdev.d/name.conf @@ -0,0 +1,2 @@ +[NetDev] +Name=dropin-test diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 11b4aa1273..2525a35f76 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -153,7 +153,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): links =['bridge99', 'bond99', 'bond99', 'vlan99', 'test1', 'macvtap99', 'macvlan99', 'ipvlan99', 'vxlan99', 'veth99', 'vrf99', 'tun99', 'tap99', 'vcan99', 'geneve99', 'dummy98', 'ipiptun99', 'sittun99', '6rdtun99', - 'gretap99', 'vtitun99', 'vti6tun99','ip6tnl99', 'gretun99', 'ip6gretap99', 'wg99'] + 'gretap99', 'vtitun99', 'vti6tun99','ip6tnl99', 'gretun99', 'ip6gretap99', 'wg99', 'dropin-test'] units = ['25-bridge.netdev', '25-bond.netdev', '21-vlan.netdev', '11-dummy.netdev', '21-vlan.network', '21-macvtap.netdev', 'macvtap.network', '21-macvlan.netdev', 'macvlan.network', 'vxlan.network', @@ -163,7 +163,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): '25-gre-tunnel.netdev', '25-gretap-tunnel.netdev', '25-vti-tunnel.netdev', '25-vti6-tunnel.netdev', '12-dummy.netdev', 'gre.network', 'ipip.network', 'ip6gretap.network', 'gretun.network', 'ip6tnl.network', '25-tap.netdev', 'vti6.network', 'vti.network', 'gretap.network', 'sit.network', - '25-ipip-tunnel-independent.netdev', '25-wireguard.netdev', '6rd.network'] + '25-ipip-tunnel-independent.netdev', '25-wireguard.netdev', '6rd.network', '10-dropin-test.netdev'] def setUp(self): self.link_remove(self.links) @@ -172,6 +172,17 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.link_remove(self.links) self.remove_unit_from_networkd_path(self.units) + def test_dropin(self): + self.copy_unit_to_networkd_unit_path('10-dropin-test.netdev') + + self.start_networkd() + + self.assertTrue(self.link_exits('dropin-test')) + + output = subprocess.check_output(['ip', 'link', 'show', 'dropin-test']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, '00:50:56:c0:00:28') + def test_bridge(self): self.copy_unit_to_networkd_unit_path('25-bridge.netdev') self.start_networkd()