1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */
2*4dc78e53SAndroid Build Coastguard Worker /*
3*4dc78e53SAndroid Build Coastguard Worker * Copyright (c) 2011-2013 Thomas Graf <[email protected]>
4*4dc78e53SAndroid Build Coastguard Worker */
5*4dc78e53SAndroid Build Coastguard Worker
6*4dc78e53SAndroid Build Coastguard Worker #ifndef NETLINK_TC_API_H_
7*4dc78e53SAndroid Build Coastguard Worker #define NETLINK_TC_API_H_
8*4dc78e53SAndroid Build Coastguard Worker
9*4dc78e53SAndroid Build Coastguard Worker #include <netlink/netlink.h>
10*4dc78e53SAndroid Build Coastguard Worker #include <netlink/msg.h>
11*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/tc.h>
12*4dc78e53SAndroid Build Coastguard Worker
13*4dc78e53SAndroid Build Coastguard Worker #include "nl-route.h"
14*4dc78e53SAndroid Build Coastguard Worker #include "nl-priv-dynamic-route/nl-priv-dynamic-route.h"
15*4dc78e53SAndroid Build Coastguard Worker #include "nl-priv-dynamic-core/nl-core.h"
16*4dc78e53SAndroid Build Coastguard Worker #include "nl-priv-dynamic-core/cache-api.h"
17*4dc78e53SAndroid Build Coastguard Worker
18*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
19*4dc78e53SAndroid Build Coastguard Worker
20*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_HANDLE 0x0001
21*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_PARENT 0x0002
22*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_IFINDEX 0x0004
23*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_KIND 0x0008
24*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_FAMILY 0x0010
25*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_INFO 0x0020
26*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_OPTS 0x0040
27*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_STATS 0x0080
28*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_XSTATS 0x0100
29*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_LINK 0x0200
30*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_MTU 0x0400
31*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_MPU 0x0800
32*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_OVERHEAD 0x1000
33*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_LINKTYPE 0x2000
34*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_CHAIN 0x4000
35*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATTR_MAX TCA_ATTR_CHAIN
36*4dc78e53SAndroid Build Coastguard Worker
37*4dc78e53SAndroid Build Coastguard Worker extern int tca_parse(struct nlattr **, int, struct rtnl_tc *,
38*4dc78e53SAndroid Build Coastguard Worker const struct nla_policy *);
39*4dc78e53SAndroid Build Coastguard Worker
40*4dc78e53SAndroid Build Coastguard Worker #define RTNL_TC_RTABLE_SIZE 256
41*4dc78e53SAndroid Build Coastguard Worker
tca_xstats(struct rtnl_tc * tca)42*4dc78e53SAndroid Build Coastguard Worker static inline void *tca_xstats(struct rtnl_tc *tca)
43*4dc78e53SAndroid Build Coastguard Worker {
44*4dc78e53SAndroid Build Coastguard Worker return tca->tc_xstats->d_data;
45*4dc78e53SAndroid Build Coastguard Worker }
46*4dc78e53SAndroid Build Coastguard Worker
47*4dc78e53SAndroid Build Coastguard Worker extern struct nl_af_group tc_groups[];
48*4dc78e53SAndroid Build Coastguard Worker
49*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
50*4dc78e53SAndroid Build Coastguard Worker
51*4dc78e53SAndroid Build Coastguard Worker struct rtnl_tc_type_ops
52*4dc78e53SAndroid Build Coastguard Worker {
53*4dc78e53SAndroid Build Coastguard Worker enum rtnl_tc_type tt_type;
54*4dc78e53SAndroid Build Coastguard Worker
55*4dc78e53SAndroid Build Coastguard Worker char *tt_dump_prefix;
56*4dc78e53SAndroid Build Coastguard Worker
57*4dc78e53SAndroid Build Coastguard Worker /**
58*4dc78e53SAndroid Build Coastguard Worker * Dump callbacks
59*4dc78e53SAndroid Build Coastguard Worker */
60*4dc78e53SAndroid Build Coastguard Worker void (*tt_dump[NL_DUMP_MAX+1])(struct rtnl_tc *,
61*4dc78e53SAndroid Build Coastguard Worker struct nl_dump_params *);
62*4dc78e53SAndroid Build Coastguard Worker };
63*4dc78e53SAndroid Build Coastguard Worker
64*4dc78e53SAndroid Build Coastguard Worker void *rtnl_tc_data_peek(struct rtnl_tc *tc);
65*4dc78e53SAndroid Build Coastguard Worker
66*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
67*4dc78e53SAndroid Build Coastguard Worker
68*4dc78e53SAndroid Build Coastguard Worker /* WARNING: the following symbols are wrongly exported in libnl-route-3
69*4dc78e53SAndroid Build Coastguard Worker * library. They are private API, but leaked. */
70*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_tc_msg_parse(struct nlmsghdr *,
71*4dc78e53SAndroid Build Coastguard Worker struct rtnl_tc *);
72*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_tc_msg_build(struct rtnl_tc *, int,
73*4dc78e53SAndroid Build Coastguard Worker int, struct nl_msg **);
74*4dc78e53SAndroid Build Coastguard Worker
75*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_tc_free_data(struct nl_object *);
76*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_tc_clone(struct nl_object *,
77*4dc78e53SAndroid Build Coastguard Worker struct nl_object *);
78*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_tc_dump_line(struct nl_object *,
79*4dc78e53SAndroid Build Coastguard Worker struct nl_dump_params *);
80*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_tc_dump_details(struct nl_object *,
81*4dc78e53SAndroid Build Coastguard Worker struct nl_dump_params *);
82*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_tc_dump_stats(struct nl_object *,
83*4dc78e53SAndroid Build Coastguard Worker struct nl_dump_params *);
84*4dc78e53SAndroid Build Coastguard Worker extern uint64_t rtnl_tc_compare(struct nl_object *,
85*4dc78e53SAndroid Build Coastguard Worker struct nl_object *,
86*4dc78e53SAndroid Build Coastguard Worker uint64_t, int);
87*4dc78e53SAndroid Build Coastguard Worker
88*4dc78e53SAndroid Build Coastguard Worker extern void * rtnl_tc_data(struct rtnl_tc *);
89*4dc78e53SAndroid Build Coastguard Worker extern void * rtnl_tc_data_check(struct rtnl_tc *,
90*4dc78e53SAndroid Build Coastguard Worker struct rtnl_tc_ops *, int *);
91*4dc78e53SAndroid Build Coastguard Worker
92*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_tc_register(struct rtnl_tc_ops *);
93*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_tc_unregister(struct rtnl_tc_ops *);
94*4dc78e53SAndroid Build Coastguard Worker
95*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_tc_type_register(struct rtnl_tc_type_ops *);
96*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_tc_type_unregister(struct rtnl_tc_type_ops *);
97*4dc78e53SAndroid Build Coastguard Worker
98*4dc78e53SAndroid Build Coastguard Worker
99*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_tc_build_rate_table(struct rtnl_tc *tc, struct rtnl_ratespec *,
100*4dc78e53SAndroid Build Coastguard Worker uint32_t *);
101*4dc78e53SAndroid Build Coastguard Worker
102*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
103*4dc78e53SAndroid Build Coastguard Worker
104*4dc78e53SAndroid Build Coastguard Worker #endif
105