• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * netlink-private/route/tc-api.h	Traffic Control API
3  *
4  *	This library is free software; you can redistribute it and/or
5  *	modify it under the terms of the GNU Lesser General Public
6  *	License as published by the Free Software Foundation version 2.1
7  *	of the License.
8  *
9  * Copyright (c) 2011-2013 Thomas Graf <tgraf@suug.ch>
10  */
11 
12 #ifndef NETLINK_TC_API_H_
13 #define NETLINK_TC_API_H_
14 
15 #include <netlink/netlink.h>
16 #include <netlink/msg.h>
17 #include <netlink/route/tc.h>
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /**
24  * Traffic control object operations
25  * @ingroup tc
26  *
27  * This structure holds function pointers and settings implementing
28  * the features of each traffic control object implementation.
29  */
30 struct rtnl_tc_ops
31 {
32 	/**
33 	 * Name of traffic control module
34 	 */
35 	char *to_kind;
36 
37 	/**
38 	 * Type of traffic control object
39 	 */
40 	enum rtnl_tc_type to_type;
41 
42 
43 	/**
44 	 * Size of private data
45 	 */
46 	size_t to_size;
47 
48 	/**
49 	 * Dump callbacks
50 	 */
51 	void (*to_dump[NL_DUMP_MAX+1])(struct rtnl_tc *, void *,
52 				       struct nl_dump_params *);
53 	/**
54 	 * Used to fill the contents of TCA_OPTIONS
55 	 */
56 	int (*to_msg_fill)(struct rtnl_tc *, void *, struct nl_msg *);
57 
58 	/**
59 	 * Uesd to to fill tc related messages, unlike with to_msg_fill,
60 	 * the contents is not encapsulated with a TCA_OPTIONS nested
61 	 * attribute.
62 	 */
63 	int (*to_msg_fill_raw)(struct rtnl_tc *, void *, struct nl_msg *);
64 
65 	/**
66 	 * TCA_OPTIONS message parser
67 	 */
68 	int (*to_msg_parser)(struct rtnl_tc *, void *);
69 
70 	/**
71 	 * Called before a tc object is destroyed
72 	 */
73 	void (*to_free_data)(struct rtnl_tc *, void *);
74 
75 	/**
76 	 * Called whenever a classifier object needs to be cloned
77 	 */
78 	int (*to_clone)(void *, void *);
79 
80 	/**
81 	 * Internal, don't touch
82 	 */
83 	struct nl_list_head to_list;
84 };
85 
86 struct rtnl_tc_type_ops
87 {
88 	enum rtnl_tc_type tt_type;
89 
90 	char *tt_dump_prefix;
91 
92 	/**
93 	 * Dump callbacks
94 	 */
95 	void (*tt_dump[NL_DUMP_MAX+1])(struct rtnl_tc *,
96 				        struct nl_dump_params *);
97 };
98 
99 extern int			rtnl_tc_msg_parse(struct nlmsghdr *,
100 						  struct rtnl_tc *);
101 extern int			rtnl_tc_msg_build(struct rtnl_tc *, int,
102 						  int, struct nl_msg **);
103 
104 extern void			rtnl_tc_free_data(struct nl_object *);
105 extern int			rtnl_tc_clone(struct nl_object *,
106 					      struct nl_object *);
107 extern void			rtnl_tc_dump_line(struct nl_object *,
108 						  struct nl_dump_params *);
109 extern void			rtnl_tc_dump_details(struct nl_object *,
110 						     struct nl_dump_params *);
111 extern void			rtnl_tc_dump_stats(struct nl_object *,
112 						   struct nl_dump_params *);
113 extern uint64_t			rtnl_tc_compare(struct nl_object *,
114 						struct nl_object *,
115 						uint64_t, int);
116 
117 void *                          rtnl_tc_data_peek(struct rtnl_tc *tc);
118 extern void *			rtnl_tc_data(struct rtnl_tc *);
119 extern void *			rtnl_tc_data_check(struct rtnl_tc *,
120 						   struct rtnl_tc_ops *, int *);
121 
122 extern struct rtnl_tc_ops *	rtnl_tc_lookup_ops(enum rtnl_tc_type,
123 						   const char *);
124 extern struct rtnl_tc_ops *	rtnl_tc_get_ops(struct rtnl_tc *);
125 extern int 			rtnl_tc_register(struct rtnl_tc_ops *);
126 extern void 			rtnl_tc_unregister(struct rtnl_tc_ops *);
127 
128 extern void			rtnl_tc_type_register(struct rtnl_tc_type_ops *);
129 extern void			rtnl_tc_type_unregister(struct rtnl_tc_type_ops *);
130 
131 #ifdef __cplusplus
132 }
133 #endif
134 
135 #endif
136