/** * nm_setting_ip4_config_clear_dns_searches: * @setting: the #NMSettingIP4Config * * Removes all configured DNS search domains. **/ void nm_setting_ip4_config_clear_dns_searches (NMSettingIP4Config *setting) { g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting)); nm_utils_slist_free (NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns_search, g_free); NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns_search = NULL; }
/** * nm_setting_ip4_config_get_ignore_auto_routes: * @setting: the #NMSettingIP4Config * * Returns the value contained in the #NMSettingIP4Config:ignore-auto-routes * property. * * Returns: %TRUE if automatically configured (ie via DHCP) routes should be * ignored. **/ gboolean nm_setting_ip4_config_get_ignore_auto_routes (NMSettingIP4Config *setting) { g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->ignore_auto_routes; }
/** * nm_setting_ip4_config_get_dhcp_hostname: * @setting: the #NMSettingIP4Config * * Returns the value contained in the #NMSettingIP4Config:dhcp-hostname * property. * * Returns: the configured hostname to send to the DHCP server **/ const char * nm_setting_ip4_config_get_dhcp_hostname (NMSettingIP4Config *setting) { g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), NULL); return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_hostname; }
/** * nm_setting_ip4_config_get_dhcp_send_hostname: * @setting: the #NMSettingIP4Config * * Returns the value contained in the #NMSettingIP4Config:dhcp-send-hostname * property. * * Returns: %TRUE if NetworkManager should send the machine hostname to the * DHCP server when requesting addresses to allow the server to automatically * update DNS information for this machine. **/ gboolean nm_setting_ip4_config_get_dhcp_send_hostname (NMSettingIP4Config *setting) { g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_send_hostname; }
/** * nm_setting_ip4_config_get_may_fail: * @setting: the #NMSettingIP4Config * * Returns the value contained in the #NMSettingIP4Config:may-fail * property. * * Returns: %TRUE if this connection doesn't require IPv4 addressing to complete * for the connection to succeed. **/ gboolean nm_setting_ip4_config_get_may_fail (NMSettingIP4Config *setting) { g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->may_fail; }
/** * nm_setting_ip4_config_get_num_dns: * @setting: the #NMSettingIP4Config * * Returns: the number of configured DNS servers **/ guint32 nm_setting_ip4_config_get_num_dns (NMSettingIP4Config *setting) { g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), 0); return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns->len; }
/** * nm_setting_ip4_config_get_method: * @setting: the #NMSettingIP4Config * * Returns: the #NMSettingIP4Config:method property of the setting **/ const char * nm_setting_ip4_config_get_method (NMSettingIP4Config *setting) { g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), NULL); return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->method; }
/** * nm_setting_ip4_config_get_num_routes: * @setting: the #NMSettingIP4Config * * Returns: the number of configured routes **/ guint32 nm_setting_ip4_config_get_num_routes (NMSettingIP4Config *setting) { g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), 0); return g_slist_length (NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->routes); }
const char * nm_setting_ip4_config_get_dhcp_client_id (NMSettingIP4Config *setting) { g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_client_id; }
static void nm_setting_ip4_config_init (NMSettingIP4Config *setting) { NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); g_object_set (setting, NM_SETTING_NAME, NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL); priv->dns = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3); }
/** * nm_setting_ip4_config_clear_dns: * @setting: the #NMSettingIP4Config * * Removes all configured DNS servers. **/ void nm_setting_ip4_config_clear_dns (NMSettingIP4Config *setting) { NMSettingIP4ConfigPrivate *priv; g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting)); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); g_array_remove_range (priv->dns, 0, priv->dns->len); }
/** * nm_setting_ip4_config_clear_routes: * @setting: the #NMSettingIP4Config * * Removes all configured routes. **/ void nm_setting_ip4_config_clear_routes (NMSettingIP4Config *setting) { NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting)); nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip4_route_unref); priv->routes = NULL; }
static void finalize (GObject *object) { NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (object); g_free (priv->dhcp_client_id); g_free (priv->dhcp_fqdn); G_OBJECT_CLASS (nm_setting_ip4_config_parent_class)->finalize (object); }
/** * nm_setting_ip4_config_get_dns_search: * @setting: the #NMSettingIP4Config * @i: index number of the DNS search domain to return * * Returns: the DNS search domain at index @i **/ const char * nm_setting_ip4_config_get_dns_search (NMSettingIP4Config *setting, guint32 i) { NMSettingIP4ConfigPrivate *priv; g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), NULL); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); g_return_val_if_fail (i <= g_slist_length (priv->dns_search), NULL); return (const char *) g_slist_nth_data (priv->dns_search, i); }
/** * nm_setting_ip4_config_get_dns: * @setting: the #NMSettingIP4Config * @i: index number of the DNS server to return * * Returns: the IPv4 address (network byte order) of the DNS server at index * @i **/ guint32 nm_setting_ip4_config_get_dns (NMSettingIP4Config *setting, guint32 i) { NMSettingIP4ConfigPrivate *priv; g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), 0); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); g_return_val_if_fail (i <= priv->dns->len, 0); return g_array_index (priv->dns, guint32, i); }
/** * nm_setting_ip4_config_get_route: * @setting: the #NMSettingIP4Config * @i: index number of the route to return * * Returns: the route at index @i **/ NMIP4Route * nm_setting_ip4_config_get_route (NMSettingIP4Config *setting, guint32 i) { NMSettingIP4ConfigPrivate *priv; g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), NULL); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); g_return_val_if_fail (i <= g_slist_length (priv->routes), NULL); return (NMIP4Route *) g_slist_nth_data (priv->routes, i); }
/** * nm_setting_ip4_config_remove_dns: * @setting: the #NMSettingIP4Config * @i: index number of the DNS server to remove * * Removes the DNS server at index @i. **/ void nm_setting_ip4_config_remove_dns (NMSettingIP4Config *setting, guint32 i) { NMSettingIP4ConfigPrivate *priv; g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting)); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); g_return_if_fail (i <= priv->dns->len); g_array_remove_index (priv->dns, i); }
static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { NMSettingIP4Config *setting = NM_SETTING_IP4_CONFIG (object); NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); switch (prop_id) { case PROP_METHOD: g_value_set_string (value, nm_setting_ip4_config_get_method (setting)); break; case PROP_DNS: g_value_set_boxed (value, priv->dns); break; case PROP_DNS_SEARCH: g_value_set_boxed (value, priv->dns_search); break; case PROP_ADDRESSES: nm_utils_ip4_addresses_to_gvalue (priv->addresses, value); break; case PROP_ROUTES: nm_utils_ip4_routes_to_gvalue (priv->routes, value); break; case PROP_IGNORE_AUTO_ROUTES: g_value_set_boolean (value, nm_setting_ip4_config_get_ignore_auto_routes (setting)); break; case PROP_IGNORE_AUTO_DNS: g_value_set_boolean (value, nm_setting_ip4_config_get_ignore_auto_dns (setting)); break; case PROP_DHCP_CLIENT_ID: g_value_set_string (value, nm_setting_ip4_config_get_dhcp_client_id (setting)); break; case PROP_DHCP_SEND_HOSTNAME: g_value_set_boolean (value, nm_setting_ip4_config_get_dhcp_send_hostname (setting)); break; case PROP_DHCP_HOSTNAME: g_value_set_string (value, nm_setting_ip4_config_get_dhcp_hostname (setting)); break; case PROP_NEVER_DEFAULT: g_value_set_boolean (value, priv->never_default); break; case PROP_MAY_FAIL: g_value_set_boolean (value, priv->may_fail); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
/** * nm_setting_ip4_config_remove_dns_search: * @setting: the #NMSettingIP4Config * @i: index number of the DNS search domain * * Removes the DNS search domain at index @i. **/ void nm_setting_ip4_config_remove_dns_search (NMSettingIP4Config *setting, guint32 i) { NMSettingIP4ConfigPrivate *priv; GSList *elt; g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting)); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); elt = g_slist_nth (priv->dns_search, i); g_return_if_fail (elt != NULL); g_free (elt->data); priv->dns_search = g_slist_delete_link (priv->dns_search, elt); }
/** * nm_setting_ip4_config_remove_route: * @setting: the #NMSettingIP4Config * @i: index number of the route * * Removes the route at index @i. **/ void nm_setting_ip4_config_remove_route (NMSettingIP4Config *setting, guint32 i) { NMSettingIP4ConfigPrivate *priv; GSList *elt; g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting)); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); elt = g_slist_nth (priv->routes, i); g_return_if_fail (elt != NULL); nm_ip4_route_unref ((NMIP4Route *) elt->data); priv->routes = g_slist_delete_link (priv->routes, elt); }
static void finalize (GObject *object) { NMSettingIP4Config *self = NM_SETTING_IP4_CONFIG (object); NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (self); g_free (priv->method); g_array_free (priv->dns, TRUE); nm_utils_slist_free (priv->dns_search, g_free); nm_utils_slist_free (priv->addresses, (GDestroyNotify) nm_ip4_address_unref); nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip4_route_unref); G_OBJECT_CLASS (nm_setting_ip4_config_parent_class)->finalize (object); }
/** * nm_setting_ip4_config_add_dns: * @setting: the #NMSettingIP4Config * @dns: the IPv4 address (network byte order) of the DNS server to add * * Adds a new DNS server to the setting. * * Returns: %TRUE if the DNS server was added; %FALSE if the server was already * known **/ gboolean nm_setting_ip4_config_add_dns (NMSettingIP4Config *setting, guint32 dns) { NMSettingIP4ConfigPrivate *priv; int i; g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); for (i = 0; i < priv->dns->len; i++) { if (dns == g_array_index (priv->dns, guint32, i)) return FALSE; } g_array_append_val (priv->dns, dns); return TRUE; }
static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (object); switch (prop_id) { case PROP_DHCP_CLIENT_ID: g_free (priv->dhcp_client_id); priv->dhcp_client_id = g_value_dup_string (value); break; case PROP_DHCP_FQDN: g_free (priv->dhcp_fqdn); priv->dhcp_fqdn = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
/** * nm_setting_ip4_config_add_dns_search: * @setting: the #NMSettingIP4Config * @dns_search: the search domain to add * * Adds a new DNS search domain to the setting. * * Returns: %TRUE if the DNS search domain was added; %FALSE if the search * domain was already known **/ gboolean nm_setting_ip4_config_add_dns_search (NMSettingIP4Config *setting, const char *dns_search) { NMSettingIP4ConfigPrivate *priv; GSList *iter; g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); g_return_val_if_fail (dns_search != NULL, FALSE); g_return_val_if_fail (dns_search[0] != '\0', FALSE); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); for (iter = priv->dns_search; iter; iter = g_slist_next (iter)) { if (!strcmp (dns_search, (char *) iter->data)) return FALSE; } priv->dns_search = g_slist_append (priv->dns_search, g_strdup (dns_search)); return TRUE; }
/** * nm_setting_ip4_config_add_address: * @setting: the #NMSettingIP4Config * @address: the new address to add * * Adds a new IPv4 address and associated information to the setting. The * given address is duplicated internally and is not changed by this function. * * Returns: %TRUE if the address was added; %FALSE if the address was already * known. **/ gboolean nm_setting_ip4_config_add_address (NMSettingIP4Config *setting, NMIP4Address *address) { NMSettingIP4ConfigPrivate *priv; NMIP4Address *copy; GSList *iter; g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); g_return_val_if_fail (address != NULL, FALSE); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); for (iter = priv->addresses; iter; iter = g_slist_next (iter)) { if (nm_ip4_address_compare ((NMIP4Address *) iter->data, address)) return FALSE; } copy = nm_ip4_address_dup (address); g_return_val_if_fail (copy != NULL, FALSE); priv->addresses = g_slist_append (priv->addresses, copy); return TRUE; }
/** * nm_setting_ip4_config_add_route: * @setting: the #NMSettingIP4Config * @route: the route to add * * Adds a new IPv4 route and associated information to the setting. The * given route is duplicated internally and is not changed by this function. * * Returns: %TRUE if the route was added; %FALSE if the route was already known. **/ gboolean nm_setting_ip4_config_add_route (NMSettingIP4Config *setting, NMIP4Route *route) { NMSettingIP4ConfigPrivate *priv; NMIP4Route *copy; GSList *iter; g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); g_return_val_if_fail (route != NULL, FALSE); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); for (iter = priv->routes; iter; iter = g_slist_next (iter)) { if (nm_ip4_route_compare ((NMIP4Route *) iter->data, route)) return FALSE; } copy = nm_ip4_route_dup (route); g_return_val_if_fail (copy != NULL, FALSE); priv->routes = g_slist_append (priv->routes, copy); return TRUE; }
static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { NMSettingIP4Config *setting = NM_SETTING_IP4_CONFIG (object); NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); switch (prop_id) { case PROP_METHOD: g_free (priv->method); priv->method = g_value_dup_string (value); break; case PROP_DNS: g_array_free (priv->dns, TRUE); priv->dns = g_value_dup_boxed (value); if (!priv->dns) priv->dns = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3); break; case PROP_DNS_SEARCH: nm_utils_slist_free (priv->dns_search, g_free); priv->dns_search = g_value_dup_boxed (value); break; case PROP_ADDRESSES: nm_utils_slist_free (priv->addresses, (GDestroyNotify) nm_ip4_address_unref); priv->addresses = nm_utils_ip4_addresses_from_gvalue (value); break; case PROP_ROUTES: nm_utils_slist_free (priv->routes, (GDestroyNotify) nm_ip4_route_unref); priv->routes = nm_utils_ip4_routes_from_gvalue (value); break; case PROP_IGNORE_AUTO_ROUTES: priv->ignore_auto_routes = g_value_get_boolean (value); break; case PROP_IGNORE_AUTO_DNS: priv->ignore_auto_dns = g_value_get_boolean (value); break; case PROP_DHCP_CLIENT_ID: g_free (priv->dhcp_client_id); priv->dhcp_client_id = g_value_dup_string (value); break; case PROP_DHCP_SEND_HOSTNAME: priv->dhcp_send_hostname = g_value_get_boolean (value); break; case PROP_DHCP_HOSTNAME: g_free (priv->dhcp_hostname); priv->dhcp_hostname = g_value_dup_string (value); /* FIXME: Is this a good idea? */ if (priv->dhcp_hostname) priv->dhcp_send_hostname = TRUE; break; case PROP_NEVER_DEFAULT: priv->never_default = g_value_get_boolean (value); break; case PROP_MAY_FAIL: priv->may_fail = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static gboolean verify (NMSetting *setting, GSList *all_settings, GError **error) { NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); GSList *iter; int i; if (!priv->method) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY, NM_SETTING_IP4_CONFIG_METHOD); return FALSE; } if (!strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) { if (!priv->addresses) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY, NM_SETTING_IP4_CONFIG_ADDRESSES); return FALSE; } } else if ( !strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL) || !strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) || !strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) { if (priv->dns && priv->dns->len) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD, NM_SETTING_IP4_CONFIG_DNS); return FALSE; } if (g_slist_length (priv->dns_search)) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD, NM_SETTING_IP4_CONFIG_DNS_SEARCH); return FALSE; } if (g_slist_length (priv->addresses)) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD, NM_SETTING_IP4_CONFIG_ADDRESSES); return FALSE; } } else if (!strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) { /* nothing to do */ } else { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP4_CONFIG_METHOD); return FALSE; } if (priv->dhcp_client_id && !strlen (priv->dhcp_client_id)) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID); return FALSE; } if (priv->dhcp_hostname && !strlen (priv->dhcp_hostname)) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME); return FALSE; } /* Validate addresses */ for (iter = priv->addresses, i = 0; iter; iter = g_slist_next (iter), i++) { NMIP4Address *addr = (NMIP4Address *) iter->data; guint32 prefix = nm_ip4_address_get_prefix (addr); if (!nm_ip4_address_get_address (addr)) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP4_CONFIG_ADDRESSES); return FALSE; } if (!prefix || prefix > 32) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP4_CONFIG_ADDRESSES); return FALSE; } } /* Validate routes */ for (iter = priv->routes, i = 0; iter; iter = g_slist_next (iter), i++) { NMIP4Route *route = (NMIP4Route *) iter->data; guint32 prefix = nm_ip4_route_get_prefix (route); if (!nm_ip4_route_get_dest (route)) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP4_CONFIG_ROUTES); return FALSE; } if (!prefix || prefix > 32) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP4_CONFIG_ROUTES); return FALSE; } } return TRUE; }
static gboolean verify (NMSetting *setting, NMConnection *connection, GError **error) { NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting); NMSettingVerifyResult ret; const char *method; ret = NM_SETTING_CLASS (nm_setting_ip4_config_parent_class)->verify (setting, connection, error); if (ret != NM_SETTING_VERIFY_SUCCESS) return ret; method = nm_setting_ip_config_get_method (s_ip); /* Base class already checked that it exists */ g_assert (method); if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) { if (nm_setting_ip_config_get_num_addresses (s_ip) == 0) { g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY, _("this property cannot be empty for '%s=%s'"), NM_SETTING_IP_CONFIG_METHOD, method); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES); return FALSE; } } else if ( !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL) || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) { if (nm_setting_ip_config_get_num_dns (s_ip) > 0) { g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("this property is not allowed for '%s=%s'"), NM_SETTING_IP_CONFIG_METHOD, method); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DNS); return FALSE; } if (nm_setting_ip_config_get_num_dns_searches (s_ip) > 0) { g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("this property is not allowed for '%s=%s'"), NM_SETTING_IP_CONFIG_METHOD, method); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DNS_SEARCH); return FALSE; } /* Shared allows IP addresses; link-local and disabled do not */ if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) != 0) { if (nm_setting_ip_config_get_num_addresses (s_ip) > 0) { g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("this property is not allowed for '%s=%s'"), NM_SETTING_IP_CONFIG_METHOD, method); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES); return FALSE; } } } else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) { /* nothing to do */ } else { g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("property is invalid")); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_METHOD); return FALSE; } if (priv->dhcp_client_id && !strlen (priv->dhcp_client_id)) { g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("property is empty")); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID); return FALSE; } if (priv->dhcp_fqdn && !*priv->dhcp_fqdn) { g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("property is empty")); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_FQDN); return FALSE; } if (priv->dhcp_fqdn && !strchr (priv->dhcp_fqdn, '.')) { g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("'%s' is not a valid FQDN"), priv->dhcp_fqdn); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_FQDN); return FALSE; } if (priv->dhcp_fqdn && nm_setting_ip_config_get_dhcp_hostname (s_ip)) { g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("property cannot be set when dhcp-hostname is also set")); g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_FQDN); return FALSE; } return TRUE; }