static void nmt_route_entry_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { NmtRouteEntryPrivate *priv = NMT_ROUTE_ENTRY_GET_PRIVATE (object); switch (prop_id) { case PROP_FAMILY: priv->family = g_value_get_int (value); break; case PROP_IP_ENTRY_WIDTH: priv->ip_entry_width = g_value_get_int (value); break; case PROP_METRIC_ENTRY_WIDTH: priv->metric_entry_width = g_value_get_int (value); break; case PROP_IP4_ROUTE: g_return_if_fail (priv->family == AF_INET); if (priv->ip4_route) nm_ip4_route_unref (priv->ip4_route); priv->ip4_route = g_value_dup_boxed (value); break; case PROP_IP6_ROUTE: g_return_if_fail (priv->family == AF_INET6); if (priv->ip6_route) nm_ip6_route_unref (priv->ip6_route); priv->ip6_route = g_value_dup_boxed (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static gboolean ip4_process_dhclient_rfc3442_routes (const char *str, NMIP4Config *ip4_config, guint32 *gwaddr) { char **octets, **o; gboolean have_routes = FALSE; NMIP4Route *route = NULL; o = octets = g_strsplit_set (str, " .", 0); if (g_strv_length (octets) < 5) { nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes '%s'", str); goto out; } while (*o) { route = NULL; o = (char **) process_dhclient_rfc3442_route ((const char **) o, &route); if (!route) { nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes"); break; } have_routes = TRUE; if (nm_ip4_route_get_prefix (route) == 0) { /* gateway passed as classless static route */ *gwaddr = nm_ip4_route_get_next_hop (route); nm_ip4_route_unref (route); } else { char addr[INET_ADDRSTRLEN + 1]; char nh[INET_ADDRSTRLEN + 1]; struct in_addr tmp; /* normal route */ nm_ip4_config_take_route (ip4_config, route); tmp.s_addr = nm_ip4_route_get_dest (route); inet_ntop (AF_INET, &tmp, addr, sizeof (addr)); tmp.s_addr = nm_ip4_route_get_next_hop (route); inet_ntop (AF_INET, &tmp, nh, sizeof (nh)); nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s", addr, nm_ip4_route_get_prefix (route), nh); } } out: g_strfreev (octets); return have_routes; }
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); }
void nm_ip4_config_replace_route (NMIP4Config *config, guint i, NMIP4Route *new_route) { NMIP4ConfigPrivate *priv; GSList *old; g_return_if_fail (NM_IS_IP4_CONFIG (config)); priv = NM_IP4_CONFIG_GET_PRIVATE (config); old = g_slist_nth (priv->routes, i); g_return_if_fail (old != NULL); nm_ip4_route_unref ((NMIP4Route *) old->data); old->data = nm_ip4_route_dup (new_route); }
void ip4_routes_dialog_update_setting (GtkWidget *dialog, NMSettingIP4Config *s_ip4) { GtkBuilder *builder; GtkWidget *widget; GtkTreeModel *model; GtkTreeIter tree_iter; gboolean iter_valid; g_return_if_fail (dialog != NULL); g_return_if_fail (s_ip4 != NULL); builder = g_object_get_data (G_OBJECT (dialog), "builder"); g_return_if_fail (builder != NULL); g_return_if_fail (GTK_IS_BUILDER (builder)); widget = GTK_WIDGET (gtk_builder_get_object (builder, "ip4_routes")); model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); iter_valid = gtk_tree_model_get_iter_first (model, &tree_iter); nm_setting_ip4_config_clear_routes (s_ip4); while (iter_valid) { guint32 addr = 0, prefix = 0, next_hop = 0, metric = 0; NMIP4Route *route; /* Address */ if (!get_one_addr (model, &tree_iter, COL_ADDRESS, TRUE, &addr)) { g_warning ("%s: IPv4 address missing or invalid!", __func__); goto next; } /* Prefix */ if (!get_one_prefix (model, &tree_iter, COL_PREFIX, TRUE, &prefix)) { g_warning ("%s: IPv4 prefix/netmask missing or invalid!", __func__); goto next; } /* Next hop (optional) */ if (!get_one_addr (model, &tree_iter, COL_NEXT_HOP, FALSE, &next_hop)) { g_warning ("%s: IPv4 next hop invalid!", __func__); goto next; } /* Metric (optional) */ if (!get_one_int (model, &tree_iter, COL_METRIC, G_MAXUINT32, FALSE, &metric)) { g_warning ("%s: IPv4 metric invalid!", __func__); goto next; } route = nm_ip4_route_new (); nm_ip4_route_set_dest (route, addr); nm_ip4_route_set_prefix (route, prefix); nm_ip4_route_set_next_hop (route, next_hop); nm_ip4_route_set_metric (route, metric); nm_setting_ip4_config_add_route (s_ip4, route); nm_ip4_route_unref (route); next: iter_valid = gtk_tree_model_iter_next (model, &tree_iter); } widget = GTK_WIDGET (gtk_builder_get_object (builder, "ip4_ignore_auto_routes")); g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)), NULL); widget = GTK_WIDGET (gtk_builder_get_object (builder, "ip4_never_default")); g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)), NULL); }