From 7f9915f0de67f3a10a4b22810d119da65af8c84a Mon Sep 17 00:00:00 2001 From: Susant Sahani <145210+ssahani@users.noreply.github.com> Date: Fri, 27 Apr 2018 14:02:28 +0530 Subject: [PATCH] networkd: Bridge Property Use kernel defaults. (#8825) Rather than choosing to set or unset any of these flag use kernel defaults. This patch makes following properties to unset. UseBPDU = unset HairPin = unset FastLeave = unset AllowPortToBeRoot = unset UnicastFlood = unset --- man/systemd.network.xml | 10 +++--- src/network/networkd-link.c | 42 +++++++++++++++--------- src/network/networkd-network-gperf.gperf | 10 +++--- src/network/networkd-network.c | 8 +++-- src/network/networkd-network.h | 10 +++--- 5 files changed, 47 insertions(+), 33 deletions(-) diff --git a/man/systemd.network.xml b/man/systemd.network.xml index a45bbe26ea..55db523e79 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1634,7 +1634,7 @@ A boolean. Controls whether the bridge should flood traffic for which an FDB entry is missing and the destination - is unknown through this port. Defaults to on. + is unknown through this port. Defaults to unset. @@ -1642,7 +1642,7 @@ HairPin= A boolean. Configures whether traffic may be sent back - out of the port on which it was received. By default, this + out of the port on which it was received. Defaults to unset. When this flag is false, and the bridge will not forward traffic back out of the receiving port. @@ -1651,7 +1651,7 @@ UseBPDU= A boolean. Configures whether STP Bridge Protocol Data Units will be - processed by the bridge port. Defaults to yes. + processed by the bridge port. Defaults to unset. @@ -1659,7 +1659,7 @@ A boolean. This flag allows the bridge to immediately stop multicast traffic on a port that receives an IGMP Leave message. It is only used with - IGMP snooping if enabled on the bridge. Defaults to off. + IGMP snooping if enabled on the bridge. Defaults to unset. @@ -1667,7 +1667,7 @@ A boolean. Configures whether a given port is allowed to become a root port. Only used when STP is enabled on the bridge. - Defaults to on. + Defaults to unset. diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 97c6d21c07..e4c672b33d 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1401,25 +1401,37 @@ static int link_set_bridge(Link *link) { if (r < 0) return log_link_error_errno(link, r, "Could not append IFLA_PROTINFO attribute: %m"); - r = sd_netlink_message_append_u8(req, IFLA_BRPORT_GUARD, !link->network->use_bpdu); - if (r < 0) - return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_GUARD attribute: %m"); + if (link->network->use_bpdu >= 0) { + r = sd_netlink_message_append_u8(req, IFLA_BRPORT_GUARD, link->network->use_bpdu); + if (r < 0) + return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_GUARD attribute: %m"); + } - r = sd_netlink_message_append_u8(req, IFLA_BRPORT_MODE, link->network->hairpin); - if (r < 0) - return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_MODE attribute: %m"); + if (link->network->hairpin >= 0) { + r = sd_netlink_message_append_u8(req, IFLA_BRPORT_MODE, link->network->hairpin); + if (r < 0) + return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_MODE attribute: %m"); + } - r = sd_netlink_message_append_u8(req, IFLA_BRPORT_FAST_LEAVE, link->network->fast_leave); - if (r < 0) - return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_FAST_LEAVE attribute: %m"); + if (link->network->fast_leave >= 0) { + r = sd_netlink_message_append_u8(req, IFLA_BRPORT_FAST_LEAVE, link->network->fast_leave); + if (r < 0) + return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_FAST_LEAVE attribute: %m"); + } - r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROTECT, !link->network->allow_port_to_be_root); - if (r < 0) - return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_PROTECT attribute: %m"); + 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); + if (r < 0) + return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_PROTECT attribute: %m"); - r = sd_netlink_message_append_u8(req, IFLA_BRPORT_UNICAST_FLOOD, link->network->unicast_flood); - if (r < 0) - return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_UNICAST_FLOOD attribute: %m"); + } + + if (link->network->unicast_flood >= 0) { + r = sd_netlink_message_append_u8(req, IFLA_BRPORT_UNICAST_FLOOD, link->network->unicast_flood); + if (r < 0) + return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_UNICAST_FLOOD attribute: %m"); + + } if (link->network->cost != 0) { r = sd_netlink_message_append_u32(req, IFLA_BRPORT_COST, link->network->cost); diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index e828fe8c6c..1a0da58651 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -148,11 +148,11 @@ DHCPServer.Timezone, config_parse_timezone, DHCPServer.PoolOffset, config_parse_uint32, 0, offsetof(Network, dhcp_server_pool_offset) DHCPServer.PoolSize, config_parse_uint32, 0, offsetof(Network, dhcp_server_pool_size) Bridge.Cost, config_parse_uint32, 0, offsetof(Network, cost) -Bridge.UseBPDU, config_parse_bool, 0, offsetof(Network, use_bpdu) -Bridge.HairPin, config_parse_bool, 0, offsetof(Network, hairpin) -Bridge.FastLeave, config_parse_bool, 0, offsetof(Network, fast_leave) -Bridge.AllowPortToBeRoot, config_parse_bool, 0, offsetof(Network, allow_port_to_be_root) -Bridge.UnicastFlood, config_parse_bool, 0, offsetof(Network, unicast_flood) +Bridge.UseBPDU, config_parse_tristate, 0, offsetof(Network, use_bpdu) +Bridge.HairPin, config_parse_tristate, 0, offsetof(Network, hairpin) +Bridge.FastLeave, config_parse_tristate, 0, offsetof(Network, fast_leave) +Bridge.AllowPortToBeRoot, config_parse_tristate, 0, offsetof(Network, allow_port_to_be_root) +Bridge.UnicastFlood, config_parse_tristate, 0, offsetof(Network, unicast_flood) Bridge.Priority, config_parse_bridge_port_priority, 0, offsetof(Network, priority) BridgeFDB.MACAddress, config_parse_fdb_hwaddr, 0, 0 BridgeFDB.VLANId, config_parse_fdb_vlan_id, 0, 0 diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index e25909374f..2592377a6f 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -224,9 +224,11 @@ static int network_load_one(Manager *manager, const char *filename) { network->router_emit_dns = true; network->router_emit_domains = true; - network->use_bpdu = true; - network->allow_port_to_be_root = true; - network->unicast_flood = true; + network->use_bpdu = -1; + network->hairpin = -1; + network->fast_leave = -1; + network->allow_port_to_be_root = -1; + network->unicast_flood = -1; network->priority = LINK_BRIDGE_PORT_PRIORITY_INVALID; network->lldp_mode = LLDP_MODE_ROUTERS_ONLY; diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index fc3dd65a4a..060c526b9e 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -177,11 +177,11 @@ struct Network { char **router_search_domains; /* Bridge Support */ - bool use_bpdu; - bool hairpin; - bool fast_leave; - bool allow_port_to_be_root; - bool unicast_flood; + int use_bpdu; + int hairpin; + int fast_leave; + int allow_port_to_be_root; + int unicast_flood; uint32_t cost; uint16_t priority;