From 06dc900efa69bbebe1cff59112b4cfd40ed6b3b5 Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Sat, 13 Aug 2022 05:08:38 +0900
Subject: [PATCH] network/bridge: fix UseBPDU= and AllowPortToBeRoot=

Fixes bugs caused by 7f9915f0de67f3a10a4b22810d119da65af8c84a.

Fixes #24268.

(cherry picked from commit 3f504b892b92f54087feeb3fb35e3938567d7fa0)

Conflict:code context adaptation
Reference:https://github.com/systemd/systemd-stable/commit/06dc900efa69bbebe1cff59112b4cfd40ed6b3b5
---
 src/network/networkd-setlink.c              | 4 ++--
 test/networkd-test.py                       | 4 ++--
 test/test-network/systemd-networkd-tests.py | 8 ++++----
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c
index 97c6848717..71ecaf4abf 100644
--- a/src/network/networkd-setlink.c
+++ b/src/network/networkd-setlink.c
@@ -230,7 +230,7 @@ static int link_configure_fill_message(
                         return log_link_debug_errno(link, r, "Could not open IFLA_PROTINFO container: %m");
 
                 if (link->network->use_bpdu >= 0) {
-                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_GUARD, link->network->use_bpdu);
+                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_GUARD, !link->network->use_bpdu);
                         if (r < 0)
                                 return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_GUARD attribute: %m");
                 }
@@ -254,7 +254,7 @@ static int link_configure_fill_message(
                 }
 
                 if (link->network->allow_port_to_be_root >= 0) {
-                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROTECT, link->network->allow_port_to_be_root);
+                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROTECT, !link->network->allow_port_to_be_root);
                         if (r < 0)
                                 return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_PROTECT attribute: %m");
                 }
diff --git a/test/networkd-test.py b/test/networkd-test.py
index 4b5ba622fa..0a5ba11f89 100755
--- a/test/networkd-test.py
+++ b/test/networkd-test.py
@@ -291,8 +291,8 @@ Priority=23
         self.assertEqual(self.read_attr('port2', 'brport/path_cost'), '555')
         self.assertEqual(self.read_attr('port2', 'brport/multicast_fast_leave'), '1')
         self.assertEqual(self.read_attr('port2', 'brport/unicast_flood'), '1')
-        self.assertEqual(self.read_attr('port2', 'brport/bpdu_guard'), '1')
-        self.assertEqual(self.read_attr('port2', 'brport/root_block'), '1')
+        self.assertEqual(self.read_attr('port2', 'brport/bpdu_guard'), '0')
+        self.assertEqual(self.read_attr('port2', 'brport/root_block'), '0')
 
 class ClientTestBase(NetworkdTestingUtilities):
     """Provide common methods for testing networkd against servers."""
diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py
index 989020e0c6..37d2151a8d 100755
--- a/test/test-network/systemd-networkd-tests.py
+++ b/test/test-network/systemd-networkd-tests.py
@@ -3931,8 +3931,8 @@ class NetworkdBridgeTests(unittest.TestCase, Utilities):
             self.assertEqual(read_bridge_port_attr('bridge99', 'dummy98', 'neigh_suppress'), '1')
         self.assertEqual(read_bridge_port_attr('bridge99', 'dummy98', 'learning'), '0')
         self.assertEqual(read_bridge_port_attr('bridge99', 'dummy98', 'priority'), '23')
-        self.assertEqual(read_bridge_port_attr('bridge99', 'dummy98', 'bpdu_guard'), '1')
-        self.assertEqual(read_bridge_port_attr('bridge99', 'dummy98', 'root_block'), '1')
+        self.assertEqual(read_bridge_port_attr('bridge99', 'dummy98', 'bpdu_guard'), '0')
+        self.assertEqual(read_bridge_port_attr('bridge99', 'dummy98', 'root_block'), '0')
 
         output = check_output('bridge -d link show test1')
         print(output)
-- 
2.33.0

