merge: branch 'bg/vpn-ipv6-route-prefsrc'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1834
This commit is contained in:
@@ -2099,20 +2099,12 @@ _dbus_signal_ip_config_cb(NMVpnConnection *self, int addr_family, GVariant *dict
|
|||||||
NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))
|
NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))
|
||||||
nm_l3_config_data_add_route(l3cd, addr_family, route, NULL);
|
nm_l3_config_data_add_route(l3cd, addr_family, route, NULL);
|
||||||
}
|
}
|
||||||
} else if (IS_IPv4 ? g_variant_lookup(dict, NM_VPN_PLUGIN_IP4_CONFIG_ROUTES, "aau", &var_iter)
|
} else if (IS_IPv4) {
|
||||||
: g_variant_lookup(dict,
|
if (g_variant_lookup(dict, NM_VPN_PLUGIN_IP4_CONFIG_ROUTES, "aau", &var_iter)) {
|
||||||
NM_VPN_PLUGIN_IP6_CONFIG_ROUTES,
|
|
||||||
"a(ayuayu)",
|
|
||||||
&var_iter)) {
|
|
||||||
_nm_unused nm_auto_free_variant_iter GVariantIter *var_iter_ref_owner = var_iter;
|
_nm_unused nm_auto_free_variant_iter GVariantIter *var_iter_ref_owner = var_iter;
|
||||||
NMPlatformIPXRoute route = {};
|
NMPlatformIPXRoute route = {};
|
||||||
guint32 plen;
|
guint32 plen;
|
||||||
GVariant *next_hop;
|
|
||||||
GVariant *dest;
|
|
||||||
guint32 prefix;
|
|
||||||
guint32 metric;
|
|
||||||
|
|
||||||
if (IS_IPv4) {
|
|
||||||
while (g_variant_iter_next(var_iter, "@au", &v)) {
|
while (g_variant_iter_next(var_iter, "@au", &v)) {
|
||||||
_nm_unused gs_unref_variant GVariant *v_ref_owner = v;
|
_nm_unused gs_unref_variant GVariant *v_ref_owner = v;
|
||||||
|
|
||||||
@@ -2151,11 +2143,50 @@ _dbus_signal_ip_config_cb(NMVpnConnection *self, int addr_family, GVariant *dict
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
while (
|
_nm_unused nm_auto_free_variant_iter GVariantIter *var_iter_ref_owner = NULL;
|
||||||
g_variant_iter_next(var_iter, "(@ayu@ayu)", &dest, &prefix, &next_hop, &metric)) {
|
NMPlatformIPXRoute route = {};
|
||||||
_nm_unused gs_unref_variant GVariant *next_hop_ref_owner = next_hop;
|
guint32 prefix;
|
||||||
_nm_unused gs_unref_variant GVariant *dest_ref_owner = dest;
|
guint32 metric;
|
||||||
|
NMOptionBool new_signature = NM_OPTION_BOOL_DEFAULT;
|
||||||
|
|
||||||
|
/* IPv6 and no "preserve-routes" */
|
||||||
|
|
||||||
|
if (g_variant_lookup(dict, NM_VPN_PLUGIN_IP6_CONFIG_ROUTES, "a(ayuayu)", &var_iter))
|
||||||
|
new_signature = FALSE;
|
||||||
|
else if (g_variant_lookup(dict, NM_VPN_PLUGIN_IP6_CONFIG_ROUTES, "a(ayuayuay)", &var_iter))
|
||||||
|
new_signature = TRUE;
|
||||||
|
else
|
||||||
|
var_iter = NULL;
|
||||||
|
|
||||||
|
var_iter_ref_owner = var_iter;
|
||||||
|
|
||||||
|
while (TRUE) {
|
||||||
|
gs_unref_variant GVariant *next_hop = NULL;
|
||||||
|
gs_unref_variant GVariant *dest = NULL;
|
||||||
|
gs_unref_variant GVariant *pref_src = NULL;
|
||||||
|
|
||||||
|
if (new_signature == NM_OPTION_BOOL_DEFAULT) {
|
||||||
|
break;
|
||||||
|
} else if (new_signature) {
|
||||||
|
if (!g_variant_iter_next(var_iter,
|
||||||
|
"(@ayu@ayu@ay)",
|
||||||
|
&dest,
|
||||||
|
&prefix,
|
||||||
|
&next_hop,
|
||||||
|
&metric,
|
||||||
|
&pref_src))
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
if (!g_variant_iter_next(var_iter,
|
||||||
|
"(@ayu@ayu)",
|
||||||
|
&dest,
|
||||||
|
&prefix,
|
||||||
|
&next_hop,
|
||||||
|
&metric))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (prefix > 128)
|
if (prefix > 128)
|
||||||
continue;
|
continue;
|
||||||
@@ -2170,6 +2201,10 @@ _dbus_signal_ip_config_cb(NMVpnConnection *self, int addr_family, GVariant *dict
|
|||||||
if (!nm_ip_addr_set_from_variant(AF_INET6, &route.r6.network, dest, NULL))
|
if (!nm_ip_addr_set_from_variant(AF_INET6, &route.r6.network, dest, NULL))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (pref_src
|
||||||
|
&& !nm_ip_addr_set_from_variant(AF_INET6, &route.r6.pref_src, pref_src, NULL))
|
||||||
|
continue;
|
||||||
|
|
||||||
nm_ip_addr_set_from_variant(AF_INET6, &route.r6.gateway, next_hop, NULL);
|
nm_ip_addr_set_from_variant(AF_INET6, &route.r6.gateway, next_hop, NULL);
|
||||||
|
|
||||||
nm_ip6_addr_clear_host_address(&route.r6.network, &route.r6.network, route.r6.plen);
|
nm_ip6_addr_clear_host_address(&route.r6.network, &route.r6.network, route.r6.plen);
|
||||||
@@ -2188,7 +2223,6 @@ _dbus_signal_ip_config_cb(NMVpnConnection *self, int addr_family, GVariant *dict
|
|||||||
nm_l3_config_data_add_route_6(l3cd, &route.r6);
|
nm_l3_config_data_add_route_6(l3cd, &route.r6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (g_variant_lookup(dict,
|
if (g_variant_lookup(dict,
|
||||||
IS_IPv4 ? NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT
|
IS_IPv4 ? NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT
|
||||||
|
Reference in New Issue
Block a user