mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-25 09:39:25 +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(
|
static struct l_rtnl_address *netconfig_get_static4_address(
|
||||||
const struct l_settings *active_settings)
|
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 *, ip) = NULL;
|
||||||
L_AUTO_FREE_VAR(char *, netmask) = NULL;
|
L_AUTO_FREE_VAR(char *, netmask) = NULL;
|
||||||
struct in_addr in_addr;
|
struct in_addr in_addr;
|
||||||
@ -153,13 +153,22 @@ static struct l_rtnl_address *netconfig_get_static4_address(
|
|||||||
uint32_t prefix_len;
|
uint32_t prefix_len;
|
||||||
|
|
||||||
ip = l_settings_get_string(active_settings, "IPv4", "Address");
|
ip = l_settings_get_string(active_settings, "IPv4", "Address");
|
||||||
if (!ip)
|
if (unlikely(!ip)) {
|
||||||
|
l_error("netconfig: Can't load IPv4.Address");
|
||||||
return NULL;
|
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 (netmask) {
|
||||||
if (inet_pton(AF_INET, netmask, &in_addr) != 1) {
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,14 +176,14 @@ static struct l_rtnl_address *netconfig_get_static4_address(
|
|||||||
|
|
||||||
if (ntohl(in_addr.s_addr) !=
|
if (ntohl(in_addr.s_addr) !=
|
||||||
util_netmask_from_prefix(prefix_len)) {
|
util_netmask_from_prefix(prefix_len)) {
|
||||||
l_error("netconfig: Invalid IPv4 Netmask");
|
l_error("netconfig: Invalid IPv4.Netmask");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
prefix_len = 24;
|
prefix_len = 24;
|
||||||
|
|
||||||
ifaddr = l_rtnl_address_new(ip, prefix_len);
|
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");
|
l_error("netconfig: Unable to parse IPv4.Address");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -182,12 +191,10 @@ static struct l_rtnl_address *netconfig_get_static4_address(
|
|||||||
broadcast = l_settings_get_string(active_settings, "IPv4", "Broadcast");
|
broadcast = l_settings_get_string(active_settings, "IPv4", "Broadcast");
|
||||||
if (broadcast && !l_rtnl_address_set_broadcast(ifaddr, broadcast)) {
|
if (broadcast && !l_rtnl_address_set_broadcast(ifaddr, broadcast)) {
|
||||||
l_error("netconfig: Unable to parse IPv4.Broadcast");
|
l_error("netconfig: Unable to parse IPv4.Broadcast");
|
||||||
l_rtnl_address_free(ifaddr);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
l_rtnl_address_set_noprefixroute(ifaddr, true);
|
return l_steal_ptr(ifaddr);
|
||||||
return ifaddr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct l_rtnl_address *netconfig_get_static6_address(
|
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);
|
L_AUTO_FREE_VAR(char *, ip);
|
||||||
char *p;
|
char *p;
|
||||||
char *endp;
|
char *endp;
|
||||||
struct l_rtnl_address *ret;
|
_auto_(l_rtnl_address_free) struct l_rtnl_address *ret = NULL;
|
||||||
uint32_t prefix_len = 128;
|
uint32_t prefix_len = 64;
|
||||||
|
|
||||||
ip = l_settings_get_string(active_settings, "IPv6", "Address");
|
ip = l_settings_get_string(active_settings, "IPv6", "Address");
|
||||||
if (!ip)
|
if (unlikely(!ip)) {
|
||||||
|
l_error("netconfig: Can't load IPv6.Address");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
p = strrchr(ip, '/');
|
p = strrchr(ip, '/');
|
||||||
if (!p)
|
if (!p)
|
||||||
@ -222,11 +231,13 @@ static struct l_rtnl_address *netconfig_get_static6_address(
|
|||||||
|
|
||||||
no_prefix_len:
|
no_prefix_len:
|
||||||
ret = l_rtnl_address_new(ip, prefix_len);
|
ret = l_rtnl_address_new(ip, prefix_len);
|
||||||
if (!ret)
|
if (!ret || l_rtnl_address_get_family(ret) != AF_INET6) {
|
||||||
l_error("netconfig: Invalid IPv6 address %s is "
|
l_error("netconfig: Invalid IPv6 address %s provided in "
|
||||||
"provided in network configuration file.", ip);
|
"network configuration file.", ip);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return l_steal_ptr(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void netconfig_gateway_to_arp(struct netconfig *netconfig)
|
static void netconfig_gateway_to_arp(struct netconfig *netconfig)
|
||||||
|
Loading…
Reference in New Issue
Block a user