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_keyconf_peer_id_range = { 20 .max = 16777215ULL, 21 }; 22 23 /* Common nested types */ 24 const 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 33 const 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 38 const 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 45 const 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 49 const 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 54 const 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 80 const 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 84 const 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 99 const 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 */ 114 static 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 */ 120 static 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 */ 126 static 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 */ 132 static 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 */ 137 static 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 */ 143 static 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 */ 149 static 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 */ 155 static 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 */ 161 static 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 */ 167 static 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 249 static const struct genl_multicast_group ovpn_nl_mcgrps[] = { 250 [OVPN_NLGRP_PEERS] = { "peers", }, 251 }; 252 253 struct 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 }; 264