]>
git.proxmox.com Git - mirror_iproute2.git/blob - tc/tc_util.h
1 /* SPDX-License-Identifier: GPL-2.0 */
10 #include <linux/pkt_sched.h>
11 #include <linux/pkt_cls.h>
12 #include <linux/gen_stats.h>
15 #include "json_print.h"
17 /* This is the deprecated multiqueue interface */
26 #define TCA_PRIO_MAX (__TCA_PRIO_MAX - 1)
29 #define FILTER_NAMESZ 16
32 struct qdisc_util
*next
;
34 int (*parse_qopt
)(struct qdisc_util
*qu
, int argc
,
35 char **argv
, struct nlmsghdr
*n
, const char *dev
);
36 int (*print_qopt
)(struct qdisc_util
*qu
,
37 FILE *f
, struct rtattr
*opt
);
38 int (*print_xstats
)(struct qdisc_util
*qu
,
39 FILE *f
, struct rtattr
*xstats
);
41 int (*parse_copt
)(struct qdisc_util
*qu
, int argc
,
42 char **argv
, struct nlmsghdr
*n
, const char *dev
);
43 int (*print_copt
)(struct qdisc_util
*qu
, FILE *f
, struct rtattr
*opt
);
44 int (*has_block
)(struct qdisc_util
*qu
, struct rtattr
*opt
, __u32 block_idx
, bool *p_has
);
49 struct filter_util
*next
;
50 char id
[FILTER_NAMESZ
];
51 int (*parse_fopt
)(struct filter_util
*qu
, char *fhandle
,
52 int argc
, char **argv
, struct nlmsghdr
*n
);
53 int (*print_fopt
)(struct filter_util
*qu
,
54 FILE *f
, struct rtattr
*opt
, __u32 fhandle
);
58 struct action_util
*next
;
59 char id
[FILTER_NAMESZ
];
60 int (*parse_aopt
)(struct action_util
*a
, int *argc
,
61 char ***argv
, int code
, struct nlmsghdr
*n
);
62 int (*print_aopt
)(struct action_util
*au
, FILE *f
, struct rtattr
*opt
);
63 int (*print_xstats
)(struct action_util
*au
,
64 FILE *f
, struct rtattr
*xstats
);
68 struct exec_util
*next
;
69 char id
[FILTER_NAMESZ
];
70 int (*parse_eopt
)(struct exec_util
*eu
, int argc
, char **argv
);
73 const char *get_tc_lib(void);
75 struct qdisc_util
*get_qdisc_kind(const char *str
);
76 struct filter_util
*get_filter_kind(const char *str
);
78 int get_qdisc_handle(__u32
*h
, const char *str
);
79 int get_percent_rate(unsigned int *rate
, const char *str
, const char *dev
);
80 int get_percent_rate64(__u64
*rate
, const char *str
, const char *dev
);
81 int get_size_and_cell(unsigned int *size
, int *cell_log
, char *str
);
82 int get_linklayer(unsigned int *val
, const char *arg
);
84 void tc_print_rate(enum output_type t
, const char *key
, const char *fmt
,
85 unsigned long long rate
);
86 void print_devname(enum output_type type
, int ifindex
);
88 char *sprint_tc_classid(__u32 h
, char *buf
);
89 char *sprint_ticks(__u32 ticks
, char *buf
);
90 char *sprint_linklayer(unsigned int linklayer
, char *buf
);
92 void print_tcstats_attr(FILE *fp
, struct rtattr
*tb
[],
93 char *prefix
, struct rtattr
**xstats
);
94 void print_tcstats2_attr(FILE *fp
, struct rtattr
*rta
,
95 char *prefix
, struct rtattr
**xstats
);
97 int get_tc_classid(__u32
*h
, const char *str
);
98 int print_tc_classid(char *buf
, int len
, __u32 h
);
99 char *sprint_tc_classid(__u32 h
, char *buf
);
101 int tc_print_police(FILE *f
, struct rtattr
*tb
);
102 int parse_percent(double *val
, const char *str
);
103 int parse_police(int *argc_p
, char ***argv_p
, int tca_id
, struct nlmsghdr
*n
);
105 int parse_action_control(int *argc_p
, char ***argv_p
,
106 int *result_p
, bool allow_num
);
107 void parse_action_control_dflt(int *argc_p
, char ***argv_p
,
108 int *result_p
, bool allow_num
,
110 int parse_action_control_slash(int *argc_p
, char ***argv_p
,
111 int *result1_p
, int *result2_p
, bool allow_num
);
112 void print_action_control(FILE *f
, const char *prefix
,
113 int action
, const char *suffix
);
114 int police_print_xstats(struct action_util
*a
, FILE *f
, struct rtattr
*tb
);
115 int tc_print_action(FILE *f
, const struct rtattr
*tb
, unsigned short tot_acts
);
116 int tc_print_ipt(FILE *f
, const struct rtattr
*tb
);
117 int parse_action(int *argc_p
, char ***argv_p
, int tca_id
, struct nlmsghdr
*n
);
118 void print_tm(FILE *f
, const struct tcf_t
*tm
);
119 int prio_print_opt(struct qdisc_util
*qu
, FILE *f
, struct rtattr
*opt
);
121 int cls_names_init(char *path
);
122 void cls_names_uninit(void);
124 int action_a2n(char *arg
, int *result
, bool allow_num
);
126 bool tc_qdisc_block_exists(__u32 block_index
);
128 void print_masked_u32(const char *name
, struct rtattr
*attr
,
129 struct rtattr
*mask_attr
, bool newline
);
130 void print_masked_u16(const char *name
, struct rtattr
*attr
,
131 struct rtattr
*mask_attr
, bool newline
);
132 void print_masked_u8(const char *name
, struct rtattr
*attr
,
133 struct rtattr
*mask_attr
, bool newline
);
134 void print_masked_be16(const char *name
, struct rtattr
*attr
,
135 struct rtattr
*mask_attr
, bool newline
);