Renaming the netmask length calc function so that it can be used by both connmand and vpnd. --- include/ipaddress.h | 1 + src/connman.h | 1 - src/dhcp.c | 4 ++-- src/ipaddress.c | 48 ++++++++++++++++++++++++------------------------ src/tethering.c | 7 +++---- 5 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/include/ipaddress.h b/include/ipaddress.h index 4ced318..ff775c9 100644 --- a/include/ipaddress.h +++ b/include/ipaddress.h @@ -34,6 +34,7 @@ extern "C" { struct connman_ipaddress; +unsigned char connman_ipaddress_calc_netmask_len(const char *netmask); struct connman_ipaddress *connman_ipaddress_alloc(int family); void connman_ipaddress_free(struct connman_ipaddress *ipaddress); int connman_ipaddress_set_ipv4(struct connman_ipaddress *ipaddress, diff --git a/src/connman.h b/src/connman.h index 24db5f8..6bd7e3b 100644 --- a/src/connman.h +++ b/src/connman.h @@ -383,7 +383,6 @@ int __connman_ipconfig_address_remove(struct connman_ipconfig *ipconfig); int __connman_ipconfig_address_unset(struct connman_ipconfig *ipconfig); int __connman_ipconfig_gateway_add(struct connman_ipconfig *ipconfig); void __connman_ipconfig_gateway_remove(struct connman_ipconfig *ipconfig); -unsigned char __connman_ipaddress_netmask_prefix_len(const char *netmask); int __connman_ipconfig_set_proxy_autoconfig(struct connman_ipconfig *ipconfig, const char *url); diff --git a/src/dhcp.c b/src/dhcp.c index 631d15c..00df486 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -346,7 +346,7 @@ static void lease_available_cb(GDHCPClient *dhcp_client, gpointer user_data) if (option) gateway = g_strdup(option->data); - prefixlen = __connman_ipaddress_netmask_prefix_len(netmask); + prefixlen = connman_ipaddress_calc_netmask_len(netmask); if (prefixlen == 255) connman_warn("netmask: %s is invalid", netmask); @@ -479,7 +479,7 @@ static void ipv4ll_available_cb(GDHCPClient *ipv4ll_client, gpointer user_data) address = g_dhcp_client_get_address(ipv4ll_client); netmask = g_dhcp_client_get_netmask(ipv4ll_client); - prefixlen = __connman_ipaddress_netmask_prefix_len(netmask); + prefixlen = connman_ipaddress_calc_netmask_len(netmask); __connman_ipconfig_set_method(ipconfig, CONNMAN_IPCONFIG_METHOD_DHCP); __connman_ipconfig_set_local(ipconfig, address); diff --git a/src/ipaddress.c b/src/ipaddress.c index 57f9435..9788294 100644 --- a/src/ipaddress.c +++ b/src/ipaddress.c @@ -33,6 +33,29 @@ #include "connman.h" +unsigned char connman_ipaddress_calc_netmask_len(const char *netmask) +{ + unsigned char bits; + in_addr_t mask; + in_addr_t host; + + if (!netmask) + return 32; + + mask = inet_network(netmask); + host = ~mask; + + /* a valid netmask must be 2^n - 1 */ + if ((host & (host + 1)) != 0) + return -1; + + bits = 0; + for (; mask; mask <<= 1) + ++bits; + + return bits; +} + struct connman_ipaddress *connman_ipaddress_alloc(int family) { struct connman_ipaddress *ipaddress; @@ -63,29 +86,6 @@ void connman_ipaddress_free(struct connman_ipaddress *ipaddress) g_free(ipaddress); } -unsigned char __connman_ipaddress_netmask_prefix_len(const char *netmask) -{ - unsigned char bits; - in_addr_t mask; - in_addr_t host; - - if (!netmask) - return 32; - - mask = inet_network(netmask); - host = ~mask; - - /* a valid netmask must be 2^n - 1 */ - if ((host & (host + 1)) != 0) - return -1; - - bits = 0; - for (; mask; mask <<= 1) - ++bits; - - return bits; -} - static bool check_ipv6_address(const char *address) { unsigned char buf[sizeof(struct in6_addr)]; @@ -136,7 +136,7 @@ int connman_ipaddress_set_ipv4(struct connman_ipaddress *ipaddress, ipaddress->family = AF_INET; - ipaddress->prefixlen = __connman_ipaddress_netmask_prefix_len(netmask); + ipaddress->prefixlen = connman_ipaddress_calc_netmask_len(netmask); g_free(ipaddress->local); ipaddress->local = g_strdup(address); diff --git a/src/tethering.c b/src/tethering.c index c7e17f5..ceeec74 100644 --- a/src/tethering.c +++ b/src/tethering.c @@ -222,7 +222,7 @@ void __connman_tethering_set_enabled(void) end_ip = __connman_ippool_get_end_ip(dhcp_ippool); err = __connman_bridge_enable(BRIDGE_NAME, gateway, - __connman_ipaddress_netmask_prefix_len(subnet_mask), + connman_ipaddress_calc_netmask_len(subnet_mask), broadcast); if (err < 0 && err != -EALREADY) { __connman_ippool_unref(dhcp_ippool); @@ -267,7 +267,7 @@ void __connman_tethering_set_enabled(void) return; } - prefixlen = __connman_ipaddress_netmask_prefix_len(subnet_mask); + prefixlen = connman_ipaddress_calc_netmask_len(subnet_mask); err = __connman_nat_enable(BRIDGE_NAME, start_ip, prefixlen); if (err < 0) { connman_error("Cannot enable NAT %d/%s", err, strerror(-err)); @@ -340,8 +340,7 @@ static void setup_tun_interface(unsigned int flags, unsigned change, subnet_mask = __connman_ippool_get_subnet_mask(pn->pool); server_ip = __connman_ippool_get_start_ip(pn->pool); peer_ip = __connman_ippool_get_end_ip(pn->pool); - prefixlen = - __connman_ipaddress_netmask_prefix_len(subnet_mask); + prefixlen = connman_ipaddress_calc_netmask_len(subnet_mask); if ((__connman_inet_modify_address(RTM_NEWADDR, NLM_F_REPLACE | NLM_F_ACK, pn->index, AF_INET, -- 1.8.3.1 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman