diff options
| author | Michael Biebl <biebl@debian.org> | 2021-10-01 23:05:04 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2021-10-01 23:05:04 +0200 |
| commit | e74c568b07b50b97873fb4ee1d776dedefbd54d6 (patch) | |
| tree | 3469f17ea9af91f7ff169b890633bda68b0cf76e /libnm/nm-ip-config.c | |
| parent | bfe522304da217296e2a61040f58e35ec5d6f3f2 (diff) | |
New upstream version 1.32.12 upstream/1.32.12
Diffstat (limited to 'libnm/nm-ip-config.c')
| -rw-r--r-- | libnm/nm-ip-config.c | 644 |
1 files changed, 0 insertions, 644 deletions
diff --git a/libnm/nm-ip-config.c b/libnm/nm-ip-config.c deleted file mode 100644 index 1663c622..00000000 --- a/libnm/nm-ip-config.c +++ /dev/null @@ -1,644 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2007 - 2011 Novell, Inc. - * Copyright (C) 2008 - 2014 Red Hat, Inc. - */ - -#include "libnm/nm-default-libnm.h" - -#include "nm-ip-config.h" - -#include "nm-ip4-config.h" -#include "nm-ip6-config.h" -#include "nm-setting-ip-config.h" -#include "nm-dbus-interface.h" -#include "nm-object-private.h" -#include "nm-utils.h" -#include "nm-core-internal.h" - -/*****************************************************************************/ - -NM_GOBJECT_PROPERTIES_DEFINE(NMIPConfig, - PROP_FAMILY, - PROP_GATEWAY, - PROP_ADDRESSES, - PROP_ROUTES, - PROP_NAMESERVERS, - PROP_DOMAINS, - PROP_SEARCHES, - PROP_WINS_SERVERS, ); - -typedef struct _NMIPConfigPrivate { - GPtrArray *addresses; - GPtrArray *routes; - char ** nameservers; - char ** domains; - char ** searches; - char ** wins_servers; - char * gateway; - - bool addresses_new_style : 1; - bool routes_new_style : 1; - bool nameservers_new_style : 1; - bool wins_servers_new_style : 1; -} NMIPConfigPrivate; - -G_DEFINE_ABSTRACT_TYPE(NMIPConfig, nm_ip_config, NM_TYPE_OBJECT) - -#define NM_IP_CONFIG_GET_PRIVATE(self) \ - _NM_GET_PRIVATE_PTR(self, NMIPConfig, NM_IS_IP_CONFIG, NMObject) - -/*****************************************************************************/ - -static NMLDBusNotifyUpdatePropFlags -_notify_update_prop_addresses(NMClient * client, - NMLDBusObject * dbobj, - const NMLDBusMetaIface *meta_iface, - guint dbus_property_idx, - GVariant * value) -{ - NMIPConfig * self = NM_IP_CONFIG(dbobj->nmobj); - NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(self); - gs_unref_ptrarray GPtrArray *addresses_old = NULL; - gs_unref_ptrarray GPtrArray *addresses_new = NULL; - int addr_family = meta_iface == &_nml_dbus_meta_iface_nm_ip4config ? AF_INET : AF_INET6; - gboolean new_style; - - new_style = - (((const char *) meta_iface->dbus_properties[dbus_property_idx].dbus_type)[2] == '{'); - - if (priv->addresses_new_style) { - if (!new_style) - return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NONE; - } else - priv->addresses_new_style = new_style; - - if (value) { - if (new_style) - addresses_new = nm_utils_ip_addresses_from_variant(value, addr_family); - else if (addr_family == AF_INET) - addresses_new = nm_utils_ip4_addresses_from_variant(value, NULL); - else - addresses_new = nm_utils_ip6_addresses_from_variant(value, NULL); - nm_assert(addresses_new); - } - if (!addresses_new) - addresses_new = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); - - addresses_old = priv->addresses; - priv->addresses = g_steal_pointer(&addresses_new); - return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NOTIFY; -} - -static NMLDBusNotifyUpdatePropFlags -_notify_update_prop_routes(NMClient * client, - NMLDBusObject * dbobj, - const NMLDBusMetaIface *meta_iface, - guint dbus_property_idx, - GVariant * value) -{ - NMIPConfig * self = NM_IP_CONFIG(dbobj->nmobj); - NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(self); - gs_unref_ptrarray GPtrArray *routes_old = NULL; - gs_unref_ptrarray GPtrArray *routes_new = NULL; - int addr_family = meta_iface == &_nml_dbus_meta_iface_nm_ip4config ? AF_INET : AF_INET6; - gboolean new_style; - - new_style = - (((const char *) meta_iface->dbus_properties[dbus_property_idx].dbus_type)[2] == '{'); - - if (priv->routes_new_style) { - if (!new_style) - return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NONE; - } else - priv->routes_new_style = new_style; - - if (value) { - if (new_style) - routes_new = nm_utils_ip_routes_from_variant(value, addr_family); - else if (addr_family == AF_INET) - routes_new = nm_utils_ip4_routes_from_variant(value); - else - routes_new = nm_utils_ip6_routes_from_variant(value); - nm_assert(routes_new); - } - if (!routes_new) - routes_new = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_route_unref); - - routes_old = priv->routes; - priv->routes = g_steal_pointer(&routes_new); - return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NOTIFY; -} - -static NMLDBusNotifyUpdatePropFlags -_notify_update_prop_nameservers(NMClient * client, - NMLDBusObject * dbobj, - const NMLDBusMetaIface *meta_iface, - guint dbus_property_idx, - GVariant * value) -{ - NMIPConfig * self = NM_IP_CONFIG(dbobj->nmobj); - NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(self); - gs_strfreev char **nameservers_new = NULL; - gboolean new_style = TRUE; - int addr_family = meta_iface == &_nml_dbus_meta_iface_nm_ip4config ? AF_INET : AF_INET6; - - if (addr_family == AF_INET) { - new_style = - (((const char *) meta_iface->dbus_properties[dbus_property_idx].dbus_type)[1] == 'a'); - - if (priv->nameservers_new_style) { - if (!new_style) - return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NONE; - } else - priv->nameservers_new_style = new_style; - } - - if (value) { - if (addr_family == AF_INET6) - nameservers_new = nm_utils_ip6_dns_from_variant(value); - else if (!new_style) - nameservers_new = nm_utils_ip4_dns_from_variant(value); - else { - GVariantIter iter; - GVariantIter * iter_v; - gs_unref_ptrarray GPtrArray *arr = NULL; - - g_variant_iter_init(&iter, value); - while (g_variant_iter_next(&iter, "a{sv}", &iter_v)) { - const char *key; - GVariant * val; - - while (g_variant_iter_next(iter_v, "{&sv}", &key, &val)) { - if (nm_streq(key, "address")) { - gs_free char *val_str = NULL; - - if (!g_variant_is_of_type(val, G_VARIANT_TYPE_STRING)) - goto next; - if (!nm_utils_parse_inaddr(AF_INET, - g_variant_get_string(val, NULL), - &val_str)) - goto next; - if (!arr) - arr = g_ptr_array_new(); - g_ptr_array_add(arr, g_steal_pointer(&val_str)); - goto next; - } -next: - g_variant_unref(val); - } - g_variant_iter_free(iter_v); - } - if (arr && arr->len > 0) - nameservers_new = nm_utils_strv_dup((char **) arr->pdata, arr->len, FALSE); - else - nameservers_new = g_new0(char *, 1); - } - nm_assert(nameservers_new); - } - - g_strfreev(priv->nameservers); - priv->nameservers = g_steal_pointer(&nameservers_new); - return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NOTIFY; -} - -static NMLDBusNotifyUpdatePropFlags -_notify_update_prop_wins_servers(NMClient * client, - NMLDBusObject * dbobj, - const NMLDBusMetaIface *meta_iface, - guint dbus_property_idx, - GVariant * value) -{ - NMIPConfig * self = NM_IP_CONFIG(dbobj->nmobj); - NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(self); - gs_strfreev char **wins_servers_new = NULL; - gboolean new_style; - - new_style = - (((const char *) meta_iface->dbus_properties[dbus_property_idx].dbus_type)[1] == 's'); - - if (priv->wins_servers_new_style) { - if (!new_style) - return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NONE; - } else - priv->wins_servers_new_style = new_style; - - if (value) { - if (new_style) - wins_servers_new = g_variant_dup_strv(value, NULL); - else - wins_servers_new = nm_utils_ip4_dns_from_variant(value); - nm_assert(wins_servers_new); - } - - g_strfreev(priv->wins_servers); - priv->wins_servers = g_steal_pointer(&wins_servers_new); - return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NOTIFY; -} - -/*****************************************************************************/ - -static void -get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -{ - NMIPConfig *self = NM_IP_CONFIG(object); - - switch (prop_id) { - case PROP_FAMILY: - g_value_set_int(value, nm_ip_config_get_family(self)); - break; - case PROP_GATEWAY: - g_value_set_string(value, nm_ip_config_get_gateway(self)); - break; - case PROP_ADDRESSES: - g_value_take_boxed(value, - _nm_utils_copy_array(nm_ip_config_get_addresses(self), - (NMUtilsCopyFunc) nm_ip_address_dup, - (GDestroyNotify) nm_ip_address_unref)); - break; - case PROP_ROUTES: - g_value_take_boxed(value, - _nm_utils_copy_array(nm_ip_config_get_routes(self), - (NMUtilsCopyFunc) nm_ip_route_dup, - (GDestroyNotify) nm_ip_route_unref)); - break; - case PROP_NAMESERVERS: - g_value_set_boxed(value, (char **) nm_ip_config_get_nameservers(self)); - break; - case PROP_DOMAINS: - g_value_set_boxed(value, (char **) nm_ip_config_get_domains(self)); - break; - case PROP_SEARCHES: - g_value_set_boxed(value, (char **) nm_ip_config_get_searches(self)); - break; - case PROP_WINS_SERVERS: - g_value_set_boxed(value, (char **) nm_ip_config_get_wins_servers(self)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } -} - -/*****************************************************************************/ - -static void -nm_ip_config_init(NMIPConfig *self) -{ - NMIPConfigPrivate *priv; - - priv = G_TYPE_INSTANCE_GET_PRIVATE(self, NM_TYPE_IP_CONFIG, NMIPConfigPrivate); - - self->_priv = priv; - - priv->addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); - priv->routes = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_route_unref); -} - -static void -finalize(GObject *object) -{ - NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(object); - - g_free(priv->gateway); - - g_ptr_array_unref(priv->routes); - g_ptr_array_unref(priv->addresses); - - g_strfreev(priv->nameservers); - g_strfreev(priv->domains); - g_strfreev(priv->searches); - g_strfreev(priv->wins_servers); - - G_OBJECT_CLASS(nm_ip_config_parent_class)->finalize(object); -} - -const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip4config = NML_DBUS_META_IFACE_INIT_PROP( - NM_DBUS_INTERFACE_IP4_CONFIG, - nm_ip4_config_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, - NML_DBUS_META_IFACE_DBUS_PROPERTIES( - NML_DBUS_META_PROPERTY_INIT_FCN("AddressData", - PROP_ADDRESSES, - "aa{sv}", - _notify_update_prop_addresses), - NML_DBUS_META_PROPERTY_INIT_FCN("Addresses", - PROP_ADDRESSES, - "aau", - _notify_update_prop_addresses, - .obj_property_no_reverse_idx = TRUE), - NML_DBUS_META_PROPERTY_INIT_TODO("DnsOptions", "as"), - NML_DBUS_META_PROPERTY_INIT_TODO("DnsPriority", "i"), - NML_DBUS_META_PROPERTY_INIT_AS("Domains", PROP_DOMAINS, NMIPConfigPrivate, domains), - NML_DBUS_META_PROPERTY_INIT_S("Gateway", PROP_GATEWAY, NMIPConfigPrivate, gateway), - NML_DBUS_META_PROPERTY_INIT_FCN("NameserverData", - PROP_NAMESERVERS, - "aa{sv}", - _notify_update_prop_nameservers), - NML_DBUS_META_PROPERTY_INIT_FCN("Nameservers", - PROP_NAMESERVERS, - "au", - _notify_update_prop_nameservers, - .obj_property_no_reverse_idx = TRUE), - NML_DBUS_META_PROPERTY_INIT_FCN("RouteData", - PROP_ROUTES, - "aa{sv}", - _notify_update_prop_routes), - NML_DBUS_META_PROPERTY_INIT_FCN("Routes", - PROP_ROUTES, - "aau", - _notify_update_prop_routes, - .obj_property_no_reverse_idx = TRUE), - NML_DBUS_META_PROPERTY_INIT_AS("Searches", PROP_SEARCHES, NMIPConfigPrivate, searches), - NML_DBUS_META_PROPERTY_INIT_FCN("WinsServerData", - PROP_WINS_SERVERS, - "as", - _notify_update_prop_wins_servers), - NML_DBUS_META_PROPERTY_INIT_FCN("WinsServers", - PROP_WINS_SERVERS, - "au", - _notify_update_prop_wins_servers, - .obj_property_no_reverse_idx = TRUE), ), - .base_struct_offset = G_STRUCT_OFFSET(NMIPConfig, _priv), ); - -const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip6config = NML_DBUS_META_IFACE_INIT_PROP( - NM_DBUS_INTERFACE_IP6_CONFIG, - nm_ip6_config_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, - NML_DBUS_META_IFACE_DBUS_PROPERTIES( - NML_DBUS_META_PROPERTY_INIT_FCN("AddressData", - PROP_ADDRESSES, - "aa{sv}", - _notify_update_prop_addresses), - NML_DBUS_META_PROPERTY_INIT_FCN("Addresses", - PROP_ADDRESSES, - "a(ayuay)", - _notify_update_prop_addresses, - .obj_property_no_reverse_idx = TRUE), - NML_DBUS_META_PROPERTY_INIT_TODO("DnsOptions", "as"), - NML_DBUS_META_PROPERTY_INIT_TODO("DnsPriority", "i"), - NML_DBUS_META_PROPERTY_INIT_AS("Domains", PROP_DOMAINS, NMIPConfigPrivate, domains), - NML_DBUS_META_PROPERTY_INIT_S("Gateway", PROP_GATEWAY, NMIPConfigPrivate, gateway), - NML_DBUS_META_PROPERTY_INIT_FCN("Nameservers", - PROP_NAMESERVERS, - "aay", - _notify_update_prop_nameservers), - NML_DBUS_META_PROPERTY_INIT_FCN("RouteData", - PROP_ROUTES, - "aa{sv}", - _notify_update_prop_routes), - NML_DBUS_META_PROPERTY_INIT_FCN("Routes", - PROP_ROUTES, - "a(ayuayu)", - _notify_update_prop_routes, - .obj_property_no_reverse_idx = TRUE), - NML_DBUS_META_PROPERTY_INIT_AS("Searches", PROP_SEARCHES, NMIPConfigPrivate, searches), ), - .base_struct_offset = G_STRUCT_OFFSET(NMIPConfig, _priv), ); - -static void -nm_ip_config_class_init(NMIPConfigClass *config_class) -{ - GObjectClass *object_class = G_OBJECT_CLASS(config_class); - - g_type_class_add_private(config_class, sizeof(NMIPConfigPrivate)); - - object_class->get_property = get_property; - object_class->finalize = finalize; - - /** - * NMIPConfig:family: - * - * The IP address family of the configuration; either - * <literal>AF_INET</literal> or <literal>AF_INET6</literal>. - **/ - obj_properties[PROP_FAMILY] = g_param_spec_int(NM_IP_CONFIG_FAMILY, - "", - "", - 0, - 255, - AF_UNSPEC, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - - /** - * NMIPConfig:gateway: - * - * The IP gateway address of the configuration as string. - **/ - obj_properties[PROP_GATEWAY] = g_param_spec_string(NM_IP_CONFIG_GATEWAY, - "", - "", - NULL, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - - /** - * NMIPConfig:addresses: - * - * A #GPtrArray containing the addresses (#NMIPAddress) of the configuration. - **/ - obj_properties[PROP_ADDRESSES] = g_param_spec_boxed(NM_IP_CONFIG_ADDRESSES, - "", - "", - G_TYPE_PTR_ARRAY, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - - /** - * NMIPConfig:routes: (type GPtrArray(NMIPRoute)) - * - * A #GPtrArray containing the routes (#NMIPRoute) of the configuration. - **/ - obj_properties[PROP_ROUTES] = g_param_spec_boxed(NM_IP_CONFIG_ROUTES, - "", - "", - G_TYPE_PTR_ARRAY, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - - /** - * NMIPConfig:nameservers: - * - * The array containing name server IP addresses of the configuration. - **/ - obj_properties[PROP_NAMESERVERS] = - g_param_spec_boxed(NM_IP_CONFIG_NAMESERVERS, - "", - "", - G_TYPE_STRV, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - - /** - * NMIPConfig:domains: - * - * The array containing domain strings of the configuration. - **/ - obj_properties[PROP_DOMAINS] = g_param_spec_boxed(NM_IP_CONFIG_DOMAINS, - "", - "", - G_TYPE_STRV, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - - /** - * NMIPConfig:searches: - * - * The array containing DNS search strings of the configuration. - **/ - obj_properties[PROP_SEARCHES] = g_param_spec_boxed(NM_IP_CONFIG_SEARCHES, - "", - "", - G_TYPE_STRV, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - - /** - * NMIPConfig:wins-servers: - * - * The array containing WINS server IP addresses of the configuration. - * (This will always be empty for IPv6 configurations.) - **/ - obj_properties[PROP_WINS_SERVERS] = - g_param_spec_boxed(NM_IP_CONFIG_WINS_SERVERS, - "", - "", - G_TYPE_STRV, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - - _nml_dbus_meta_class_init_with_properties(object_class, - &_nml_dbus_meta_iface_nm_ip4config, - &_nml_dbus_meta_iface_nm_ip6config); -} - -/** - * nm_ip_config_get_family: - * @config: a #NMIPConfig - * - * Gets the IP address family - * - * Returns: the IP address family; either <literal>AF_INET</literal> or - * <literal>AF_INET6</literal> - **/ -int -nm_ip_config_get_family(NMIPConfig *config) -{ - g_return_val_if_fail(NM_IS_IP_CONFIG(config), AF_UNSPEC); - - return NM_IS_IP4_CONFIG(config) ? AF_INET : AF_INET6; -} - -/** - * nm_ip_config_get_gateway: - * @config: a #NMIPConfig - * - * Gets the IP gateway address. - * - * Returns: (transfer none): the IP address of the gateway. - **/ -const char * -nm_ip_config_get_gateway(NMIPConfig *config) -{ - g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); - - return _nml_coerce_property_str_not_empty(NM_IP_CONFIG_GET_PRIVATE(config)->gateway); -} - -/** - * nm_ip_config_get_addresses: - * @config: a #NMIPConfig - * - * Gets the IP addresses (containing the address, prefix, and gateway). - * - * Returns: (element-type NMIPAddress) (transfer none): the #GPtrArray - * containing #NMIPAddress<!-- -->es. This is the internal copy used by the - * configuration and must not be modified. The library never modifies the - * returned array and thus it is safe for callers to reference and keep using it. - **/ -GPtrArray * -nm_ip_config_get_addresses(NMIPConfig *config) -{ - g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); - - return NM_IP_CONFIG_GET_PRIVATE(config)->addresses; -} - -/** - * nm_ip_config_get_nameservers: - * @config: a #NMIPConfig - * - * Gets the domain name servers (DNS). - * - * Returns: (transfer none): the array of nameserver IP addresses - **/ -const char *const * -nm_ip_config_get_nameservers(NMIPConfig *config) -{ - g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); - - return _nml_coerce_property_strv_not_null(NM_IP_CONFIG_GET_PRIVATE(config)->nameservers); -} - -/** - * nm_ip_config_get_domains: - * @config: a #NMIPConfig - * - * Gets the domain names. - * - * Returns: (transfer none): the array of domains. - * (This is never %NULL, though it may be 0-length). - **/ -const char *const * -nm_ip_config_get_domains(NMIPConfig *config) -{ - g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); - - return _nml_coerce_property_strv_not_null(NM_IP_CONFIG_GET_PRIVATE(config)->domains); -} - -/** - * nm_ip_config_get_searches: - * @config: a #NMIPConfig - * - * Gets the DNS searches. - * - * Returns: (transfer none): the array of DNS search strings. - * (This is never %NULL, though it may be 0-length). - **/ -const char *const * -nm_ip_config_get_searches(NMIPConfig *config) -{ - g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); - - return _nml_coerce_property_strv_not_null(NM_IP_CONFIG_GET_PRIVATE(config)->searches); -} - -/** - * nm_ip_config_get_wins_servers: - * @config: a #NMIPConfig - * - * Gets the Windows Internet Name Service servers (WINS). - * - * Returns: (transfer none): the arry of WINS server IP address strings. - * (This is never %NULL, though it may be 0-length.) - **/ -const char *const * -nm_ip_config_get_wins_servers(NMIPConfig *config) -{ - g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); - - return _nml_coerce_property_strv_not_null(NM_IP_CONFIG_GET_PRIVATE(config)->wins_servers); -} - -/** - * nm_ip_config_get_routes: - * @config: a #NMIPConfig - * - * Gets the routes. - * - * Returns: (element-type NMIPRoute) (transfer none): the #GPtrArray containing - * #NMIPRoute<!-- -->s. This is the internal copy used by the configuration, and must - * not be modified. The library never modifies the returned array and thus it is - * safe for callers to reference and keep using it. - * - **/ -GPtrArray * -nm_ip_config_get_routes(NMIPConfig *config) -{ - g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); - - return NM_IP_CONFIG_GET_PRIVATE(config)->routes; -} |