]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce network_verify_addresses()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 2 Oct 2020 02:35:44 +0000 (11:35 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 6 Oct 2020 17:50:50 +0000 (02:50 +0900)
src/network/networkd-address.c
src/network/networkd-address.h
src/network/networkd-network.c

index 14a2026e3f7c885d389284738b1e431045562d92..c6101b1cfc84a61c1dce0882f959f497c9d5cbed 100644 (file)
@@ -1685,7 +1685,7 @@ bool address_is_ready(const Address *a) {
         return !(a->flags & IFA_F_TENTATIVE);
 }
 
-int address_section_verify(Address *address) {
+static int address_section_verify(Address *address) {
         if (section_is_invalid(address->section))
                 return -EINVAL;
 
@@ -1703,3 +1703,13 @@ int address_section_verify(Address *address) {
 
         return 0;
 }
+
+void network_verify_addresses(Network *network) {
+        Address *address, *address_next;
+
+        assert(network);
+
+        LIST_FOREACH_SAFE(addresses, address, address_next, network->static_addresses)
+                if (address_section_verify(address) < 0)
+                        address_free(address);
+}
index 5b565b6e55e811fe6af502e14f07960709f4722a..d3e0640c4ae94232e5441ac831a5a499a6d91b75 100644 (file)
@@ -68,7 +68,6 @@ int address_configure(Address *address, Link *link, link_netlink_message_handler
 int address_remove(Address *address, Link *link, link_netlink_message_handler_t callback);
 bool address_equal(Address *a1, Address *a2);
 bool address_is_ready(const Address *a);
-int address_section_verify(Address *a);
 int configure_ipv4_duplicate_address_detection(Link *link, Address *address);
 
 int generate_ipv6_eui_64_address(Link *link, struct in6_addr *ret);
@@ -81,6 +80,8 @@ int link_drop_foreign_addresses(Link *link);
 
 int manager_rtnl_process_address(sd_netlink *nl, sd_netlink_message *message, Manager *m);
 
+void network_verify_addresses(Network *network);
+
 void address_hash_func(const Address *a, struct siphash *state);
 int address_compare_func(const Address *a1, const Address *a2);
 extern const struct hash_ops address_hash_ops;
index aa9a3346dcb7da8e5c50fab6e851c5afc6ab5c92..79ae2899d37a086f10a85693505e0d70d6c86732 100644 (file)
@@ -155,7 +155,6 @@ static int network_resolve_stacked_netdevs(Network *network) {
 }
 
 int network_verify(Network *network) {
-        Address *address, *address_next;
         TrafficControl *tc;
         SRIOV *sr_iov;
 
@@ -212,6 +211,8 @@ int network_verify(Network *network) {
                         network->dhcp_server = false;
                 }
                 if (network->n_static_addresses > 0) {
+                        Address *address;
+
                         log_warning("%s: Cannot set addresses when Bond= is specified, ignoring addresses.",
                                     network->filename);
                         while ((address = network->static_addresses))
@@ -291,10 +292,7 @@ int network_verify(Network *network) {
                 network->ipv6_proxy_ndp_addresses = set_free_free(network->ipv6_proxy_ndp_addresses);
         }
 
-        LIST_FOREACH_SAFE(addresses, address, address_next, network->static_addresses)
-                if (address_section_verify(address) < 0)
-                        address_free(address);
-
+        network_verify_addresses(network);
         network_verify_routes(network);
         network_verify_nexthops(network);
         network_verify_fdb_entries(network);