summaryrefslogtreecommitdiff
path: root/src/network/networkd-ipv6-proxy-ndp.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2020-09-30 04:37:18 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-10-07 02:44:42 +0900
commita8c82f90e778ed72ce5d4b9cc7b1ed69ea1691a5 (patch)
treecbfe65a8a07e3f651f2664fe01637205964e9111 /src/network/networkd-ipv6-proxy-ndp.c
parentdbf6319691207a1a384a52da982e8e83a21693cd (diff)
downloadsystemd-a8c82f90e778ed72ce5d4b9cc7b1ed69ea1691a5.tar.gz
network: move functions
Diffstat (limited to 'src/network/networkd-ipv6-proxy-ndp.c')
-rw-r--r--src/network/networkd-ipv6-proxy-ndp.c186
1 files changed, 93 insertions, 93 deletions
diff --git a/src/network/networkd-ipv6-proxy-ndp.c b/src/network/networkd-ipv6-proxy-ndp.c
index 7051ba9dac..96e4b6453a 100644
--- a/src/network/networkd-ipv6-proxy-ndp.c
+++ b/src/network/networkd-ipv6-proxy-ndp.c
@@ -14,40 +14,19 @@
#include "string-util.h"
#include "sysctl-util.h"
-static bool ipv6_proxy_ndp_is_needed(Link *link) {
- assert(link);
-
- if (link->flags & IFF_LOOPBACK)
- return false;
-
- if (!link->network)
- return false;
-
- if (link->network->ipv6_proxy_ndp >= 0)
- return link->network->ipv6_proxy_ndp;
-
- if (link->network->n_ipv6_proxy_ndp_addresses == 0)
- return false;
-
- return true;
-}
-
-static int ipv6_proxy_ndp_set(Link *link) {
- bool v;
- int r;
-
- assert(link);
-
- if (!socket_ipv6_is_supported())
- return 0;
+void ipv6_proxy_ndp_address_free(IPv6ProxyNDPAddress *ipv6_proxy_ndp_address) {
+ if (!ipv6_proxy_ndp_address)
+ return;
- v = ipv6_proxy_ndp_is_needed(link);
+ if (ipv6_proxy_ndp_address->network) {
+ LIST_REMOVE(ipv6_proxy_ndp_addresses, ipv6_proxy_ndp_address->network->ipv6_proxy_ndp_addresses,
+ ipv6_proxy_ndp_address);
- r = sysctl_write_ip_property_boolean(AF_INET6, link->ifname, "proxy_ndp", v);
- if (r < 0)
- log_link_warning_errno(link, r, "Cannot configure proxy NDP for interface: %m");
+ assert(ipv6_proxy_ndp_address->network->n_ipv6_proxy_ndp_addresses > 0);
+ ipv6_proxy_ndp_address->network->n_ipv6_proxy_ndp_addresses--;
+ }
- return 0;
+ free(ipv6_proxy_ndp_address);
}
static int ipv6_proxy_ndp_address_new_static(Network *network, IPv6ProxyNDPAddress **ret) {
@@ -73,68 +52,6 @@ static int ipv6_proxy_ndp_address_new_static(Network *network, IPv6ProxyNDPAddre
return 0;
}
-void ipv6_proxy_ndp_address_free(IPv6ProxyNDPAddress *ipv6_proxy_ndp_address) {
- if (!ipv6_proxy_ndp_address)
- return;
-
- if (ipv6_proxy_ndp_address->network) {
- LIST_REMOVE(ipv6_proxy_ndp_addresses, ipv6_proxy_ndp_address->network->ipv6_proxy_ndp_addresses,
- ipv6_proxy_ndp_address);
-
- assert(ipv6_proxy_ndp_address->network->n_ipv6_proxy_ndp_addresses > 0);
- ipv6_proxy_ndp_address->network->n_ipv6_proxy_ndp_addresses--;
- }
-
- free(ipv6_proxy_ndp_address);
-}
-
-int config_parse_ipv6_proxy_ndp_address(
- const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- unsigned section_line,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- Network *network = userdata;
- _cleanup_(ipv6_proxy_ndp_address_freep) IPv6ProxyNDPAddress *ipv6_proxy_ndp_address = NULL;
- int r;
- union in_addr_union buffer;
-
- assert(filename);
- assert(section);
- assert(lvalue);
- assert(rvalue);
- assert(data);
-
- r = ipv6_proxy_ndp_address_new_static(network, &ipv6_proxy_ndp_address);
- if (r < 0)
- return log_oom();
-
- r = in_addr_from_string(AF_INET6, rvalue, &buffer);
- if (r < 0) {
- log_syntax(unit, LOG_WARNING, filename, line, r,
- "Failed to parse IPv6 proxy NDP address, ignoring: %s",
- rvalue);
- return 0;
- }
-
- if (in_addr_is_null(AF_INET6, &buffer)) {
- log_syntax(unit, LOG_WARNING, filename, line, 0,
- "IPv6 proxy NDP address cannot be the ANY address, ignoring: %s", rvalue);
- return 0;
- }
-
- ipv6_proxy_ndp_address->in_addr = buffer.in6;
- ipv6_proxy_ndp_address = NULL;
-
- return 0;
-}
-
static int set_ipv6_proxy_ndp_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
int r;
@@ -183,6 +100,42 @@ int ipv6_proxy_ndp_address_configure(Link *link, IPv6ProxyNDPAddress *ipv6_proxy
return 0;
}
+static bool ipv6_proxy_ndp_is_needed(Link *link) {
+ assert(link);
+
+ if (link->flags & IFF_LOOPBACK)
+ return false;
+
+ if (!link->network)
+ return false;
+
+ if (link->network->ipv6_proxy_ndp >= 0)
+ return link->network->ipv6_proxy_ndp;
+
+ if (link->network->n_ipv6_proxy_ndp_addresses == 0)
+ return false;
+
+ return true;
+}
+
+static int ipv6_proxy_ndp_set(Link *link) {
+ bool v;
+ int r;
+
+ assert(link);
+
+ if (!socket_ipv6_is_supported())
+ return 0;
+
+ v = ipv6_proxy_ndp_is_needed(link);
+
+ r = sysctl_write_ip_property_boolean(AF_INET6, link->ifname, "proxy_ndp", v);
+ if (r < 0)
+ log_link_warning_errno(link, r, "Cannot configure proxy NDP for interface: %m");
+
+ return 0;
+}
+
/* configure all ipv6 proxy ndp addresses */
int ipv6_proxy_ndp_addresses_configure(Link *link) {
IPv6ProxyNDPAddress *ipv6_proxy_ndp_address;
@@ -202,3 +155,50 @@ int ipv6_proxy_ndp_addresses_configure(Link *link) {
}
return 0;
}
+
+int config_parse_ipv6_proxy_ndp_address(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ Network *network = userdata;
+ _cleanup_(ipv6_proxy_ndp_address_freep) IPv6ProxyNDPAddress *ipv6_proxy_ndp_address = NULL;
+ int r;
+ union in_addr_union buffer;
+
+ assert(filename);
+ assert(section);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = ipv6_proxy_ndp_address_new_static(network, &ipv6_proxy_ndp_address);
+ if (r < 0)
+ return log_oom();
+
+ r = in_addr_from_string(AF_INET6, rvalue, &buffer);
+ if (r < 0) {
+ log_syntax(unit, LOG_WARNING, filename, line, r,
+ "Failed to parse IPv6 proxy NDP address, ignoring: %s",
+ rvalue);
+ return 0;
+ }
+
+ if (in_addr_is_null(AF_INET6, &buffer)) {
+ log_syntax(unit, LOG_WARNING, filename, line, 0,
+ "IPv6 proxy NDP address cannot be the ANY address, ignoring: %s", rvalue);
+ return 0;
+ }
+
+ ipv6_proxy_ndp_address->in_addr = buffer.in6;
+ ipv6_proxy_ndp_address = NULL;
+
+ return 0;
+}