Merge ~xnox/netplan:master into ~netplan-developers/netplan/+git/netplan-lp:master

Proposed by Dimitri John Ledkov
Status: Merged
Approved by: Mathieu Trudel-Lapierre
Approved revision: 1cdbdc310b956ee0e02c96ee9c1ba3f9fa20cfd7
Merged at revision: 85be50e404e2532c1817bb7fe350f85428f7998c
Proposed branch: ~xnox/netplan:master
Merge into: ~netplan-developers/netplan/+git/netplan-lp:master
Diff against target: 86 lines (+32/-2)
4 files modified
src/networkd.c (+3/-0)
src/parse.c (+1/-0)
tests/generate.py (+7/-2)
tests/integration.py (+21/-0)
Reviewer Review Type Date Requested Status
Mathieu Trudel-Lapierre (community) Approve
Martin Pitt (community) Approve
Review via email: mp+324020@code.launchpad.net

Commit message

Parse and set MACAdress on the vlan devices.

LP: #1690388

Description of the change

Parse and set MACAdress on the vlan devices.

LP: #1690388

To post a comment you must log in.
Revision history for this message
Martin Pitt (pitti) wrote :

Looks good, but needs a unit test (make check ought to complain about/fail on < 100% coverage with this) and integration test. This doesn't supply an implementation with NetworkManager -- if that doesn't support it, it should trigger a warning at least.

review: Needs Fixing
Revision history for this message
Dimitri John Ledkov (xnox) wrote :

make check passed, but make coverage did not!

And NM does not support setting mac address for the vlan, at least in the keyfile plugin =(

Revision history for this message
Mathieu Trudel-Lapierre (cyphermox) wrote :

I already have code to do that, including the unit and integration tests. This should definitely not only be applied to VLANs.

review: Disapprove
Revision history for this message
Dimitri John Ledkov (xnox) wrote :

And added an integration test now too.

Oh, well even if this is duplicate code, I did familiarise myself with netplan code, unit and integration tests.

Revision history for this message
Martin Pitt (pitti) wrote :

Right, that looks good! However, not merging myself, please coordinate with Mathieu.

review: Approve
Revision history for this message
Mathieu Trudel-Lapierre (cyphermox) wrote :

I'll merge bits and bobs of it to improve the tests. The code is otherwise the same.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/networkd.c b/src/networkd.c
2index 04c7c37..817c3d2 100644
3--- a/src/networkd.c
4+++ b/src/networkd.c
5@@ -177,6 +177,9 @@ write_netdev_file(net_definition* def, const char* rootdir, const char* path)
6 s = g_string_sized_new(200);
7 g_string_append_printf(s, "[NetDev]\nName=%s\n", def->id);
8
9+ if (def->set_mac)
10+ g_string_append_printf(s, "MACAddress=%s\n", def->set_mac);
11+
12 switch (def->type) {
13 case ND_BRIDGE:
14 g_string_append(s, "Kind=bridge\n");
15diff --git a/src/parse.c b/src/parse.c
16index 4312112..70ec084 100644
17--- a/src/parse.c
18+++ b/src/parse.c
19@@ -970,6 +970,7 @@ const mapping_entry_handler vlan_def_handlers[] = {
20 {"id", YAML_SCALAR_NODE, handle_netdef_guint, NULL, netdef_offset(vlan_id)},
21 {"link", YAML_SCALAR_NODE, handle_netdef_id_ref, NULL, netdef_offset(vlan_link)},
22 {"nameservers", YAML_MAPPING_NODE, NULL, nameservers_handlers},
23+ {"macaddress", YAML_SCALAR_NODE, handle_netdef_mac, NULL, netdef_offset(set_mac)},
24 {"mtu", YAML_SCALAR_NODE, handle_netdef_guint, NULL, netdef_offset(mtubytes)},
25 {"renderer", YAML_SCALAR_NODE, handle_netdef_renderer},
26 {"routes", YAML_SEQUENCE_NODE, handle_routes},
27diff --git a/tests/generate.py b/tests/generate.py
28index 542ad2f..1dc284a 100755
29--- a/tests/generate.py
30+++ b/tests/generate.py
31@@ -1068,16 +1068,21 @@ Domains=lab kitchen
32 id: 1
33 link: en1
34 addresses: [1.2.3.4/24]
35+ enred:
36+ id: 3
37+ link: en1
38+ macaddress: aa:bb:cc:dd:ee:11
39 engreen: {id: 2, link: en1, dhcp6: true}''')
40
41- self.assert_networkd({'en1.network': '[Match]\nName=en1\n\n[Network]\nVLAN=enblue\nVLAN=engreen\n',
42+ self.assert_networkd({'en1.network': '[Match]\nName=en1\n\n[Network]\nVLAN=engreen\nVLAN=enblue\nVLAN=enred\n',
43 'enblue.netdev': '[NetDev]\nName=enblue\nKind=vlan\n\n[VLAN]\nId=1\n',
44 'engreen.netdev': '[NetDev]\nName=engreen\nKind=vlan\n\n[VLAN]\nId=2\n',
45+ 'enred.netdev': '[NetDev]\nName=enred\nMACAddress=aa:bb:cc:dd:ee:11\nKind=vlan\n\n[VLAN]\nId=3\n',
46 'enblue.network': '[Match]\nName=enblue\n\n[Network]\nAddress=1.2.3.4/24\n',
47 'engreen.network': ND_DHCP6 % 'engreen'})
48 self.assert_nm(None, '''[keyfile]
49 # devices managed by networkd
50-unmanaged-devices+=interface-name:en1,interface-name:enblue,interface-name:engreen,''')
51+unmanaged-devices+=interface-name:engreen,interface-name:en1,interface-name:enblue,interface-name:enred,''')
52 self.assert_udev(None)
53
54
55diff --git a/tests/integration.py b/tests/integration.py
56index 68634c6..25dafa5 100755
57--- a/tests/integration.py
58+++ b/tests/integration.py
59@@ -1483,6 +1483,27 @@ class TestNetworkd(NetworkTestBase, _CommonTests):
60 with open('/sys/class/net/mybond/bonding/arp_validate') as f:
61 self.assertEqual(f.read().strip(), 'all 3')
62
63+ def test_vlan_mac_address(self):
64+ self.setup_eth(None)
65+ self.addCleanup(subprocess.call, ['ip', 'link', 'delete', 'myvlan'], stderr=subprocess.DEVNULL)
66+ with open(self.config, 'w') as f:
67+ f.write('''network:
68+ renderer: %(r)s
69+ ethernets:
70+ ethbn:
71+ match: {name: %(ec)s}
72+ %(e2c)s: {}
73+ vlans:
74+ myvlan:
75+ id: 101
76+ link: ethbn
77+ macaddress: aa:bb:cc:dd:ee:22
78+ ''' % {'r': self.backend, 'ec': self.dev_e_client, 'e2c': self.dev_e2_client})
79+ self.generate_and_settle()
80+ self.assert_iface_up('myvlan', ['myvlan@' + self.dev_e_client])
81+ with open('/sys/class/net/myvlan/address') as f:
82+ self.assertEqual(f.read().strip(), 'aa:bb:cc:dd:ee:22')
83+
84
85 class TestNetworkManager(NetworkTestBase, _CommonTests):
86 backend = 'NetworkManager'

Subscribers

People subscribed via source and target branches