xref: /freebsd/sys/netlink/route/neigh.h (revision c90f1ed104606f5a691ea2defc5711ca9d28fcc7)
17e5bf684SAlexander V. Chernikov /*-
24d846d26SWarner 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  * Neighbors-related (RTM_<NEW|DEL|GET>NEIGH) message header and attributes.
307e5bf684SAlexander V. Chernikov  */
317e5bf684SAlexander V. Chernikov 
327e5bf684SAlexander V. Chernikov #ifndef _NETLINK_ROUTE_NEIGH_H_
337e5bf684SAlexander V. Chernikov #define _NETLINK_ROUTE_NEIGH_H_
347e5bf684SAlexander V. Chernikov 
357e5bf684SAlexander V. Chernikov /* Base header for all of the relevant messages */
367e5bf684SAlexander V. Chernikov struct ndmsg {
377e5bf684SAlexander V. Chernikov 	uint8_t		ndm_family;
387e5bf684SAlexander V. Chernikov 	uint8_t		ndm_pad1;
397e5bf684SAlexander V. Chernikov 	uint16_t	ndm_pad2;
407e5bf684SAlexander V. Chernikov 	int32_t		ndm_ifindex;
417e5bf684SAlexander V. Chernikov 	uint16_t	ndm_state;
427e5bf684SAlexander V. Chernikov 	uint8_t		ndm_flags;
437e5bf684SAlexander V. Chernikov 	uint8_t		ndm_type;
447e5bf684SAlexander V. Chernikov };
457e5bf684SAlexander V. Chernikov 
467e5bf684SAlexander V. Chernikov /* Attributes */
477e5bf684SAlexander V. Chernikov enum {
487e5bf684SAlexander V. Chernikov 	NDA_UNSPEC,
497e5bf684SAlexander V. Chernikov 	NDA_DST,		/* binary: neigh l3 address */
507e5bf684SAlexander V. Chernikov 	NDA_LLADDR,		/* binary: neigh link-level address */
517e5bf684SAlexander V. Chernikov 	NDA_CACHEINFO,		/* binary, struct nda_cacheinfo */
52a2728a9aSAlexander V. Chernikov 	NDA_PROBES,		/* u32: number of probes sent */
537e5bf684SAlexander V. Chernikov 	NDA_VLAN,		/* upper 802.1Q tag */
547e5bf684SAlexander V. Chernikov 	NDA_PORT,		/* not supported */
557e5bf684SAlexander V. Chernikov 	NDA_VNI,		/* not supported */
567e5bf684SAlexander V. Chernikov 	NDA_IFINDEX,		/* interface index */
577e5bf684SAlexander V. Chernikov 	NDA_MASTER,		/* not supported */
587e5bf684SAlexander V. Chernikov 	NDA_LINK_NETNSID,	/* not supported */
597e5bf684SAlexander V. Chernikov 	NDA_SRC_VNI,		/* not supported */
607e5bf684SAlexander V. Chernikov 	NDA_PROTOCOL,		/* XXX */
617e5bf684SAlexander V. Chernikov 	NDA_NH_ID,		/* not supported */
627e5bf684SAlexander V. Chernikov 	NDA_FDB_EXT_ATTRS,	/* not supported */
637e5bf684SAlexander V. Chernikov 	NDA_FLAGS_EXT,		/* u32: ndm_flags */
647e5bf684SAlexander V. Chernikov 	NDA_NDM_STATE_MASK,	/* XXX */
657e5bf684SAlexander V. Chernikov 	NDA_NDM_FLAGS_MASK,	/* XXX */
66a2728a9aSAlexander V. Chernikov 	NDA_FREEBSD,		/* nested: FreeBSD-specific */
677e5bf684SAlexander V. Chernikov 	__NDA_MAX
687e5bf684SAlexander V. Chernikov };
697e5bf684SAlexander V. Chernikov 
707e5bf684SAlexander V. Chernikov #define	NDA_MAX	(__NDA_MAX - 1)
717e5bf684SAlexander V. Chernikov 
72a2728a9aSAlexander V. Chernikov enum {
73a2728a9aSAlexander V. Chernikov 	NDAF_UNSPEC,
74a2728a9aSAlexander V. Chernikov 	NDAF_NEXT_STATE_TS,	/* (u32) seconds from time_uptime when moving to the next state */
75a2728a9aSAlexander V. Chernikov };
76a2728a9aSAlexander V. Chernikov 
777e5bf684SAlexander V. Chernikov 
787e5bf684SAlexander V. Chernikov /* ndm_flags / NDA_FLAGS_EXT */
797e5bf684SAlexander V. Chernikov #define	NTF_USE			0x0001	/* XXX */
807e5bf684SAlexander V. Chernikov #define	NTF_SELF		0x0002	/* local station */
817e5bf684SAlexander V. Chernikov #define	NTF_MASTER		0x0004	/* XXX */
827e5bf684SAlexander V. Chernikov #define	NTF_PROXY		0x0008	/* proxy entry */
837e5bf684SAlexander V. Chernikov #define	NTF_EXT_LEARNED		0x0010	/* not used */
847e5bf684SAlexander V. Chernikov #define	NTF_OFFLOADED		0x0020	/* not used */
85*c90f1ed1SGordon Bergling #define	NTF_STICKY		0x0040	/* permanent entry */
867e5bf684SAlexander V. Chernikov #define	NTF_ROUTER		0x0080	/* dst indicated itself as a router */
877e5bf684SAlexander V. Chernikov /* start of NDA_FLAGS_EXT */
887e5bf684SAlexander V. Chernikov #define	NTF_EXT_MANAGED		0x0100	/* not used */
897e5bf684SAlexander V. Chernikov 
907e5bf684SAlexander V. Chernikov /* ndm_state */
917e5bf684SAlexander V. Chernikov #define	NUD_INCOMPLETE		0x01	/* No lladdr, address resolution in progress */
927e5bf684SAlexander V. Chernikov #define	NUD_REACHABLE		0x02	/* reachable & recently resolved */
937e5bf684SAlexander V. Chernikov #define	NUD_STALE		0x04	/* has lladdr but it's stale */
947e5bf684SAlexander V. Chernikov #define	NUD_DELAY		0x08	/* has lladdr, is stale, probes delayed */
957e5bf684SAlexander V. Chernikov #define	NUD_PROBE		0x10	/* has lladdr, is stale, probes sent */
967e5bf684SAlexander V. Chernikov #define	NUD_FAILED		0x20	/* unused */
977e5bf684SAlexander V. Chernikov 
987e5bf684SAlexander V. Chernikov /* Dummy states */
997e5bf684SAlexander V. Chernikov #define	NUD_NOARP		0x40	/* not used */
1007e5bf684SAlexander V. Chernikov #define	NUD_PERMANENT		0x80	/* not flushed */
1017e5bf684SAlexander V. Chernikov #define	NUD_NONE		0x00
1027e5bf684SAlexander V. Chernikov 
1037e5bf684SAlexander V. Chernikov /* NDA_CACHEINFO */
1047e5bf684SAlexander V. Chernikov struct nda_cacheinfo {
1057e5bf684SAlexander V. Chernikov 	uint32_t	ndm_confirmed;	/* seconds since ARP/ND was received from neigh */
1067e5bf684SAlexander V. Chernikov 	uint32_t	ndm_used;	/* seconds since last used (not provided) */
1077e5bf684SAlexander V. Chernikov 	uint32_t	ndm_updated;	/* seconds since state was updated last */
1087e5bf684SAlexander V. Chernikov 	uint32_t	ndm_refcnt;	/* number of references held */
1097e5bf684SAlexander V. Chernikov };
1107e5bf684SAlexander V. Chernikov 
1117e5bf684SAlexander V. Chernikov #endif
112