diff -Nru netplan.io-0.99/debian/changelog netplan.io-0.99/debian/changelog --- netplan.io-0.99/debian/changelog 2020-05-28 21:09:51.000000000 +0000 +++ netplan.io-0.99/debian/changelog 2021-01-15 07:38:20.000000000 +0000 @@ -1,3 +1,10 @@ +netplan.io (0.99-0ubuntu3~18.04.4) bionic; urgency=medium + + * d/p/0001-Don-t-fail-if-same-primary-slave-was-set-before-LP-1.patch + - Fix primary slave on the bond not getting set (LP: #1817651) + + -- Seyeong Kim Fri, 15 Jan 2021 07:38:20 +0000 + netplan.io (0.99-0ubuntu3~18.04.3) bionic; urgency=medium * d/p/0004-Fix-process_link_changes-handling-up-interfaces.patch: diff -Nru netplan.io-0.99/debian/patches/0001-Don-t-fail-if-same-primary-slave-was-set-before-LP-1.patch netplan.io-0.99/debian/patches/0001-Don-t-fail-if-same-primary-slave-was-set-before-LP-1.patch --- netplan.io-0.99/debian/patches/0001-Don-t-fail-if-same-primary-slave-was-set-before-LP-1.patch 1970-01-01 00:00:00.000000000 +0000 +++ netplan.io-0.99/debian/patches/0001-Don-t-fail-if-same-primary-slave-was-set-before-LP-1.patch 2021-01-15 07:38:20.000000000 +0000 @@ -0,0 +1,83 @@ +From 35548a4f4fe99932122272f7bb2ef1bf4eb38bb9 Mon Sep 17 00:00:00 2001 +From: Lukas Maerdian +Date: Fri, 15 May 2020 08:24:59 +0200 +Subject: [PATCH] Don't fail if same primary slave was set before (LP: + #1817651) (#136) + +The netplan parser might run multiple passes, if unknown interfaces/netdefs are detected during a prior pass. In that case it would fail to set a bond's primary slave, because it was set before (to the same interface). + +Fixes: https://bugs.launchpad.net/ubuntu/+source/netplan.io/+bug/1817651 +--- + src/parse.c | 5 ++++- + tests/generator/test_bonds.py | 42 +++++++++++++++++++++++++++++++++++ + 2 files changed, 46 insertions(+), 1 deletion(-) + +Index: netplan.io-0.99/src/parse.c +=================================================================== +--- netplan.io-0.99.orig/src/parse.c ++++ netplan.io-0.99/src/parse.c +@@ -1482,7 +1482,10 @@ handle_bond_primary_slave(yaml_document_ + if (!component) { + add_missing_node(node); + } else { +- if (cur_netdef->bond_params.primary_slave) ++ /* If this is not the primary pass, the primary slave might already be equally set. */ ++ if (!g_strcmp0(cur_netdef->bond_params.primary_slave, scalar(node))) { ++ return TRUE; ++ } else if (cur_netdef->bond_params.primary_slave) + return yaml_error(node, error, "%s: bond already has a primary slave: %s", + cur_netdef->id, cur_netdef->bond_params.primary_slave); + +Index: netplan.io-0.99/tests/generator/test_bonds.py +=================================================================== +--- netplan.io-0.99.orig/tests/generator/test_bonds.py ++++ netplan.io-0.99/tests/generator/test_bonds.py +@@ -299,6 +299,48 @@ UseMTU=true + 'switchports.network': '[Match]\nDriver=yayroute\n\n' + '[Network]\nLinkLocalAddressing=no\nBond=bn0\n'}) + ++ def test_bond_primary_slave_duplicate(self): ++ self.generate('''network: ++ version: 2 ++ renderer: networkd ++ ethernets: ++ eno1: {} ++ enp65s0: {} ++ dummy2: {} ++ bonds: ++ bond0: ++ interfaces: [eno1, enp65s0] ++ parameters: ++ primary: enp65s0 ++ mode: balance-tlb ++ vlans: ++ vbr-v10: ++ id: 10 ++ link: vbr ++ bridges: ++ vbr: ++ interfaces: [dummy2]''', expect_fail=False) ++ ++ self.assert_networkd({'eno1.network': '[Match]\nName=eno1\n\n[Network]\nLinkLocalAddressing=no\nBond=bond0\n', ++ 'enp65s0.network': '''[Match] ++Name=enp65s0 ++ ++[Network] ++LinkLocalAddressing=no ++Bond=bond0 ++PrimarySlave=true ++''', ++ 'dummy2.network': '[Match]\nName=dummy2\n\n[Network]\nLinkLocalAddressing=no\nBridge=vbr\n', ++ 'bond0.network': '[Match]\nName=bond0\n\n' ++ '[Network]\nLinkLocalAddressing=ipv6\nConfigureWithoutCarrier=yes\n', ++ 'bond0.netdev': '[NetDev]\nName=bond0\nKind=bond\n\n[Bond]\nMode=balance-tlb\n', ++ 'vbr-v10.network': '[Match]\nName=vbr-v10\n\n' ++ '[Network]\nLinkLocalAddressing=ipv6\nConfigureWithoutCarrier=yes\n', ++ 'vbr-v10.netdev': '[NetDev]\nName=vbr-v10\nKind=vlan\n\n[VLAN]\nId=10\n', ++ 'vbr.network': '[Match]\nName=vbr\n\n' ++ '[Network]\nLinkLocalAddressing=ipv6\nConfigureWithoutCarrier=yes\nVLAN=vbr-v10\n', ++ 'vbr.netdev': '[NetDev]\nName=vbr\nKind=bridge\n'}) ++ + def test_bond_with_gratuitous_spelling(self): + """Validate that the correct spelling of gratuitous also works""" + self.generate('''network: diff -Nru netplan.io-0.99/debian/patches/series netplan.io-0.99/debian/patches/series --- netplan.io-0.99/debian/patches/series 2020-05-28 21:09:51.000000000 +0000 +++ netplan.io-0.99/debian/patches/series 2021-01-15 07:38:20.000000000 +0000 @@ -2,3 +2,4 @@ disable-networkd-tunnels-ipip-gre.patch Fix-invalid-bond-mode-SRU-regression-LP-1877643.patch 0004-Fix-process_link_changes-handling-up-interfaces.patch +0001-Don-t-fail-if-same-primary-slave-was-set-before-LP-1.patch