network: introduce network_verify_mdb_entries()
This commit is contained in:
parent
03c9738e1d
commit
ee4522ce86
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue