xref: /linux/net/core/netdev-genl-gen.c (revision 26ba30221c03364d6ed9910be8da4c1fd871b07b)
1 // SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
2 /* Do not edit directly, auto-generated from: */
3 /*	Documentation/netlink/specs/netdev.yaml */
4 /* YNL-GEN kernel source */
5 /* To regenerate run: tools/net/ynl/ynl-regen.sh */
6 
7 #include <net/netlink.h>
8 #include <net/genetlink.h>
9 
10 #include "netdev-genl-gen.h"
11 
12 #include <uapi/linux/netdev.h>
13 #include <net/netdev_netlink.h>
14 #include <asm/page.h>
15 
16 /* Integer value ranges */
17 static const struct netlink_range_validation netdev_a_page_pool_id_range = {
18 	.min	= 1ULL,
19 	.max	= U32_MAX,
20 };
21 
22 static const struct netlink_range_validation netdev_a_page_pool_ifindex_range = {
23 	.min	= 1ULL,
24 	.max	= S32_MAX,
25 };
26 
27 static const struct netlink_range_validation netdev_a_napi_defer_hard_irqs_range = {
28 	.max	= S32_MAX,
29 };
30 
31 static const struct netlink_range_validation netdev_a_dmabuf_rx_page_size_range = {
32 	.min	= PAGE_SIZE,
33 	.max	= U32_MAX,
34 };
35 
36 /* Common nested types */
37 const struct nla_policy netdev_lease_nl_policy[NETDEV_A_LEASE_NETNS_ID + 1] = {
38 	[NETDEV_A_LEASE_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
39 	[NETDEV_A_LEASE_QUEUE] = NLA_POLICY_NESTED(netdev_queue_id_nl_policy),
40 	[NETDEV_A_LEASE_NETNS_ID] = NLA_POLICY_MIN(NLA_S32, 0),
41 };
42 
43 const struct nla_policy netdev_page_pool_info_nl_policy[NETDEV_A_PAGE_POOL_IFINDEX + 1] = {
44 	[NETDEV_A_PAGE_POOL_ID] = NLA_POLICY_FULL_RANGE(NLA_UINT, &netdev_a_page_pool_id_range),
45 	[NETDEV_A_PAGE_POOL_IFINDEX] = NLA_POLICY_FULL_RANGE(NLA_U32, &netdev_a_page_pool_ifindex_range),
46 };
47 
48 const struct nla_policy netdev_queue_id_nl_policy[NETDEV_A_QUEUE_TYPE + 1] = {
49 	[NETDEV_A_QUEUE_ID] = { .type = NLA_U32, },
50 	[NETDEV_A_QUEUE_TYPE] = NLA_POLICY_MAX(NLA_U32, 1),
51 };
52 
53 /* NETDEV_CMD_DEV_GET - do */
54 static const struct nla_policy netdev_dev_get_nl_policy[NETDEV_A_DEV_IFINDEX + 1] = {
55 	[NETDEV_A_DEV_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
56 };
57 
58 /* NETDEV_CMD_PAGE_POOL_GET - do */
59 #ifdef CONFIG_PAGE_POOL
60 static const struct nla_policy netdev_page_pool_get_do_nl_policy[NETDEV_A_PAGE_POOL_ID + 1] = {
61 	[NETDEV_A_PAGE_POOL_ID] = NLA_POLICY_FULL_RANGE(NLA_UINT, &netdev_a_page_pool_id_range),
62 };
63 #endif /* CONFIG_PAGE_POOL */
64 
65 /* NETDEV_CMD_PAGE_POOL_GET - dump */
66 #ifdef CONFIG_PAGE_POOL
67 static const struct nla_policy netdev_page_pool_get_dump_nl_policy[NETDEV_A_PAGE_POOL_IFINDEX + 1] = {
68 	[NETDEV_A_PAGE_POOL_IFINDEX] = NLA_POLICY_FULL_RANGE(NLA_U32, &netdev_a_page_pool_ifindex_range),
69 };
70 #endif /* CONFIG_PAGE_POOL */
71 
72 /* NETDEV_CMD_PAGE_POOL_STATS_GET - do */
73 #ifdef CONFIG_PAGE_POOL_STATS
74 static const struct nla_policy netdev_page_pool_stats_get_do_nl_policy[NETDEV_A_PAGE_POOL_STATS_INFO + 1] = {
75 	[NETDEV_A_PAGE_POOL_STATS_INFO] = NLA_POLICY_NESTED(netdev_page_pool_info_nl_policy),
76 };
77 #endif /* CONFIG_PAGE_POOL_STATS */
78 
79 /* NETDEV_CMD_PAGE_POOL_STATS_GET - dump */
80 #ifdef CONFIG_PAGE_POOL_STATS
81 static const struct nla_policy netdev_page_pool_stats_get_dump_nl_policy[NETDEV_A_PAGE_POOL_STATS_INFO + 1] = {
82 	[NETDEV_A_PAGE_POOL_STATS_INFO] = NLA_POLICY_NESTED(netdev_page_pool_info_nl_policy),
83 };
84 #endif /* CONFIG_PAGE_POOL_STATS */
85 
86 /* NETDEV_CMD_QUEUE_GET - do */
87 static const struct nla_policy netdev_queue_get_do_nl_policy[NETDEV_A_QUEUE_TYPE + 1] = {
88 	[NETDEV_A_QUEUE_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
89 	[NETDEV_A_QUEUE_TYPE] = NLA_POLICY_MAX(NLA_U32, 1),
90 	[NETDEV_A_QUEUE_ID] = { .type = NLA_U32, },
91 };
92 
93 /* NETDEV_CMD_QUEUE_GET - dump */
94 static const struct nla_policy netdev_queue_get_dump_nl_policy[NETDEV_A_QUEUE_IFINDEX + 1] = {
95 	[NETDEV_A_QUEUE_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
96 };
97 
98 /* NETDEV_CMD_NAPI_GET - do */
99 static const struct nla_policy netdev_napi_get_do_nl_policy[NETDEV_A_NAPI_ID + 1] = {
100 	[NETDEV_A_NAPI_ID] = { .type = NLA_U32, },
101 };
102 
103 /* NETDEV_CMD_NAPI_GET - dump */
104 static const struct nla_policy netdev_napi_get_dump_nl_policy[NETDEV_A_NAPI_IFINDEX + 1] = {
105 	[NETDEV_A_NAPI_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
106 };
107 
108 /* NETDEV_CMD_QSTATS_GET - dump */
109 static const struct nla_policy netdev_qstats_get_nl_policy[NETDEV_A_QSTATS_SCOPE + 1] = {
110 	[NETDEV_A_QSTATS_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
111 	[NETDEV_A_QSTATS_SCOPE] = NLA_POLICY_MASK(NLA_UINT, 0x1),
112 };
113 
114 /* NETDEV_CMD_BIND_RX - do */
115 static const struct nla_policy netdev_bind_rx_nl_policy[NETDEV_A_DMABUF_RX_PAGE_SIZE + 1] = {
116 	[NETDEV_A_DMABUF_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
117 	[NETDEV_A_DMABUF_FD] = { .type = NLA_U32, },
118 	[NETDEV_A_DMABUF_QUEUES] = NLA_POLICY_NESTED(netdev_queue_id_nl_policy),
119 	[NETDEV_A_DMABUF_RX_PAGE_SIZE] = NLA_POLICY_FULL_RANGE(NLA_U32, &netdev_a_dmabuf_rx_page_size_range),
120 };
121 
122 /* NETDEV_CMD_NAPI_SET - do */
123 static const struct nla_policy netdev_napi_set_nl_policy[NETDEV_A_NAPI_THREADED + 1] = {
124 	[NETDEV_A_NAPI_ID] = { .type = NLA_U32, },
125 	[NETDEV_A_NAPI_DEFER_HARD_IRQS] = NLA_POLICY_FULL_RANGE(NLA_U32, &netdev_a_napi_defer_hard_irqs_range),
126 	[NETDEV_A_NAPI_GRO_FLUSH_TIMEOUT] = { .type = NLA_UINT, },
127 	[NETDEV_A_NAPI_IRQ_SUSPEND_TIMEOUT] = { .type = NLA_UINT, },
128 	[NETDEV_A_NAPI_THREADED] = NLA_POLICY_MAX(NLA_U32, 2),
129 };
130 
131 /* NETDEV_CMD_BIND_TX - do */
132 static const struct nla_policy netdev_bind_tx_nl_policy[NETDEV_A_DMABUF_FD + 1] = {
133 	[NETDEV_A_DMABUF_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
134 	[NETDEV_A_DMABUF_FD] = { .type = NLA_U32, },
135 };
136 
137 /* NETDEV_CMD_QUEUE_CREATE - do */
138 static const struct nla_policy netdev_queue_create_nl_policy[NETDEV_A_QUEUE_LEASE + 1] = {
139 	[NETDEV_A_QUEUE_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1),
140 	[NETDEV_A_QUEUE_TYPE] = NLA_POLICY_MAX(NLA_U32, 1),
141 	[NETDEV_A_QUEUE_LEASE] = NLA_POLICY_NESTED(netdev_lease_nl_policy),
142 };
143 
144 /* Ops table for netdev */
145 static const struct genl_split_ops netdev_nl_ops[] = {
146 	{
147 		.cmd		= NETDEV_CMD_DEV_GET,
148 		.doit		= netdev_nl_dev_get_doit,
149 		.policy		= netdev_dev_get_nl_policy,
150 		.maxattr	= NETDEV_A_DEV_IFINDEX,
151 		.flags		= GENL_CMD_CAP_DO,
152 	},
153 	{
154 		.cmd	= NETDEV_CMD_DEV_GET,
155 		.dumpit	= netdev_nl_dev_get_dumpit,
156 		.flags	= GENL_CMD_CAP_DUMP,
157 	},
158 #ifdef CONFIG_PAGE_POOL
159 	{
160 		.cmd		= NETDEV_CMD_PAGE_POOL_GET,
161 		.doit		= netdev_nl_page_pool_get_doit,
162 		.policy		= netdev_page_pool_get_do_nl_policy,
163 		.maxattr	= NETDEV_A_PAGE_POOL_ID,
164 		.flags		= GENL_CMD_CAP_DO,
165 	},
166 	{
167 		.cmd		= NETDEV_CMD_PAGE_POOL_GET,
168 		.dumpit		= netdev_nl_page_pool_get_dumpit,
169 		.policy		= netdev_page_pool_get_dump_nl_policy,
170 		.maxattr	= NETDEV_A_PAGE_POOL_IFINDEX,
171 		.flags		= GENL_CMD_CAP_DUMP,
172 	},
173 #endif /* CONFIG_PAGE_POOL */
174 #ifdef CONFIG_PAGE_POOL_STATS
175 	{
176 		.cmd		= NETDEV_CMD_PAGE_POOL_STATS_GET,
177 		.doit		= netdev_nl_page_pool_stats_get_doit,
178 		.policy		= netdev_page_pool_stats_get_do_nl_policy,
179 		.maxattr	= NETDEV_A_PAGE_POOL_STATS_INFO,
180 		.flags		= GENL_CMD_CAP_DO,
181 	},
182 	{
183 		.cmd		= NETDEV_CMD_PAGE_POOL_STATS_GET,
184 		.dumpit		= netdev_nl_page_pool_stats_get_dumpit,
185 		.policy		= netdev_page_pool_stats_get_dump_nl_policy,
186 		.maxattr	= NETDEV_A_PAGE_POOL_STATS_INFO,
187 		.flags		= GENL_CMD_CAP_DUMP,
188 	},
189 #endif /* CONFIG_PAGE_POOL_STATS */
190 	{
191 		.cmd		= NETDEV_CMD_QUEUE_GET,
192 		.doit		= netdev_nl_queue_get_doit,
193 		.policy		= netdev_queue_get_do_nl_policy,
194 		.maxattr	= NETDEV_A_QUEUE_TYPE,
195 		.flags		= GENL_CMD_CAP_DO,
196 	},
197 	{
198 		.cmd		= NETDEV_CMD_QUEUE_GET,
199 		.dumpit		= netdev_nl_queue_get_dumpit,
200 		.policy		= netdev_queue_get_dump_nl_policy,
201 		.maxattr	= NETDEV_A_QUEUE_IFINDEX,
202 		.flags		= GENL_CMD_CAP_DUMP,
203 	},
204 	{
205 		.cmd		= NETDEV_CMD_NAPI_GET,
206 		.doit		= netdev_nl_napi_get_doit,
207 		.policy		= netdev_napi_get_do_nl_policy,
208 		.maxattr	= NETDEV_A_NAPI_ID,
209 		.flags		= GENL_CMD_CAP_DO,
210 	},
211 	{
212 		.cmd		= NETDEV_CMD_NAPI_GET,
213 		.dumpit		= netdev_nl_napi_get_dumpit,
214 		.policy		= netdev_napi_get_dump_nl_policy,
215 		.maxattr	= NETDEV_A_NAPI_IFINDEX,
216 		.flags		= GENL_CMD_CAP_DUMP,
217 	},
218 	{
219 		.cmd		= NETDEV_CMD_QSTATS_GET,
220 		.dumpit		= netdev_nl_qstats_get_dumpit,
221 		.policy		= netdev_qstats_get_nl_policy,
222 		.maxattr	= NETDEV_A_QSTATS_SCOPE,
223 		.flags		= GENL_CMD_CAP_DUMP,
224 	},
225 	{
226 		.cmd		= NETDEV_CMD_BIND_RX,
227 		.doit		= netdev_nl_bind_rx_doit,
228 		.policy		= netdev_bind_rx_nl_policy,
229 		.maxattr	= NETDEV_A_DMABUF_RX_PAGE_SIZE,
230 		.flags		= GENL_UNS_ADMIN_PERM | GENL_CMD_CAP_DO,
231 	},
232 	{
233 		.cmd		= NETDEV_CMD_NAPI_SET,
234 		.doit		= netdev_nl_napi_set_doit,
235 		.policy		= netdev_napi_set_nl_policy,
236 		.maxattr	= NETDEV_A_NAPI_THREADED,
237 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
238 	},
239 	{
240 		.cmd		= NETDEV_CMD_BIND_TX,
241 		.doit		= netdev_nl_bind_tx_doit,
242 		.policy		= netdev_bind_tx_nl_policy,
243 		.maxattr	= NETDEV_A_DMABUF_FD,
244 		.flags		= GENL_CMD_CAP_DO,
245 	},
246 	{
247 		.cmd		= NETDEV_CMD_QUEUE_CREATE,
248 		.doit		= netdev_nl_queue_create_doit,
249 		.policy		= netdev_queue_create_nl_policy,
250 		.maxattr	= NETDEV_A_QUEUE_LEASE,
251 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
252 	},
253 };
254 
255 static const struct genl_multicast_group netdev_nl_mcgrps[] = {
256 	[NETDEV_NLGRP_MGMT] = { "mgmt", },
257 	[NETDEV_NLGRP_PAGE_POOL] = { "page-pool", },
258 };
259 
260 static void __netdev_nl_sock_priv_init(void *priv)
261 {
262 	netdev_nl_sock_priv_init(priv);
263 }
264 
265 static void __netdev_nl_sock_priv_destroy(void *priv)
266 {
267 	netdev_nl_sock_priv_destroy(priv);
268 }
269 
270 struct genl_family netdev_nl_family __ro_after_init = {
271 	.name		= NETDEV_FAMILY_NAME,
272 	.version	= NETDEV_FAMILY_VERSION,
273 	.netnsok	= true,
274 	.parallel_ops	= true,
275 	.module		= THIS_MODULE,
276 	.split_ops	= netdev_nl_ops,
277 	.n_split_ops	= ARRAY_SIZE(netdev_nl_ops),
278 	.mcgrps		= netdev_nl_mcgrps,
279 	.n_mcgrps	= ARRAY_SIZE(netdev_nl_mcgrps),
280 	.sock_priv_size	= sizeof(struct netdev_nl_sock),
281 	.sock_priv_init	= __netdev_nl_sock_priv_init,
282 	.sock_priv_destroy = __netdev_nl_sock_priv_destroy,
283 };
284