mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-10-30 20:37:26 +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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Andrew Zaborowski
						Andrew Zaborowski