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().
This commit is contained in:
Thomas Haller
2016-01-15 16:22:10 +01:00
parent 3294e06c28
commit 4c79b605bc

View File

@@ -937,6 +937,11 @@ nmp_object_is_visible (const NMPObject *obj)
klass = NMP_OBJECT_GET_CLASS (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 return !klass->cmd_obj_is_visible
|| klass->cmd_obj_is_visible (obj); || klass->cmd_obj_is_visible (obj);
} }
@@ -944,25 +949,10 @@ nmp_object_is_visible (const NMPObject *obj)
static gboolean static gboolean
_vt_cmd_obj_is_visible_link (const NMPObject *obj) _vt_cmd_obj_is_visible_link (const NMPObject *obj)
{ {
return obj->object.ifindex > 0 return obj->_link.netlink.is_in_netlink
&& obj->_link.netlink.is_in_netlink
&& obj->link.name[0]; && 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 gboolean
@@ -1135,7 +1125,7 @@ _vt_cmd_obj_init_cache_id_ipx_address (const NMPObject *obj, NMPCacheIdType id_t
{ {
switch (id_type) { switch (id_type) {
case NMP_CACHE_ID_TYPE_ADDRROUTE_VISIBLE_BY_IFINDEX: 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); 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); *out_id = nmp_cache_id_init_addrroute_visible_by_ifindex (id, NMP_OBJECT_GET_TYPE (obj), obj->object.ifindex);
return TRUE; return TRUE;
@@ -1153,14 +1143,14 @@ _vt_cmd_obj_init_cache_id_ipx_route (const NMPObject *obj, NMPCacheIdType id_typ
{ {
switch (id_type) { switch (id_type) {
case NMP_CACHE_ID_TYPE_ADDRROUTE_VISIBLE_BY_IFINDEX: 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); 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); *out_id = nmp_cache_id_init_addrroute_visible_by_ifindex (id, NMP_OBJECT_GET_TYPE (obj), obj->object.ifindex);
return TRUE; return TRUE;
} }
break; break;
case NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_NO_DEFAULT: 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_PLATFORM_IP_ROUTE_IS_DEFAULT (&obj->ip_route)) {
nm_assert (obj->object.ifindex > 0); nm_assert (obj->object.ifindex > 0);
*out_id = nmp_cache_id_init_routes_visible (id, NMP_OBJECT_GET_TYPE (obj), FALSE, TRUE, 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; break;
case NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_ONLY_DEFAULT: 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_PLATFORM_IP_ROUTE_IS_DEFAULT (&obj->ip_route)) {
nm_assert (obj->object.ifindex > 0); nm_assert (obj->object.ifindex > 0);
*out_id = nmp_cache_id_init_routes_visible (id, NMP_OBJECT_GET_TYPE (obj), TRUE, FALSE, 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; break;
case NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_BY_IFINDEX_NO_DEFAULT: 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_PLATFORM_IP_ROUTE_IS_DEFAULT (&obj->ip_route)) {
nm_assert (obj->object.ifindex > 0); 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); *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; break;
case NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_BY_IFINDEX_ONLY_DEFAULT: 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_PLATFORM_IP_ROUTE_IS_DEFAULT (&obj->ip_route)) {
nm_assert (obj->object.ifindex > 0); 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); *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_init_cache_id = _vt_cmd_obj_init_cache_id_ipx_address,
.cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_ip4_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_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_copy = _vt_cmd_plobj_id_copy_ip4_address,
.cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip4_address, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip4_address,
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_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_init_cache_id = _vt_cmd_obj_init_cache_id_ipx_address,
.cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_ip6_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_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_copy = _vt_cmd_plobj_id_copy_ip6_address,
.cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip6_address, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip6_address,
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_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_init_cache_id = _vt_cmd_obj_init_cache_id_ipx_route,
.cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_ip4_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_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_copy = _vt_cmd_plobj_id_copy_ip4_route,
.cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip4_route, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip4_route,
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_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_init_cache_id = _vt_cmd_obj_init_cache_id_ipx_route,
.cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_ip6_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_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_copy = _vt_cmd_plobj_id_copy_ip6_route,
.cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip6_route, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_ip6_route,
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip6_route, .cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip6_route,