diff options
author | Thomas Haller <thaller@redhat.com> | 2014-11-27 10:38:26 (GMT) |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2014-11-27 11:53:38 (GMT) |
commit | a60b3e46e74f91bde3264c5f5382b87d05fcb917 (patch) | |
tree | 892e7603df8bd58f3349570f5390fd037d7da7e4 | |
parent | b5a6d365e48051263a6b99500b54b55dba404415 (diff) | |
download | libnl-a60b3e46e74f91bde3264c5f5382b87d05fcb917.zip libnl-a60b3e46e74f91bde3264c5f5382b87d05fcb917.tar.gz libnl-a60b3e46e74f91bde3264c5f5382b87d05fcb917.tar.bz2 |
route/addr: consider CACHEINFO in addr_compare()/nl_object_diff()
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.
Acked-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Thomas Haller <thaller@redhat.com>
-rw-r--r-- | include/netlink/utils.h | 8 | ||||
-rw-r--r-- | lib/route/addr.c | 2 | ||||
-rw-r--r-- | lib/utils.c | 2 |
3 files changed, 11 insertions, 1 deletions
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 |