xref: /linux/drivers/net/ovpn/netlink-gen.c (revision ceaebef91d1aff671a512d5f003766ea41152d94)
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/ovpn.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 "netlink-gen.h"
11 
12 #include <uapi/linux/ovpn.h>
13 
14 /* Integer value ranges */
15 static const struct netlink_range_validation ovpn_a_peer_id_range = {
16 	.max	= 16777215ULL,
17 };
18 
19 static const struct netlink_range_validation ovpn_a_peer_keepalive_interval_range = {
20 	.max	= 86400ULL,
21 };
22 
23 static const struct netlink_range_validation ovpn_a_peer_keepalive_timeout_range = {
24 	.max	= 86400ULL,
25 };
26 
27 static const struct netlink_range_validation ovpn_a_peer_tx_id_range = {
28 	.max	= 16777215ULL,
29 };
30 
31 static const struct netlink_range_validation ovpn_a_keyconf_peer_id_range = {
32 	.max	= 16777215ULL,
33 };
34 
35 /* Common nested types */
36 const struct nla_policy ovpn_keyconf_nl_policy[OVPN_A_KEYCONF_DECRYPT_DIR + 1] = {
37 	[OVPN_A_KEYCONF_PEER_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_keyconf_peer_id_range),
38 	[OVPN_A_KEYCONF_SLOT] = NLA_POLICY_MAX(NLA_U32, 1),
39 	[OVPN_A_KEYCONF_KEY_ID] = NLA_POLICY_MAX(NLA_U32, 7),
40 	[OVPN_A_KEYCONF_CIPHER_ALG] = NLA_POLICY_MAX(NLA_U32, 2),
41 	[OVPN_A_KEYCONF_ENCRYPT_DIR] = NLA_POLICY_NESTED(ovpn_keydir_nl_policy),
42 	[OVPN_A_KEYCONF_DECRYPT_DIR] = NLA_POLICY_NESTED(ovpn_keydir_nl_policy),
43 };
44 
45 const struct nla_policy ovpn_keyconf_del_input_nl_policy[OVPN_A_KEYCONF_SLOT + 1] = {
46 	[OVPN_A_KEYCONF_PEER_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_keyconf_peer_id_range),
47 	[OVPN_A_KEYCONF_SLOT] = NLA_POLICY_MAX(NLA_U32, 1),
48 };
49 
50 const struct nla_policy ovpn_keyconf_get_nl_policy[OVPN_A_KEYCONF_CIPHER_ALG + 1] = {
51 	[OVPN_A_KEYCONF_PEER_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_keyconf_peer_id_range),
52 	[OVPN_A_KEYCONF_SLOT] = NLA_POLICY_MAX(NLA_U32, 1),
53 	[OVPN_A_KEYCONF_KEY_ID] = NLA_POLICY_MAX(NLA_U32, 7),
54 	[OVPN_A_KEYCONF_CIPHER_ALG] = NLA_POLICY_MAX(NLA_U32, 2),
55 };
56 
57 const struct nla_policy ovpn_keyconf_swap_input_nl_policy[OVPN_A_KEYCONF_PEER_ID + 1] = {
58 	[OVPN_A_KEYCONF_PEER_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_keyconf_peer_id_range),
59 };
60 
61 const struct nla_policy ovpn_keydir_nl_policy[OVPN_A_KEYDIR_NONCE_TAIL + 1] = {
62 	[OVPN_A_KEYDIR_CIPHER_KEY] = NLA_POLICY_MAX_LEN(256),
63 	[OVPN_A_KEYDIR_NONCE_TAIL] = NLA_POLICY_EXACT_LEN(OVPN_NONCE_TAIL_SIZE),
64 };
65 
66 const struct nla_policy ovpn_peer_nl_policy[OVPN_A_PEER_TX_ID + 1] = {
67 	[OVPN_A_PEER_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_id_range),
68 	[OVPN_A_PEER_REMOTE_IPV4] = { .type = NLA_BE32, },
69 	[OVPN_A_PEER_REMOTE_IPV6] = NLA_POLICY_EXACT_LEN(16),
70 	[OVPN_A_PEER_REMOTE_IPV6_SCOPE_ID] = { .type = NLA_U32, },
71 	[OVPN_A_PEER_REMOTE_PORT] = NLA_POLICY_MIN(NLA_BE16, 1),
72 	[OVPN_A_PEER_SOCKET] = { .type = NLA_U32, },
73 	[OVPN_A_PEER_SOCKET_NETNSID] = { .type = NLA_S32, },
74 	[OVPN_A_PEER_VPN_IPV4] = { .type = NLA_BE32, },
75 	[OVPN_A_PEER_VPN_IPV6] = NLA_POLICY_EXACT_LEN(16),
76 	[OVPN_A_PEER_LOCAL_IPV4] = { .type = NLA_BE32, },
77 	[OVPN_A_PEER_LOCAL_IPV6] = NLA_POLICY_EXACT_LEN(16),
78 	[OVPN_A_PEER_LOCAL_PORT] = NLA_POLICY_MIN(NLA_BE16, 1),
79 	[OVPN_A_PEER_KEEPALIVE_INTERVAL] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_interval_range),
80 	[OVPN_A_PEER_KEEPALIVE_TIMEOUT] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_timeout_range),
81 	[OVPN_A_PEER_DEL_REASON] = NLA_POLICY_MAX(NLA_U32, 4),
82 	[OVPN_A_PEER_VPN_RX_BYTES] = { .type = NLA_UINT, },
83 	[OVPN_A_PEER_VPN_TX_BYTES] = { .type = NLA_UINT, },
84 	[OVPN_A_PEER_VPN_RX_PACKETS] = { .type = NLA_UINT, },
85 	[OVPN_A_PEER_VPN_TX_PACKETS] = { .type = NLA_UINT, },
86 	[OVPN_A_PEER_LINK_RX_BYTES] = { .type = NLA_UINT, },
87 	[OVPN_A_PEER_LINK_TX_BYTES] = { .type = NLA_UINT, },
88 	[OVPN_A_PEER_LINK_RX_PACKETS] = { .type = NLA_UINT, },
89 	[OVPN_A_PEER_LINK_TX_PACKETS] = { .type = NLA_UINT, },
90 	[OVPN_A_PEER_TX_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_tx_id_range),
91 };
92 
93 const struct nla_policy ovpn_peer_del_input_nl_policy[OVPN_A_PEER_ID + 1] = {
94 	[OVPN_A_PEER_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_id_range),
95 };
96 
97 const struct nla_policy ovpn_peer_new_input_nl_policy[OVPN_A_PEER_TX_ID + 1] = {
98 	[OVPN_A_PEER_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_id_range),
99 	[OVPN_A_PEER_REMOTE_IPV4] = { .type = NLA_BE32, },
100 	[OVPN_A_PEER_REMOTE_IPV6] = NLA_POLICY_EXACT_LEN(16),
101 	[OVPN_A_PEER_REMOTE_IPV6_SCOPE_ID] = { .type = NLA_U32, },
102 	[OVPN_A_PEER_REMOTE_PORT] = NLA_POLICY_MIN(NLA_BE16, 1),
103 	[OVPN_A_PEER_SOCKET] = { .type = NLA_U32, },
104 	[OVPN_A_PEER_VPN_IPV4] = { .type = NLA_BE32, },
105 	[OVPN_A_PEER_VPN_IPV6] = NLA_POLICY_EXACT_LEN(16),
106 	[OVPN_A_PEER_LOCAL_IPV4] = { .type = NLA_BE32, },
107 	[OVPN_A_PEER_LOCAL_IPV6] = NLA_POLICY_EXACT_LEN(16),
108 	[OVPN_A_PEER_KEEPALIVE_INTERVAL] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_interval_range),
109 	[OVPN_A_PEER_KEEPALIVE_TIMEOUT] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_timeout_range),
110 	[OVPN_A_PEER_TX_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_tx_id_range),
111 };
112 
113 const struct nla_policy ovpn_peer_set_input_nl_policy[OVPN_A_PEER_TX_ID + 1] = {
114 	[OVPN_A_PEER_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_id_range),
115 	[OVPN_A_PEER_REMOTE_IPV4] = { .type = NLA_BE32, },
116 	[OVPN_A_PEER_REMOTE_IPV6] = NLA_POLICY_EXACT_LEN(16),
117 	[OVPN_A_PEER_REMOTE_IPV6_SCOPE_ID] = { .type = NLA_U32, },
118 	[OVPN_A_PEER_REMOTE_PORT] = NLA_POLICY_MIN(NLA_BE16, 1),
119 	[OVPN_A_PEER_VPN_IPV4] = { .type = NLA_BE32, },
120 	[OVPN_A_PEER_VPN_IPV6] = NLA_POLICY_EXACT_LEN(16),
121 	[OVPN_A_PEER_LOCAL_IPV4] = { .type = NLA_BE32, },
122 	[OVPN_A_PEER_LOCAL_IPV6] = NLA_POLICY_EXACT_LEN(16),
123 	[OVPN_A_PEER_KEEPALIVE_INTERVAL] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_interval_range),
124 	[OVPN_A_PEER_KEEPALIVE_TIMEOUT] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_timeout_range),
125 	[OVPN_A_PEER_TX_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_tx_id_range),
126 };
127 
128 /* OVPN_CMD_PEER_NEW - do */
129 static const struct nla_policy ovpn_peer_new_nl_policy[OVPN_A_PEER + 1] = {
130 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
131 	[OVPN_A_PEER] = NLA_POLICY_NESTED(ovpn_peer_new_input_nl_policy),
132 };
133 
134 /* OVPN_CMD_PEER_SET - do */
135 static const struct nla_policy ovpn_peer_set_nl_policy[OVPN_A_PEER + 1] = {
136 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
137 	[OVPN_A_PEER] = NLA_POLICY_NESTED(ovpn_peer_set_input_nl_policy),
138 };
139 
140 /* OVPN_CMD_PEER_GET - do */
141 static const struct nla_policy ovpn_peer_get_do_nl_policy[OVPN_A_PEER + 1] = {
142 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
143 	[OVPN_A_PEER] = NLA_POLICY_NESTED(ovpn_peer_nl_policy),
144 };
145 
146 /* OVPN_CMD_PEER_GET - dump */
147 static const struct nla_policy ovpn_peer_get_dump_nl_policy[OVPN_A_IFINDEX + 1] = {
148 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
149 };
150 
151 /* OVPN_CMD_PEER_DEL - do */
152 static const struct nla_policy ovpn_peer_del_nl_policy[OVPN_A_PEER + 1] = {
153 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
154 	[OVPN_A_PEER] = NLA_POLICY_NESTED(ovpn_peer_del_input_nl_policy),
155 };
156 
157 /* OVPN_CMD_KEY_NEW - do */
158 static const struct nla_policy ovpn_key_new_nl_policy[OVPN_A_KEYCONF + 1] = {
159 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
160 	[OVPN_A_KEYCONF] = NLA_POLICY_NESTED(ovpn_keyconf_nl_policy),
161 };
162 
163 /* OVPN_CMD_KEY_GET - do */
164 static const struct nla_policy ovpn_key_get_nl_policy[OVPN_A_KEYCONF + 1] = {
165 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
166 	[OVPN_A_KEYCONF] = NLA_POLICY_NESTED(ovpn_keyconf_get_nl_policy),
167 };
168 
169 /* OVPN_CMD_KEY_SWAP - do */
170 static const struct nla_policy ovpn_key_swap_nl_policy[OVPN_A_KEYCONF + 1] = {
171 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
172 	[OVPN_A_KEYCONF] = NLA_POLICY_NESTED(ovpn_keyconf_swap_input_nl_policy),
173 };
174 
175 /* OVPN_CMD_KEY_DEL - do */
176 static const struct nla_policy ovpn_key_del_nl_policy[OVPN_A_KEYCONF + 1] = {
177 	[OVPN_A_IFINDEX] = { .type = NLA_U32, },
178 	[OVPN_A_KEYCONF] = NLA_POLICY_NESTED(ovpn_keyconf_del_input_nl_policy),
179 };
180 
181 /* Ops table for ovpn */
182 static const struct genl_split_ops ovpn_nl_ops[] = {
183 	{
184 		.cmd		= OVPN_CMD_PEER_NEW,
185 		.pre_doit	= ovpn_nl_pre_doit,
186 		.doit		= ovpn_nl_peer_new_doit,
187 		.post_doit	= ovpn_nl_post_doit,
188 		.policy		= ovpn_peer_new_nl_policy,
189 		.maxattr	= OVPN_A_PEER,
190 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
191 	},
192 	{
193 		.cmd		= OVPN_CMD_PEER_SET,
194 		.pre_doit	= ovpn_nl_pre_doit,
195 		.doit		= ovpn_nl_peer_set_doit,
196 		.post_doit	= ovpn_nl_post_doit,
197 		.policy		= ovpn_peer_set_nl_policy,
198 		.maxattr	= OVPN_A_PEER,
199 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
200 	},
201 	{
202 		.cmd		= OVPN_CMD_PEER_GET,
203 		.pre_doit	= ovpn_nl_pre_doit,
204 		.doit		= ovpn_nl_peer_get_doit,
205 		.post_doit	= ovpn_nl_post_doit,
206 		.policy		= ovpn_peer_get_do_nl_policy,
207 		.maxattr	= OVPN_A_PEER,
208 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
209 	},
210 	{
211 		.cmd		= OVPN_CMD_PEER_GET,
212 		.dumpit		= ovpn_nl_peer_get_dumpit,
213 		.policy		= ovpn_peer_get_dump_nl_policy,
214 		.maxattr	= OVPN_A_IFINDEX,
215 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
216 	},
217 	{
218 		.cmd		= OVPN_CMD_PEER_DEL,
219 		.pre_doit	= ovpn_nl_pre_doit,
220 		.doit		= ovpn_nl_peer_del_doit,
221 		.post_doit	= ovpn_nl_post_doit,
222 		.policy		= ovpn_peer_del_nl_policy,
223 		.maxattr	= OVPN_A_PEER,
224 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
225 	},
226 	{
227 		.cmd		= OVPN_CMD_KEY_NEW,
228 		.pre_doit	= ovpn_nl_pre_doit,
229 		.doit		= ovpn_nl_key_new_doit,
230 		.post_doit	= ovpn_nl_post_doit,
231 		.policy		= ovpn_key_new_nl_policy,
232 		.maxattr	= OVPN_A_KEYCONF,
233 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
234 	},
235 	{
236 		.cmd		= OVPN_CMD_KEY_GET,
237 		.pre_doit	= ovpn_nl_pre_doit,
238 		.doit		= ovpn_nl_key_get_doit,
239 		.post_doit	= ovpn_nl_post_doit,
240 		.policy		= ovpn_key_get_nl_policy,
241 		.maxattr	= OVPN_A_KEYCONF,
242 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
243 	},
244 	{
245 		.cmd		= OVPN_CMD_KEY_SWAP,
246 		.pre_doit	= ovpn_nl_pre_doit,
247 		.doit		= ovpn_nl_key_swap_doit,
248 		.post_doit	= ovpn_nl_post_doit,
249 		.policy		= ovpn_key_swap_nl_policy,
250 		.maxattr	= OVPN_A_KEYCONF,
251 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
252 	},
253 	{
254 		.cmd		= OVPN_CMD_KEY_DEL,
255 		.pre_doit	= ovpn_nl_pre_doit,
256 		.doit		= ovpn_nl_key_del_doit,
257 		.post_doit	= ovpn_nl_post_doit,
258 		.policy		= ovpn_key_del_nl_policy,
259 		.maxattr	= OVPN_A_KEYCONF,
260 		.flags		= GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
261 	},
262 };
263 
264 static const struct genl_multicast_group ovpn_nl_mcgrps[] = {
265 	[OVPN_NLGRP_PEERS] = { "peers", },
266 };
267 
268 struct genl_family ovpn_nl_family __ro_after_init = {
269 	.name		= OVPN_FAMILY_NAME,
270 	.version	= OVPN_FAMILY_VERSION,
271 	.netnsok	= true,
272 	.parallel_ops	= true,
273 	.module		= THIS_MODULE,
274 	.split_ops	= ovpn_nl_ops,
275 	.n_split_ops	= ARRAY_SIZE(ovpn_nl_ops),
276 	.mcgrps		= ovpn_nl_mcgrps,
277 	.n_mcgrps	= ARRAY_SIZE(ovpn_nl_mcgrps),
278 };
279