summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCong Wang <xiyou.wangcong@gmail.com>2015-03-04 06:05:34 (GMT)
committerThomas Haller <thaller@redhat.com>2015-03-04 19:31:37 (GMT)
commitd8f080d94fa9cf5e977f8805446ac7ef39f82d31 (patch)
tree172d57eea702c30ee11f36ca6b1bf41686d3df82
parent337af717202e580a1f171c58ef0e33a196d52c73 (diff)
downloadlibnl-d8f080d94fa9cf5e977f8805446ac7ef39f82d31.zip
libnl-d8f080d94fa9cf5e977f8805446ac7ef39f82d31.tar.gz
libnl-d8f080d94fa9cf5e977f8805446ac7ef39f82d31.tar.bz2
cls: add rtnl_u32_get_classid() API
[thaller@redhat.com: modified patch to use rtnl_tc_data_peek()] http://lists.infradead.org/pipermail/libnl/2015-March/001841.html Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
-rw-r--r--include/netlink/route/cls/u32.h1
-rw-r--r--lib/route/cls/u32.c14
-rw-r--r--libnl-route-3.sym1
3 files changed, 16 insertions, 0 deletions
diff --git a/include/netlink/route/cls/u32.h b/include/netlink/route/cls/u32.h
index 4567e16..151c818 100644
--- a/include/netlink/route/cls/u32.h
+++ b/include/netlink/route/cls/u32.h
@@ -23,6 +23,7 @@ extern "C" {
extern void rtnl_u32_set_handle(struct rtnl_cls *, int, int, int);
extern int rtnl_u32_set_classid(struct rtnl_cls *, uint32_t);
+extern int rtnl_u32_get_classid(struct rtnl_cls *, uint32_t *);
extern int rtnl_u32_set_divisor(struct rtnl_cls *, uint32_t);
extern int rtnl_u32_set_link(struct rtnl_cls *, uint32_t);
extern int rtnl_u32_set_hashtable(struct rtnl_cls *, uint32_t);
diff --git a/lib/route/cls/u32.c b/lib/route/cls/u32.c
index 1912533..8ffca07 100644
--- a/lib/route/cls/u32.c
+++ b/lib/route/cls/u32.c
@@ -415,6 +415,20 @@ int rtnl_u32_set_classid(struct rtnl_cls *cls, uint32_t classid)
return 0;
}
+int rtnl_u32_get_classid(struct rtnl_cls *cls, uint32_t *classid)
+{
+ struct rtnl_u32 *u;
+
+ if (!(u = rtnl_tc_data_peek(TC_CAST(cls))))
+ return -NLE_INVAL;
+
+ if (!(u->cu_mask & U32_ATTR_CLASSID))
+ return -NLE_INVAL;
+
+ *classid = u->cu_classid;
+ return 0;
+}
+
int rtnl_u32_set_divisor(struct rtnl_cls *cls, uint32_t divisor)
{
struct rtnl_u32 *u;
diff --git a/libnl-route-3.sym b/libnl-route-3.sym
index 9093149..139a499 100644
--- a/libnl-route-3.sym
+++ b/libnl-route-3.sym
@@ -864,4 +864,5 @@ global:
rtnl_tc_str2stat;
rtnl_u32_add_mark;
rtnl_u32_del_mark;
+ rtnl_u32_get_classid;
} libnl_3;