diff options
Diffstat (limited to 'callouts/nm-dispatcher-utils.c')
-rw-r--r-- | callouts/nm-dispatcher-utils.c | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/callouts/nm-dispatcher-utils.c b/callouts/nm-dispatcher-utils.c index 66b6a07fd8..8d7274329c 100644 --- a/callouts/nm-dispatcher-utils.c +++ b/callouts/nm-dispatcher-utils.c @@ -92,11 +92,9 @@ static GSList * construct_ip4_items (GSList *items, GVariant *ip4_config, const char *prefix) { GPtrArray *addresses, *routes; - char **dns, **wins; + char **dns, **wins, *gateway; GString *tmp; GVariant *val; - char str_addr[INET_ADDRSTRLEN]; - char str_gw[INET_ADDRSTRLEN]; int i; if (ip4_config == NULL) @@ -108,22 +106,24 @@ construct_ip4_items (GSList *items, GVariant *ip4_config, const char *prefix) /* IP addresses */ val = g_variant_lookup_value (ip4_config, "addresses", G_VARIANT_TYPE ("aau")); if (val) { - addresses = nm_utils_ip4_addresses_from_variant (val); + addresses = nm_utils_ip4_addresses_from_variant (val, &gateway); + if (!gateway) + gateway = g_strdup ("0.0.0.0"); for (i = 0; i < addresses->len; i++) { - NMIP4Address *addr = addresses->pdata[i]; - guint32 ip_prefix = nm_ip4_address_get_prefix (addr); + NMIPAddress *addr = addresses->pdata[i]; char *addrtmp; - nm_utils_inet4_ntop (nm_ip4_address_get_address (addr), str_addr); - nm_utils_inet4_ntop (nm_ip4_address_get_gateway (addr), str_gw); - - addrtmp = g_strdup_printf ("%sIP4_ADDRESS_%d=%s/%d %s", prefix, i, str_addr, ip_prefix, str_gw); + addrtmp = g_strdup_printf ("%sIP4_ADDRESS_%d=%s/%d %s", prefix, i, + nm_ip_address_get_address (addr), + nm_ip_address_get_prefix (addr), + gateway); items = g_slist_prepend (items, addrtmp); } if (addresses->len) items = g_slist_prepend (items, g_strdup_printf ("%sIP4_NUM_ADDRESSES=%d", prefix, addresses->len)); g_ptr_array_unref (addresses); + g_free (gateway); g_variant_unref (val); } @@ -177,15 +177,19 @@ construct_ip4_items (GSList *items, GVariant *ip4_config, const char *prefix) routes = nm_utils_ip4_routes_from_variant (val); for (i = 0; i < routes->len; i++) { - NMIP4Route *route = routes->pdata[i]; - guint32 ip_prefix = nm_ip4_route_get_prefix (route); - guint32 metric = nm_ip4_route_get_metric (route); + NMIPRoute *route = routes->pdata[i]; + const char *next_hop; char *routetmp; - nm_utils_inet4_ntop (nm_ip4_route_get_dest (route), str_addr); - nm_utils_inet4_ntop (nm_ip4_route_get_next_hop (route), str_gw); + next_hop = nm_ip_route_get_next_hop (route); + if (!next_hop) + next_hop = "0.0.0.0"; - routetmp = g_strdup_printf ("%sIP4_ROUTE_%d=%s/%d %s %d", prefix, i, str_addr, ip_prefix, str_gw, metric); + routetmp = g_strdup_printf ("%sIP4_ROUTE_%d=%s/%d %s %u", prefix, i, + nm_ip_route_get_dest (route), + nm_ip_route_get_prefix (route), + next_hop, + (guint32) MAX (0, nm_ip_route_get_metric (route))); items = g_slist_prepend (items, routetmp); } items = g_slist_prepend (items, g_strdup_printf ("%sIP4_NUM_ROUTES=%d", prefix, routes->len)); @@ -222,11 +226,9 @@ static GSList * construct_ip6_items (GSList *items, GVariant *ip6_config, const char *prefix) { GPtrArray *addresses, *routes; - char **dns; + char **dns, *gateway = NULL; GString *tmp; GVariant *val; - char str_addr[INET6_ADDRSTRLEN]; - char str_gw[INET6_ADDRSTRLEN]; int i; if (ip6_config == NULL) @@ -238,22 +240,24 @@ construct_ip6_items (GSList *items, GVariant *ip6_config, const char *prefix) /* IP addresses */ val = g_variant_lookup_value (ip6_config, "addresses", G_VARIANT_TYPE ("a(ayuay)")); if (val) { - addresses = nm_utils_ip6_addresses_from_variant (val); + addresses = nm_utils_ip6_addresses_from_variant (val, &gateway); + if (!gateway) + gateway = g_strdup ("::"); for (i = 0; i < addresses->len; i++) { - NMIP6Address *addr = addresses->pdata[i]; - guint32 ip_prefix = nm_ip6_address_get_prefix (addr); + NMIPAddress *addr = addresses->pdata[i]; char *addrtmp; - nm_utils_inet6_ntop (nm_ip6_address_get_address (addr), str_addr); - nm_utils_inet6_ntop (nm_ip6_address_get_gateway (addr), str_gw); - - addrtmp = g_strdup_printf ("%sIP6_ADDRESS_%d=%s/%d %s", prefix, i, str_addr, ip_prefix, str_gw); + addrtmp = g_strdup_printf ("%sIP6_ADDRESS_%d=%s/%d %s", prefix, i, + nm_ip_address_get_address (addr), + nm_ip_address_get_prefix (addr), + gateway); items = g_slist_prepend (items, addrtmp); } if (addresses->len) items = g_slist_prepend (items, g_strdup_printf ("%sIP6_NUM_ADDRESSES=%d", prefix, addresses->len)); g_ptr_array_unref (addresses); + g_free (gateway); g_variant_unref (val); } @@ -287,15 +291,19 @@ construct_ip6_items (GSList *items, GVariant *ip6_config, const char *prefix) routes = nm_utils_ip6_routes_from_variant (val); for (i = 0; i < routes->len; i++) { - NMIP6Route *route = routes->pdata[i]; - guint32 ip_prefix = nm_ip6_route_get_prefix (route); - guint32 metric = nm_ip6_route_get_metric (route); + NMIPRoute *route = routes->pdata[i]; + const char *next_hop; char *routetmp; - nm_utils_inet6_ntop (nm_ip6_route_get_dest (route), str_addr); - nm_utils_inet6_ntop (nm_ip6_route_get_next_hop (route), str_gw); + next_hop = nm_ip_route_get_next_hop (route); + if (!next_hop) + next_hop = "::"; - routetmp = g_strdup_printf ("%sIP6_ROUTE_%d=%s/%d %s %d", prefix, i, str_addr, ip_prefix, str_gw, metric); + routetmp = g_strdup_printf ("%sIP6_ROUTE_%d=%s/%d %s %u", prefix, i, + nm_ip_route_get_dest (route), + nm_ip_route_get_prefix (route), + next_hop, + (guint32) MAX (0, nm_ip_route_get_metric (route))); items = g_slist_prepend (items, routetmp); } if (routes->len) |