18 #include <netlink-local.h>
19 #include <netlink-tc.h>
20 #include <netlink/netlink.h>
21 #include <netlink/route/tc.h>
22 #include <netlink/route/class.h>
23 #include <netlink/route/class-modules.h>
24 #include <netlink/route/qdisc.h>
25 #include <netlink/route/classifier.h>
26 #include <netlink/utils.h>
34 struct rtnl_class *
class;
37 class = rtnl_class_alloc();
39 err = nl_errno(ENOMEM);
44 err = tca_msg_parser(n, (
struct rtnl_tca *)
class);
55 err = pp->pp_cb((
struct nl_object *)
class, pp);
62 rtnl_class_put(
class);
67 static int class_request_update(
struct nl_cache *cache,
68 struct nl_handle *handle)
70 struct tcmsg tchdr = {
71 .tcm_family = AF_UNSPEC,
72 .tcm_ifindex = cache->c_iarg1,
84 static struct nl_msg *class_build(
struct rtnl_class *
class,
int type,
int flags)
90 msg = tca_build_msg((
struct rtnl_tca *)
class, type, flags);
130 return class_build(
class, RTM_NEWTCLASS,
NLM_F_CREATE | flags);
156 return nl_errno(ENOMEM);
186 struct nl_cache * cache;
192 cache->c_iarg1 = ifindex;
205 .co_name =
"route/class",
206 .co_hdrsize =
sizeof(
struct tcmsg),
208 { RTM_NEWTCLASS, NL_ACT_NEW,
"new" },
209 { RTM_DELTCLASS, NL_ACT_DEL,
"del" },
210 { RTM_GETTCLASS, NL_ACT_GET,
"get" },
211 END_OF_MSGTYPES_LIST,
213 .co_protocol = NETLINK_ROUTE,
214 .co_request_update = &class_request_update,
215 .co_msg_parser = &class_msg_parser,
216 .co_obj_ops = &class_obj_ops,
219 static void __init class_init(
void)
224 static void __exit class_exit(
void)