core: add dependent multicast route configured by kernel for IPv6
Pre-generate the device multicast route in the local table that are configured by kernel when an ipv6-address is assigned to an interface. This helps NM taking into account routes that are not to be deleted when a connection is reapplied on an interface. https://bugzilla.redhat.com/show_bug.cgi?id=1821787
This commit is contained in:
@@ -456,6 +456,24 @@ nm_ip6_config_update_routes_metric (NMIP6Config *self, gint64 metric)
|
||||
g_object_thaw_notify (G_OBJECT (self));
|
||||
}
|
||||
|
||||
static void
|
||||
_add_multicast_route6 (NMIP6Config *self, int ifindex)
|
||||
{
|
||||
nm_auto_nmpobj NMPObject *r = NULL;
|
||||
NMPlatformIP6Route *route;
|
||||
|
||||
r = nmp_object_new (NMP_OBJECT_TYPE_IP6_ROUTE, NULL);
|
||||
route = NMP_OBJECT_CAST_IP6_ROUTE (r);
|
||||
route->ifindex = ifindex;
|
||||
route->network.s6_addr[0] = 0xffu;
|
||||
route->plen = 8;
|
||||
route->table_coerced = nm_platform_route_table_coerce (RT_TABLE_LOCAL);
|
||||
route->type_coerced = nm_platform_route_type_coerce (RTN_UNICAST);
|
||||
route->metric = 256;
|
||||
|
||||
_add_route (self, r, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
nm_ip6_config_add_dependent_routes (NMIP6Config *self,
|
||||
guint32 route_table,
|
||||
@@ -476,6 +494,9 @@ nm_ip6_config_add_dependent_routes (NMIP6Config *self,
|
||||
*
|
||||
* For manually added IPv6 routes, add the device routes explicitly. */
|
||||
|
||||
/* Pre-generate multicast route */
|
||||
_add_multicast_route6 (self, ifindex);
|
||||
|
||||
nm_ip_config_iter_ip6_address_for_each (&iter, self, &my_addr) {
|
||||
NMPlatformIP6Route *route;
|
||||
gboolean has_peer;
|
||||
|
Reference in New Issue
Block a user