From: Yu Watanabe Date: Mon, 27 Dec 2021 01:34:24 +0000 (+0900) Subject: network: rename NetworkConfigSection -> ConfigSection X-Git-Tag: v251-rc1~497^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=307fe3cdf2d012c49b7bc39ea2d4251c6d44e93e;p=thirdparty%2Fsystemd.git network: rename NetworkConfigSection -> ConfigSection And move it and relevant functions to conf-parser.[ch]. --- diff --git a/src/network/netdev/l2tp-tunnel.c b/src/network/netdev/l2tp-tunnel.c index d870a11e008..419541ebdf3 100644 --- a/src/network/netdev/l2tp-tunnel.c +++ b/src/network/netdev/l2tp-tunnel.c @@ -46,15 +46,15 @@ static L2tpSession* l2tp_session_free(L2tpSession *s) { if (s->tunnel && s->section) ordered_hashmap_remove(s->tunnel->sessions_by_section, s->section); - network_config_section_free(s->section); + config_section_free(s->section); free(s->name); return mfree(s); } -DEFINE_NETWORK_SECTION_FUNCTIONS(L2tpSession, l2tp_session_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(L2tpSession, l2tp_session_free); static int l2tp_session_new_static(L2tpTunnel *t, const char *filename, unsigned section_line, L2tpSession **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(l2tp_session_freep) L2tpSession *s = NULL; int r; @@ -63,7 +63,7 @@ static int l2tp_session_new_static(L2tpTunnel *t, const char *filename, unsigned assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -83,7 +83,7 @@ static int l2tp_session_new_static(L2tpTunnel *t, const char *filename, unsigned .section = TAKE_PTR(n), }; - r = ordered_hashmap_ensure_put(&t->sessions_by_section, &network_config_hash_ops, s->section, s); + r = ordered_hashmap_ensure_put(&t->sessions_by_section, &config_section_hash_ops, s->section, s); if (r < 0) return r; diff --git a/src/network/netdev/l2tp-tunnel.h b/src/network/netdev/l2tp-tunnel.h index a884d2100f0..236b78ce4b9 100644 --- a/src/network/netdev/l2tp-tunnel.h +++ b/src/network/netdev/l2tp-tunnel.h @@ -34,7 +34,7 @@ typedef struct L2tpTunnel L2tpTunnel; typedef struct L2tpSession { L2tpTunnel *tunnel; - NetworkConfigSection *section; + ConfigSection *section; char *name; diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c index ebb8c9c7dcb..a049ade6ba9 100644 --- a/src/network/netdev/macsec.c +++ b/src/network/netdev/macsec.c @@ -43,16 +43,16 @@ static ReceiveAssociation* macsec_receive_association_free(ReceiveAssociation *c if (c->macsec && c->section) ordered_hashmap_remove(c->macsec->receive_associations_by_section, c->section); - network_config_section_free(c->section); + config_section_free(c->section); security_association_clear(&c->sa); return mfree(c); } -DEFINE_NETWORK_SECTION_FUNCTIONS(ReceiveAssociation, macsec_receive_association_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(ReceiveAssociation, macsec_receive_association_free); static int macsec_receive_association_new_static(MACsec *s, const char *filename, unsigned section_line, ReceiveAssociation **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(macsec_receive_association_freep) ReceiveAssociation *c = NULL; int r; @@ -61,7 +61,7 @@ static int macsec_receive_association_new_static(MACsec *s, const char *filename assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -82,7 +82,7 @@ static int macsec_receive_association_new_static(MACsec *s, const char *filename security_association_init(&c->sa); - r = ordered_hashmap_ensure_put(&s->receive_associations_by_section, &network_config_hash_ops, c->section, c); + r = ordered_hashmap_ensure_put(&s->receive_associations_by_section, &config_section_hash_ops, c->section, c); if (r < 0) return r; @@ -103,12 +103,12 @@ static ReceiveChannel* macsec_receive_channel_free(ReceiveChannel *c) { ordered_hashmap_remove(c->macsec->receive_channels_by_section, c->section); } - network_config_section_free(c->section); + config_section_free(c->section); return mfree(c); } -DEFINE_NETWORK_SECTION_FUNCTIONS(ReceiveChannel, macsec_receive_channel_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(ReceiveChannel, macsec_receive_channel_free); static int macsec_receive_channel_new(MACsec *s, uint64_t sci, ReceiveChannel **ret) { ReceiveChannel *c; @@ -129,7 +129,7 @@ static int macsec_receive_channel_new(MACsec *s, uint64_t sci, ReceiveChannel ** } static int macsec_receive_channel_new_static(MACsec *s, const char *filename, unsigned section_line, ReceiveChannel **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(macsec_receive_channel_freep) ReceiveChannel *c = NULL; int r; @@ -138,7 +138,7 @@ static int macsec_receive_channel_new_static(MACsec *s, const char *filename, un assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -154,7 +154,7 @@ static int macsec_receive_channel_new_static(MACsec *s, const char *filename, un c->section = TAKE_PTR(n); - r = ordered_hashmap_ensure_put(&s->receive_channels_by_section, &network_config_hash_ops, c->section, c); + r = ordered_hashmap_ensure_put(&s->receive_channels_by_section, &config_section_hash_ops, c->section, c); if (r < 0) return r; @@ -170,16 +170,16 @@ static TransmitAssociation* macsec_transmit_association_free(TransmitAssociation if (a->macsec && a->section) ordered_hashmap_remove(a->macsec->transmit_associations_by_section, a->section); - network_config_section_free(a->section); + config_section_free(a->section); security_association_clear(&a->sa); return mfree(a); } -DEFINE_NETWORK_SECTION_FUNCTIONS(TransmitAssociation, macsec_transmit_association_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(TransmitAssociation, macsec_transmit_association_free); static int macsec_transmit_association_new_static(MACsec *s, const char *filename, unsigned section_line, TransmitAssociation **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(macsec_transmit_association_freep) TransmitAssociation *a = NULL; int r; @@ -188,7 +188,7 @@ static int macsec_transmit_association_new_static(MACsec *s, const char *filenam assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -209,7 +209,7 @@ static int macsec_transmit_association_new_static(MACsec *s, const char *filenam security_association_init(&a->sa); - r = ordered_hashmap_ensure_put(&s->transmit_associations_by_section, &network_config_hash_ops, a->section, a); + r = ordered_hashmap_ensure_put(&s->transmit_associations_by_section, &config_section_hash_ops, a->section, a); if (r < 0) return r; diff --git a/src/network/netdev/macsec.h b/src/network/netdev/macsec.h index 4d88e495146..17bb1ca3fbe 100644 --- a/src/network/netdev/macsec.h +++ b/src/network/netdev/macsec.h @@ -39,14 +39,14 @@ typedef struct SecurityAssociation { typedef struct TransmitAssociation { MACsec *macsec; - NetworkConfigSection *section; + ConfigSection *section; SecurityAssociation sa; } TransmitAssociation; typedef struct ReceiveAssociation { MACsec *macsec; - NetworkConfigSection *section; + ConfigSection *section; MACsecSCI sci; SecurityAssociation sa; @@ -54,7 +54,7 @@ typedef struct ReceiveAssociation { typedef struct ReceiveChannel { MACsec *macsec; - NetworkConfigSection *section; + ConfigSection *section; MACsecSCI sci; ReceiveAssociation *rxsa[MACSEC_MAX_ASSOCIATION_NUMBER]; diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index 88f668753a5..431b5ec0454 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -47,7 +47,7 @@ static WireguardPeer* wireguard_peer_free(WireguardPeer *peer) { hashmap_remove(peer->wireguard->peers_by_section, peer->section); } - network_config_section_free(peer->section); + config_section_free(peer->section); while ((mask = peer->ipmasks)) { LIST_REMOVE(ipmasks, peer->ipmasks, mask); @@ -65,10 +65,10 @@ static WireguardPeer* wireguard_peer_free(WireguardPeer *peer) { return mfree(peer); } -DEFINE_NETWORK_SECTION_FUNCTIONS(WireguardPeer, wireguard_peer_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(WireguardPeer, wireguard_peer_free); static int wireguard_peer_new_static(Wireguard *w, const char *filename, unsigned section_line, WireguardPeer **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(wireguard_peer_freep) WireguardPeer *peer = NULL; int r; @@ -77,7 +77,7 @@ static int wireguard_peer_new_static(Wireguard *w, const char *filename, unsigne assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -99,7 +99,7 @@ static int wireguard_peer_new_static(Wireguard *w, const char *filename, unsigne LIST_PREPEND(peers, w->peers, peer); - r = hashmap_ensure_put(&w->peers_by_section, &network_config_hash_ops, peer->section, peer); + r = hashmap_ensure_put(&w->peers_by_section, &config_section_hash_ops, peer->section, peer); if (r < 0) return r; diff --git a/src/network/netdev/wireguard.h b/src/network/netdev/wireguard.h index 29bacdc7710..09dca88bbf0 100644 --- a/src/network/netdev/wireguard.h +++ b/src/network/netdev/wireguard.h @@ -24,7 +24,7 @@ typedef struct WireguardIPmask { typedef struct WireguardPeer { Wireguard *wireguard; - NetworkConfigSection *section; + ConfigSection *section; uint8_t public_key[WG_KEY_LEN]; uint8_t preshared_key[WG_KEY_LEN]; diff --git a/src/network/networkd-address-label.c b/src/network/networkd-address-label.c index 6f911b805f0..506238f3919 100644 --- a/src/network/networkd-address-label.c +++ b/src/network/networkd-address-label.c @@ -21,14 +21,14 @@ AddressLabel *address_label_free(AddressLabel *label) { hashmap_remove(label->network->address_labels_by_section, label->section); } - network_config_section_free(label->section); + config_section_free(label->section); return mfree(label); } -DEFINE_NETWORK_SECTION_FUNCTIONS(AddressLabel, address_label_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(AddressLabel, address_label_free); static int address_label_new_static(Network *network, const char *filename, unsigned section_line, AddressLabel **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(address_label_freep) AddressLabel *label = NULL; int r; @@ -37,7 +37,7 @@ static int address_label_new_static(Network *network, const char *filename, unsi assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -57,7 +57,7 @@ static int address_label_new_static(Network *network, const char *filename, unsi .label = UINT32_MAX, }; - r = hashmap_ensure_put(&network->address_labels_by_section, &network_config_hash_ops, label->section, label); + r = hashmap_ensure_put(&network->address_labels_by_section, &config_section_hash_ops, label->section, label); if (r < 0) return r; diff --git a/src/network/networkd-address-label.h b/src/network/networkd-address-label.h index 0f975454d99..582dd05b880 100644 --- a/src/network/networkd-address-label.h +++ b/src/network/networkd-address-label.h @@ -13,7 +13,7 @@ typedef struct Request Request; typedef struct AddressLabel { Network *network; - NetworkConfigSection *section; + ConfigSection *section; uint32_t label; struct in6_addr prefix; diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index 7df743efb55..ff80f185cea 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -77,7 +77,7 @@ int address_new(Address **ret) { } static int address_new_static(Network *network, const char *filename, unsigned section_line, Address **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(address_freep) Address *address = NULL; int r; @@ -86,7 +86,7 @@ static int address_new_static(Network *network, const char *filename, unsigned s assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -107,7 +107,7 @@ static int address_new_static(Network *network, const char *filename, unsigned s address->section = TAKE_PTR(n); address->source = NETWORK_CONFIG_SOURCE_STATIC; - r = ordered_hashmap_ensure_put(&network->addresses_by_section, &network_config_hash_ops, address->section, address); + r = ordered_hashmap_ensure_put(&network->addresses_by_section, &config_section_hash_ops, address->section, address); if (r < 0) return r; @@ -134,7 +134,7 @@ Address *address_free(Address *address) { sd_ipv4acd_unref(address->acd); - network_config_section_free(address->section); + config_section_free(address->section); free(address->label); return mfree(address); } diff --git a/src/network/networkd-address.h b/src/network/networkd-address.h index 41c4ce6fa4d..c1e5b3ce3a7 100644 --- a/src/network/networkd-address.h +++ b/src/network/networkd-address.h @@ -22,7 +22,7 @@ typedef int (*address_ready_callback_t)(Address *address); struct Address { Link *link; Network *network; - NetworkConfigSection *section; + ConfigSection *section; NetworkConfigSource source; NetworkConfigState state; union in_addr_union provider; /* DHCP server or router address */ @@ -72,7 +72,7 @@ int address_dup(const Address *src, Address **ret); bool address_is_ready(const Address *a); void address_set_broadcast(Address *a); -DEFINE_NETWORK_SECTION_FUNCTIONS(Address, address_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(Address, address_free); int link_drop_addresses(Link *link); int link_drop_foreign_addresses(Link *link); diff --git a/src/network/networkd-bridge-fdb.c b/src/network/networkd-bridge-fdb.c index a0024f62d48..c1e2977d4df 100644 --- a/src/network/networkd-bridge-fdb.c +++ b/src/network/networkd-bridge-fdb.c @@ -32,13 +32,13 @@ BridgeFDB *bridge_fdb_free(BridgeFDB *fdb) { hashmap_remove(fdb->network->bridge_fdb_entries_by_section, fdb->section); } - network_config_section_free(fdb->section); + config_section_free(fdb->section); free(fdb->outgoing_ifname); return mfree(fdb); } -DEFINE_NETWORK_SECTION_FUNCTIONS(BridgeFDB, bridge_fdb_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(BridgeFDB, bridge_fdb_free); /* create a new FDB entry or get an existing one. */ static int bridge_fdb_new_static( @@ -47,7 +47,7 @@ static int bridge_fdb_new_static( unsigned section_line, BridgeFDB **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(bridge_fdb_freep) BridgeFDB *fdb = NULL; int r; @@ -56,7 +56,7 @@ static int bridge_fdb_new_static( assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -83,7 +83,7 @@ static int bridge_fdb_new_static( .ntf_flags = NEIGHBOR_CACHE_ENTRY_FLAGS_SELF, }; - r = hashmap_ensure_put(&network->bridge_fdb_entries_by_section, &network_config_hash_ops, fdb->section, fdb); + r = hashmap_ensure_put(&network->bridge_fdb_entries_by_section, &config_section_hash_ops, fdb->section, fdb); if (r < 0) return r; diff --git a/src/network/networkd-bridge-fdb.h b/src/network/networkd-bridge-fdb.h index fae7da5bbb2..b1098760d2d 100644 --- a/src/network/networkd-bridge-fdb.h +++ b/src/network/networkd-bridge-fdb.h @@ -27,7 +27,7 @@ typedef enum NeighborCacheEntryFlags { typedef struct BridgeFDB { Network *network; - NetworkConfigSection *section; + ConfigSection *section; uint32_t vni; diff --git a/src/network/networkd-bridge-mdb.c b/src/network/networkd-bridge-mdb.c index 10025a97aeb..d155090ad10 100644 --- a/src/network/networkd-bridge-mdb.c +++ b/src/network/networkd-bridge-mdb.c @@ -24,12 +24,12 @@ BridgeMDB *bridge_mdb_free(BridgeMDB *mdb) { hashmap_remove(mdb->network->bridge_mdb_entries_by_section, mdb->section); } - network_config_section_free(mdb->section); + config_section_free(mdb->section); return mfree(mdb); } -DEFINE_NETWORK_SECTION_FUNCTIONS(BridgeMDB, bridge_mdb_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(BridgeMDB, bridge_mdb_free); /* create a new MDB entry or get an existing one. */ static int bridge_mdb_new_static( @@ -38,7 +38,7 @@ static int bridge_mdb_new_static( unsigned section_line, BridgeMDB **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(bridge_mdb_freep) BridgeMDB *mdb = NULL; int r; @@ -47,7 +47,7 @@ static int bridge_mdb_new_static( assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -72,7 +72,7 @@ static int bridge_mdb_new_static( .section = TAKE_PTR(n), }; - r = hashmap_ensure_put(&network->bridge_mdb_entries_by_section, &network_config_hash_ops, mdb->section, mdb); + r = hashmap_ensure_put(&network->bridge_mdb_entries_by_section, &config_section_hash_ops, 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 9ca262e0ce9..ce91e3f5725 100644 --- a/src/network/networkd-bridge-mdb.h +++ b/src/network/networkd-bridge-mdb.h @@ -13,7 +13,7 @@ typedef struct Request Request; typedef struct BridgeMDB { Network *network; - NetworkConfigSection *section; + ConfigSection *section; int family; union in_addr_union group_addr; diff --git a/src/network/networkd-dhcp-server-static-lease.c b/src/network/networkd-dhcp-server-static-lease.c index 6acd838e2b7..38e8c7e889b 100644 --- a/src/network/networkd-dhcp-server-static-lease.c +++ b/src/network/networkd-dhcp-server-static-lease.c @@ -7,7 +7,7 @@ #include "networkd-network.h" #include "networkd-util.h" -DEFINE_NETWORK_SECTION_FUNCTIONS(DHCPStaticLease, dhcp_static_lease_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(DHCPStaticLease, dhcp_static_lease_free); DHCPStaticLease *dhcp_static_lease_free(DHCPStaticLease *static_lease) { if (!static_lease) @@ -16,7 +16,7 @@ DHCPStaticLease *dhcp_static_lease_free(DHCPStaticLease *static_lease) { if (static_lease->network && static_lease->section) hashmap_remove(static_lease->network->dhcp_static_leases_by_section, static_lease->section); - network_config_section_free(static_lease->section); + config_section_free(static_lease->section); free(static_lease->client_id); return mfree(static_lease); } @@ -35,7 +35,7 @@ static int dhcp_static_lease_new(DHCPStaticLease **ret) { } static int lease_new_static(Network *network, const char *filename, unsigned section_line, DHCPStaticLease **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(dhcp_static_lease_freep) DHCPStaticLease *static_lease = NULL; int r; @@ -44,7 +44,7 @@ static int lease_new_static(Network *network, const char *filename, unsigned sec assert(section_line > 0); assert(ret); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -60,7 +60,7 @@ 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, &network_config_hash_ops, static_lease->section, static_lease); + r = hashmap_ensure_put(&network->dhcp_static_leases_by_section, &config_section_hash_ops, static_lease->section, static_lease); if (r < 0) return r; diff --git a/src/network/networkd-dhcp-server-static-lease.h b/src/network/networkd-dhcp-server-static-lease.h index c2a9ad6bb12..9b8e78b90d8 100644 --- a/src/network/networkd-dhcp-server-static-lease.h +++ b/src/network/networkd-dhcp-server-static-lease.h @@ -8,11 +8,11 @@ #include "in-addr-util.h" typedef struct Network Network; -typedef struct NetworkConfigSection NetworkConfigSection; +typedef struct ConfigSection ConfigSection; typedef struct DHCPStaticLease { Network *network; - NetworkConfigSection *section; + ConfigSection *section; struct in_addr address; uint8_t *client_id; diff --git a/src/network/networkd-neighbor.c b/src/network/networkd-neighbor.c index 26b73854970..4aab290bf80 100644 --- a/src/network/networkd-neighbor.c +++ b/src/network/networkd-neighbor.c @@ -19,7 +19,7 @@ Neighbor *neighbor_free(Neighbor *neighbor) { hashmap_remove(neighbor->network->neighbors_by_section, neighbor->section); } - network_config_section_free(neighbor->section); + config_section_free(neighbor->section); if (neighbor->link) set_remove(neighbor->link->neighbors, neighbor); @@ -27,10 +27,10 @@ Neighbor *neighbor_free(Neighbor *neighbor) { return mfree(neighbor); } -DEFINE_NETWORK_SECTION_FUNCTIONS(Neighbor, neighbor_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(Neighbor, neighbor_free); static int neighbor_new_static(Network *network, const char *filename, unsigned section_line, Neighbor **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(neighbor_freep) Neighbor *neighbor = NULL; int r; @@ -39,7 +39,7 @@ static int neighbor_new_static(Network *network, const char *filename, unsigned assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -60,7 +60,7 @@ static int neighbor_new_static(Network *network, const char *filename, unsigned .source = NETWORK_CONFIG_SOURCE_STATIC, }; - r = hashmap_ensure_put(&network->neighbors_by_section, &network_config_hash_ops, neighbor->section, neighbor); + r = hashmap_ensure_put(&network->neighbors_by_section, &config_section_hash_ops, neighbor->section, neighbor); if (r < 0) return r; diff --git a/src/network/networkd-neighbor.h b/src/network/networkd-neighbor.h index e9e18541107..f31f58a4d4e 100644 --- a/src/network/networkd-neighbor.h +++ b/src/network/networkd-neighbor.h @@ -18,7 +18,7 @@ typedef struct Request Request; typedef struct Neighbor { Network *network; Link *link; - NetworkConfigSection *section; + ConfigSection *section; NetworkConfigSource source; NetworkConfigState state; diff --git a/src/network/networkd-nexthop.c b/src/network/networkd-nexthop.c index b829aaab90a..e9e5d08557b 100644 --- a/src/network/networkd-nexthop.c +++ b/src/network/networkd-nexthop.c @@ -27,7 +27,7 @@ NextHop *nexthop_free(NextHop *nexthop) { hashmap_remove(nexthop->network->nexthops_by_section, nexthop->section); } - network_config_section_free(nexthop->section); + config_section_free(nexthop->section); if (nexthop->link) { set_remove(nexthop->link->nexthops, nexthop); @@ -48,7 +48,7 @@ NextHop *nexthop_free(NextHop *nexthop) { return mfree(nexthop); } -DEFINE_NETWORK_SECTION_FUNCTIONS(NextHop, nexthop_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(NextHop, nexthop_free); static int nexthop_new(NextHop **ret) { _cleanup_(nexthop_freep) NextHop *nexthop = NULL; @@ -68,7 +68,7 @@ static int nexthop_new(NextHop **ret) { } static int nexthop_new_static(Network *network, const char *filename, unsigned section_line, NextHop **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(nexthop_freep) NextHop *nexthop = NULL; int r; @@ -77,7 +77,7 @@ static int nexthop_new_static(Network *network, const char *filename, unsigned s assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -96,7 +96,7 @@ static int nexthop_new_static(Network *network, const char *filename, unsigned s nexthop->section = TAKE_PTR(n); nexthop->source = NETWORK_CONFIG_SOURCE_STATIC; - r = hashmap_ensure_put(&network->nexthops_by_section, &network_config_hash_ops, nexthop->section, nexthop); + r = hashmap_ensure_put(&network->nexthops_by_section, &config_section_hash_ops, nexthop->section, nexthop); if (r < 0) return r; diff --git a/src/network/networkd-nexthop.h b/src/network/networkd-nexthop.h index 7a8920238c0..01b29ae5602 100644 --- a/src/network/networkd-nexthop.h +++ b/src/network/networkd-nexthop.h @@ -22,7 +22,7 @@ typedef struct NextHop { Network *network; Manager *manager; Link *link; - NetworkConfigSection *section; + ConfigSection *section; NetworkConfigSource source; NetworkConfigState state; diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 59b0922a4c4..0c5eebc8157 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -69,16 +69,16 @@ Prefix *prefix_free(Prefix *prefix) { hashmap_remove(prefix->network->prefixes_by_section, prefix->section); } - network_config_section_free(prefix->section); + config_section_free(prefix->section); set_free(prefix->tokens); return mfree(prefix); } -DEFINE_NETWORK_SECTION_FUNCTIONS(Prefix, prefix_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(Prefix, prefix_free); static int prefix_new_static(Network *network, const char *filename, unsigned section_line, Prefix **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(prefix_freep) Prefix *prefix = NULL; int r; @@ -87,7 +87,7 @@ static int prefix_new_static(Network *network, const char *filename, unsigned se assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -111,7 +111,7 @@ static int prefix_new_static(Network *network, const char *filename, unsigned se .address_auto_configuration = true, }; - r = hashmap_ensure_put(&network->prefixes_by_section, &network_config_hash_ops, prefix->section, prefix); + r = hashmap_ensure_put(&network->prefixes_by_section, &config_section_hash_ops, prefix->section, prefix); if (r < 0) return r; @@ -128,15 +128,15 @@ RoutePrefix *route_prefix_free(RoutePrefix *prefix) { hashmap_remove(prefix->network->route_prefixes_by_section, prefix->section); } - network_config_section_free(prefix->section); + config_section_free(prefix->section); return mfree(prefix); } -DEFINE_NETWORK_SECTION_FUNCTIONS(RoutePrefix, route_prefix_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(RoutePrefix, route_prefix_free); static int route_prefix_new_static(Network *network, const char *filename, unsigned section_line, RoutePrefix **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL; int r; @@ -145,7 +145,7 @@ static int route_prefix_new_static(Network *network, const char *filename, unsig assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -166,7 +166,7 @@ static int route_prefix_new_static(Network *network, const char *filename, unsig .lifetime = RADV_DEFAULT_VALID_LIFETIME_USEC, }; - r = hashmap_ensure_put(&network->route_prefixes_by_section, &network_config_hash_ops, prefix->section, prefix); + r = hashmap_ensure_put(&network->route_prefixes_by_section, &config_section_hash_ops, prefix->section, prefix); if (r < 0) return r; diff --git a/src/network/networkd-radv.h b/src/network/networkd-radv.h index 392c00b37d1..952fa8ae58e 100644 --- a/src/network/networkd-radv.h +++ b/src/network/networkd-radv.h @@ -29,7 +29,7 @@ typedef enum RADVPrefixDelegation { typedef struct Prefix { Network *network; - NetworkConfigSection *section; + ConfigSection *section; struct in6_addr prefix; uint8_t prefixlen; @@ -46,7 +46,7 @@ typedef struct Prefix { typedef struct RoutePrefix { Network *network; - NetworkConfigSection *section; + ConfigSection *section; struct in6_addr prefix; uint8_t prefixlen; diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 00e64978d45..03021362b6c 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -47,7 +47,7 @@ int route_new(Route **ret) { } static int route_new_static(Network *network, const char *filename, unsigned section_line, Route **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(route_freep) Route *route = NULL; int r; @@ -56,7 +56,7 @@ static int route_new_static(Network *network, const char *filename, unsigned sec assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -78,7 +78,7 @@ static int route_new_static(Network *network, const char *filename, unsigned sec route->section = TAKE_PTR(n); route->source = NETWORK_CONFIG_SOURCE_STATIC; - r = hashmap_ensure_put(&network->routes_by_section, &network_config_hash_ops, route->section, route); + r = hashmap_ensure_put(&network->routes_by_section, &config_section_hash_ops, route->section, route); if (r < 0) return r; @@ -95,7 +95,7 @@ Route *route_free(Route *route) { hashmap_remove(route->network->routes_by_section, route->section); } - network_config_section_free(route->section); + config_section_free(route->section); if (route->link) set_remove(route->link->routes, route); diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h index e3e22a59853..3471008fee7 100644 --- a/src/network/networkd-route.h +++ b/src/network/networkd-route.h @@ -19,7 +19,7 @@ typedef struct Route { Link *link; Manager *manager; Network *network; - NetworkConfigSection *section; + ConfigSection *section; NetworkConfigSource source; NetworkConfigState state; union in_addr_union provider; /* DHCP server or router address */ @@ -74,7 +74,7 @@ extern const struct hash_ops route_hash_ops; int route_new(Route **ret); Route *route_free(Route *route); -DEFINE_NETWORK_SECTION_FUNCTIONS(Route, route_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(Route, route_free); int route_dup(const Route *src, Route **ret); int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg); diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index a2e72a7d7c7..1f3dfa53b0c 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -54,14 +54,14 @@ RoutingPolicyRule *routing_policy_rule_free(RoutingPolicyRule *rule) { if (rule->manager) set_remove(rule->manager->rules, rule); - network_config_section_free(rule->section); + config_section_free(rule->section); free(rule->iif); free(rule->oif); return mfree(rule); } -DEFINE_NETWORK_SECTION_FUNCTIONS(RoutingPolicyRule, routing_policy_rule_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(RoutingPolicyRule, routing_policy_rule_free); static int routing_policy_rule_new(RoutingPolicyRule **ret) { RoutingPolicyRule *rule; @@ -86,7 +86,7 @@ static int routing_policy_rule_new(RoutingPolicyRule **ret) { static int routing_policy_rule_new_static(Network *network, const char *filename, unsigned section_line, RoutingPolicyRule **ret) { _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *rule = NULL; - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; int r; assert(network); @@ -94,7 +94,7 @@ static int routing_policy_rule_new_static(Network *network, const char *filename assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -113,7 +113,7 @@ static int routing_policy_rule_new_static(Network *network, const char *filename rule->source = NETWORK_CONFIG_SOURCE_STATIC; rule->protocol = RTPROT_STATIC; - r = hashmap_ensure_put(&network->rules_by_section, &network_config_hash_ops, rule->section, rule); + r = hashmap_ensure_put(&network->rules_by_section, &config_section_hash_ops, rule->section, rule); if (r < 0) return r; diff --git a/src/network/networkd-routing-policy-rule.h b/src/network/networkd-routing-policy-rule.h index f52943bd2e6..1ab147caae7 100644 --- a/src/network/networkd-routing-policy-rule.h +++ b/src/network/networkd-routing-policy-rule.h @@ -17,7 +17,7 @@ typedef struct Request Request; typedef struct RoutingPolicyRule { Manager *manager; Network *network; - NetworkConfigSection *section; + ConfigSection *section; NetworkConfigSource source; NetworkConfigState state; diff --git a/src/network/networkd-sriov.c b/src/network/networkd-sriov.c index 1443d40d4ce..79e607b3dab 100644 --- a/src/network/networkd-sriov.c +++ b/src/network/networkd-sriov.c @@ -33,7 +33,7 @@ static int sr_iov_new(SRIOV **ret) { } static int sr_iov_new_static(Network *network, const char *filename, unsigned section_line, SRIOV **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(sr_iov_freep) SRIOV *sr_iov = NULL; SRIOV *existing = NULL; int r; @@ -43,7 +43,7 @@ static int sr_iov_new_static(Network *network, const char *filename, unsigned se assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -60,7 +60,7 @@ static int sr_iov_new_static(Network *network, const char *filename, unsigned se sr_iov->network = network; sr_iov->section = TAKE_PTR(n); - r = ordered_hashmap_ensure_put(&network->sr_iov_by_section, &network_config_hash_ops, sr_iov->section, sr_iov); + r = ordered_hashmap_ensure_put(&network->sr_iov_by_section, &config_section_hash_ops, sr_iov->section, sr_iov); if (r < 0) return r; @@ -75,7 +75,7 @@ SRIOV *sr_iov_free(SRIOV *sr_iov) { if (sr_iov->network && sr_iov->section) ordered_hashmap_remove(sr_iov->network->sr_iov_by_section, sr_iov->section); - network_config_section_free(sr_iov->section); + config_section_free(sr_iov->section); return mfree(sr_iov); } diff --git a/src/network/networkd-sriov.h b/src/network/networkd-sriov.h index be4430a9a04..270a82b233d 100644 --- a/src/network/networkd-sriov.h +++ b/src/network/networkd-sriov.h @@ -19,7 +19,7 @@ typedef enum SRIOVLinkState { } SRIOVLinkState; typedef struct SRIOV { - NetworkConfigSection *section; + ConfigSection *section; Network *network; uint32_t vf; /* 0 - 2147483646 */ @@ -37,7 +37,7 @@ SRIOV *sr_iov_free(SRIOV *sr_iov); int link_configure_sr_iov(Link *link); int network_drop_invalid_sr_iov(Network *network); -DEFINE_NETWORK_SECTION_FUNCTIONS(SRIOV, sr_iov_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(SRIOV, sr_iov_free); CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_uint32); CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_boolean); diff --git a/src/network/networkd-util.c b/src/network/networkd-util.c index ac6f1680ca4..1c0987bc337 100644 --- a/src/network/networkd-util.c +++ b/src/network/networkd-util.c @@ -243,50 +243,6 @@ int config_parse_mud_url( return free_and_replace(*url, unescaped); } -static void network_config_hash_func(const NetworkConfigSection *c, struct siphash *state) { - siphash24_compress_string(c->filename, state); - siphash24_compress(&c->line, sizeof(c->line), state); -} - -static int network_config_compare_func(const NetworkConfigSection *x, const NetworkConfigSection *y) { - int r; - - r = strcmp(x->filename, y->filename); - if (r != 0) - return r; - - return CMP(x->line, y->line); -} - -DEFINE_HASH_OPS(network_config_hash_ops, NetworkConfigSection, network_config_hash_func, network_config_compare_func); - -int network_config_section_new(const char *filename, unsigned line, NetworkConfigSection **s) { - NetworkConfigSection *cs; - - cs = malloc0(offsetof(NetworkConfigSection, filename) + strlen(filename) + 1); - if (!cs) - return -ENOMEM; - - strcpy(cs->filename, filename); - cs->line = line; - - *s = TAKE_PTR(cs); - - return 0; -} - -unsigned hashmap_find_free_section_line(Hashmap *hashmap) { - NetworkConfigSection *cs; - unsigned n = 0; - void *entry; - - HASHMAP_FOREACH_KEY(entry, cs, hashmap) - if (n < cs->line) - n = cs->line; - - return n + 1; -} - int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg) { const char *err_msg = NULL; diff --git a/src/network/networkd-util.h b/src/network/networkd-util.h index d94243855e7..0a627588aa2 100644 --- a/src/network/networkd-util.h +++ b/src/network/networkd-util.h @@ -13,12 +13,6 @@ typedef struct Link Link; -typedef struct NetworkConfigSection { - unsigned line; - bool invalid; - char filename[]; -} NetworkConfigSection; - typedef enum NetworkConfigSource { NETWORK_CONFIG_SOURCE_FOREIGN, /* configured by kernel */ NETWORK_CONFIG_SOURCE_STATIC, @@ -141,37 +135,6 @@ AddressFamily dhcp_deprecated_address_family_from_string(const char *s) _pure_; const char *dhcp_lease_server_type_to_string(sd_dhcp_lease_server_type_t t) _const_; sd_dhcp_lease_server_type_t dhcp_lease_server_type_from_string(const char *s) _pure_; -static inline NetworkConfigSection* network_config_section_free(NetworkConfigSection *cs) { - return mfree(cs); -} -DEFINE_TRIVIAL_CLEANUP_FUNC(NetworkConfigSection*, network_config_section_free); - -int network_config_section_new(const char *filename, unsigned line, NetworkConfigSection **s); -extern const struct hash_ops network_config_hash_ops; -unsigned hashmap_find_free_section_line(Hashmap *hashmap); - -static inline bool section_is_invalid(NetworkConfigSection *section) { - /* If this returns false, then it does _not_ mean the section is valid. */ - - if (!section) - return false; - - return section->invalid; -} - -#define DEFINE_NETWORK_SECTION_FUNCTIONS(type, free_func) \ - static inline type* free_func##_or_set_invalid(type *p) { \ - assert(p); \ - \ - if (p->section) \ - p->section->invalid = true; \ - else \ - free_func(p); \ - return NULL; \ - } \ - DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func); \ - DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func##_or_set_invalid); - int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg); #define log_link_message_error_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_ERR, err, msg) #define log_link_message_warning_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_WARNING, err, msg) diff --git a/src/network/tc/qdisc.c b/src/network/tc/qdisc.c index 995df2fc866..803c999855b 100644 --- a/src/network/tc/qdisc.c +++ b/src/network/tc/qdisc.c @@ -77,7 +77,7 @@ static int qdisc_new(QDiscKind kind, QDisc **ret) { } int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, unsigned section_line, QDisc **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(qdisc_freep) QDisc *qdisc = NULL; TrafficControl *existing; QDisc *q = NULL; @@ -88,7 +88,7 @@ int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, uns assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -126,7 +126,7 @@ int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, uns qdisc->network = network; qdisc->section = TAKE_PTR(n); - r = ordered_hashmap_ensure_put(&network->tc_by_section, &network_config_hash_ops, qdisc->section, TC(qdisc)); + r = ordered_hashmap_ensure_put(&network->tc_by_section, &config_section_hash_ops, qdisc->section, TC(qdisc)); if (r < 0) return r; @@ -141,7 +141,7 @@ QDisc* qdisc_free(QDisc *qdisc) { if (qdisc->network && qdisc->section) ordered_hashmap_remove(qdisc->network->tc_by_section, qdisc->section); - network_config_section_free(qdisc->section); + config_section_free(qdisc->section); free(qdisc->tca_kind); return mfree(qdisc); diff --git a/src/network/tc/qdisc.h b/src/network/tc/qdisc.h index bf2df146a7e..e37c4806e32 100644 --- a/src/network/tc/qdisc.h +++ b/src/network/tc/qdisc.h @@ -37,7 +37,7 @@ typedef enum QDiscKind { typedef struct QDisc { TrafficControl meta; - NetworkConfigSection *section; + ConfigSection *section; Network *network; int family; @@ -80,7 +80,7 @@ int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, uns int qdisc_configure(Link *link, QDisc *qdisc); int qdisc_section_verify(QDisc *qdisc, bool *has_root, bool *has_clsact); -DEFINE_NETWORK_SECTION_FUNCTIONS(QDisc, qdisc_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(QDisc, qdisc_free); DEFINE_TC_CAST(QDISC, QDisc); diff --git a/src/network/tc/tclass.c b/src/network/tc/tclass.c index 10bffd65c62..6a36ac1c1cd 100644 --- a/src/network/tc/tclass.c +++ b/src/network/tc/tclass.c @@ -45,7 +45,7 @@ static int tclass_new(TClassKind kind, TClass **ret) { } int tclass_new_static(TClassKind kind, Network *network, const char *filename, unsigned section_line, TClass **ret) { - _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL; + _cleanup_(config_section_freep) ConfigSection *n = NULL; _cleanup_(tclass_freep) TClass *tclass = NULL; TrafficControl *existing; int r; @@ -55,7 +55,7 @@ int tclass_new_static(TClassKind kind, Network *network, const char *filename, u assert(filename); assert(section_line > 0); - r = network_config_section_new(filename, section_line, &n); + r = config_section_new(filename, section_line, &n); if (r < 0) return r; @@ -82,7 +82,7 @@ int tclass_new_static(TClassKind kind, Network *network, const char *filename, u tclass->network = network; tclass->section = TAKE_PTR(n); - r = ordered_hashmap_ensure_put(&network->tc_by_section, &network_config_hash_ops, tclass->section, tclass); + r = ordered_hashmap_ensure_put(&network->tc_by_section, &config_section_hash_ops, tclass->section, tclass); if (r < 0) return r; @@ -97,7 +97,7 @@ TClass* tclass_free(TClass *tclass) { if (tclass->network && tclass->section) ordered_hashmap_remove(tclass->network->tc_by_section, tclass->section); - network_config_section_free(tclass->section); + config_section_free(tclass->section); return mfree(tclass); } diff --git a/src/network/tc/tclass.h b/src/network/tc/tclass.h index fc91789f300..5f8016c1872 100644 --- a/src/network/tc/tclass.h +++ b/src/network/tc/tclass.h @@ -19,7 +19,7 @@ typedef enum TClassKind { typedef struct TClass { TrafficControl meta; - NetworkConfigSection *section; + ConfigSection *section; Network *network; uint32_t classid; @@ -59,7 +59,7 @@ int tclass_new_static(TClassKind kind, Network *network, const char *filename, u int tclass_configure(Link *link, TClass *tclass); int tclass_section_verify(TClass *tclass); -DEFINE_NETWORK_SECTION_FUNCTIONS(TClass, tclass_free); +DEFINE_SECTION_CLEANUP_FUNCTIONS(TClass, tclass_free); DEFINE_TC_CAST(TCLASS, TClass); diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 1e1967d7ea2..64e67fb6f57 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -573,6 +573,50 @@ int config_parse_many( return config_parse_many_files(conf_files, files, sections, lookup, table, flags, userdata, ret_stats_by_path); } +static void config_section_hash_func(const ConfigSection *c, struct siphash *state) { + siphash24_compress_string(c->filename, state); + siphash24_compress(&c->line, sizeof(c->line), state); +} + +static int config_section_compare_func(const ConfigSection *x, const ConfigSection *y) { + int r; + + r = strcmp(x->filename, y->filename); + if (r != 0) + return r; + + return CMP(x->line, y->line); +} + +DEFINE_HASH_OPS(config_section_hash_ops, ConfigSection, config_section_hash_func, config_section_compare_func); + +int config_section_new(const char *filename, unsigned line, ConfigSection **s) { + ConfigSection *cs; + + cs = malloc0(offsetof(ConfigSection, filename) + strlen(filename) + 1); + if (!cs) + return -ENOMEM; + + strcpy(cs->filename, filename); + cs->line = line; + + *s = TAKE_PTR(cs); + + return 0; +} + +unsigned hashmap_find_free_section_line(Hashmap *hashmap) { + ConfigSection *cs; + unsigned n = 0; + void *entry; + + HASHMAP_FOREACH_KEY(entry, cs, hashmap) + if (n < cs->line) + n = cs->line; + + return n + 1; +} + #define DEFINE_PARSER(type, vartype, conv_func) \ DEFINE_CONFIG_PARSE_PTR(config_parse_##type, conv_func, vartype, "Failed to parse " #type " value") diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h index d6866655327..1e03f93bce1 100644 --- a/src/shared/conf-parser.h +++ b/src/shared/conf-parser.h @@ -114,6 +114,43 @@ int config_parse_many( void *userdata, Hashmap **ret_stats_by_path); /* possibly NULL */ +typedef struct ConfigSection { + unsigned line; + bool invalid; + char filename[]; +} ConfigSection; + +static inline ConfigSection* config_section_free(ConfigSection *cs) { + return mfree(cs); +} +DEFINE_TRIVIAL_CLEANUP_FUNC(ConfigSection*, config_section_free); + +int config_section_new(const char *filename, unsigned line, ConfigSection **s); +extern const struct hash_ops config_section_hash_ops; +unsigned hashmap_find_free_section_line(Hashmap *hashmap); + +static inline bool section_is_invalid(ConfigSection *section) { + /* If this returns false, then it does _not_ mean the section is valid. */ + + if (!section) + return false; + + return section->invalid; +} + +#define DEFINE_SECTION_CLEANUP_FUNCTIONS(type, free_func) \ + static inline type* free_func##_or_set_invalid(type *p) { \ + assert(p); \ + \ + if (p->section) \ + p->section->invalid = true; \ + else \ + free_func(p); \ + return NULL; \ + } \ + DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func); \ + DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func##_or_set_invalid); + CONFIG_PARSER_PROTOTYPE(config_parse_int); CONFIG_PARSER_PROTOTYPE(config_parse_unsigned); CONFIG_PARSER_PROTOTYPE(config_parse_long);