network/network: hash_ops related cleanups (#37120)
This commit is contained in:
commit
ce921df8d1
src
network
networkd-bridge-fdb.cnetworkd-bridge-fdb.hnetworkd-bridge-mdb.cnetworkd-bridge-mdb.hnetworkd-dhcp-server-static-lease.cnetworkd-dhcp-server-static-lease.hnetworkd-dns.cnetworkd-ipv6-proxy-ndp.cnetworkd-link-bus.cnetworkd-link.cnetworkd-ndisc.cnetworkd-network.cnetworkd-radv.cnetworkd-radv.h
shared
udev/net
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -7,9 +7,7 @@
|
|||
#include "networkd-network.h"
|
||||
#include "networkd-util.h"
|
||||
|
||||
DEFINE_SECTION_CLEANUP_FUNCTIONS(DHCPStaticLease, dhcp_static_lease_free);
|
||||
|
||||
DHCPStaticLease *dhcp_static_lease_free(DHCPStaticLease *static_lease) {
|
||||
static DHCPStaticLease* dhcp_static_lease_free(DHCPStaticLease *static_lease) {
|
||||
if (!static_lease)
|
||||
return NULL;
|
||||
|
||||
|
@ -21,6 +19,13 @@ DHCPStaticLease *dhcp_static_lease_free(DHCPStaticLease *static_lease) {
|
|||
return mfree(static_lease);
|
||||
}
|
||||
|
||||
DEFINE_SECTION_CLEANUP_FUNCTIONS(DHCPStaticLease, dhcp_static_lease_free);
|
||||
|
||||
DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
|
||||
static_lease_hash_ops_by_section,
|
||||
ConfigSection, config_section_hash_func, config_section_compare_func,
|
||||
DHCPStaticLease, dhcp_static_lease_free);
|
||||
|
||||
static int dhcp_static_lease_new(DHCPStaticLease **ret) {
|
||||
DHCPStaticLease *p;
|
||||
|
||||
|
@ -60,7 +65,8 @@ static int lease_new_static(Network *network, const char *filename, unsigned sec
|
|||
|
||||
static_lease->network = network;
|
||||
static_lease->section = TAKE_PTR(n);
|
||||
r = hashmap_ensure_put(&network->dhcp_static_leases_by_section, &config_section_hash_ops, static_lease->section, static_lease);
|
||||
|
||||
r = hashmap_ensure_put(&network->dhcp_static_leases_by_section, &static_lease_hash_ops_by_section, static_lease->section, static_lease);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@ typedef struct DHCPStaticLease {
|
|||
size_t client_id_size;
|
||||
} DHCPStaticLease;
|
||||
|
||||
DHCPStaticLease *dhcp_static_lease_free(DHCPStaticLease *lease);
|
||||
void network_drop_invalid_static_leases(Network *network);
|
||||
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_static_lease_address);
|
||||
|
|
|
@ -281,7 +281,7 @@ int config_parse_dnssec_negative_trust_anchors(
|
|||
assert(rvalue);
|
||||
|
||||
if (isempty(rvalue)) {
|
||||
*nta = set_free_free(*nta);
|
||||
*nta = set_free(*nta);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -306,7 +306,7 @@ int config_parse_dnssec_negative_trust_anchors(
|
|||
continue;
|
||||
}
|
||||
|
||||
r = set_ensure_consume(nta, &dns_name_hash_ops, TAKE_PTR(w));
|
||||
r = set_ensure_consume(nta, &dns_name_hash_ops_free, TAKE_PTR(w));
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
}
|
||||
|
|
|
@ -22,7 +22,13 @@ void network_adjust_ipv6_proxy_ndp(Network *network) {
|
|||
log_once(LOG_WARNING,
|
||||
"%s: IPv6 proxy NDP addresses are set, but IPv6 is not supported by kernel, "
|
||||
"Ignoring IPv6 proxy NDP addresses.", network->filename);
|
||||
network->ipv6_proxy_ndp_addresses = set_free_free(network->ipv6_proxy_ndp_addresses);
|
||||
network->ipv6_proxy_ndp_addresses = set_free(network->ipv6_proxy_ndp_addresses);
|
||||
return;
|
||||
}
|
||||
|
||||
if (network->ipv6_proxy_ndp == 0) {
|
||||
log_warning("%s: IPv6ProxyNDP= is disabled. Ignoring IPv6ProxyNDPAddress=.", network->filename);
|
||||
network->ipv6_proxy_ndp_addresses = set_free(network->ipv6_proxy_ndp_addresses);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -149,7 +155,7 @@ int config_parse_ipv6_proxy_ndp_address(
|
|||
assert(rvalue);
|
||||
|
||||
if (isempty(rvalue)) {
|
||||
network->ipv6_proxy_ndp_addresses = set_free_free(network->ipv6_proxy_ndp_addresses);
|
||||
network->ipv6_proxy_ndp_addresses = set_free(network->ipv6_proxy_ndp_addresses);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -170,11 +176,9 @@ int config_parse_ipv6_proxy_ndp_address(
|
|||
if (!address)
|
||||
return log_oom();
|
||||
|
||||
r = set_ensure_put(&network->ipv6_proxy_ndp_addresses, &in6_addr_hash_ops, address);
|
||||
r = set_ensure_consume(&network->ipv6_proxy_ndp_addresses, &in6_addr_hash_ops_free, TAKE_PTR(address));
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
if (r > 0)
|
||||
TAKE_PTR(address);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -479,7 +479,7 @@ int bus_link_method_set_dnssec(sd_bus_message *message, void *userdata, sd_bus_e
|
|||
}
|
||||
|
||||
int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||
_cleanup_set_free_free_ Set *ns = NULL;
|
||||
_cleanup_set_free_ Set *ns = NULL;
|
||||
_cleanup_strv_free_ char **ntas = NULL;
|
||||
Link *l = ASSERT_PTR(userdata);
|
||||
int r;
|
||||
|
@ -502,7 +502,7 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
|
|||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid negative trust anchor domain: %s", *i);
|
||||
}
|
||||
|
||||
ns = set_new(&dns_name_hash_ops);
|
||||
ns = set_new(&dns_name_hash_ops_free);
|
||||
if (!ns)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -523,8 +523,7 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
|
|||
if (r == 0)
|
||||
return 1; /* Polkit will call us back */
|
||||
|
||||
set_free_free(l->dnssec_negative_trust_anchors);
|
||||
l->dnssec_negative_trust_anchors = TAKE_PTR(ns);
|
||||
set_free_and_replace(l->dnssec_negative_trust_anchors, ns);
|
||||
|
||||
r = link_save_and_clean_full(l, /* also_save_manager = */ true);
|
||||
if (r < 0)
|
||||
|
|
|
@ -231,7 +231,7 @@ void link_dns_settings_clear(Link *link) {
|
|||
link->dnssec_mode = _DNSSEC_MODE_INVALID;
|
||||
link->dns_over_tls_mode = _DNS_OVER_TLS_MODE_INVALID;
|
||||
|
||||
link->dnssec_negative_trust_anchors = set_free_free(link->dnssec_negative_trust_anchors);
|
||||
link->dnssec_negative_trust_anchors = set_free(link->dnssec_negative_trust_anchors);
|
||||
}
|
||||
|
||||
static void link_free_engines(Link *link) {
|
||||
|
|
|
@ -89,11 +89,11 @@ void network_adjust_ndisc(Network *network) {
|
|||
/* When RouterAllowList=, PrefixAllowList= or RouteAllowList= are specified, then
|
||||
* RouterDenyList=, PrefixDenyList= or RouteDenyList= are ignored, respectively. */
|
||||
if (!set_isempty(network->ndisc_allow_listed_router))
|
||||
network->ndisc_deny_listed_router = set_free_free(network->ndisc_deny_listed_router);
|
||||
network->ndisc_deny_listed_router = set_free(network->ndisc_deny_listed_router);
|
||||
if (!set_isempty(network->ndisc_allow_listed_prefix))
|
||||
network->ndisc_deny_listed_prefix = set_free_free(network->ndisc_deny_listed_prefix);
|
||||
network->ndisc_deny_listed_prefix = set_free(network->ndisc_deny_listed_prefix);
|
||||
if (!set_isempty(network->ndisc_allow_listed_route_prefix))
|
||||
network->ndisc_deny_listed_route_prefix = set_free_free(network->ndisc_deny_listed_route_prefix);
|
||||
network->ndisc_deny_listed_route_prefix = set_free(network->ndisc_deny_listed_route_prefix);
|
||||
}
|
||||
|
||||
static int ndisc_check_ready(Link *link);
|
||||
|
|
|
@ -291,11 +291,6 @@ int network_verify(Network *network) {
|
|||
if (network->keep_configuration < 0)
|
||||
network->keep_configuration = KEEP_CONFIGURATION_NO;
|
||||
|
||||
if (network->ipv6_proxy_ndp == 0 && !set_isempty(network->ipv6_proxy_ndp_addresses)) {
|
||||
log_warning("%s: IPv6ProxyNDP= is disabled. Ignoring IPv6ProxyNDPAddress=.", network->filename);
|
||||
network->ipv6_proxy_ndp_addresses = set_free_free(network->ipv6_proxy_ndp_addresses);
|
||||
}
|
||||
|
||||
r = network_drop_invalid_addresses(network);
|
||||
if (r < 0)
|
||||
return r; /* network_drop_invalid_addresses() logs internally. */
|
||||
|
@ -752,7 +747,7 @@ static Network *network_free(Network *network) {
|
|||
free(network->dns);
|
||||
ordered_set_free(network->search_domains);
|
||||
ordered_set_free(network->route_domains);
|
||||
set_free_free(network->dnssec_negative_trust_anchors);
|
||||
set_free(network->dnssec_negative_trust_anchors);
|
||||
|
||||
/* DHCP server */
|
||||
free(network->dhcp_server_relay_agent_circuit_id);
|
||||
|
@ -828,20 +823,20 @@ static Network *network_free(Network *network) {
|
|||
hashmap_free_with_destructor(network->stacked_netdevs, netdev_unref);
|
||||
|
||||
/* static configs */
|
||||
set_free_free(network->ipv6_proxy_ndp_addresses);
|
||||
set_free(network->ipv6_proxy_ndp_addresses);
|
||||
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_with_destructor(network->prefixes_by_section, prefix_free);
|
||||
hashmap_free_with_destructor(network->route_prefixes_by_section, route_prefix_free);
|
||||
hashmap_free_with_destructor(network->pref64_prefixes_by_section, prefix64_free);
|
||||
hashmap_free(network->prefixes_by_section);
|
||||
hashmap_free(network->route_prefixes_by_section);
|
||||
hashmap_free(network->pref64_prefixes_by_section);
|
||||
hashmap_free(network->rules_by_section);
|
||||
hashmap_free_with_destructor(network->dhcp_static_leases_by_section, dhcp_static_lease_free);
|
||||
ordered_hashmap_free_with_destructor(network->sr_iov_by_section, sr_iov_free);
|
||||
hashmap_free(network->dhcp_static_leases_by_section);
|
||||
ordered_hashmap_free(network->sr_iov_by_section);
|
||||
hashmap_free(network->qdiscs_by_section);
|
||||
hashmap_free(network->tclasses_by_section);
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ bool link_radv_enabled(Link *link) {
|
|||
return link->network->router_prefix_delegation;
|
||||
}
|
||||
|
||||
Prefix* prefix_free(Prefix *prefix) {
|
||||
static Prefix* prefix_free(Prefix *prefix) {
|
||||
if (!prefix)
|
||||
return NULL;
|
||||
|
||||
|
@ -52,6 +52,11 @@ Prefix* prefix_free(Prefix *prefix) {
|
|||
|
||||
DEFINE_SECTION_CLEANUP_FUNCTIONS(Prefix, prefix_free);
|
||||
|
||||
DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
|
||||
prefix_hash_ops_by_section,
|
||||
ConfigSection, config_section_hash_func, config_section_compare_func,
|
||||
Prefix, prefix_free);
|
||||
|
||||
static int prefix_new_static(Network *network, const char *filename, unsigned section_line, Prefix **ret) {
|
||||
_cleanup_(config_section_freep) ConfigSection *n = NULL;
|
||||
_cleanup_(prefix_freep) Prefix *prefix = NULL;
|
||||
|
@ -87,7 +92,7 @@ static int prefix_new_static(Network *network, const char *filename, unsigned se
|
|||
.prefix.preferred_until = USEC_INFINITY,
|
||||
};
|
||||
|
||||
r = hashmap_ensure_put(&network->prefixes_by_section, &config_section_hash_ops, prefix->section, prefix);
|
||||
r = hashmap_ensure_put(&network->prefixes_by_section, &prefix_hash_ops_by_section, prefix->section, prefix);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -95,7 +100,7 @@ static int prefix_new_static(Network *network, const char *filename, unsigned se
|
|||
return 0;
|
||||
}
|
||||
|
||||
RoutePrefix* route_prefix_free(RoutePrefix *prefix) {
|
||||
static RoutePrefix* route_prefix_free(RoutePrefix *prefix) {
|
||||
if (!prefix)
|
||||
return NULL;
|
||||
|
||||
|
@ -111,6 +116,11 @@ RoutePrefix* route_prefix_free(RoutePrefix *prefix) {
|
|||
|
||||
DEFINE_SECTION_CLEANUP_FUNCTIONS(RoutePrefix, route_prefix_free);
|
||||
|
||||
DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
|
||||
route_prefix_hash_ops_by_section,
|
||||
ConfigSection, config_section_hash_func, config_section_compare_func,
|
||||
RoutePrefix, route_prefix_free);
|
||||
|
||||
static int route_prefix_new_static(Network *network, const char *filename, unsigned section_line, RoutePrefix **ret) {
|
||||
_cleanup_(config_section_freep) ConfigSection *n = NULL;
|
||||
_cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL;
|
||||
|
@ -143,7 +153,7 @@ static int route_prefix_new_static(Network *network, const char *filename, unsig
|
|||
.route.valid_until = USEC_INFINITY,
|
||||
};
|
||||
|
||||
r = hashmap_ensure_put(&network->route_prefixes_by_section, &config_section_hash_ops, prefix->section, prefix);
|
||||
r = hashmap_ensure_put(&network->route_prefixes_by_section, &route_prefix_hash_ops_by_section, prefix->section, prefix);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -151,7 +161,7 @@ static int route_prefix_new_static(Network *network, const char *filename, unsig
|
|||
return 0;
|
||||
}
|
||||
|
||||
Prefix64* prefix64_free(Prefix64 *prefix) {
|
||||
static Prefix64* prefix64_free(Prefix64 *prefix) {
|
||||
if (!prefix)
|
||||
return NULL;
|
||||
|
||||
|
@ -167,6 +177,11 @@ Prefix64* prefix64_free(Prefix64 *prefix) {
|
|||
|
||||
DEFINE_SECTION_CLEANUP_FUNCTIONS(Prefix64, prefix64_free);
|
||||
|
||||
DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
|
||||
prefix64_hash_ops_by_section,
|
||||
ConfigSection, config_section_hash_func, config_section_compare_func,
|
||||
Prefix64, prefix64_free);
|
||||
|
||||
static int prefix64_new_static(Network *network, const char *filename, unsigned section_line, Prefix64 **ret) {
|
||||
_cleanup_(config_section_freep) ConfigSection *n = NULL;
|
||||
_cleanup_(prefix64_freep) Prefix64 *prefix = NULL;
|
||||
|
@ -199,7 +214,7 @@ static int prefix64_new_static(Network *network, const char *filename, unsigned
|
|||
.prefix64.valid_until = USEC_INFINITY,
|
||||
};
|
||||
|
||||
r = hashmap_ensure_put(&network->pref64_prefixes_by_section, &config_section_hash_ops, prefix->section, prefix);
|
||||
r = hashmap_ensure_put(&network->pref64_prefixes_by_section, &prefix64_hash_ops_by_section, prefix->section, prefix);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -809,9 +824,9 @@ void network_adjust_radv(Network *network) {
|
|||
}
|
||||
|
||||
if (!FLAGS_SET(network->router_prefix_delegation, RADV_PREFIX_DELEGATION_STATIC)) {
|
||||
network->prefixes_by_section = hashmap_free_with_destructor(network->prefixes_by_section, prefix_free);
|
||||
network->route_prefixes_by_section = hashmap_free_with_destructor(network->route_prefixes_by_section, route_prefix_free);
|
||||
network->pref64_prefixes_by_section = hashmap_free_with_destructor(network->pref64_prefixes_by_section, prefix64_free);
|
||||
network->prefixes_by_section = hashmap_free(network->prefixes_by_section);
|
||||
network->route_prefixes_by_section = hashmap_free(network->route_prefixes_by_section);
|
||||
network->pref64_prefixes_by_section = hashmap_free(network->pref64_prefixes_by_section);
|
||||
}
|
||||
|
||||
if (!network->router_prefix_delegation)
|
||||
|
|
|
@ -52,10 +52,6 @@ typedef struct Prefix64 {
|
|||
sd_ndisc_prefix64 prefix64;
|
||||
} Prefix64;
|
||||
|
||||
Prefix* prefix_free(Prefix *prefix);
|
||||
RoutePrefix* route_prefix_free(RoutePrefix *prefix);
|
||||
Prefix64* prefix64_free(Prefix64 *prefix);
|
||||
|
||||
void network_adjust_radv(Network *network);
|
||||
|
||||
int link_request_radv_addresses(Link *link);
|
||||
|
|
|
@ -9,6 +9,25 @@
|
|||
#include "stdio-util.h"
|
||||
#include "string-util.h"
|
||||
|
||||
static SRIOV* sr_iov_free(SRIOV *sr_iov) {
|
||||
if (!sr_iov)
|
||||
return NULL;
|
||||
|
||||
if (sr_iov->sr_iov_by_section && sr_iov->section)
|
||||
ordered_hashmap_remove(sr_iov->sr_iov_by_section, sr_iov->section);
|
||||
|
||||
config_section_free(sr_iov->section);
|
||||
|
||||
return mfree(sr_iov);
|
||||
}
|
||||
|
||||
DEFINE_SECTION_CLEANUP_FUNCTIONS(SRIOV, sr_iov_free);
|
||||
|
||||
DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
|
||||
sr_iov_hash_ops_by_section,
|
||||
ConfigSection, config_section_hash_func, config_section_compare_func,
|
||||
SRIOV, sr_iov_free);
|
||||
|
||||
static int sr_iov_new(SRIOV **ret) {
|
||||
SRIOV *sr_iov;
|
||||
|
||||
|
@ -57,7 +76,7 @@ static int sr_iov_new_static(OrderedHashmap **sr_iov_by_section, const char *fil
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = ordered_hashmap_ensure_put(sr_iov_by_section, &config_section_hash_ops, n, sr_iov);
|
||||
r = ordered_hashmap_ensure_put(sr_iov_by_section, &sr_iov_hash_ops_by_section, n, sr_iov);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -68,18 +87,6 @@ static int sr_iov_new_static(OrderedHashmap **sr_iov_by_section, const char *fil
|
|||
return 0;
|
||||
}
|
||||
|
||||
SRIOV *sr_iov_free(SRIOV *sr_iov) {
|
||||
if (!sr_iov)
|
||||
return NULL;
|
||||
|
||||
if (sr_iov->sr_iov_by_section && sr_iov->section)
|
||||
ordered_hashmap_remove(sr_iov->sr_iov_by_section, sr_iov->section);
|
||||
|
||||
config_section_free(sr_iov->section);
|
||||
|
||||
return mfree(sr_iov);
|
||||
}
|
||||
|
||||
void sr_iov_hash_func(const SRIOV *sr_iov, struct siphash *state) {
|
||||
assert(sr_iov);
|
||||
assert(state);
|
||||
|
|
|
@ -32,7 +32,6 @@ typedef struct SRIOV {
|
|||
struct ether_addr mac;
|
||||
} SRIOV;
|
||||
|
||||
SRIOV *sr_iov_free(SRIOV *sr_iov);
|
||||
void sr_iov_hash_func(const SRIOV *sr_iov, struct siphash *state);
|
||||
int sr_iov_compare_func(const SRIOV *s1, const SRIOV *s2);
|
||||
int sr_iov_set_netlink_message(SRIOV *sr_iov, sd_netlink_message *req);
|
||||
|
@ -40,8 +39,6 @@ int sr_iov_get_num_vfs(sd_device *device, uint32_t *ret);
|
|||
int sr_iov_set_num_vfs(sd_device *device, uint32_t num_vfs, OrderedHashmap *sr_iov_by_section);
|
||||
int sr_iov_drop_invalid_sections(uint32_t num_vfs, OrderedHashmap *sr_iov_by_section);
|
||||
|
||||
DEFINE_SECTION_CLEANUP_FUNCTIONS(SRIOV, sr_iov_free);
|
||||
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_uint32);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_boolean);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_link_state);
|
||||
|
|
|
@ -75,7 +75,7 @@ static LinkConfig* link_config_free(LinkConfig *config) {
|
|||
erase_and_free(config->wol_password);
|
||||
cpu_set_free(config->rps_cpu_mask);
|
||||
|
||||
ordered_hashmap_free_with_destructor(config->sr_iov_by_section, sr_iov_free);
|
||||
ordered_hashmap_free(config->sr_iov_by_section);
|
||||
|
||||
return mfree(config);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue