summaryrefslogtreecommitdiff
path: root/src/network/networkd-mdb.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2020-09-17 18:02:09 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-09-17 18:15:22 +0900
commit1797240104ba3472728ce7f52311a5db8969e0a4 (patch)
tree83a64f1fdc65a53b51c357926452cc1b26fa7ffe /src/network/networkd-mdb.c
parenta55100e66c80a8aa9df996f67e8673439013a595 (diff)
downloadsystemd-1797240104ba3472728ce7f52311a5db8969e0a4.tar.gz
network: old kernel may not support to configure bridge MDB entries on bridge master
Diffstat (limited to 'src/network/networkd-mdb.c')
-rw-r--r--src/network/networkd-mdb.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/network/networkd-mdb.c b/src/network/networkd-mdb.c
index 7b0c10a4af..542ba75ad0 100644
--- a/src/network/networkd-mdb.c
+++ b/src/network/networkd-mdb.c
@@ -103,7 +103,13 @@ static int set_mdb_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link)
return 1;
r = sd_netlink_message_get_errno(m);
- if (r < 0 && r != -EEXIST) {
+ if (r == -EINVAL && streq_ptr(link->kind, "bridge") && (!link->network || !link->network->bridge)) {
+ /* To configure bridge MDB entries on bridge master, 1bc844ee0faa1b92e3ede00bdd948021c78d7088 (v5.4) is required. */
+ if (!link->manager->bridge_mdb_on_master_not_supported) {
+ log_link_warning_errno(link, r, "Kernel seems not to support configuring bridge MDB entries on bridge master, ignoring: %m");
+ link->manager->bridge_mdb_on_master_not_supported = true;
+ }
+ } else if (r < 0 && r != -EEXIST) {
log_link_message_warning_errno(link, m, r, "Could not add MDB entry");
link_enter_failed(link);
return 1;
@@ -199,6 +205,7 @@ int link_set_bridge_mdb(Link *link) {
int r;
assert(link);
+ assert(link->manager);
link->bridge_mdb_configured = false;
@@ -224,6 +231,9 @@ int link_set_bridge_mdb(Link *link) {
} else if (!streq_ptr(link->kind, "bridge")) {
log_link_warning(link, "Link is neither a bridge master nor a bridge port, ignoring [BridgeMDB] sections.");
goto finish;
+ } else if (link->manager->bridge_mdb_on_master_not_supported) {
+ log_link_debug(link, "Kernel seems not to support configuring bridge MDB entries on bridge master, ignoring [BridgeMDB] sections.");
+ goto finish;
}
LIST_FOREACH(static_mdb_entries, mdb_entry, link->network->static_mdb_entries) {