platform: expose routes with "proto kernel" too
Also expose routes with "proto kernel". But add a flag to nm_platform_ipx_route_get_all() to hide them by default.
This commit is contained in:
@@ -4245,19 +4245,39 @@ static GArray *
|
|||||||
ipx_route_get_all (NMPlatform *platform, int ifindex, NMPObjectType obj_type, NMPlatformGetRouteFlags flags)
|
ipx_route_get_all (NMPlatform *platform, int ifindex, NMPObjectType obj_type, NMPlatformGetRouteFlags flags)
|
||||||
{
|
{
|
||||||
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
|
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
|
||||||
|
NMPCacheId cache_id;
|
||||||
|
const NMPlatformIPRoute *const* routes;
|
||||||
|
GArray *array;
|
||||||
|
const NMPClass *klass;
|
||||||
|
gboolean with_rtprot_kernel;
|
||||||
|
guint i, len;
|
||||||
|
|
||||||
nm_assert (NM_IN_SET (obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE));
|
nm_assert (NM_IN_SET (obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE));
|
||||||
|
|
||||||
if (!NM_FLAGS_ANY (flags, NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT | NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT))
|
if (!NM_FLAGS_ANY (flags, NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT | NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT))
|
||||||
flags |= NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT | NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT;
|
flags |= NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT | NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT;
|
||||||
|
|
||||||
return nmp_cache_lookup_multi_to_array (priv->cache,
|
klass = nmp_class_from_type (obj_type);
|
||||||
obj_type,
|
|
||||||
nmp_cache_id_init_routes_visible (NMP_CACHE_ID_STATIC,
|
nmp_cache_id_init_routes_visible (&cache_id,
|
||||||
obj_type,
|
obj_type,
|
||||||
NM_FLAGS_HAS (flags, NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT),
|
NM_FLAGS_HAS (flags, NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT),
|
||||||
NM_FLAGS_HAS (flags, NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT),
|
NM_FLAGS_HAS (flags, NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT),
|
||||||
ifindex));
|
ifindex);
|
||||||
|
|
||||||
|
routes = (const NMPlatformIPRoute *const*) nmp_cache_lookup_multi (priv->cache, &cache_id, &len);
|
||||||
|
|
||||||
|
array = g_array_sized_new (FALSE, FALSE, klass->sizeof_public, len);
|
||||||
|
|
||||||
|
with_rtprot_kernel = NM_FLAGS_HAS (flags, NM_PLATFORM_GET_ROUTE_FLAGS_WITH_RTPROT_KERNEL);
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
nm_assert (NMP_OBJECT_GET_CLASS (NMP_OBJECT_UP_CAST (routes[i])) == klass);
|
||||||
|
|
||||||
|
if ( with_rtprot_kernel
|
||||||
|
|| routes[i]->source != NM_IP_CONFIG_SOURCE_RTPROT_KERNEL)
|
||||||
|
g_array_append_vals (array, routes[i], 1);
|
||||||
|
}
|
||||||
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GArray *
|
static GArray *
|
||||||
|
@@ -158,6 +158,8 @@ typedef enum {
|
|||||||
* both of them. */
|
* both of them. */
|
||||||
NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT = (1LL << 0),
|
NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT = (1LL << 0),
|
||||||
NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT = (1LL << 1),
|
NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT = (1LL << 1),
|
||||||
|
|
||||||
|
NM_PLATFORM_GET_ROUTE_FLAGS_WITH_RTPROT_KERNEL = (1LL << 2),
|
||||||
} NMPlatformGetRouteFlags;
|
} NMPlatformGetRouteFlags;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@@ -786,7 +786,7 @@ _vt_cmd_obj_is_visible_ipx_route (const NMPObject *obj)
|
|||||||
{
|
{
|
||||||
NMIPConfigSource source = obj->ip_route.source;
|
NMIPConfigSource source = obj->ip_route.source;
|
||||||
|
|
||||||
return obj->object.ifindex > 0 && (source != NM_IP_CONFIG_SOURCE_RTPROT_KERNEL && source != _NM_IP_CONFIG_SOURCE_RTM_F_CLONED);
|
return obj->object.ifindex > 0 && source != _NM_IP_CONFIG_SOURCE_RTM_F_CLONED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
|
Reference in New Issue
Block a user