iproute2/tc/tc_util.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _TC_UTIL_H_
   3#define _TC_UTIL_H_ 1
   4
   5#define MAX_MSG 16384
   6#include <limits.h>
   7#include <linux/if.h>
   8#include <stdbool.h>
   9
  10#include <linux/pkt_sched.h>
  11#include <linux/pkt_cls.h>
  12#include <linux/gen_stats.h>
  13
  14#include "tc_core.h"
  15#include "json_print.h"
  16
  17/* This is the deprecated multiqueue interface */
  18#ifndef TCA_PRIO_MAX
  19enum
  20{
  21        TCA_PRIO_UNSPEC,
  22        TCA_PRIO_MQ,
  23        __TCA_PRIO_MAX
  24};
  25
  26#define TCA_PRIO_MAX    (__TCA_PRIO_MAX - 1)
  27#endif
  28
  29#define FILTER_NAMESZ   16
  30
  31struct qdisc_util {
  32        struct  qdisc_util *next;
  33        const char *id;
  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);
  40
  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);
  45};
  46
  47extern __u16 f_proto;
  48struct filter_util {
  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);
  55};
  56
  57struct action_util {
  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);
  65};
  66
  67struct exec_util {
  68        struct exec_util *next;
  69        char id[FILTER_NAMESZ];
  70        int (*parse_eopt)(struct exec_util *eu, int argc, char **argv);
  71};
  72
  73const char *get_tc_lib(void);
  74
  75struct qdisc_util *get_qdisc_kind(const char *str);
  76struct filter_util *get_filter_kind(const char *str);
  77
  78int get_qdisc_handle(__u32 *h, const char *str);
  79int get_percent_rate(unsigned int *rate, const char *str, const char *dev);
  80int get_percent_rate64(__u64 *rate, const char *str, const char *dev);
  81int get_size_and_cell(unsigned int *size, int *cell_log, char *str);
  82int get_linklayer(unsigned int *val, const char *arg);
  83
  84void tc_print_rate(enum output_type t, const char *key, const char *fmt,
  85                   unsigned long long rate);
  86void print_devname(enum output_type type, int ifindex);
  87
  88char *sprint_tc_classid(__u32 h, char *buf);
  89char *sprint_ticks(__u32 ticks, char *buf);
  90char *sprint_linklayer(unsigned int linklayer, char *buf);
  91
  92void print_tcstats_attr(FILE *fp, struct rtattr *tb[],
  93                        char *prefix, struct rtattr **xstats);
  94void print_tcstats2_attr(FILE *fp, struct rtattr *rta,
  95                         char *prefix, struct rtattr **xstats);
  96
  97int get_tc_classid(__u32 *h, const char *str);
  98int print_tc_classid(char *buf, int len, __u32 h);
  99char *sprint_tc_classid(__u32 h, char *buf);
 100
 101int tc_print_police(FILE *f, struct rtattr *tb);
 102int parse_percent(double *val, const char *str);
 103int parse_police(int *argc_p, char ***argv_p, int tca_id, struct nlmsghdr *n);
 104
 105int parse_action_control(int *argc_p, char ***argv_p,
 106                         int *result_p, bool allow_num);
 107void parse_action_control_dflt(int *argc_p, char ***argv_p,
 108                               int *result_p, bool allow_num,
 109                               int default_result);
 110int parse_action_control_slash(int *argc_p, char ***argv_p,
 111                               int *result1_p, int *result2_p, bool allow_num);
 112void print_action_control(FILE *f, const char *prefix,
 113                          int action, const char *suffix);
 114int police_print_xstats(struct action_util *a, FILE *f, struct rtattr *tb);
 115int tc_print_action(FILE *f, const struct rtattr *tb, unsigned short tot_acts);
 116int tc_print_ipt(FILE *f, const struct rtattr *tb);
 117int parse_action(int *argc_p, char ***argv_p, int tca_id, struct nlmsghdr *n);
 118void print_tm(FILE *f, const struct tcf_t *tm);
 119int prio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
 120
 121int cls_names_init(char *path);
 122void cls_names_uninit(void);
 123
 124int action_a2n(char *arg, int *result, bool allow_num);
 125
 126bool tc_qdisc_block_exists(__u32 block_index);
 127
 128void print_masked_u32(const char *name, struct rtattr *attr,
 129                      struct rtattr *mask_attr, bool newline);
 130void print_masked_u16(const char *name, struct rtattr *attr,
 131                      struct rtattr *mask_attr, bool newline);
 132void print_masked_u8(const char *name, struct rtattr *attr,
 133                     struct rtattr *mask_attr, bool newline);
 134void print_masked_be16(const char *name, struct rtattr *attr,
 135                       struct rtattr *mask_attr, bool newline);
 136#endif
 137