libnm: let direct string property support AF_UNSPEC for normalizing IP addresses

This commit is contained in:
Thomas Haller
2022-01-05 13:16:33 +01:00
parent adf7a742b4
commit 1f58244268
4 changed files with 13 additions and 4 deletions

View File

@@ -5788,7 +5788,7 @@ _nm_sett_info_property_override_create_array_ip_config(int addr_family)
.to_dbus_fcn = _nm_setting_property_to_dbus_fcn_direct,
.from_dbus_fcn = _nm_setting_property_from_dbus_fcn_direct_ip_config_gateway),
.direct_offset = NM_STRUCT_OFFSET_ENSURE_TYPE(char *, NMSettingIPConfigPrivate, gateway),
.direct_set_string_ip_address_addr_family = addr_family);
.direct_set_string_ip_address_addr_family = addr_family + 1);
_nm_properties_override_gobj(
properties_override,

View File

@@ -668,7 +668,7 @@ _property_direct_set_string(const NMSettInfoProperty *property_info, char **dst,
}
if (property_info->direct_set_string_ip_address_addr_family != 0) {
s = _nm_utils_ipaddr_canonical_or_invalid(
property_info->direct_set_string_ip_address_addr_family,
property_info->direct_set_string_ip_address_addr_family - 1,
src);
goto out_take;
}

View File

@@ -4585,6 +4585,13 @@ test_setting_metadata(void)
+ (!!sip->direct_set_string_ascii_strdown)
+ (sip->direct_set_string_ip_address_addr_family != 0);
G_STATIC_ASSERT_EXPR(AF_UNSPEC + 1 != 0);
g_assert(NM_IN_SET((int) sip->direct_set_string_ip_address_addr_family,
0,
AF_UNSPEC + 1,
AF_INET + 1,
AF_INET6 + 1));
/* currently, we have no cases where special options are mixed. There is no problem to support
* that, but as it's not needed, don't do it for now. */
g_assert_cmpint(n_special_options, <=, 1);

View File

@@ -767,8 +767,10 @@ struct _NMSettInfoProperty {
* MAC address length. */
guint8 direct_set_string_mac_address_len : 5;
/* If non-zero, this is the addr-family (AF_INET/AF_INET6) for normalizing an IP
* address. */
/* If non-zero, this is the addr-family (AF_UNSPEC/AF_INET/AF_INET6) for normalizing an IP
* address. Note that AF_UNSPEC is zero, so to differentiate between zero and AF_UNSPEC
* this value is actually the address family + 1. So either zero or AF_UNSPEC+1, AF_INET+1,
* or AF_INET6+1. */
guint8 direct_set_string_ip_address_addr_family : 5;
/* Usually, properties that are set to the default value for the GParamSpec