blob: 61e60b1c55b7081825809f68fd3505d16cf77545 [file] [log] [blame]
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +00001#ifndef _TC_UTIL_H_
2#define _TC_UTIL_H_ 1
3
osdl.net!shemminger2373fde2004-08-13 23:54:55 +00004#define MAX_MSG 16384
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +00005#include <linux/pkt_sched.h>
6#include <linux/pkt_cls.h>
ch[shemminger]!tgrafe5879dc2004-12-07 23:52:52 +00007#include <linux/gen_stats.h>
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +00008#include "tc_core.h"
9
Stephen Hemminger5a67f8f2008-09-15 12:05:11 -070010/* This is the deprecated multiqueue interface */
11#ifndef TCA_PRIO_MAX
12enum
13{
14 TCA_PRIO_UNSPEC,
15 TCA_PRIO_MQ,
16 __TCA_PRIO_MAX
17};
18
19#define TCA_PRIO_MAX (__TCA_PRIO_MAX - 1)
20#endif
21
Daniel Borkmann4bd62442015-04-16 21:20:06 +020022struct qdisc_util {
osdl.net!shemminger2373fde2004-08-13 23:54:55 +000023 struct qdisc_util *next;
osdl.net!shemminger6dc9f012004-08-31 17:45:21 +000024 const char *id;
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000025 int (*parse_qopt)(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n);
26 int (*print_qopt)(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
27 int (*print_xstats)(struct qdisc_util *qu, FILE *f, struct rtattr *xstats);
28
29 int (*parse_copt)(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n);
30 int (*print_copt)(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
31};
32
jamaleefcbc72008-04-20 10:47:48 -040033extern __u16 f_proto;
Daniel Borkmann4bd62442015-04-16 21:20:06 +020034struct filter_util {
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000035 struct filter_util *next;
36 char id[16];
Stephen Hemmingerae665a52006-12-05 10:10:22 -080037 int (*parse_fopt)(struct filter_util *qu, char *fhandle, int argc,
osdl.net!shemminger99475d02004-09-28 18:35:49 +000038 char **argv, struct nlmsghdr *n);
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000039 int (*print_fopt)(struct filter_util *qu, FILE *f, struct rtattr *opt, __u32 fhandle);
40};
41
Daniel Borkmann4bd62442015-04-16 21:20:06 +020042struct action_util {
osdl.net!shemminger2373fde2004-08-13 23:54:55 +000043 struct action_util *next;
44 char id[16];
Stephen Hemmingerae665a52006-12-05 10:10:22 -080045 int (*parse_aopt)(struct action_util *a, int *argc, char ***argv,
osdl.net!shemminger99475d02004-09-28 18:35:49 +000046 int code, struct nlmsghdr *n);
osdl.net!shemminger2373fde2004-08-13 23:54:55 +000047 int (*print_aopt)(struct action_util *au, FILE *f, struct rtattr *opt);
48 int (*print_xstats)(struct action_util *au, FILE *f, struct rtattr *xstats);
osdl.net!shemminger2373fde2004-08-13 23:54:55 +000049};
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000050
Daniel Borkmann4bd62442015-04-16 21:20:06 +020051struct exec_util {
52 struct exec_util *next;
53 char id[16];
54 int (*parse_eopt)(struct exec_util *eu, int argc, char **argv);
55};
56
Stephen Hemmingeraa27f882007-06-20 15:27:22 -070057extern const char *get_tc_lib(void);
58
osdl.org!shemminger4094db72004-06-02 20:22:08 +000059extern struct qdisc_util *get_qdisc_kind(const char *str);
60extern struct filter_util *get_filter_kind(const char *str);
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000061
osdl.org!shemminger4094db72004-06-02 20:22:08 +000062extern int get_qdisc_handle(__u32 *h, const char *str);
63extern int get_rate(unsigned *rate, const char *str);
Eric Dumazet8334bb32013-11-12 14:34:07 -080064extern int get_rate64(__u64 *rate, const char *str);
osdl.org!shemminger4094db72004-06-02 20:22:08 +000065extern int get_size(unsigned *size, const char *str);
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000066extern int get_size_and_cell(unsigned *size, int *cell_log, char *str);
Patrick McHardy8f34caa2007-03-04 20:15:00 +010067extern int get_time(unsigned *time, const char *str);
Jesper Dangaard Brouer292f29b2008-04-09 23:01:01 +020068extern int get_linklayer(unsigned *val, const char *arg);
69
Eric Dumazet8f7574e2013-09-17 04:19:03 -070070extern void print_rate(char *buf, int len, __u64 rate);
osdl.net!shemminger9615dc12004-06-28 20:42:59 +000071extern void print_size(char *buf, int len, __u32 size);
osdl.net!shemminger9615dc12004-06-28 20:42:59 +000072extern void print_qdisc_handle(char *buf, int len, __u32 h);
Patrick McHardy8f34caa2007-03-04 20:15:00 +010073extern void print_time(char *buf, int len, __u32 time);
Jussi Kivilinna839c8452008-07-25 16:19:09 +030074extern void print_linklayer(char *buf, int len, unsigned linklayer);
Daniel Borkmann4bd62442015-04-16 21:20:06 +020075
Eric Dumazet8f7574e2013-09-17 04:19:03 -070076extern char * sprint_rate(__u64 rate, char *buf);
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000077extern char * sprint_size(__u32 size, char *buf);
78extern char * sprint_qdisc_handle(__u32 h, char *buf);
79extern char * sprint_tc_classid(__u32 h, char *buf);
Patrick McHardy8f34caa2007-03-04 20:15:00 +010080extern char * sprint_time(__u32 time, char *buf);
Patrick McHardybd29e352007-03-04 20:15:01 +010081extern char * sprint_ticks(__u32 ticks, char *buf);
Jussi Kivilinna839c8452008-07-25 16:19:09 +030082extern char * sprint_linklayer(unsigned linklayer, char *buf);
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000083
ch[shemminger]!tgrafe5879dc2004-12-07 23:52:52 +000084extern void print_tcstats_attr(FILE *fp, struct rtattr *tb[], char *prefix, struct rtattr **xstats);
85extern void print_tcstats2_attr(FILE *fp, struct rtattr *rta, char *prefix, struct rtattr **xstats);
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000086
osdl.org!shemminger4094db72004-06-02 20:22:08 +000087extern int get_tc_classid(__u32 *h, const char *str);
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +000088extern int print_tc_classid(char *buf, int len, __u32 h);
89extern char * sprint_tc_classid(__u32 h, char *buf);
90
91extern int tc_print_police(FILE *f, struct rtattr *tb);
92extern int parse_police(int *, char ***, int, struct nlmsghdr *);
93
osdl.net!shemminger2373fde2004-08-13 23:54:55 +000094extern char *action_n2a(int action, char *buf, int len);
95extern int action_a2n(char *arg, int *result);
96extern int act_parse_police(struct action_util *a,int *, char ***, int, struct nlmsghdr *);
Stephen Hemmingerae665a52006-12-05 10:10:22 -080097extern int print_police(struct action_util *a, FILE *f,
osdl.net!shemminger6dc9f012004-08-31 17:45:21 +000098 struct rtattr *tb);
Stephen Hemmingerae665a52006-12-05 10:10:22 -080099extern int police_print_xstats(struct action_util *a,FILE *f,
osdl.net!shemminger6dc9f012004-08-31 17:45:21 +0000100 struct rtattr *tb);
101extern int tc_print_action(FILE *f, const struct rtattr *tb);
102extern int tc_print_ipt(FILE *f, const struct rtattr *tb);
osdl.net!shemminger2373fde2004-08-13 23:54:55 +0000103extern int parse_action(int *, char ***, int, struct nlmsghdr *);
osdl.net!shemminger6dc9f012004-08-31 17:45:21 +0000104extern void print_tm(FILE *f, const struct tcf_t *tm);
Stephen Hemmingerd1f28cf2013-02-12 11:09:03 -0800105extern int prio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +0000106
Vadim Kochan4612d042015-03-03 18:41:18 +0200107extern int cls_names_init(char *path);
108extern void cls_names_uninit(void);
109
osdl.org!shemmingeraba5acd2004-04-15 20:56:59 +0000110#endif