diff options
Diffstat (limited to 'src/ip6-manager/nm-ip6-manager.c')
| -rw-r--r-- | src/ip6-manager/nm-ip6-manager.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/ip6-manager/nm-ip6-manager.c b/src/ip6-manager/nm-ip6-manager.c index e452c18e..4432aa5c 100644 --- a/src/ip6-manager/nm-ip6-manager.c +++ b/src/ip6-manager/nm-ip6-manager.c @@ -921,6 +921,14 @@ process_route_change (NMIP6Manager *manager, struct nl_msg *msg) return NULL; } + /* Cached/cloned routes are created by the kernel for specific operations + * and aren't part of the interface's permanent routing configuration. + */ + if (rtnl_route_get_flags (rtnlroute) & RTM_F_CLONED) { + rtnl_route_put (rtnlroute); + return NULL; + } + device = nm_ip6_manager_get_device (manager, rtnl_route_get_oif (rtnlroute)); old_size = nl_cache_nitems (priv->route_cache); @@ -1523,6 +1531,12 @@ nm_ip6_manager_get_ip6_config (NMIP6Manager *manager, int ifindex) if (rtnl_route_get_family (rtnlroute) != AF_INET6) continue; + /* And ignore cache/cloned routes as they aren't part of the interface's + * permanent routing configuration. + */ + if (rtnl_route_get_flags (rtnlroute) & RTM_F_CLONED) + continue; + nldest = rtnl_route_get_dst (rtnlroute); if (!nldest || nl_addr_get_family (nldest) != AF_INET6) continue; |