xref: /aosp_15_r20/external/ltp/include/tst_netdevice.h (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright (c) 2021 Linux Test Project
3  */
4 
5 #ifndef TST_NETDEVICE_H
6 #define TST_NETDEVICE_H
7 
8 #include "tst_netlink.h"
9 
10 /* Find device index for given network interface name. */
11 int tst_netdev_index_by_name(const char *file, const int lineno,
12 	const char *ifname);
13 #define NETDEV_INDEX_BY_NAME(ifname) \
14 	tst_netdev_index_by_name(__FILE__, __LINE__, (ifname))
15 
16 /* Activate or deactivate network interface */
17 int tst_netdev_set_state(const char *file, const int lineno,
18 	const char *ifname, int up);
19 #define NETDEV_SET_STATE(ifname, up) \
20 	tst_netdev_set_state(__FILE__, __LINE__, (ifname), (up))
21 
22 /* Create a connected pair of virtual network devices */
23 int tst_create_veth_pair(const char *file, const int lineno, int strict,
24 	const char *ifname1, const char *ifname2);
25 #define CREATE_VETH_PAIR(ifname1, ifname2) \
26 	tst_create_veth_pair(__FILE__, __LINE__, 1, (ifname1), (ifname2))
27 
28 int tst_netdev_add_device(const char *file, const int lineno, int strict,
29 	const char *ifname, const char *devtype);
30 #define NETDEV_ADD_DEVICE(ifname, devtype) \
31 	tst_netdev_add_device(__FILE__, __LINE__, 1, (ifname), (devtype))
32 
33 int tst_netdev_remove_device(const char *file, const int lineno, int strict,
34 	const char *ifname);
35 #define NETDEV_REMOVE_DEVICE(ifname) \
36 	tst_netdev_remove_device(__FILE__, __LINE__, 1, (ifname))
37 
38 int tst_netdev_add_address(const char *file, const int lineno, int strict,
39 	const char *ifname, unsigned int family, const void *address,
40 	unsigned int prefix, size_t addrlen, unsigned int flags);
41 #define NETDEV_ADD_ADDRESS(ifname, family, address, prefix, addrlen, flags) \
42 	tst_netdev_add_address(__FILE__, __LINE__, 1, (ifname), (family), \
43 		(address), (prefix), (addrlen), (flags))
44 
45 int tst_netdev_add_address_inet(const char *file, const int lineno, int strict,
46 	const char *ifname, in_addr_t address, unsigned int prefix,
47 	unsigned int flags);
48 #define NETDEV_ADD_ADDRESS_INET(ifname, address, prefix, flags) \
49 	tst_netdev_add_address_inet(__FILE__, __LINE__, 1, (ifname), \
50 		(address), (prefix), (flags))
51 
52 int tst_netdev_remove_address(const char *file, const int lineno, int strict,
53 	const char *ifname, unsigned int family, const void *address,
54 	size_t addrlen);
55 #define NETDEV_REMOVE_ADDRESS(ifname, family, address, addrlen) \
56 	tst_netdev_remove_address(__FILE__, __LINE__, 1, (ifname), (family), \
57 		(address), (addrlen))
58 
59 int tst_netdev_remove_address_inet(const char *file, const int lineno,
60 	int strict, const char *ifname, in_addr_t address);
61 #define NETDEV_REMOVE_ADDRESS_INET(ifname, address) \
62 	tst_netdev_remove_address_inet(__FILE__, __LINE__, 1, (ifname), \
63 		(address))
64 
65 int tst_netdev_change_ns_fd(const char *file, const int lineno, int strict,
66 	const char *ifname, int nsfd);
67 #define NETDEV_CHANGE_NS_FD(ifname, nsfd) \
68 	tst_netdev_change_ns_fd(__FILE__, __LINE__, 1, (ifname), (nsfd))
69 
70 int tst_netdev_change_ns_pid(const char *file, const int lineno, int strict,
71 	const char *ifname, pid_t nspid);
72 #define NETDEV_CHANGE_NS_PID(ifname, nspid) \
73 	tst_netdev_change_ns_pid(__FILE__, __LINE__, 1, (ifname), (nspid))
74 
75 /*
76  * Add new static entry to main routing table. If you specify gateway address,
77  * the interface name is optional.
78  */
79 int tst_netdev_add_route(const char *file, const int lineno, int strict,
80 	const char *ifname, unsigned int family, const void *srcaddr,
81 	unsigned int srcprefix, size_t srclen, const void *dstaddr,
82 	unsigned int dstprefix, size_t dstlen, const void *gateway,
83 	size_t gatewaylen);
84 #define NETDEV_ADD_ROUTE(ifname, family, srcaddr, srcprefix, srclen, dstaddr, \
85 	dstprefix, dstlen, gateway, gatewaylen) \
86 	tst_netdev_add_route(__FILE__, __LINE__, 1, (ifname), (family), \
87 		(srcaddr), (srcprefix), (srclen), (dstaddr), (dstprefix), \
88 		(dstlen), (gateway), (gatewaylen))
89 
90 /*
91  * Simplified function for adding IPv4 static route. If you set srcprefix
92  * or dstprefix to 0, the corresponding address will be ignored. Interface
93  * name is optional if gateway address is non-zero.
94  */
95 int tst_netdev_add_route_inet(const char *file, const int lineno, int strict,
96 	const char *ifname, in_addr_t srcaddr, unsigned int srcprefix,
97 	in_addr_t dstaddr, unsigned int dstprefix, in_addr_t gateway);
98 #define NETDEV_ADD_ROUTE_INET(ifname, srcaddr, srcprefix, dstaddr, dstprefix, \
99 	gateway) \
100 	tst_netdev_add_route_inet(__FILE__, __LINE__, 1, (ifname), (srcaddr), \
101 		(srcprefix), (dstaddr), (dstprefix), (gateway))
102 
103 /*
104  * Remove static entry from main routing table.
105  */
106 int tst_netdev_remove_route(const char *file, const int lineno, int strict,
107 	const char *ifname, unsigned int family, const void *srcaddr,
108 	unsigned int srcprefix, size_t srclen, const void *dstaddr,
109 	unsigned int dstprefix, size_t dstlen, const void *gateway,
110 	size_t gatewaylen);
111 #define NETDEV_REMOVE_ROUTE(ifname, family, srcaddr, srcprefix, srclen, \
112 	dstaddr, dstprefix, dstlen, gateway, gatewaylen) \
113 	tst_netdev_remove_route(__FILE__, __LINE__, 1, (ifname), (family), \
114 		(srcaddr), (srcprefix), (srclen), (dstaddr), (dstprefix), \
115 		(dstlen), (gateway), (gatewaylen))
116 
117 /*
118  * Simplified function for removing IPv4 static route.
119  */
120 int tst_netdev_remove_route_inet(const char *file, const int lineno,
121 	int strict, const char *ifname, in_addr_t srcaddr,
122 	unsigned int srcprefix, in_addr_t dstaddr, unsigned int dstprefix,
123 	in_addr_t gateway);
124 #define NETDEV_REMOVE_ROUTE_INET(ifname, srcaddr, srcprefix, dstaddr, \
125 	dstprefix, gateway) \
126 	tst_netdev_remove_route_inet(__FILE__, __LINE__, 1, (ifname), \
127 		(srcaddr), (srcprefix), (dstaddr), (dstprefix), (gateway))
128 
129 /*
130  * Add queueing discipline. Network interface name is optional.
131  */
132 int tst_netdev_add_qdisc(const char *file, const int lineno, int strict,
133 	const char *ifname, unsigned int family, unsigned int parent,
134 	unsigned int handle, const char *qd_kind,
135 	const struct tst_netlink_attr_list *config);
136 #define NETDEV_ADD_QDISC(ifname, family, parent, handle, qd_kind, config) \
137 	tst_netdev_add_qdisc(__FILE__, __LINE__, 1, (ifname), (family), \
138 		(parent), (handle), (qd_kind), (config))
139 
140 /*
141  * Remove queueing discipline.
142  */
143 int tst_netdev_remove_qdisc(const char *file, const int lineno, int strict,
144 	const char *ifname, unsigned int family, unsigned int parent,
145 	unsigned int handle, const char *qd_kind);
146 #define NETDEV_REMOVE_QDISC(ifname, family, parent, handle, qd_kind) \
147 	tst_netdev_remove_qdisc(__FILE__, __LINE__, 1, (ifname), (family), \
148 		(parent), (handle), (qd_kind))
149 
150 /*
151  * Add traffic class to queueing discipline. Network interface name is
152  * optional.
153  */
154 int tst_netdev_add_traffic_class(const char *file, const int lineno,
155 	int strict, const char *ifname, unsigned int parent,
156 	unsigned int handle, const char *qd_kind,
157 	const struct tst_netlink_attr_list *config);
158 #define NETDEV_ADD_TRAFFIC_CLASS(ifname, parent, handle, qd_kind, config) \
159 	tst_netdev_add_traffic_class(__FILE__, __LINE__, 1, (ifname), \
160 		(parent), (handle), (qd_kind), (config))
161 
162 int tst_netdev_remove_traffic_class(const char *file, const int lineno,
163 	int strict, const char *ifname, unsigned int parent,
164 	unsigned int handle, const char *qd_kind);
165 #define NETDEV_REMOVE_TRAFFIC_CLASS(ifname, parent, handle, qd_kind) \
166 	tst_netdev_remove_traffic_class(__FILE__, __LINE__, 1, (ifname), \
167 		(parent), (handle), (qd_kind))
168 
169 /*
170  * Add traffic filter to queueing discipline. Protocol should be en ETH_P_*
171  * constant in host byte order. Network interface name is optional.
172  */
173 int tst_netdev_add_traffic_filter(const char *file, const int lineno,
174 	int strict, const char *ifname, unsigned int parent,
175 	unsigned int handle, unsigned int protocol, unsigned int priority,
176 	const char *f_kind, const struct tst_netlink_attr_list *config);
177 #define NETDEV_ADD_TRAFFIC_FILTER(ifname, parent, handle, protocol, priority, \
178 	f_kind, config) \
179 	tst_netdev_add_traffic_filter(__FILE__, __LINE__, 1, (ifname), \
180 		(parent), (handle), (protocol), (priority), (f_kind), (config))
181 
182 #define NETDEV_ADD_TRAFFIC_FILTER_RET(ifname, parent, handle, protocol, \
183 	priority, f_kind, config) \
184 	tst_netdev_add_traffic_filter(__FILE__, __LINE__, 0, (ifname), \
185 		(parent), (handle), (protocol), (priority), (f_kind), (config))
186 
187 int tst_netdev_remove_traffic_filter(const char *file, const int lineno,
188 	int strict, const char *ifname, unsigned int parent,
189 	unsigned int handle, unsigned int protocol, unsigned int priority,
190 	const char *f_kind);
191 #define NETDEV_REMOVE_TRAFFIC_FILTER(ifname, parent, handle, protocol, \
192 	priority, f_kind) \
193 	tst_netdev_remove_traffic_filter(__FILE__, __LINE__, 1, (ifname), \
194 		(parent), (handle), (protocol), (priority), (f_kind))
195 
196 #endif /* TST_NETDEVICE_H */
197