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