summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2020-09-15 15:37:25 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-09-17 00:04:22 +0900
commit03ae4490157f7209ce0804ac22b7a39a2d8798c2 (patch)
tree3ce021e1863379c8da6442cc59fc3bafaf7ec3bd
parentccea2448652cddb2d9ff492e1870432461128c7c (diff)
downloadsystemd-03ae4490157f7209ce0804ac22b7a39a2d8798c2.tar.gz
network: check MulticastGroupAddress= is neither a local multicast address nor all nodes address
-rw-r--r--src/network/networkd-mdb.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/network/networkd-mdb.c b/src/network/networkd-mdb.c
index e9e364acbc..fa9daa3472 100644
--- a/src/network/networkd-mdb.c
+++ b/src/network/networkd-mdb.c
@@ -239,9 +239,30 @@ int mdb_entry_verify(MdbEntry *mdb_entry) {
if (section_is_invalid(mdb_entry->section))
return -EINVAL;
- if (in_addr_is_multicast(mdb_entry->family, &mdb_entry->group_addr) <= 0) {
- log_error("No valid MulticastGroupAddress= assignment in this section");
- return -EINVAL;
+ if (mdb_entry->family == AF_UNSPEC)
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: [BridgeMDB] section without MulticastGroupAddress= field configured. "
+ "Ignoring [BridgeMDB] section from line %u.",
+ mdb_entry->section->filename, mdb_entry->section->line);
+
+ if (!in_addr_is_multicast(mdb_entry->family, &mdb_entry->group_addr))
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: MulticastGroupAddress= is not a multicast address. "
+ "Ignoring [BridgeMDB] section from line %u.",
+ mdb_entry->section->filename, mdb_entry->section->line);
+
+ if (mdb_entry->family == AF_INET) {
+ if (in4_addr_is_local_multicast(&mdb_entry->group_addr.in))
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: MulticastGroupAddress= is a local multicast address. "
+ "Ignoring [BridgeMDB] section from line %u.",
+ mdb_entry->section->filename, mdb_entry->section->line);
+ } else {
+ if (in6_addr_is_link_local_all_nodes(&mdb_entry->group_addr.in6))
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: MulticastGroupAddress= is the multicast all nodes address. "
+ "Ignoring [BridgeMDB] section from line %u.",
+ mdb_entry->section->filename, mdb_entry->section->line);
}
return 0;