diff options
author | Thomas Haller <thaller@redhat.com> | 2022-09-26 21:50:42 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2022-10-06 13:46:18 +0200 |
commit | 844d03bb12d3c3a08bab00066f6d15925dcc638e (patch) | |
tree | 4dce5e2e7549fd49cde747c54e60a096050fb593 | |
parent | 24e2974b16783d38b0d0bfea73386a55ffedb000 (diff) |
libnm: embed address family in NMSettingIPConfigClass for NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY()
The G_TYPE_INSTANCE_GET_CLASS() macro is just one pointer dereference
(self)->g_class, plus additional assertions with debug builds.
As such, it is as fast as it gets. Embed the address family there, and
implement NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY() that way.
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1395
-rw-r--r-- | src/libnm-core-impl/nm-setting-ip-config.c | 29 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-setting-ip4-config.c | 2 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-setting-ip6-config.c | 2 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-setting-private.h | 21 |
4 files changed, 36 insertions, 18 deletions
diff --git a/src/libnm-core-impl/nm-setting-ip-config.c b/src/libnm-core-impl/nm-setting-ip-config.c index a1bdbe364b..a1fad2295d 100644 --- a/src/libnm-core-impl/nm-setting-ip-config.c +++ b/src/libnm-core-impl/nm-setting-ip-config.c @@ -3987,9 +3987,6 @@ _NM_SETTING_IP_CONFIG_GET_PRIVATE(NMSettingIPConfig *self) /*****************************************************************************/ -#define NM_SETTING_IP_CONFIG_GET_FAMILY(setting) \ - (NM_IS_SETTING_IP4_CONFIG(setting) ? AF_INET : AF_INET6) - /** * nm_setting_ip_config_get_method: * @setting: the #NMSettingIPConfig @@ -4061,7 +4058,7 @@ nm_setting_ip_config_add_dns(NMSettingIPConfig *setting, const char *dns) g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), FALSE); - addr_family = NM_SETTING_IP_CONFIG_GET_FAMILY(setting); + addr_family = NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting); if (!valid_ip(addr_family, dns, &dns_bin, NULL)) { g_return_val_if_fail(dns != NULL, FALSE); @@ -4124,7 +4121,7 @@ nm_setting_ip_config_remove_dns_by_value(NMSettingIPConfig *setting, const char g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), FALSE); - addr_family = NM_SETTING_IP_CONFIG_GET_FAMILY(setting); + addr_family = NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting); if (!valid_ip(addr_family, dns, &dns_bin, NULL)) { g_return_val_if_fail(dns != NULL, FALSE); @@ -4604,7 +4601,7 @@ nm_setting_ip_config_add_address(NMSettingIPConfig *setting, NMIPAddress *addres g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), FALSE); g_return_val_if_fail(address != NULL, FALSE); - g_return_val_if_fail(address->family == NM_SETTING_IP_CONFIG_GET_FAMILY(setting), FALSE); + g_return_val_if_fail(address->family == NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), FALSE); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); for (i = 0; i < priv->addresses->len; i++) { @@ -4761,7 +4758,7 @@ nm_setting_ip_config_add_route(NMSettingIPConfig *setting, NMIPRoute *route) g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), FALSE); g_return_val_if_fail(route != NULL, FALSE); - g_return_val_if_fail(route->family == NM_SETTING_IP_CONFIG_GET_FAMILY(setting), FALSE); + g_return_val_if_fail(route->family == NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), FALSE); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); for (i = 0; i < priv->routes->len; i++) { @@ -4957,7 +4954,7 @@ nm_setting_ip_config_add_routing_rule(NMSettingIPConfig *setting, NMIPRoutingRul g_return_if_fail(NM_IS_SETTING_IP_CONFIG(setting)); g_return_if_fail(NM_IS_IP_ROUTING_RULE(routing_rule, TRUE)); g_return_if_fail(_ip_routing_rule_get_addr_family(routing_rule) - == NM_SETTING_IP_CONFIG_GET_FAMILY(setting)); + == NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting)); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); @@ -5439,7 +5436,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) for (i = 0; i < priv->dns->len; i++) { const char *dns = priv->dns->pdata[i]; - if (!nm_inet_is_valid(NM_SETTING_IP_CONFIG_GET_FAMILY(setting), dns)) { + if (!nm_inet_is_valid(NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), dns)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -5458,7 +5455,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) NMIPAddress *addr = (NMIPAddress *) priv->addresses->pdata[i]; GVariant *label; - if (nm_ip_address_get_family(addr) != NM_SETTING_IP_CONFIG_GET_FAMILY(setting)) { + if (nm_ip_address_get_family(addr) != NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -5515,7 +5512,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) return FALSE; } - if (!nm_inet_is_valid(NM_SETTING_IP_CONFIG_GET_FAMILY(setting), priv->gateway)) { + if (!nm_inet_is_valid(NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), priv->gateway)) { g_set_error_literal(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -5533,7 +5530,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) gs_free_error GError *local = NULL; NMIPRoute *route = (NMIPRoute *) priv->routes->pdata[i]; - if (nm_ip_route_get_family(route) != NM_SETTING_IP_CONFIG_GET_FAMILY(setting)) { + if (nm_ip_route_get_family(route) != NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -5566,7 +5563,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) gs_free_error GError *local = NULL; if (_ip_routing_rule_get_addr_family(rule) - != NM_SETTING_IP_CONFIG_GET_FAMILY(setting)) { + != NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -5623,7 +5620,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) if (priv->dhcp_hostname_flags != (NMDhcpHostnameFlags) priv->dhcp_hostname_flags || !_nm_utils_validate_dhcp_hostname_flags(priv->dhcp_hostname_flags, - NM_SETTING_IP_CONFIG_GET_FAMILY(setting), + NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), error)) { g_prefix_error(error, "%s.%s: ", @@ -5634,7 +5631,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) /* Validate reject servers */ if (priv->dhcp_reject_servers && priv->dhcp_reject_servers->len != 0) { - if (NM_SETTING_IP_CONFIG_GET_FAMILY(setting) != AF_INET) { + if (NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting) != AF_INET) { g_set_error_literal(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -5648,7 +5645,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) for (i = 0; i < priv->dhcp_reject_servers->len; i++) { if (!nm_inet_parse_with_prefix_str( - NM_SETTING_IP_CONFIG_GET_FAMILY(setting), + NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), nm_g_array_index(priv->dhcp_reject_servers, const char *, i), NULL, NULL)) { diff --git a/src/libnm-core-impl/nm-setting-ip4-config.c b/src/libnm-core-impl/nm-setting-ip4-config.c index d1aa72ae25..27f500557a 100644 --- a/src/libnm-core-impl/nm-setting-ip4-config.c +++ b/src/libnm-core-impl/nm-setting-ip4-config.c @@ -620,6 +620,8 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) setting_class->verify = verify; setting_ip_config_class->private_offset = g_type_class_get_instance_private_offset(klass); + setting_ip_config_class->is_ipv4 = TRUE; + setting_ip_config_class->addr_family = AF_INET; /* ---ifcfg-rh--- * property: method diff --git a/src/libnm-core-impl/nm-setting-ip6-config.c b/src/libnm-core-impl/nm-setting-ip6-config.c index 01b6855ef2..e91d9ec4bf 100644 --- a/src/libnm-core-impl/nm-setting-ip6-config.c +++ b/src/libnm-core-impl/nm-setting-ip6-config.c @@ -559,6 +559,8 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) setting_class->verify = verify; setting_ip_config_class->private_offset = g_type_class_get_instance_private_offset(klass); + setting_ip_config_class->is_ipv4 = FALSE; + setting_ip_config_class->addr_family = AF_INET6; /* ---ifcfg-rh--- * property: method diff --git a/src/libnm-core-impl/nm-setting-private.h b/src/libnm-core-impl/nm-setting-private.h index 221a527e12..99b31f354c 100644 --- a/src/libnm-core-impl/nm-setting-private.h +++ b/src/libnm-core-impl/nm-setting-private.h @@ -165,11 +165,23 @@ struct _NMSettingIPConfigClass { NMSettingClass parent; /* In the past, this struct was public API. Preserve ABI! */ + union { - gpointer _dummy; + gpointer _dummy1; int private_offset; }; - gpointer padding[7]; + + union { + gpointer _dummy2; + gint8 addr_family; + }; + + union { + gpointer _dummy3; + bool is_ipv4; + }; + + gpointer padding[5]; }; typedef struct { @@ -200,6 +212,11 @@ typedef struct { void _nm_setting_ip_config_private_init(gpointer self, NMSettingIPConfigPrivate *priv); +#define NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting) \ + (NM_SETTING_IP_CONFIG_GET_CLASS(setting)->addr_family) + +#define NM_SETTING_IP_CONFIG_IS_IPv4(setting) (NM_SETTING_IP_CONFIG_GET_CLASS(setting)->is_ipv4) + /*****************************************************************************/ NMSettingPriority _nm_setting_get_base_type_priority(NMSetting *setting); |