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