aboutsummaryrefslogtreecommitdiff
path: root/sys/netlink/route/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netlink/route/common.h')
-rw-r--r--sys/netlink/route/common.h259
1 files changed, 259 insertions, 0 deletions
diff --git a/sys/netlink/route/common.h b/sys/netlink/route/common.h
new file mode 100644
index 000000000000..5cd3a5ee3524
--- /dev/null
+++ b/sys/netlink/route/common.h
@@ -0,0 +1,259 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2022 Alexander V. Chernikov <melifaro@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Common defines for all parts of the NETLINK_ROUTE family
+ */
+#ifndef _NETLINK_ROUTE_COMMON_H_
+#define _NETLINK_ROUTE_COMMON_H_
+
+/* Defined NETLINK_ROUTE messages */
+enum {
+ NL_RTM_BASE = 16,
+ NL_RTM_NEWLINK = 16, /* creates new interface */
+ NL_RTM_DELLINK = 17, /* deletes matching interface */
+ NL_RTM_GETLINK = 18, /* lists matching interfaces */
+ NL_RTM_SETLINK = 19, /* not supported */
+ NL_RTM_NEWADDR = 20, /* not supported */
+ NL_RTM_DELADDR = 21, /* not supported */
+ NL_RTM_GETADDR = 22, /* lists matching ifaddrs */
+ NL_RTM_NEWROUTE = 24, /* adds or changes a route */
+ NL_RTM_DELROUTE = 25, /* deletes matching route */
+ NL_RTM_GETROUTE = 26, /* lists matching routes */
+ NL_RTM_NEWNEIGH = 28, /* creates new arp/ndp entry */
+ NL_RTM_DELNEIGH = 29, /* deletes matching arp/ndp entry */
+ NL_RTM_GETNEIGH = 30, /* lists matching arp/ndp entry */
+ NL_RTM_NEWRULE = 32, /* not supported */
+ NL_RTM_DELRULE = 33, /* not supported */
+ NL_RTM_GETRULE = 34, /* not supported */
+ NL_RTM_NEWQDISC = 36, /* not supported */
+ NL_RTM_DELQDISC = 37, /* not supported */
+ NL_RTM_GETQDISC = 38, /* not supported */
+ NL_RTM_NEWTCLASS = 40, /* not supported */
+ NL_RTM_DELTCLASS = 41, /* not supported */
+ NL_RTM_GETTCLASS = 42, /* not supported */
+ NL_RTM_NEWTFILTER = 44, /* not supported */
+ NL_RTM_DELTFILTER = 45, /* not supported */
+ NL_RTM_GETTFILTER = 46, /* not supported */
+ NL_RTM_NEWACTION = 48, /* not supported */
+ NL_RTM_DELACTION = 49, /* not supported */
+ NL_RTM_GETACTION = 50, /* not supported */
+ NL_RTM_NEWPREFIX = 52, /* not supported */
+ NL_RTM_GETMULTICAST = 58, /* not supported */
+ NL_RTM_GETANYCAST = 62, /* not supported */
+ NL_RTM_NEWNEIGHTBL = 64, /* not supported */
+ NL_RTM_GETNEIGHTBL = 66, /* not supported */
+ NL_RTM_SETNEIGHTBL = 67, /* not supported */
+ NL_RTM_NEWNDUSEROPT = 68, /* not supported */
+ NL_RTM_NEWADDRLABEL = 72, /* not supported */
+ NL_RTM_DELADDRLABEL = 73, /* not supported */
+ NL_RTM_GETADDRLABEL = 74, /* not supported */
+ NL_RTM_GETDCB = 78, /* not supported */
+ NL_RTM_SETDCB = 79, /* not supported */
+ NL_RTM_NEWNETCONF = 80, /* not supported */
+ NL_RTM_GETNETCONF = 82, /* not supported */
+ NL_RTM_NEWMDB = 84, /* not supported */
+ NL_RTM_DELMDB = 85, /* not supported */
+ NL_RTM_GETMDB = 86, /* not supported */
+ NL_RTM_NEWNSID = 88, /* not supported */
+ NL_RTM_DELNSID = 89, /* not supported */
+ NL_RTM_GETNSID = 90, /* not supported */
+ NL_RTM_NEWSTATS = 92, /* not supported */
+ NL_RTM_GETSTATS = 94, /* not supported */
+ NL_RTM_NEWNEXTHOP = 104, /* creates new user nexhtop */
+ NL_RTM_DELNEXTHOP = 105, /* deletes matching nexthop */
+ NL_RTM_GETNEXTHOP = 106, /* lists created user nexthops */
+ __NL_RTM_MAX,
+};
+#define NL_RTM_MAX (((__NL_RTM_MAX + 3) & ~3) - 1)
+
+#ifndef _KERNEL
+/*
+ * RTM_* namespace clashes with BSD rtsock namespace.
+ * Use NL_RTM_ prefix in the kernel and map it to RTM_
+ * for userland.
+ */
+#define RTM_BASE NL_RTM_BASE
+#define RTM_NEWLINK NL_RTM_NEWLINK
+#define RTM_DELLINK NL_RTM_DELLINK
+#define RTM_GETLINK NL_RTM_GETLINK
+#define RTM_SETLINK NL_RTM_SETLINK
+#define RTM_NEWADDR NL_RTM_NEWADDR
+#define RTM_DELADDR NL_RTM_DELADDR
+#define RTM_GETADDR NL_RTM_GETADDR
+#define RTM_NEWROUTE NL_RTM_NEWROUTE
+#define RTM_DELROUTE NL_RTM_DELROUTE
+#define RTM_GETROUTE NL_RTM_GETROUTE
+#define RTM_NEWNEIGH NL_RTM_NEWNEIGH
+#define RTM_DELNEIGH NL_RTM_DELNEIGH
+#define RTM_GETNEIGH NL_RTM_GETNEIGH
+#define RTM_NEWRULE NL_RTM_NEWRULE
+#define RTM_DELRULE NL_RTM_DELRULE
+#define RTM_GETRULE NL_RTM_GETRULE
+#define RTM_NEWQDISC NL_RTM_NEWQDISC
+#define RTM_DELQDISC NL_RTM_DELQDISC
+#define RTM_GETQDISC NL_RTM_GETQDISC
+#define RTM_NEWTCLASS NL_RTM_NEWTCLASS
+#define RTM_DELTCLASS NL_RTM_DELTCLASS
+#define RTM_GETTCLASS NL_RTM_GETTCLASS
+#define RTM_NEWTFILTER NL_RTM_NEWTFILTER
+#define RTM_DELTFILTER NL_RTM_DELTFILTER
+#define RTM_GETTFILTER NL_RTM_GETTFILTER
+#define RTM_NEWACTION NL_RTM_NEWACTION
+#define RTM_DELACTION NL_RTM_DELACTION
+#define RTM_GETACTION NL_RTM_GETACTION
+#define RTM_NEWPREFIX NL_RTM_NEWPREFIX
+#define RTM_GETMULTICAST NL_RTM_GETMULTICAST
+#define RTM_GETANYCAST NL_RTM_GETANYCAST
+#define RTM_NEWNEIGHTBL NL_RTM_NEWNEIGHTBL
+#define RTM_GETNEIGHTBL NL_RTM_GETNEIGHTBL
+#define RTM_SETNEIGHTBL NL_RTM_SETNEIGHTBL
+#define RTM_NEWNDUSEROPT NL_RTM_NEWNDUSEROPT
+#define RTM_NEWADDRLABEL NL_RTM_NEWADDRLABEL
+#define RTM_DELADDRLABEL NL_RTM_DELADDRLABEL
+#define RTM_GETADDRLABEL NL_RTM_GETADDRLABEL
+#define RTM_GETDCB NL_RTM_GETDCB
+#define RTM_SETDCB NL_RTM_SETDCB
+#define RTM_NEWNETCONF NL_RTM_NEWNETCONF
+#define RTM_GETNETCONF NL_RTM_GETNETCONF
+#define RTM_NEWMDB NL_RTM_NEWMDB
+#define RTM_DELMDB NL_RTM_DELMDB
+#define RTM_GETMDB NL_RTM_GETMDB
+#define RTM_NEWNSID NL_RTM_NEWNSID
+#define RTM_DELNSID NL_RTM_DELNSID
+#define RTM_GETNSID NL_RTM_GETNSID
+#define RTM_NEWSTATS NL_RTM_NEWSTATS
+#define RTM_GETSTATS NL_RTM_GETSTATS
+#define RTM_NEWNEXTHOP NL_RTM_NEWNEXTHOP
+#define RTM_DELNEXTHOP NL_RTM_DELNEXTHOP
+#define RTM_GETNEXTHOP NL_RTM_GETNEXTHOP
+#define __RTM_MAX __NL_RTM_MAX
+
+#define RTM_MAX (roundup2(__RTM_MAX, 4))
+
+/* rtnetlink multicast groups - backwards compatibility for userspace */
+#define RTMGRP_LINK 0x01
+#define RTMGRP_NOTIFY 0x02
+#define RTMGRP_NEIGH 0x04
+#define RTMGRP_TC 0x08
+
+#define RTMGRP_IPV4_IFADDR 0x10
+#define RTMGRP_IPV4_MROUTE 0x20
+#define RTMGRP_IPV4_ROUTE 0x40
+#define RTMGRP_IPV4_RULE 0x80
+
+#define RTMGRP_IPV6_IFADDR 0x100
+#define RTMGRP_IPV6_MROUTE 0x200
+#define RTMGRP_IPV6_ROUTE 0x400
+#define RTMGRP_IPV6_IFINFO 0x800
+
+#define RTMGRP_DECnet_IFADDR 0x1000
+#define RTMGRP_DECnet_ROUTE 0x4000
+
+#define RTMGRP_IPV6_PREFIX 0x20000
+#endif
+
+/* Defined NETLINK_ROUTE multicast groups */
+enum rtnetlink_groups {
+ RTNLGRP_NONE,
+#define RTNLGRP_NONE RTNLGRP_NONE
+ RTNLGRP_LINK,
+#define RTNLGRP_LINK RTNLGRP_LINK
+ RTNLGRP_NOTIFY,
+#define RTNLGRP_NOTIFY RTNLGRP_NOTIFY
+ RTNLGRP_NEIGH,
+#define RTNLGRP_NEIGH RTNLGRP_NEIGH
+ RTNLGRP_TC,
+#define RTNLGRP_TC RTNLGRP_TC
+ RTNLGRP_IPV4_IFADDR,
+#define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR
+ RTNLGRP_IPV4_MROUTE,
+#define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE
+ RTNLGRP_IPV4_ROUTE,
+#define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE
+ RTNLGRP_IPV4_RULE,
+#define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE
+ RTNLGRP_IPV6_IFADDR,
+#define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR
+ RTNLGRP_IPV6_MROUTE,
+#define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE
+ RTNLGRP_IPV6_ROUTE,
+#define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE
+ RTNLGRP_IPV6_IFINFO,
+#define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO
+ RTNLGRP_DECnet_IFADDR,
+#define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR
+ RTNLGRP_NOP2,
+ RTNLGRP_DECnet_ROUTE,
+#define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE
+ RTNLGRP_DECnet_RULE,
+#define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE
+ RTNLGRP_NOP4,
+ RTNLGRP_IPV6_PREFIX,
+#define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX
+ RTNLGRP_IPV6_RULE,
+#define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE
+ RTNLGRP_ND_USEROPT,
+#define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT
+ RTNLGRP_PHONET_IFADDR,
+#define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR
+ RTNLGRP_PHONET_ROUTE,
+#define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE
+ RTNLGRP_DCB,
+#define RTNLGRP_DCB RTNLGRP_DCB
+ RTNLGRP_IPV4_NETCONF,
+#define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF
+ RTNLGRP_IPV6_NETCONF,
+#define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF
+ RTNLGRP_MDB,
+#define RTNLGRP_MDB RTNLGRP_MDB
+ RTNLGRP_MPLS_ROUTE,
+#define RTNLGRP_MPLS_ROUTE RTNLGRP_MPLS_ROUTE
+ RTNLGRP_NSID,
+#define RTNLGRP_NSID RTNLGRP_NSID
+ RTNLGRP_MPLS_NETCONF,
+#define RTNLGRP_MPLS_NETCONF RTNLGRP_MPLS_NETCONF
+ RTNLGRP_IPV4_MROUTE_R,
+#define RTNLGRP_IPV4_MROUTE_R RTNLGRP_IPV4_MROUTE_R
+ RTNLGRP_IPV6_MROUTE_R,
+#define RTNLGRP_IPV6_MROUTE_R RTNLGRP_IPV6_MROUTE_R
+ RTNLGRP_NEXTHOP,
+#define RTNLGRP_NEXTHOP RTNLGRP_NEXTHOP
+ RTNLGRP_BRVLAN,
+#define RTNLGRP_BRVLAN RTNLGRP_BRVLAN
+ __RTNLGRP_MAX
+};
+#define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
+
+
+/* Defined NETLINK_ROUTE virtual multicast address families */
+#define RTNL_FAMILY_IPMR 128 /* Not supported */
+#define RTNL_FAMILY_IP6MR 129 /* Not supported */
+#define RTNL_FAMILY_MAX 129
+
+#endif
+