blob: bf0c8a3b714570f76de50996c49a0152746dd793 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/*
2 * netlink-private/route/tc-api.h Traffic Control API
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation version 2.1
7 * of the License.
8 *
9 * Copyright (c) 2011-2013 Thomas Graf <tgraf@suug.ch>
10 */
11
12#ifndef NETLINK_TC_API_H_
13#define NETLINK_TC_API_H_
14
15#include <netlink/netlink.h>
16#include <netlink/msg.h>
17#include <netlink/route/tc.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23/**
24 * Traffic control object operations
25 * @ingroup tc
26 *
27 * This structure holds function pointers and settings implementing
28 * the features of each traffic control object implementation.
29 */
30struct rtnl_tc_ops
31{
32 /**
33 * Name of traffic control module
34 */
35 char *to_kind;
36
37 /**
38 * Type of traffic control object
39 */
40 enum rtnl_tc_type to_type;
41
42
43 /**
44 * Size of private data
45 */
46 size_t to_size;
47
48 /**
49 * Dump callbacks
50 */
51 void (*to_dump[NL_DUMP_MAX+1])(struct rtnl_tc *, void *,
52 struct nl_dump_params *);
53 /**
54 * Used to fill the contents of TCA_OPTIONS
55 */
56 int (*to_msg_fill)(struct rtnl_tc *, void *, struct nl_msg *);
57
58 /**
59 * Uesd to to fill tc related messages, unlike with to_msg_fill,
60 * the contents is not encapsulated with a TCA_OPTIONS nested
61 * attribute.
62 */
63 int (*to_msg_fill_raw)(struct rtnl_tc *, void *, struct nl_msg *);
64
65 /**
66 * TCA_OPTIONS message parser
67 */
68 int (*to_msg_parser)(struct rtnl_tc *, void *);
69
70 /**
71 * Called before a tc object is destroyed
72 */
73 void (*to_free_data)(struct rtnl_tc *, void *);
74
75 /**
76 * Called whenever a classifier object needs to be cloned
77 */
78 int (*to_clone)(void *, void *);
79
80 /**
81 * Internal, don't touch
82 */
83 struct nl_list_head to_list;
84};
85
86struct rtnl_tc_type_ops
87{
88 enum rtnl_tc_type tt_type;
89
90 char *tt_dump_prefix;
91
92 /**
93 * Dump callbacks
94 */
95 void (*tt_dump[NL_DUMP_MAX+1])(struct rtnl_tc *,
96 struct nl_dump_params *);
97};
98
99extern int rtnl_tc_msg_parse(struct nlmsghdr *,
100 struct rtnl_tc *);
101extern int rtnl_tc_msg_build(struct rtnl_tc *, int,
102 int, struct nl_msg **);
103
104extern void rtnl_tc_free_data(struct nl_object *);
105extern int rtnl_tc_clone(struct nl_object *,
106 struct nl_object *);
107extern void rtnl_tc_dump_line(struct nl_object *,
108 struct nl_dump_params *);
109extern void rtnl_tc_dump_details(struct nl_object *,
110 struct nl_dump_params *);
111extern void rtnl_tc_dump_stats(struct nl_object *,
112 struct nl_dump_params *);
113extern int rtnl_tc_compare(struct nl_object *,
114 struct nl_object *,
115 uint32_t, int);
116
117extern void * rtnl_tc_data(struct rtnl_tc *);
118extern void * rtnl_tc_data_check(struct rtnl_tc *,
119 struct rtnl_tc_ops *);
120
121extern struct rtnl_tc_ops * rtnl_tc_lookup_ops(enum rtnl_tc_type,
122 const char *);
123extern struct rtnl_tc_ops * rtnl_tc_get_ops(struct rtnl_tc *);
124extern int rtnl_tc_register(struct rtnl_tc_ops *);
125extern void rtnl_tc_unregister(struct rtnl_tc_ops *);
126
127extern void rtnl_tc_type_register(struct rtnl_tc_type_ops *);
128extern void rtnl_tc_type_unregister(struct rtnl_tc_type_ops *);
129
130#ifdef __cplusplus
131}
132#endif
133
134#endif