[PATCH 1/1] route/addr: consider CACHEINFO in addr_compare/nl_object_diff()

Thomas Haller thaller at redhat.com
Thu Nov 27 02:38:26 PST 2014


Indicate this change of behavior with the capability
NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO.

This is a behavioral change as we now consider an additional
field when comparing addresses.

Signed-off-by: Thomas Haller <thaller at redhat.com>
---
 include/netlink/utils.h | 8 ++++++++
 lib/route/addr.c        | 2 ++
 lib/utils.c             | 2 +-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/include/netlink/utils.h b/include/netlink/utils.h
index 431502f..a172f3a 100644
--- a/include/netlink/utils.h
+++ b/include/netlink/utils.h
@@ -121,6 +121,14 @@ enum {
 	NL_CAPABILITY_ROUTE_LINK_GET_KERNEL_FAIL_OPNOTSUPP = 5,
 #define NL_CAPABILITY_ROUTE_LINK_GET_KERNEL_FAIL_OPNOTSUPP NL_CAPABILITY_ROUTE_LINK_GET_KERNEL_FAIL_OPNOTSUPP
 
+	/**
+	 * Also consider the a_cacheinfo field (ADDR_ATTR_CACHEINFO) that contains the
+	 * address timestamps and expiry when comparing struct rtnl_addr objects with
+	 * nl_object_diff().
+	 */
+	NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO   = 6,
+#define NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO
+
 	__NL_CAPABILITY_MAX
 #define NL_CAPABILITY_MAX                               (__NL_CAPABILITY_MAX - 1)
 };
diff --git a/lib/route/addr.c b/lib/route/addr.c
index 426b4dc..3bde2bf 100644
--- a/lib/route/addr.c
+++ b/lib/route/addr.c
@@ -448,6 +448,8 @@ static int addr_compare(struct nl_object *_a, struct nl_object *_b,
 						    b->a_multicast));
 	diff |= ADDR_DIFF(BROADCAST,	nl_addr_cmp(a->a_bcast, b->a_bcast));
 	diff |= ADDR_DIFF(ANYCAST,	nl_addr_cmp(a->a_anycast, b->a_anycast));
+	diff |= ADDR_DIFF(CACHEINFO,    memcmp(&a->a_cacheinfo, &b->a_cacheinfo,
+	                                       sizeof (a->a_cacheinfo)));
 
 	if (flags & LOOSE_COMPARISON)
 		diff |= ADDR_DIFF(FLAGS,
diff --git a/lib/utils.c b/lib/utils.c
index 795eeb7..5e853f1 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -1149,7 +1149,7 @@ int nl_has_capability (int capability)
 			NL_CAPABILITY_ROUTE_LINK_CLS_ADD_ACT_OWN_REFERENCE,
 			NL_CAPABILITY_NL_CONNECT_RETRY_GENERATE_PORT_ON_ADDRINUSE,
 			NL_CAPABILITY_ROUTE_LINK_GET_KERNEL_FAIL_OPNOTSUPP,
-			0,
+			NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO,
 			0,
 			0),
 #undef _NL_SET
-- 
1.9.3




More information about the libnl mailing list