From 1b25b88f826fa458e1f8a69fa1999636e6b73b40 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 13 Apr 2025 03:03:29 +0900 Subject: [PATCH] network/bridge-fdb,mdb: use hash_ops with destructor --- src/network/networkd-bridge-fdb.c | 12 +++++++----- src/network/networkd-bridge-fdb.h | 2 -- src/network/networkd-bridge-mdb.c | 12 ++++++++---- src/network/networkd-bridge-mdb.h | 3 --- src/network/networkd-network.c | 4 ++-- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/network/networkd-bridge-fdb.c b/src/network/networkd-bridge-fdb.c index 803e27cdae1..9a455d8ba3a 100644 --- a/src/network/networkd-bridge-fdb.c +++ b/src/network/networkd-bridge-fdb.c @@ -22,8 +22,7 @@ #define STATIC_BRIDGE_FDB_ENTRIES_PER_NETWORK_MAX 1024U -/* remove and FDB entry. */ -BridgeFDB *bridge_fdb_free(BridgeFDB *fdb) { +static BridgeFDB* bridge_fdb_free(BridgeFDB *fdb) { if (!fdb) return NULL; @@ -40,7 +39,11 @@ BridgeFDB *bridge_fdb_free(BridgeFDB *fdb) { DEFINE_SECTION_CLEANUP_FUNCTIONS(BridgeFDB, bridge_fdb_free); -/* create a new FDB entry or get an existing one. */ +DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR( + bridge_fdb_hash_ops_by_section, + ConfigSection, config_section_hash_func, config_section_compare_func, + BridgeFDB, bridge_fdb_free); + static int bridge_fdb_new_static( Network *network, const char *filename, @@ -83,13 +86,12 @@ static int bridge_fdb_new_static( .ntf_flags = NEIGHBOR_CACHE_ENTRY_FLAGS_SELF, }; - r = hashmap_ensure_put(&network->bridge_fdb_entries_by_section, &config_section_hash_ops, fdb->section, fdb); + r = hashmap_ensure_put(&network->bridge_fdb_entries_by_section, &bridge_fdb_hash_ops_by_section, fdb->section, fdb); if (r < 0) return r; /* return allocated FDB structure. */ *ret = TAKE_PTR(fdb); - return 0; } diff --git a/src/network/networkd-bridge-fdb.h b/src/network/networkd-bridge-fdb.h index b59d673d048..8bb50627cbb 100644 --- a/src/network/networkd-bridge-fdb.h +++ b/src/network/networkd-bridge-fdb.h @@ -40,8 +40,6 @@ typedef struct BridgeFDB { int outgoing_ifindex; } BridgeFDB; -BridgeFDB *bridge_fdb_free(BridgeFDB *fdb); - void network_drop_invalid_bridge_fdb_entries(Network *network); int link_request_static_bridge_fdb(Link *link); diff --git a/src/network/networkd-bridge-mdb.c b/src/network/networkd-bridge-mdb.c index ba027bfa7c0..45c271c848d 100644 --- a/src/network/networkd-bridge-mdb.c +++ b/src/network/networkd-bridge-mdb.c @@ -10,13 +10,13 @@ #include "networkd-manager.h" #include "networkd-network.h" #include "networkd-queue.h" +#include "networkd-util.h" #include "string-util.h" #include "vlan-util.h" #define STATIC_BRIDGE_MDB_ENTRIES_PER_NETWORK_MAX 1024U -/* remove MDB entry. */ -BridgeMDB *bridge_mdb_free(BridgeMDB *mdb) { +static BridgeMDB* bridge_mdb_free(BridgeMDB *mdb) { if (!mdb) return NULL; @@ -32,7 +32,11 @@ BridgeMDB *bridge_mdb_free(BridgeMDB *mdb) { DEFINE_SECTION_CLEANUP_FUNCTIONS(BridgeMDB, bridge_mdb_free); -/* create a new MDB entry or get an existing one. */ +DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR( + bridge_mdb_hash_ops_by_section, + ConfigSection, config_section_hash_func, config_section_compare_func, + BridgeMDB, bridge_mdb_free); + static int bridge_mdb_new_static( Network *network, const char *filename, @@ -74,7 +78,7 @@ static int bridge_mdb_new_static( .type = _BRIDGE_MDB_ENTRY_TYPE_INVALID, }; - r = hashmap_ensure_put(&network->bridge_mdb_entries_by_section, &config_section_hash_ops, mdb->section, mdb); + r = hashmap_ensure_put(&network->bridge_mdb_entries_by_section, &bridge_mdb_hash_ops_by_section, mdb->section, mdb); if (r < 0) return r; diff --git a/src/network/networkd-bridge-mdb.h b/src/network/networkd-bridge-mdb.h index fe6d6018790..3b565d7f67c 100644 --- a/src/network/networkd-bridge-mdb.h +++ b/src/network/networkd-bridge-mdb.h @@ -5,7 +5,6 @@ #include "conf-parser.h" #include "in-addr-util.h" -#include "networkd-util.h" typedef struct Link Link; typedef struct Network Network; @@ -30,8 +29,6 @@ typedef struct BridgeMDB { uint16_t vlan_id; } BridgeMDB; -BridgeMDB *bridge_mdb_free(BridgeMDB *mdb); - void network_drop_invalid_bridge_mdb_entries(Network *network); int link_request_static_bridge_mdb(Link *link); diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index d036e99ec3c..2a5f9eb900e 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -827,8 +827,8 @@ static Network *network_free(Network *network) { ordered_hashmap_free(network->addresses_by_section); hashmap_free(network->routes_by_section); ordered_hashmap_free(network->nexthops_by_section); - hashmap_free_with_destructor(network->bridge_fdb_entries_by_section, bridge_fdb_free); - hashmap_free_with_destructor(network->bridge_mdb_entries_by_section, bridge_mdb_free); + hashmap_free(network->bridge_fdb_entries_by_section); + hashmap_free(network->bridge_mdb_entries_by_section); ordered_hashmap_free(network->neighbors_by_section); hashmap_free(network->address_labels_by_section); hashmap_free(network->prefixes_by_section); -- 2.47.3