]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce network_verify_mdb_entries()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 29 Sep 2020 17:44:57 +0000 (02:44 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 6 Oct 2020 17:44:42 +0000 (02:44 +0900)
src/network/networkd-mdb.c
src/network/networkd-mdb.h
src/network/networkd-network.c

index 3bf18dbd716edb6d64cc09adb906311454fdce6e..31234ba3bc10912ff3dc4362333de9870fd0d7fb 100644 (file)
@@ -243,6 +243,49 @@ finish:
         return 0;
 }
 
+static int mdb_entry_verify(MdbEntry *mdb_entry) {
+        if (section_is_invalid(mdb_entry->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;
+}
+
+void network_verify_mdb_entries(Network *network) {
+        MdbEntry *mdb_entry;
+
+        assert(network);
+
+        HASHMAP_FOREACH(mdb_entry, network->mdb_entries_by_section)
+                if (mdb_entry_verify(mdb_entry) < 0)
+                        mdb_entry_free(mdb_entry);
+}
+
 /* parse the VLAN Id from config files. */
 int config_parse_mdb_vlan_id(
                 const char *unit,
@@ -318,36 +361,3 @@ int config_parse_mdb_group_address(
 
         return 0;
 }
-
-int mdb_entry_verify(MdbEntry *mdb_entry) {
-        if (section_is_invalid(mdb_entry->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;
-}
index 00c16463b8d0b002e5527b9f7368a6b7d35cbbef..b3d0513293d10b0c5d87cd6e690138e5a82d8f2f 100644 (file)
@@ -20,8 +20,10 @@ struct MdbEntry {
         uint16_t vlan_id;
 };
 
-int mdb_entry_verify(MdbEntry *mdb_entry);
 MdbEntry *mdb_entry_free(MdbEntry *mdb_entry);
+
+void network_verify_mdb_entries(Network *network);
+
 int link_set_bridge_mdb(Link *link);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_mdb_group_address);
index 7a0feae8fcb2b4b5f29e256bbd217625a73a9a5d..67acb1e7611c39518849e351ba43fc5b845cdc4b 100644 (file)
@@ -157,7 +157,6 @@ int network_verify(Network *network) {
         Address *address, *address_next;
         Prefix *prefix, *prefix_next;
         Route *route, *route_next;
-        MdbEntry *mdb;
         TrafficControl *tc;
         SRIOV *sr_iov;
 
@@ -300,11 +299,7 @@ int network_verify(Network *network) {
 
         network_verify_nexthops(network);
         network_verify_fdb_entries(network);
-
-        HASHMAP_FOREACH(mdb, network->mdb_entries_by_section)
-                if (mdb_entry_verify(mdb) < 0)
-                        mdb_entry_free(mdb);
-
+        network_verify_mdb_entries(network);
         network_verify_neighbors(network);
         network_verify_address_labels(network);