From 4c79b605bc64e574fe0267e38595d15c3ef1a629 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 15 Jan 2016 16:22:10 +0100 Subject: [PATCH] platform: implement nmp_object_is_visible() based on nmp_object_is_alive() An object should only be visible if it is also alive. Hence, refactor nmp_object_is_visible() to be reject object that fail nmp_object_is_alive(). --- src/platform/nmp-object.c | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/src/platform/nmp-object.c b/src/platform/nmp-object.c index 6fbbbe235..892fd9dde 100644 --- a/src/platform/nmp-object.c +++ b/src/platform/nmp-object.c @@ -937,6 +937,11 @@ nmp_object_is_visible (const NMPObject *obj) klass = NMP_OBJECT_GET_CLASS (obj); + /* a dead object is never visible. */ + if ( klass->cmd_obj_is_alive + && !klass->cmd_obj_is_alive (obj)) + return FALSE; + return !klass->cmd_obj_is_visible || klass->cmd_obj_is_visible (obj); } @@ -944,25 +949,10 @@ nmp_object_is_visible (const NMPObject *obj) static gboolean _vt_cmd_obj_is_visible_link (const NMPObject *obj) { - return obj->object.ifindex > 0 - && obj->_link.netlink.is_in_netlink + return obj->_link.netlink.is_in_netlink && obj->link.name[0]; } -static gboolean -_vt_cmd_obj_is_visible_ipx_address (const NMPObject *obj) -{ - return obj->object.ifindex > 0; -} - -static gboolean -_vt_cmd_obj_is_visible_ipx_route (const NMPObject *obj) -{ - NMIPConfigSource source = obj->ip_route.source; - - return obj->object.ifindex > 0 && source != _NM_IP_CONFIG_SOURCE_RTM_F_CLONED; -} - /******************************************************************/ gboolean @@ -1135,7 +1125,7 @@ _vt_cmd_obj_init_cache_id_ipx_address (const NMPObject *obj, NMPCacheIdType id_t { switch (id_type) { case NMP_CACHE_ID_TYPE_ADDRROUTE_VISIBLE_BY_IFINDEX: - if (_vt_cmd_obj_is_visible_ipx_address (obj)) { + if (nmp_object_is_visible (obj)) { nm_assert (obj->object.ifindex > 0); *out_id = nmp_cache_id_init_addrroute_visible_by_ifindex (id, NMP_OBJECT_GET_TYPE (obj), obj->object.ifindex); return TRUE; @@ -1153,14 +1143,14 @@ _vt_cmd_obj_init_cache_id_ipx_route (const NMPObject *obj, NMPCacheIdType id_typ { switch (id_type) { case NMP_CACHE_ID_TYPE_ADDRROUTE_VISIBLE_BY_IFINDEX: - if (_vt_cmd_obj_is_visible_ipx_route (obj)) { + if (nmp_object_is_visible (obj)) { nm_assert (obj->object.ifindex > 0); *out_id = nmp_cache_id_init_addrroute_visible_by_ifindex (id, NMP_OBJECT_GET_TYPE (obj), obj->object.ifindex); return TRUE; } break; case NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_NO_DEFAULT: - if ( _vt_cmd_obj_is_visible_ipx_route (obj) + if ( nmp_object_is_visible (obj) && !NM_PLATFORM_IP_ROUTE_IS_DEFAULT (&obj->ip_route)) { nm_assert (obj->object.ifindex > 0); *out_id = nmp_cache_id_init_routes_visible (id, NMP_OBJECT_GET_TYPE (obj), FALSE, TRUE, 0); @@ -1168,7 +1158,7 @@ _vt_cmd_obj_init_cache_id_ipx_route (const NMPObject *obj, NMPCacheIdType id_typ } break; case NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_ONLY_DEFAULT: - if ( _vt_cmd_obj_is_visible_ipx_route (obj) + if ( nmp_object_is_visible (obj) && NM_PLATFORM_IP_ROUTE_IS_DEFAULT (&obj->ip_route)) { nm_assert (obj->object.ifindex > 0); *out_id = nmp_cache_id_init_routes_visible (id, NMP_OBJECT_GET_TYPE (obj), TRUE, FALSE, 0); @@ -1176,7 +1166,7 @@ _vt_cmd_obj_init_cache_id_ipx_route (const NMPObject *obj, NMPCacheIdType id_typ } break; case NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_BY_IFINDEX_NO_DEFAULT: - if ( _vt_cmd_obj_is_visible_ipx_route (obj) + if ( nmp_object_is_visible (obj) && !NM_PLATFORM_IP_ROUTE_IS_DEFAULT (&obj->ip_route)) { nm_assert (obj->object.ifindex > 0); *out_id = nmp_cache_id_init_routes_visible (id, NMP_OBJECT_GET_TYPE (obj), FALSE, TRUE, obj->object.ifindex); @@ -1184,7 +1174,7 @@ _vt_cmd_obj_init_cache_id_ipx_route (const NMPObject *obj, NMPCacheIdType id_typ } break; case NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_BY_IFINDEX_ONLY_DEFAULT: - if ( _vt_cmd_obj_is_visible_ipx_route (obj) + if ( nmp_object_is_visible (obj) && NM_PLATFORM_IP_ROUTE_IS_DEFAULT (&obj->ip_route)) { nm_assert (obj->object.ifindex > 0); *out_id = nmp_cache_id_init_routes_visible (id, NMP_OBJECT_GET_TYPE (obj), TRUE, FALSE, obj->object.ifindex); @@ -2002,7 +1992,6 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = { .cmd_obj_init_cache_id = _vt_cmd_obj_init_cache_id_ipx_address, .cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_ip4_address, .cmd_obj_is_alive = _vt_cmd_obj_is_alive_ipx_address, - .cmd_obj_is_visible = _vt_cmd_obj_is_visible_ipx_address, .cmd_plobj_id_copy = _vt_cmd_plobj_id_copy_ip4_address, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip4_address, .cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip4_address, @@ -2022,7 +2011,6 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = { .cmd_obj_init_cache_id = _vt_cmd_obj_init_cache_id_ipx_address, .cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_ip6_address, .cmd_obj_is_alive = _vt_cmd_obj_is_alive_ipx_address, - .cmd_obj_is_visible = _vt_cmd_obj_is_visible_ipx_address, .cmd_plobj_id_copy = _vt_cmd_plobj_id_copy_ip6_address, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip6_address, .cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip6_address, @@ -2042,7 +2030,6 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = { .cmd_obj_init_cache_id = _vt_cmd_obj_init_cache_id_ipx_route, .cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_ip4_route, .cmd_obj_is_alive = _vt_cmd_obj_is_alive_ipx_route, - .cmd_obj_is_visible = _vt_cmd_obj_is_visible_ipx_route, .cmd_plobj_id_copy = _vt_cmd_plobj_id_copy_ip4_route, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip4_route, .cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip4_route, @@ -2062,7 +2049,6 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = { .cmd_obj_init_cache_id = _vt_cmd_obj_init_cache_id_ipx_route, .cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_ip6_route, .cmd_obj_is_alive = _vt_cmd_obj_is_alive_ipx_route, - .cmd_obj_is_visible = _vt_cmd_obj_is_visible_ipx_route, .cmd_plobj_id_copy = _vt_cmd_plobj_id_copy_ip6_route, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip6_route, .cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip6_route,