mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-28 21:19:24 +01:00
netconfig: Clean up netconfig_get_static{4,6}_address
* make the error handling simpler, * make error messages more consistent, * validate address families, * for IPv4 skip l_rtnl_address_set_noprefixroute() as l_netconfig will do this internally as needed. * for IPv6 set the default prefix length to 64 as that's going to be used for the local prefix route's prefix length and is a more practical value.
This commit is contained in:
parent
b0b1a46779
commit
98ba09562e
@ -145,7 +145,7 @@ static void netconfig_set_neighbor_entry_cb(int error,
|
||||
static struct l_rtnl_address *netconfig_get_static4_address(
|
||||
const struct l_settings *active_settings)
|
||||
{
|
||||
struct l_rtnl_address *ifaddr = NULL;
|
||||
_auto_(l_rtnl_address_free) struct l_rtnl_address *ifaddr = NULL;
|
||||
L_AUTO_FREE_VAR(char *, ip) = NULL;
|
||||
L_AUTO_FREE_VAR(char *, netmask) = NULL;
|
||||
struct in_addr in_addr;
|
||||
@ -153,13 +153,22 @@ static struct l_rtnl_address *netconfig_get_static4_address(
|
||||
uint32_t prefix_len;
|
||||
|
||||
ip = l_settings_get_string(active_settings, "IPv4", "Address");
|
||||
if (!ip)
|
||||
if (unlikely(!ip)) {
|
||||
l_error("netconfig: Can't load IPv4.Address");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (l_settings_has_key(active_settings, "IPv4", "Netmask") &&
|
||||
!(netmask = l_settings_get_string(active_settings,
|
||||
"IPv4",
|
||||
"Netmask"))) {
|
||||
l_error("netconfig: Can't load IPv4.Netmask");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
netmask = l_settings_get_string(active_settings, "IPv4", "Netmask");
|
||||
if (netmask) {
|
||||
if (inet_pton(AF_INET, netmask, &in_addr) != 1) {
|
||||
l_error("netconfig: Can't parse IPv4 Netmask");
|
||||
l_error("netconfig: Can't parse IPv4.Netmask");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -167,14 +176,14 @@ static struct l_rtnl_address *netconfig_get_static4_address(
|
||||
|
||||
if (ntohl(in_addr.s_addr) !=
|
||||
util_netmask_from_prefix(prefix_len)) {
|
||||
l_error("netconfig: Invalid IPv4 Netmask");
|
||||
l_error("netconfig: Invalid IPv4.Netmask");
|
||||
return NULL;
|
||||
}
|
||||
} else
|
||||
prefix_len = 24;
|
||||
|
||||
ifaddr = l_rtnl_address_new(ip, prefix_len);
|
||||
if (!ifaddr) {
|
||||
if (!ifaddr || l_rtnl_address_get_family(ifaddr) != AF_INET) {
|
||||
l_error("netconfig: Unable to parse IPv4.Address");
|
||||
return NULL;
|
||||
}
|
||||
@ -182,12 +191,10 @@ static struct l_rtnl_address *netconfig_get_static4_address(
|
||||
broadcast = l_settings_get_string(active_settings, "IPv4", "Broadcast");
|
||||
if (broadcast && !l_rtnl_address_set_broadcast(ifaddr, broadcast)) {
|
||||
l_error("netconfig: Unable to parse IPv4.Broadcast");
|
||||
l_rtnl_address_free(ifaddr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
l_rtnl_address_set_noprefixroute(ifaddr, true);
|
||||
return ifaddr;
|
||||
return l_steal_ptr(ifaddr);
|
||||
}
|
||||
|
||||
static struct l_rtnl_address *netconfig_get_static6_address(
|
||||
@ -196,12 +203,14 @@ static struct l_rtnl_address *netconfig_get_static6_address(
|
||||
L_AUTO_FREE_VAR(char *, ip);
|
||||
char *p;
|
||||
char *endp;
|
||||
struct l_rtnl_address *ret;
|
||||
uint32_t prefix_len = 128;
|
||||
_auto_(l_rtnl_address_free) struct l_rtnl_address *ret = NULL;
|
||||
uint32_t prefix_len = 64;
|
||||
|
||||
ip = l_settings_get_string(active_settings, "IPv6", "Address");
|
||||
if (!ip)
|
||||
if (unlikely(!ip)) {
|
||||
l_error("netconfig: Can't load IPv6.Address");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
p = strrchr(ip, '/');
|
||||
if (!p)
|
||||
@ -222,11 +231,13 @@ static struct l_rtnl_address *netconfig_get_static6_address(
|
||||
|
||||
no_prefix_len:
|
||||
ret = l_rtnl_address_new(ip, prefix_len);
|
||||
if (!ret)
|
||||
l_error("netconfig: Invalid IPv6 address %s is "
|
||||
"provided in network configuration file.", ip);
|
||||
if (!ret || l_rtnl_address_get_family(ret) != AF_INET6) {
|
||||
l_error("netconfig: Invalid IPv6 address %s provided in "
|
||||
"network configuration file.", ip);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return l_steal_ptr(ret);
|
||||
}
|
||||
|
||||
static void netconfig_gateway_to_arp(struct netconfig *netconfig)
|
||||
|
Loading…
Reference in New Issue
Block a user