summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-06-26 17:30:32 +0200
committerThomas Haller <thaller@redhat.com>2017-07-05 18:37:38 +0200
commit35502807b5cef64e562e41b40bc213aea3cbb35b (patch)
tree7252f5e7ec1f9781225df92b11e07754ce5803c0
parent6324b779b21edea016f337bd7dc93401353598d6 (diff)
downloadNetworkManager-35502807b5cef64e562e41b40bc213aea3cbb35b.tar.gz
platform: merge NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION* index
In this case, not much is saved, because previously IPv4 and IPv6 routes had completely distinct indexes.
-rw-r--r--src/platform/nmp-object.c61
-rw-r--r--src/platform/nmp-object.h3
2 files changed, 21 insertions, 43 deletions
diff --git a/src/platform/nmp-object.c b/src/platform/nmp-object.c
index 5e3a9bf68e..48fb81ffad 100644
--- a/src/platform/nmp-object.c
+++ b/src/platform/nmp-object.c
@@ -132,6 +132,7 @@ _idx_obj_part (const DedupMultiIdxType *idx_type,
const NMPObject *obj_b)
{
guint h;
+ NMPObjectType obj_type;
/* the hash/equals functions are strongly related. So, keep them
* side-by-side and do it all in _idx_obj_part(). */
@@ -249,42 +250,30 @@ _idx_obj_part (const DedupMultiIdxType *idx_type,
}
return 1;
- case NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION_IP4:
- if ( !NM_IN_SET (NMP_OBJECT_GET_TYPE (obj_a), NMP_OBJECT_TYPE_IP4_ROUTE)
+ case NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION:
+ obj_type = NMP_OBJECT_GET_TYPE (obj_a);
+ if ( !NM_IN_SET (obj_type, NMP_OBJECT_TYPE_IP4_ROUTE,
+ NMP_OBJECT_TYPE_IP6_ROUTE)
|| obj_a->object.ifindex <= 0)
return 0;
if (obj_b) {
- return NMP_OBJECT_GET_TYPE (obj_a) == NMP_OBJECT_GET_TYPE (obj_b)
+ return obj_type == NMP_OBJECT_GET_TYPE (obj_b)
&& obj_b->object.ifindex > 0
&& obj_a->ip_route.plen == obj_b->ip_route.plen
&& obj_a->ip_route.metric == obj_b->ip_route.metric
- && obj_a->ip4_route.network == obj_b->ip4_route.network;
+ && (obj_type == NMP_OBJECT_TYPE_IP4_ROUTE
+ ? obj_a->ip4_route.network == obj_b->ip4_route.network
+ : IN6_ARE_ADDR_EQUAL (&obj_a->ip6_route.network, &obj_b->ip6_route.network));
}
if (request_hash) {
h = (guint) idx_type->cache_id_type;
h = NM_HASH_COMBINE (h, obj_a->ip_route.plen);
h = NM_HASH_COMBINE (h, obj_a->ip_route.metric);
- h = NM_HASH_COMBINE (h, obj_a->ip4_route.network);
- return _HASH_NON_ZERO (h);
- }
- return 1;
-
- case NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION_IP6:
- if ( !NM_IN_SET (NMP_OBJECT_GET_TYPE (obj_a), NMP_OBJECT_TYPE_IP6_ROUTE)
- || obj_a->object.ifindex <= 0)
- return 0;
- if (obj_b) {
- return NMP_OBJECT_GET_TYPE (obj_a) == NMP_OBJECT_GET_TYPE (obj_b)
- && obj_b->object.ifindex > 0
- && obj_a->ip_route.plen == obj_b->ip_route.plen
- && obj_a->ip_route.metric == obj_b->ip_route.metric
- && IN6_ARE_ADDR_EQUAL (&obj_a->ip6_route.network, &obj_b->ip6_route.network);
- }
- if (request_hash) {
- h = (guint) idx_type->cache_id_type;
- h = NM_HASH_COMBINE (h, obj_a->ip_route.plen);
- h = NM_HASH_COMBINE (h, obj_a->ip_route.metric);
- h = NM_HASH_COMBINE (h, nm_utils_in6_addr_hash (&obj_a->ip6_route.network));
+ h = NM_HASH_COMBINE (h, obj_type);
+ if (obj_type == NMP_OBJECT_TYPE_IP4_ROUTE)
+ h = NM_HASH_COMBINE (h, obj_a->ip4_route.network);
+ else
+ h = NM_HASH_COMBINE (h, nm_utils_in6_addr_hash (&obj_a->ip6_route.network));
return _HASH_NON_ZERO (h);
}
return 1;
@@ -1318,23 +1307,13 @@ static const guint8 _supported_cache_ids_ipx_address[] = {
0,
};
-static const guint8 _supported_cache_ids_ip4_route[] = {
- NMP_CACHE_ID_TYPE_OBJECT_TYPE,
- NMP_CACHE_ID_TYPE_OBJECT_TYPE_VISIBLE_ONLY,
- NMP_CACHE_ID_TYPE_ADDRROUTE_VISIBLE_BY_IFINDEX,
- NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_BY_DEFAULT,
- NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_BY_IFINDEX_WITH_DEFAULT,
- NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION_IP4,
- 0,
-};
-
-static const guint8 _supported_cache_ids_ip6_route[] = {
+static const guint8 _supported_cache_ids_ipx_route[] = {
NMP_CACHE_ID_TYPE_OBJECT_TYPE,
NMP_CACHE_ID_TYPE_OBJECT_TYPE_VISIBLE_ONLY,
NMP_CACHE_ID_TYPE_ADDRROUTE_VISIBLE_BY_IFINDEX,
NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_BY_DEFAULT,
NMP_CACHE_ID_TYPE_ROUTES_VISIBLE_BY_IFINDEX_WITH_DEFAULT,
- NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION_IP6,
+ NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION,
0,
};
@@ -1727,7 +1706,7 @@ nmp_lookup_init_route_by_dest (NMPLookup *lookup,
o->ip_route.metric = metric;
if (network)
o->ip4_route.network = *((in_addr_t *) network);
- lookup->cache_id_type = NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION_IP4;
+ lookup->cache_id_type = NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION;
break;
case AF_INET6:
o = _nmp_object_stackinit_from_type (&lookup->selector_obj, NMP_OBJECT_TYPE_IP6_ROUTE);
@@ -1736,7 +1715,7 @@ nmp_lookup_init_route_by_dest (NMPLookup *lookup,
o->ip_route.metric = metric;
if (network)
o->ip6_route.network = *((struct in6_addr *) network);
- lookup->cache_id_type = NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION_IP6;
+ lookup->cache_id_type = NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION;
break;
default:
nm_assert_not_reached ();
@@ -2510,7 +2489,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
.rtm_gettype = RTM_GETROUTE,
.signal_type_id = NM_PLATFORM_SIGNAL_ID_IP4_ROUTE,
.signal_type = NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED,
- .supported_cache_ids = _supported_cache_ids_ip4_route,
+ .supported_cache_ids = _supported_cache_ids_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_plobj_id_copy = _vt_cmd_plobj_id_copy_ip4_route,
@@ -2531,7 +2510,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
.rtm_gettype = RTM_GETROUTE,
.signal_type_id = NM_PLATFORM_SIGNAL_ID_IP6_ROUTE,
.signal_type = NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED,
- .supported_cache_ids = _supported_cache_ids_ip6_route,
+ .supported_cache_ids = _supported_cache_ids_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_plobj_id_copy = _vt_cmd_plobj_id_copy_ip6_route,
diff --git a/src/platform/nmp-object.h b/src/platform/nmp-object.h
index efdc7781af..225276e4b8 100644
--- a/src/platform/nmp-object.h
+++ b/src/platform/nmp-object.h
@@ -94,8 +94,7 @@ typedef enum { /*< skip >*/
* sends one RTM_NEWADDR notification without notifying about the deletion. We detect
* that by having this index to contain overlapping routes which require special
* cache-resync. */
- NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION_IP4,
- NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION_IP6,
+ NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION,
__NMP_CACHE_ID_TYPE_MAX,
NMP_CACHE_ID_TYPE_MAX = __NMP_CACHE_ID_TYPE_MAX - 1,