xref: /freebsd/sys/netlink/route/nexthop.h (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
17e5bf684SAlexander V. Chernikov /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
37e5bf684SAlexander V. Chernikov  *
47e5bf684SAlexander V. Chernikov  * Copyright (c) 2022 Alexander V. Chernikov <melifaro@FreeBSD.org>
57e5bf684SAlexander V. Chernikov  *
67e5bf684SAlexander V. Chernikov  * Redistribution and use in source and binary forms, with or without
77e5bf684SAlexander V. Chernikov  * modification, are permitted provided that the following conditions
87e5bf684SAlexander V. Chernikov  * are met:
97e5bf684SAlexander V. Chernikov  * 1. Redistributions of source code must retain the above copyright
107e5bf684SAlexander V. Chernikov  *    notice, this list of conditions and the following disclaimer.
117e5bf684SAlexander V. Chernikov  * 2. Redistributions in binary form must reproduce the above copyright
127e5bf684SAlexander V. Chernikov  *    notice, this list of conditions and the following disclaimer in the
137e5bf684SAlexander V. Chernikov  *    documentation and/or other materials provided with the distribution.
147e5bf684SAlexander V. Chernikov  *
157e5bf684SAlexander V. Chernikov  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
167e5bf684SAlexander V. Chernikov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
177e5bf684SAlexander V. Chernikov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
187e5bf684SAlexander V. Chernikov  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
197e5bf684SAlexander V. Chernikov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
207e5bf684SAlexander V. Chernikov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
217e5bf684SAlexander V. Chernikov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
227e5bf684SAlexander V. Chernikov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
237e5bf684SAlexander V. Chernikov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
247e5bf684SAlexander V. Chernikov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
257e5bf684SAlexander V. Chernikov  * SUCH DAMAGE.
267e5bf684SAlexander V. Chernikov  */
277e5bf684SAlexander V. Chernikov 
287e5bf684SAlexander V. Chernikov /*
297e5bf684SAlexander V. Chernikov  * NEXTHOP-related (RTM_<NEW|DEL|GET>NEXTHOP) message header and attributes.
307e5bf684SAlexander V. Chernikov  */
317e5bf684SAlexander V. Chernikov 
327e5bf684SAlexander V. Chernikov #ifndef _NETLINK_ROUTE_NEXTHOP_H_
337e5bf684SAlexander V. Chernikov #define _NETLINK_ROUTE_NEXTHOP_H_
347e5bf684SAlexander V. Chernikov 
357e5bf684SAlexander V. Chernikov /* Base header for all of the relevant messages */
367e5bf684SAlexander V. Chernikov struct nhmsg {
377e5bf684SAlexander V. Chernikov         unsigned char	nh_family;	/* transport family */
387e5bf684SAlexander V. Chernikov 	unsigned char	nh_scope;	/* ignored on RX, filled by kernel */
397e5bf684SAlexander V. Chernikov 	unsigned char	nh_protocol;	/* Routing protocol that installed nh */
407e5bf684SAlexander V. Chernikov 	unsigned char	resvd;
417e5bf684SAlexander V. Chernikov 	unsigned int	nh_flags;	/* RTNH_F_* flags from route.h */
427e5bf684SAlexander V. Chernikov };
437e5bf684SAlexander V. Chernikov 
447e5bf684SAlexander V. Chernikov enum {
457e5bf684SAlexander V. Chernikov 	NHA_UNSPEC,
467e5bf684SAlexander V. Chernikov 	NHA_ID,		/* u32: nexthop userland index, auto-assigned if 0 */
477e5bf684SAlexander V. Chernikov 	NHA_GROUP,	/* binary: array of struct nexthop_grp */
487e5bf684SAlexander V. Chernikov 	NHA_GROUP_TYPE,	/* u16: set to NEXTHOP_GRP_TYPE */
497e5bf684SAlexander V. Chernikov 	NHA_BLACKHOLE,	/* flag: nexthop used to blackhole packets */
507e5bf684SAlexander V. Chernikov 	NHA_OIF,	/* u32: transmit ifindex */
517e5bf684SAlexander V. Chernikov 	NHA_GATEWAY,	/* network: IPv4/IPv6 gateway addr */
527e5bf684SAlexander V. Chernikov 	NHA_ENCAP_TYPE, /* not supported */
537e5bf684SAlexander V. Chernikov 	NHA_ENCAP,	/* not supported */
547e5bf684SAlexander V. Chernikov 	NHA_GROUPS,	/* flag: match nexthop groups */
557e5bf684SAlexander V. Chernikov 	NHA_MASTER,	/* not supported */
567e5bf684SAlexander V. Chernikov 	NHA_FDB,	/* not supported */
577e5bf684SAlexander V. Chernikov 	NHA_RES_GROUP,	/* not supported */
587e5bf684SAlexander V. Chernikov 	NHA_RES_BUCKET,	/* not supported */
59b32cf15dSAlexander V. Chernikov 	NHA_FREEBSD,	/* nested: FreeBSD-specific attributes */
607e5bf684SAlexander V. Chernikov 	__NHA_MAX,
617e5bf684SAlexander V. Chernikov };
627e5bf684SAlexander V. Chernikov #define NHA_MAX	(__NHA_MAX - 1)
637e5bf684SAlexander V. Chernikov 
64b32cf15dSAlexander V. Chernikov enum {
65b32cf15dSAlexander V. Chernikov 	NHAF_UNSPEC,
66b32cf15dSAlexander V. Chernikov 	NHAF_KNHOPS,	/* flag: dump kernel nexthops */
67b32cf15dSAlexander V. Chernikov 	NHAF_KGOUPS,	/* flag: dump kernel nexthop groups */
68b32cf15dSAlexander V. Chernikov 	NHAF_TABLE,	/* u32: rtable id */
69b32cf15dSAlexander V. Chernikov 	NHAF_FAMILY,	/* u32: upper family */
70b32cf15dSAlexander V. Chernikov 	NHAF_KID,	/* u32: kernel nexthop index */
71b32cf15dSAlexander V. Chernikov 	NHAF_AIF,	/* u32: source interface address */
72b32cf15dSAlexander V. Chernikov };
73b32cf15dSAlexander V. Chernikov 
747e5bf684SAlexander V. Chernikov /*
757e5bf684SAlexander V. Chernikov  * Attributes that can be used as filters:
767e5bf684SAlexander V. Chernikov  * NHA_ID (nexhop or group), NHA_OIF, NHA_GROUPS,
777e5bf684SAlexander V. Chernikov  */
787e5bf684SAlexander V. Chernikov 
797e5bf684SAlexander V. Chernikov /*
807e5bf684SAlexander V. Chernikov  * NHA_GROUP: array of the following structures.
817e5bf684SAlexander V. Chernikov  * If attribute is set, the only other valid attributes are
827e5bf684SAlexander V. Chernikov  *  NHA_ID and NHA_GROUP_TYPE.
837e5bf684SAlexander V. Chernikov  *  NHA_RES_GROUP and NHA_RES_BUCKET are not supported yet
847e5bf684SAlexander V. Chernikov  */
857e5bf684SAlexander V. Chernikov struct nexthop_grp {
867e5bf684SAlexander V. Chernikov 	uint32_t	id;		/* nexhop userland index */
877e5bf684SAlexander V. Chernikov 	uint8_t		weight;         /* weight of this nexthop */
887e5bf684SAlexander V. Chernikov 	uint8_t		resvd1;
897e5bf684SAlexander V. Chernikov 	uint16_t	resvd2;
907e5bf684SAlexander V. Chernikov };
917e5bf684SAlexander V. Chernikov 
927e5bf684SAlexander V. Chernikov /* NHA_GROUP_TYPE: u16 */
937e5bf684SAlexander V. Chernikov enum {
947e5bf684SAlexander V. Chernikov 	NEXTHOP_GRP_TYPE_MPATH,		/* default nexthop group */
957e5bf684SAlexander V. Chernikov 	NEXTHOP_GRP_TYPE_RES,		/* resilient nexthop group */
967e5bf684SAlexander V. Chernikov 	__NEXTHOP_GRP_TYPE_MAX,
977e5bf684SAlexander V. Chernikov };
987e5bf684SAlexander V. Chernikov #define NEXTHOP_GRP_TYPE_MAX (__NEXTHOP_GRP_TYPE_MAX - 1)
997e5bf684SAlexander V. Chernikov 
1007e5bf684SAlexander V. Chernikov 
1017e5bf684SAlexander V. Chernikov /* NHA_RES_GROUP */
1027e5bf684SAlexander V. Chernikov enum {
1037e5bf684SAlexander V. Chernikov 	NHA_RES_GROUP_UNSPEC,
1047e5bf684SAlexander V. Chernikov 	NHA_RES_GROUP_PAD = NHA_RES_GROUP_UNSPEC,
1057e5bf684SAlexander V. Chernikov 	NHA_RES_GROUP_BUCKETS,
1067e5bf684SAlexander V. Chernikov 	NHA_RES_GROUP_IDLE_TIMER,
1077e5bf684SAlexander V. Chernikov 	NHA_RES_GROUP_UNBALANCED_TIMER,
1087e5bf684SAlexander V. Chernikov 	NHA_RES_GROUP_UNBALANCED_TIME,
1097e5bf684SAlexander V. Chernikov 	__NHA_RES_GROUP_MAX,
1107e5bf684SAlexander V. Chernikov };
1117e5bf684SAlexander V. Chernikov #define NHA_RES_GROUP_MAX	(__NHA_RES_GROUP_MAX - 1)
1127e5bf684SAlexander V. Chernikov 
1137e5bf684SAlexander V. Chernikov #endif
114