diff options
author | roopa <roopa@cumulusnetworks.com> | 2013-01-18 00:29:03 (GMT) |
---|---|---|
committer | Thomas Graf <tgraf@suug.ch> | 2013-01-18 13:41:58 (GMT) |
commit | 99399ca9c07499cfeadf4a24a9b66006d3b48b40 (patch) | |
tree | 0de812b930eb5eaf881a67acb6ea9922476aeb16 /lib/route/link/api.c | |
parent | 6b4a2cb634701b72eba6c50220611d0787ec4601 (diff) | |
download | libnl-99399ca9c07499cfeadf4a24a9b66006d3b48b40.zip libnl-99399ca9c07499cfeadf4a24a9b66006d3b48b40.tar.gz libnl-99399ca9c07499cfeadf4a24a9b66006d3b48b40.tar.bz2 |
Add new rtnl_link_af_data_compare function to compare af_data
This patch adds a new api rtnl_linl_af_data_compare to
compare link af_data
Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Diffstat (limited to 'lib/route/link/api.c')
-rw-r--r-- | lib/route/link/api.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/route/link/api.c b/lib/route/link/api.c index a12eb09..9387bc5 100644 --- a/lib/route/link/api.c +++ b/lib/route/link/api.c @@ -350,6 +350,38 @@ errout: return err; } +/** + * Compare af data for a link address family + * @arg a Link object a + * @arg b Link object b + * @arg family af data family + * + * This function will compare af_data between two links + * a and b of family given by arg family + * + * @return 0 if address family specific data matches or is not present + * or != 0 if it mismatches. + */ +int rtnl_link_af_data_compare(struct rtnl_link *a, struct rtnl_link *b, + int family) +{ + struct rtnl_link_af_ops *af_ops = rtnl_link_af_ops_lookup(family); + + if (!af_ops) + return ~0; + + if (!a->l_af_data[family] && !b->l_af_data[family]) + return 0; + + if (!a->l_af_data[family] || !b->l_af_data[family]) + return ~0; + + if (af_ops->ao_compare) + return af_ops->ao_compare(a, b, family, ~0, 0); + + return 0; +} + /** @} */ /** @} */ |