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>
This commit is contained in:
parent
b5a6d365e4
commit
a60b3e46e7
3 changed files with 11 additions and 1 deletions
|
@ -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)
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue