1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2022 Alexander V. Chernikov <melifaro@FreeBSD.org> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28 /* 29 * Common defines for all parts of the NETLINK_ROUTE family 30 */ 31 #ifndef _NETLINK_ROUTE_COMMON_H_ 32 #define _NETLINK_ROUTE_COMMON_H_ 33 34 /* Defined NETLINK_ROUTE messages */ 35 enum { 36 NL_RTM_BASE = 16, 37 NL_RTM_NEWLINK = 16, /* creates new interface */ 38 NL_RTM_DELLINK = 17, /* deletes matching interface */ 39 NL_RTM_GETLINK = 18, /* lists matching interfaces */ 40 NL_RTM_SETLINK = 19, /* not supported */ 41 NL_RTM_NEWADDR = 20, /* not supported */ 42 NL_RTM_DELADDR = 21, /* not supported */ 43 NL_RTM_GETADDR = 22, /* lists matching ifaddrs */ 44 NL_RTM_NEWROUTE = 24, /* adds or changes a route */ 45 NL_RTM_DELROUTE = 25, /* deletes matching route */ 46 NL_RTM_GETROUTE = 26, /* lists matching routes */ 47 NL_RTM_NEWNEIGH = 28, /* creates new arp/ndp entry */ 48 NL_RTM_DELNEIGH = 29, /* deletes matching arp/ndp entry */ 49 NL_RTM_GETNEIGH = 30, /* lists matching arp/ndp entry */ 50 NL_RTM_NEWRULE = 32, /* not supported */ 51 NL_RTM_DELRULE = 33, /* not supported */ 52 NL_RTM_GETRULE = 34, /* not supported */ 53 NL_RTM_NEWQDISC = 36, /* not supported */ 54 NL_RTM_DELQDISC = 37, /* not supported */ 55 NL_RTM_GETQDISC = 38, /* not supported */ 56 NL_RTM_NEWTCLASS = 40, /* not supported */ 57 NL_RTM_DELTCLASS = 41, /* not supported */ 58 NL_RTM_GETTCLASS = 42, /* not supported */ 59 NL_RTM_NEWTFILTER = 44, /* not supported */ 60 NL_RTM_DELTFILTER = 45, /* not supported */ 61 NL_RTM_GETTFILTER = 46, /* not supported */ 62 NL_RTM_NEWACTION = 48, /* not supported */ 63 NL_RTM_DELACTION = 49, /* not supported */ 64 NL_RTM_GETACTION = 50, /* not supported */ 65 NL_RTM_NEWPREFIX = 52, /* not supported */ 66 NL_RTM_GETMULTICAST = 58, /* not supported */ 67 NL_RTM_GETANYCAST = 62, /* not supported */ 68 NL_RTM_NEWNEIGHTBL = 64, /* not supported */ 69 NL_RTM_GETNEIGHTBL = 66, /* not supported */ 70 NL_RTM_SETNEIGHTBL = 67, /* not supported */ 71 NL_RTM_NEWNDUSEROPT = 68, /* not supported */ 72 NL_RTM_NEWADDRLABEL = 72, /* not supported */ 73 NL_RTM_DELADDRLABEL = 73, /* not supported */ 74 NL_RTM_GETADDRLABEL = 74, /* not supported */ 75 NL_RTM_GETDCB = 78, /* not supported */ 76 NL_RTM_SETDCB = 79, /* not supported */ 77 NL_RTM_NEWNETCONF = 80, /* not supported */ 78 NL_RTM_GETNETCONF = 82, /* not supported */ 79 NL_RTM_NEWMDB = 84, /* not supported */ 80 NL_RTM_DELMDB = 85, /* not supported */ 81 NL_RTM_GETMDB = 86, /* not supported */ 82 NL_RTM_NEWNSID = 88, /* not supported */ 83 NL_RTM_DELNSID = 89, /* not supported */ 84 NL_RTM_GETNSID = 90, /* not supported */ 85 NL_RTM_NEWSTATS = 92, /* not supported */ 86 NL_RTM_GETSTATS = 94, /* not supported */ 87 NL_RTM_NEWNEXTHOP = 104, /* creates new user nexhtop */ 88 NL_RTM_DELNEXTHOP = 105, /* deletes matching nexthop */ 89 NL_RTM_GETNEXTHOP = 106, /* lists created user nexthops */ 90 __NL_RTM_MAX, 91 }; 92 #define NL_RTM_MAX (((__NL_RTM_MAX + 3) & ~3) - 1) 93 94 #ifndef _KERNEL 95 /* 96 * RTM_* namespace clashes with BSD rtsock namespace. 97 * Use NL_RTM_ prefix in the kernel and map it to RTM_ 98 * for userland. 99 */ 100 #define RTM_BASE NL_RTM_BASE 101 #define RTM_NEWLINK NL_RTM_NEWLINK 102 #define RTM_DELLINK NL_RTM_DELLINK 103 #define RTM_GETLINK NL_RTM_GETLINK 104 #define RTM_SETLINK NL_RTM_SETLINK 105 #define RTM_NEWADDR NL_RTM_NEWADDR 106 #define RTM_DELADDR NL_RTM_DELADDR 107 #define RTM_GETADDR NL_RTM_GETADDR 108 #define RTM_NEWROUTE NL_RTM_NEWROUTE 109 #define RTM_DELROUTE NL_RTM_DELROUTE 110 #define RTM_GETROUTE NL_RTM_GETROUTE 111 #define RTM_NEWNEIGH NL_RTM_NEWNEIGH 112 #define RTM_DELNEIGH NL_RTM_DELNEIGH 113 #define RTM_GETNEIGH NL_RTM_GETNEIGH 114 #define RTM_NEWRULE NL_RTM_NEWRULE 115 #define RTM_DELRULE NL_RTM_DELRULE 116 #define RTM_GETRULE NL_RTM_GETRULE 117 #define RTM_NEWQDISC NL_RTM_NEWQDISC 118 #define RTM_DELQDISC NL_RTM_DELQDISC 119 #define RTM_GETQDISC NL_RTM_GETQDISC 120 #define RTM_NEWTCLASS NL_RTM_NEWTCLASS 121 #define RTM_DELTCLASS NL_RTM_DELTCLASS 122 #define RTM_GETTCLASS NL_RTM_GETTCLASS 123 #define RTM_NEWTFILTER NL_RTM_NEWTFILTER 124 #define RTM_DELTFILTER NL_RTM_DELTFILTER 125 #define RTM_GETTFILTER NL_RTM_GETTFILTER 126 #define RTM_NEWACTION NL_RTM_NEWACTION 127 #define RTM_DELACTION NL_RTM_DELACTION 128 #define RTM_GETACTION NL_RTM_GETACTION 129 #define RTM_NEWPREFIX NL_RTM_NEWPREFIX 130 #define RTM_GETMULTICAST NL_RTM_GETMULTICAST 131 #define RTM_GETANYCAST NL_RTM_GETANYCAST 132 #define RTM_NEWNEIGHTBL NL_RTM_NEWNEIGHTBL 133 #define RTM_GETNEIGHTBL NL_RTM_GETNEIGHTBL 134 #define RTM_SETNEIGHTBL NL_RTM_SETNEIGHTBL 135 #define RTM_NEWNDUSEROPT NL_RTM_NEWNDUSEROPT 136 #define RTM_NEWADDRLABEL NL_RTM_NEWADDRLABEL 137 #define RTM_DELADDRLABEL NL_RTM_DELADDRLABEL 138 #define RTM_GETADDRLABEL NL_RTM_GETADDRLABEL 139 #define RTM_GETDCB NL_RTM_GETDCB 140 #define RTM_SETDCB NL_RTM_SETDCB 141 #define RTM_NEWNETCONF NL_RTM_NEWNETCONF 142 #define RTM_GETNETCONF NL_RTM_GETNETCONF 143 #define RTM_NEWMDB NL_RTM_NEWMDB 144 #define RTM_DELMDB NL_RTM_DELMDB 145 #define RTM_GETMDB NL_RTM_GETMDB 146 #define RTM_NEWNSID NL_RTM_NEWNSID 147 #define RTM_DELNSID NL_RTM_DELNSID 148 #define RTM_GETNSID NL_RTM_GETNSID 149 #define RTM_NEWSTATS NL_RTM_NEWSTATS 150 #define RTM_GETSTATS NL_RTM_GETSTATS 151 #define RTM_NEWNEXTHOP NL_RTM_NEWNEXTHOP 152 #define RTM_DELNEXTHOP NL_RTM_DELNEXTHOP 153 #define RTM_GETNEXTHOP NL_RTM_GETNEXTHOP 154 #define __RTM_MAX __NL_RTM_MAX 155 156 #define RTM_MAX (roundup2(__RTM_MAX, 4)) 157 158 /* rtnetlink multicast groups - backwards compatibility for userspace */ 159 #define RTMGRP_LINK 0x01 160 #define RTMGRP_NOTIFY 0x02 161 #define RTMGRP_NEIGH 0x04 162 #define RTMGRP_TC 0x08 163 164 #define RTMGRP_IPV4_IFADDR 0x10 165 #define RTMGRP_IPV4_MROUTE 0x20 166 #define RTMGRP_IPV4_ROUTE 0x40 167 #define RTMGRP_IPV4_RULE 0x80 168 169 #define RTMGRP_IPV6_IFADDR 0x100 170 #define RTMGRP_IPV6_MROUTE 0x200 171 #define RTMGRP_IPV6_ROUTE 0x400 172 #define RTMGRP_IPV6_IFINFO 0x800 173 174 #define RTMGRP_DECnet_IFADDR 0x1000 175 #define RTMGRP_DECnet_ROUTE 0x4000 176 177 #define RTMGRP_IPV6_PREFIX 0x20000 178 #endif 179 180 /* Defined NETLINK_ROUTE multicast groups */ 181 enum rtnetlink_groups { 182 RTNLGRP_NONE, 183 #define RTNLGRP_NONE RTNLGRP_NONE 184 RTNLGRP_LINK, 185 #define RTNLGRP_LINK RTNLGRP_LINK 186 RTNLGRP_NOTIFY, 187 #define RTNLGRP_NOTIFY RTNLGRP_NOTIFY 188 RTNLGRP_NEIGH, 189 #define RTNLGRP_NEIGH RTNLGRP_NEIGH 190 RTNLGRP_TC, 191 #define RTNLGRP_TC RTNLGRP_TC 192 RTNLGRP_IPV4_IFADDR, 193 #define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR 194 RTNLGRP_IPV4_MROUTE, 195 #define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE 196 RTNLGRP_IPV4_ROUTE, 197 #define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE 198 RTNLGRP_IPV4_RULE, 199 #define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE 200 RTNLGRP_IPV6_IFADDR, 201 #define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR 202 RTNLGRP_IPV6_MROUTE, 203 #define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE 204 RTNLGRP_IPV6_ROUTE, 205 #define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE 206 RTNLGRP_IPV6_IFINFO, 207 #define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO 208 RTNLGRP_DECnet_IFADDR, 209 #define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR 210 RTNLGRP_NOP2, 211 RTNLGRP_DECnet_ROUTE, 212 #define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE 213 RTNLGRP_DECnet_RULE, 214 #define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE 215 RTNLGRP_NOP4, 216 RTNLGRP_IPV6_PREFIX, 217 #define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX 218 RTNLGRP_IPV6_RULE, 219 #define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE 220 RTNLGRP_ND_USEROPT, 221 #define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT 222 RTNLGRP_PHONET_IFADDR, 223 #define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR 224 RTNLGRP_PHONET_ROUTE, 225 #define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE 226 RTNLGRP_DCB, 227 #define RTNLGRP_DCB RTNLGRP_DCB 228 RTNLGRP_IPV4_NETCONF, 229 #define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF 230 RTNLGRP_IPV6_NETCONF, 231 #define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF 232 RTNLGRP_MDB, 233 #define RTNLGRP_MDB RTNLGRP_MDB 234 RTNLGRP_MPLS_ROUTE, 235 #define RTNLGRP_MPLS_ROUTE RTNLGRP_MPLS_ROUTE 236 RTNLGRP_NSID, 237 #define RTNLGRP_NSID RTNLGRP_NSID 238 RTNLGRP_MPLS_NETCONF, 239 #define RTNLGRP_MPLS_NETCONF RTNLGRP_MPLS_NETCONF 240 RTNLGRP_IPV4_MROUTE_R, 241 #define RTNLGRP_IPV4_MROUTE_R RTNLGRP_IPV4_MROUTE_R 242 RTNLGRP_IPV6_MROUTE_R, 243 #define RTNLGRP_IPV6_MROUTE_R RTNLGRP_IPV6_MROUTE_R 244 RTNLGRP_NEXTHOP, 245 #define RTNLGRP_NEXTHOP RTNLGRP_NEXTHOP 246 RTNLGRP_BRVLAN, 247 #define RTNLGRP_BRVLAN RTNLGRP_BRVLAN 248 __RTNLGRP_MAX 249 }; 250 #define RTNLGRP_MAX (__RTNLGRP_MAX - 1) 251 252 253 /* Defined NETLINK_ROUTE virtual multicast address families */ 254 #define RTNL_FAMILY_IPMR 128 /* Not supported */ 255 #define RTNL_FAMILY_IP6MR 129 /* Not supported */ 256 #define RTNL_FAMILY_MAX 129 257 258 #endif 259 260