File Index
Files and directories
Sign in
FILE

netlink-gen.c

File preview with syntax highlighting.

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