[PATCH 1/3] route/link: Add link info compare operation
roopa
roopa at cumulusnetworks.com
Sun Nov 1 16:42:35 PST 2015
looks good. thanks!
On 10/30/15, 3:08 PM, David Ahern wrote:
> Signed-off-by: Balki Raman <ramanb at cumulusnetworks.com>
> Signed-off-by: David Ahern <dsa at cumulusnetworks.com>
> ---
> include/netlink-private/route/link/api.h | 6 ++++++
> lib/route/link.c | 1 +
> lib/route/link/api.c | 22 ++++++++++++++++++++++
> 3 files changed, 29 insertions(+)
>
> diff --git a/include/netlink-private/route/link/api.h b/include/netlink-private/route/link/api.h
> index bb98cccb080f..85f83f39539d 100644
> --- a/include/netlink-private/route/link/api.h
> +++ b/include/netlink-private/route/link/api.h
> @@ -60,6 +60,10 @@ struct rtnl_link_info_ops
> * in either io_alloc() or io_parse(). */
> void (*io_free)(struct rtnl_link *);
>
> + /** Called to compare link info parameters between two links. */
> + int (*io_compare)(struct rtnl_link *, struct rtnl_link *,
> + uint32_t attrs, int flags);
> +
> struct nl_list_head io_list;
> };
>
> @@ -145,6 +149,8 @@ extern int rtnl_link_af_unregister(struct rtnl_link_af_ops *);
> extern int rtnl_link_af_data_compare(struct rtnl_link *a,
> struct rtnl_link *b,
> int family);
> +extern int rtnl_link_info_data_compare(struct rtnl_link *a,
> + struct rtnl_link *b);
>
> #ifdef __cplusplus
> }
> diff --git a/lib/route/link.c b/lib/route/link.c
> index 5c3255022dff..c61965b5df8a 100644
> --- a/lib/route/link.c
> +++ b/lib/route/link.c
> @@ -949,6 +949,7 @@ static int link_compare(struct nl_object *_a, struct nl_object *_b,
> goto protinfo_mismatch;
> }
>
> + diff |= LINK_DIFF(LINKINFO, rtnl_link_info_data_compare(a, b) != 0);
> out:
> return diff;
>
> diff --git a/lib/route/link/api.c b/lib/route/link/api.c
> index 6d1e12f88b21..00893ad051b1 100644
> --- a/lib/route/link/api.c
> +++ b/lib/route/link/api.c
> @@ -391,6 +391,28 @@ int rtnl_link_af_data_compare(struct rtnl_link *a, struct rtnl_link *b,
> return ret;
> }
>
> +/**
> + * Compare link info data
> + * @arg a Link object a
> + * @arg b Link object b
> + *
> + * This function will compare link_info data between two links
> + * a and b
> + *
> + * @return 0 if link_info data matches or is not present
> + * or != 0 if it mismatches.
> + */
> +int rtnl_link_info_data_compare(struct rtnl_link *a, struct rtnl_link *b)
> +{
> + if (a->l_info_ops != b->l_info_ops)
> + return ~0;
> +
> + if (!a->l_info_ops || !a->l_info_ops->io_compare)
> + return 0;
> +
> + return a->l_info_ops->io_compare(a, b, ~0, 0);
> +}
> +
> /** @} */
>
> /** @} */
More information about the libnl
mailing list