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