1aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef _TC_UTIL_H_
2aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define _TC_UTIL_H_ 1
3aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
42373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemminger#define MAX_MSG 16384
5aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <linux/pkt_sched.h>
6aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <linux/pkt_cls.h>
7e5879dc603ca2e9f27ca6d754fdf5e20f8072344ch[shemminger]!tgraf#include <linux/gen_stats.h>
8aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include "tc_core.h"
9aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
106644900d2116a2a397bf0ed26ffd845ca2136b52San Mehat#ifndef MIN
116644900d2116a2a397bf0ed26ffd845ca2136b52San Mehat#define MIN(x,y)        ((x)<(y)?(x):(y))
126644900d2116a2a397bf0ed26ffd845ca2136b52San Mehat#endif
136644900d2116a2a397bf0ed26ffd845ca2136b52San Mehat
145a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger/* This is the deprecated multiqueue interface */
155a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger#ifndef TCA_PRIO_MAX
165a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemmingerenum
175a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger{
185a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger	TCA_PRIO_UNSPEC,
195a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger	TCA_PRIO_MQ,
205a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger	__TCA_PRIO_MAX
215a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger};
225a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger
235a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger#define TCA_PRIO_MAX    (__TCA_PRIO_MAX - 1)
245a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger#endif
255a67f8f9d3a7f80a49554fb1ca4e68a1effd5399Stephen Hemminger
26aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstruct qdisc_util
27aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{
282373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemminger	struct  qdisc_util *next;
296dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemminger	const char *id;
30aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	int	(*parse_qopt)(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n);
31aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	int	(*print_qopt)(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
32aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	int 	(*print_xstats)(struct qdisc_util *qu, FILE *f, struct rtattr *xstats);
33aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
34aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	int	(*parse_copt)(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n);
35aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	int	(*print_copt)(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
36aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger};
37aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
38eefcbc72062a235efe391163962f7353dba1af4cjamalextern __u16 f_proto;
39aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstruct filter_util
40aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{
41aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	struct filter_util *next;
42aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	char	id[16];
43ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger	int	(*parse_fopt)(struct filter_util *qu, char *fhandle, int argc,
4499475d054bbef0a41f2741a9577a1bb57cf4f1e7osdl.net!shemminger			      char **argv, struct nlmsghdr *n);
45aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	int	(*print_fopt)(struct filter_util *qu, FILE *f, struct rtattr *opt, __u32 fhandle);
46aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger};
47aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
482373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemmingerstruct action_util
492373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemminger{
502373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemminger	struct  action_util *next;
512373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemminger	char    id[16];
52ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger	int     (*parse_aopt)(struct action_util *a, int *argc, char ***argv,
5399475d054bbef0a41f2741a9577a1bb57cf4f1e7osdl.net!shemminger			      int code, struct nlmsghdr *n);
542373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemminger	int     (*print_aopt)(struct action_util *au, FILE *f, struct rtattr *opt);
552373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemminger	int     (*print_xstats)(struct action_util *au, FILE *f, struct rtattr *xstats);
562373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemminger};
57aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
58aa27f88c8444ad6a87ebb563d6ffacb4fe95d87cStephen Hemmingerextern const char *get_tc_lib(void);
59aa27f88c8444ad6a87ebb563d6ffacb4fe95d87cStephen Hemminger
604094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemmingerextern struct qdisc_util *get_qdisc_kind(const char *str);
614094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemmingerextern struct filter_util *get_filter_kind(const char *str);
62aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
634094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemmingerextern int get_qdisc_handle(__u32 *h, const char *str);
644094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemmingerextern int get_rate(unsigned *rate, const char *str);
654094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemmingerextern int get_size(unsigned *size, const char *str);
66aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int get_size_and_cell(unsigned *size, int *cell_log, char *str);
678f34caafbdbc8f87d228d577872591e138caadb1Patrick McHardyextern int get_time(unsigned *time, const char *str);
68292f29b42c3444375b5ae7086484c99da7129d94Jesper Dangaard Brouerextern int get_linklayer(unsigned *val, const char *arg);
69292f29b42c3444375b5ae7086484c99da7129d94Jesper Dangaard Brouer
709615dc1da4ce4cefff0cf605eab800c62a51e7ffosdl.net!shemmingerextern void print_rate(char *buf, int len, __u32 rate);
719615dc1da4ce4cefff0cf605eab800c62a51e7ffosdl.net!shemmingerextern void print_size(char *buf, int len, __u32 size);
729615dc1da4ce4cefff0cf605eab800c62a51e7ffosdl.net!shemmingerextern void print_qdisc_handle(char *buf, int len, __u32 h);
738f34caafbdbc8f87d228d577872591e138caadb1Patrick McHardyextern void print_time(char *buf, int len, __u32 time);
74839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinnaextern void print_linklayer(char *buf, int len, unsigned linklayer);
75aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern char * sprint_rate(__u32 rate, char *buf);
76aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern char * sprint_size(__u32 size, char *buf);
77aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern char * sprint_qdisc_handle(__u32 h, char *buf);
78aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern char * sprint_tc_classid(__u32 h, char *buf);
798f34caafbdbc8f87d228d577872591e138caadb1Patrick McHardyextern char * sprint_time(__u32 time, char *buf);
80bd29e35d9de9dc0b9015dd3a178ee2c716ce8301Patrick McHardyextern char * sprint_ticks(__u32 ticks, char *buf);
81839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinnaextern char * sprint_linklayer(unsigned linklayer, char *buf);
82aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
83e5879dc603ca2e9f27ca6d754fdf5e20f8072344ch[shemminger]!tgrafextern void print_tcstats_attr(FILE *fp, struct rtattr *tb[], char *prefix, struct rtattr **xstats);
84e5879dc603ca2e9f27ca6d754fdf5e20f8072344ch[shemminger]!tgrafextern void print_tcstats2_attr(FILE *fp, struct rtattr *rta, char *prefix, struct rtattr **xstats);
85aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
864094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemmingerextern int get_tc_classid(__u32 *h, const char *str);
87aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int print_tc_classid(char *buf, int len, __u32 h);
88aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern char * sprint_tc_classid(__u32 h, char *buf);
89aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
90aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int tc_print_police(FILE *f, struct rtattr *tb);
91aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int parse_police(int *, char ***, int, struct nlmsghdr *);
92aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
932373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemmingerextern char *action_n2a(int action, char *buf, int len);
942373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemmingerextern int  action_a2n(char *arg, int *result);
952373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemmingerextern int  act_parse_police(struct action_util *a,int *, char ***, int, struct nlmsghdr *);
96ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemmingerextern int  print_police(struct action_util *a, FILE *f,
976dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemminger			 struct rtattr *tb);
98ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemmingerextern int  police_print_xstats(struct action_util *a,FILE *f,
996dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemminger				struct rtattr *tb);
1006dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemmingerextern int  tc_print_action(FILE *f, const struct rtattr *tb);
1016dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemmingerextern int  tc_print_ipt(FILE *f, const struct rtattr *tb);
1022373fde9b0ba14c1758290a68332f1af9882abc0osdl.net!shemmingerextern int  parse_action(int *, char ***, int, struct nlmsghdr *);
1036dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemmingerextern void print_tm(FILE *f, const struct tcf_t *tm);
104aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
105aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#endif
106