diff --git a/include/netlink/route/classifier.h b/include/netlink/route/classifier.h index 01a26a9..b434000 100644 --- a/include/netlink/route/classifier.h +++ b/include/netlink/route/classifier.h @@ -42,7 +42,8 @@ extern int rtnl_cls_delete(struct nl_sock *, struct rtnl_cls *, int); extern void rtnl_cls_set_ifindex(struct rtnl_cls *, int); extern void rtnl_cls_set_handle(struct rtnl_cls *, uint32_t); extern void rtnl_cls_set_parent(struct rtnl_cls *, uint32_t); -extern void rtnl_cls_set_kind(struct rtnl_cls *, const char *); +extern int rtnl_cls_set_kind(struct rtnl_cls *, const char *); +extern struct rtnl_cls_ops *rtnl_cls_get_ops(struct rtnl_cls *); extern void rtnl_cls_set_prio(struct rtnl_cls *, uint16_t); extern uint16_t rtnl_cls_get_prio(struct rtnl_cls *); diff --git a/lib/route/cls_obj.c b/lib/route/cls_obj.c index 6c92572..217b6d0 100644 --- a/lib/route/cls_obj.c +++ b/lib/route/cls_obj.c @@ -143,10 +143,20 @@ void rtnl_cls_set_parent(struct rtnl_cls *f, uint32_t parent) tca_set_parent((struct rtnl_tca *) f, parent); } -void rtnl_cls_set_kind(struct rtnl_cls *f, const char *kind) +int rtnl_cls_set_kind(struct rtnl_cls *f, const char *kind) { tca_set_kind((struct rtnl_tca *) f, kind); + f->c_ops = __rtnl_cls_lookup_ops(kind); + if (f->c_ops == NULL) + return -NLE_OBJ_NOTFOUND; + + return 0; +} + +struct rtnl_cls_ops *rtnl_cls_get_ops(struct rtnl_cls *cls) +{ + return cls->c_ops; } void rtnl_cls_set_prio(struct rtnl_cls *cls, uint16_t prio)