xref: /freebsd/share/man/man4/rtnetlink.4 (revision ffc4f93e960d38b6f70d59409127f7562e40f916)
17366c0a4SAlexander V. Chernikov.\"
27366c0a4SAlexander V. Chernikov.\" Copyright (C) 2022 Alexander Chernikov <melifaro@FreeBSD.org>.
37366c0a4SAlexander V. Chernikov.\"
47366c0a4SAlexander V. Chernikov.\" Redistribution and use in source and binary forms, with or without
57366c0a4SAlexander V. Chernikov.\" modification, are permitted provided that the following conditions
67366c0a4SAlexander V. Chernikov.\" are met:
77366c0a4SAlexander V. Chernikov.\" 1. Redistributions of source code must retain the above copyright
87366c0a4SAlexander V. Chernikov.\"    notice, this list of conditions and the following disclaimer.
97366c0a4SAlexander V. Chernikov.\" 2. Redistributions in binary form must reproduce the above copyright
107366c0a4SAlexander V. Chernikov.\"    notice, this list of conditions and the following disclaimer in the
117366c0a4SAlexander V. Chernikov.\"    documentation and/or other materials provided with the distribution.
127366c0a4SAlexander V. Chernikov.\"
137366c0a4SAlexander V. Chernikov.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
147366c0a4SAlexander V. Chernikov.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
157366c0a4SAlexander V. Chernikov.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
167366c0a4SAlexander V. Chernikov.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
177366c0a4SAlexander V. Chernikov.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
187366c0a4SAlexander V. Chernikov.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
197366c0a4SAlexander V. Chernikov.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
207366c0a4SAlexander V. Chernikov.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
217366c0a4SAlexander V. Chernikov.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
227366c0a4SAlexander V. Chernikov.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
237366c0a4SAlexander V. Chernikov.\" SUCH DAMAGE.
247366c0a4SAlexander V. Chernikov.\"
257366c0a4SAlexander V. Chernikov.Dd November 1, 2022
267366c0a4SAlexander V. Chernikov.Dt RTNETLINK 4
277366c0a4SAlexander V. Chernikov.Os
287366c0a4SAlexander V. Chernikov.Sh NAME
297366c0a4SAlexander V. Chernikov.Nm RTNetlink
307366c0a4SAlexander V. Chernikov.Nd Network configuration-specific Netlink family
317366c0a4SAlexander V. Chernikov.Sh SYNOPSIS
327366c0a4SAlexander V. Chernikov.In netlink/netlink.h
337366c0a4SAlexander V. Chernikov.In netlink/netlink_route.h
347366c0a4SAlexander V. Chernikov.Ft int
350079d177SAlexander V. Chernikov.Fn socket AF_NETLINK SOCK_RAW NETLINK_ROUTE
367366c0a4SAlexander V. Chernikov.Sh DESCRIPTION
377366c0a4SAlexander V. ChernikovThe
387366c0a4SAlexander V. Chernikov.Dv NETLINK_ROUTE
397366c0a4SAlexander V. Chernikovfamily aims to be the primary configuration mechanism for all
407366c0a4SAlexander V. Chernikovnetwork-related tasks.
417366c0a4SAlexander V. ChernikovCurrently it supports configuring interfaces, interface addresses, routes,
427366c0a4SAlexander V. Chernikovnexthops and arp/ndp neighbors.
437366c0a4SAlexander V. Chernikov.Sh ROUTES
447366c0a4SAlexander V. ChernikovAll route configuration messages share the common header:
457366c0a4SAlexander V. Chernikov.Bd -literal
467366c0a4SAlexander V. Chernikovstruct rtmsg {
477366c0a4SAlexander V. Chernikov	unsigned char	rtm_family;	/* address family */
487366c0a4SAlexander V. Chernikov	unsigned char	rtm_dst_len;	/* Prefix length */
497366c0a4SAlexander V. Chernikov	unsigned char	rtm_src_len;	/* Deprecated, set to 0 */
507366c0a4SAlexander V. Chernikov	unsigned char	rtm_tos;	/* Type of service (not used) */
517366c0a4SAlexander V. Chernikov	unsigned char	rtm_table;	/* deprecated, set to 0 */
527366c0a4SAlexander V. Chernikov	unsigned char	rtm_protocol;	/* Routing protocol id (RTPROT_) */
537366c0a4SAlexander V. Chernikov	unsigned char	rtm_scope;	/* Route distance (RT_SCOPE_) */
547366c0a4SAlexander V. Chernikov	unsigned char	rtm_type;	/* Route type (RTN_) */
557366c0a4SAlexander V. Chernikov	unsigned 	rtm_flags;	/* Route flags (not supported) */
567366c0a4SAlexander V. Chernikov};
577366c0a4SAlexander V. Chernikov.Ed
587366c0a4SAlexander V. Chernikov.Pp
597366c0a4SAlexander V. ChernikovThe
607366c0a4SAlexander V. Chernikov.Va rtm_family
617366c0a4SAlexander V. Chernikovspecifies the route family to be operated on.
627366c0a4SAlexander V. ChernikovCurrently,
637366c0a4SAlexander V. Chernikov.Dv AF_INET6
647366c0a4SAlexander V. Chernikovand
657366c0a4SAlexander V. Chernikov.Dv AF_INET
667366c0a4SAlexander V. Chernikovare the only supported families.
677366c0a4SAlexander V. ChernikovThe route prefix length is stored in
687366c0a4SAlexander V. Chernikov.Va rtm_dst_len
697366c0a4SAlexander V. Chernikov.
707366c0a4SAlexander V. ChernikovThe caller should set the originator identity (one of the
717366c0a4SAlexander V. Chernikov.Dv RTPROT_
727366c0a4SAlexander V. Chernikovvalues) in
737366c0a4SAlexander V. Chernikov.Va rtm_protocol
747366c0a4SAlexander V. Chernikov.
757366c0a4SAlexander V. ChernikovIt is useful for users and for the application itself, allowing for easy
767366c0a4SAlexander V. Chernikovidentification of self-originated routes.
777366c0a4SAlexander V. ChernikovThe route scope has to be set via
787366c0a4SAlexander V. Chernikov.Va rtm_scope
797366c0a4SAlexander V. Chernikovfield.
807366c0a4SAlexander V. ChernikovThe supported values are:
817366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
827366c0a4SAlexander V. ChernikovRT_SCOPE_UNIVERSE	Global scope
837366c0a4SAlexander V. ChernikovRT_SCOPE_LINK		Link scope
847366c0a4SAlexander V. Chernikov.Ed
857366c0a4SAlexander V. Chernikov.Pp
867366c0a4SAlexander V. ChernikovRoute type needs to be set.
877366c0a4SAlexander V. ChernikovThe defined values are:
887366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
897366c0a4SAlexander V. ChernikovRTN_UNICAST	Unicast route
907366c0a4SAlexander V. ChernikovRTN_MULTICAST	Multicast route
917366c0a4SAlexander V. ChernikovRTN_BLACKHOLE	Drops traffic towards destination
927366c0a4SAlexander V. ChernikovRTN_PROHIBIT	Drops traffic and sends reject
937366c0a4SAlexander V. Chernikov.Ed
947366c0a4SAlexander V. Chernikov.Pp
957366c0a4SAlexander V. ChernikovThe following messages are supported:
967366c0a4SAlexander V. Chernikov.Ss RTM_NEWROUTE
977366c0a4SAlexander V. ChernikovAdds a new route.
987366c0a4SAlexander V. ChernikovAll NL flags are supported.
997366c0a4SAlexander V. ChernikovExtending a multipath route requires NLM_F_APPEND flag.
1007366c0a4SAlexander V. Chernikov.Ss RTM_DELROUTE
1017366c0a4SAlexander V. ChernikovTries to delete a route.
1027366c0a4SAlexander V. ChernikovThe route is specified using a combination of
1037366c0a4SAlexander V. Chernikov.Dv RTA_DST
1047366c0a4SAlexander V. ChernikovTLV and
1057366c0a4SAlexander V. Chernikov.Va rtm_dst_len .
1067366c0a4SAlexander V. Chernikov.Ss RTM_GETROUTE
1077366c0a4SAlexander V. ChernikovFetches a single route or all routes in the current VNET, depending on the
1087366c0a4SAlexander V. Chernikov.Dv NLM_F_DUMP
1097366c0a4SAlexander V. Chernikovflag.
1107366c0a4SAlexander V. ChernikovEach route is reported as
1117366c0a4SAlexander V. Chernikov.Dv RTM_NEWROUTE
1127366c0a4SAlexander V. Chernikovmessage.
1137366c0a4SAlexander V. ChernikovThe following filters are recognised by the kernel:
1147366c0a4SAlexander V. Chernikov.Pp
1157366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
1167366c0a4SAlexander V. Chernikovrtm_family	required family or AF_UNSPEC
1177366c0a4SAlexander V. ChernikovRTA_TABLE	fib number or RT_TABLE_UNSPEC to return all fibs
1187366c0a4SAlexander V. Chernikov.Ed
1197366c0a4SAlexander V. Chernikov.Ss TLVs
1207366c0a4SAlexander V. Chernikov.Bl -tag -width indent
1217366c0a4SAlexander V. Chernikov.It Dv RTA_DST
1227366c0a4SAlexander V. Chernikov(binary) IPv4/IPv6 address, depending on the
1237366c0a4SAlexander V. Chernikov.Va rtm_family .
1247366c0a4SAlexander V. Chernikov.It Dv RTA_OIF
1257366c0a4SAlexander V. Chernikov(uint32_t) transmit interface index.
1267366c0a4SAlexander V. Chernikov.It Dv RTA_GATEWAY
1277366c0a4SAlexander V. Chernikov(binary) IPv4/IPv6 gateway address, depending on the
1287366c0a4SAlexander V. Chernikov.Va rtm_family .
1297366c0a4SAlexander V. Chernikov.It Dv RTA_METRICS
1307366c0a4SAlexander V. Chernikov(nested) Container attribute, listing route properties.
1317366c0a4SAlexander V. ChernikovThe only supported sub-attribute is
1327366c0a4SAlexander V. Chernikov.Dv RTAX_MTU , which stores path MTU as  uint32_t.
1337366c0a4SAlexander V. Chernikov.It Dv RTA_MULTIPATH
1347366c0a4SAlexander V. ChernikovThis attribute contains multipath route nexthops with their weights.
1357366c0a4SAlexander V. ChernikovThese nexthops are represented as a sequence of
1367366c0a4SAlexander V. Chernikov.Va rtnexthop
1377366c0a4SAlexander V. Chernikovstructures, each followed by
1387366c0a4SAlexander V. Chernikov.Dv RTA_GATEWAY
1397366c0a4SAlexander V. Chernikovor
1407366c0a4SAlexander V. Chernikov.Dv RTA_VIA
1417366c0a4SAlexander V. Chernikovattributes.
1427366c0a4SAlexander V. Chernikov.Bd -literal
1437366c0a4SAlexander V. Chernikovstruct rtnexthop {
1447366c0a4SAlexander V. Chernikov	unsigned short		rtnh_len;
1457366c0a4SAlexander V. Chernikov	unsigned char		rtnh_flags;
1467366c0a4SAlexander V. Chernikov	unsigned char		rtnh_hops;	/* nexthop weight */
1477366c0a4SAlexander V. Chernikov	int			rtnh_ifindex;
1487366c0a4SAlexander V. Chernikov};
1497366c0a4SAlexander V. Chernikov.Ed
1507366c0a4SAlexander V. Chernikov.Pp
1517366c0a4SAlexander V. ChernikovThe
1527366c0a4SAlexander V. Chernikov.Va rtnh_len
1537366c0a4SAlexander V. Chernikovfield specifies the total nexthop info length, including both
1547366c0a4SAlexander V. Chernikov.Va struct rtnexthop
1557366c0a4SAlexander V. Chernikovand the following TLVs.
1567366c0a4SAlexander V. ChernikovThe
1577366c0a4SAlexander V. Chernikov.Va rtnh_hops
1587366c0a4SAlexander V. Chernikovfield stores relative nexthop weight, used for load balancing between group
1597366c0a4SAlexander V. Chernikovmembers.
1607366c0a4SAlexander V. ChernikovThe
1617366c0a4SAlexander V. Chernikov.Va rtnh_ifindex
1627366c0a4SAlexander V. Chernikovfield contains the index of the transmit interface.
1637366c0a4SAlexander V. Chernikov.Pp
1647366c0a4SAlexander V. ChernikovThe following TLVs can follow the structure:
1657366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
1667366c0a4SAlexander V. ChernikovRTA_GATEWAY	IPv4/IPv6 nexthop address of the gateway
1677366c0a4SAlexander V. ChernikovRTA_VIA		IPv6 nexthop address for IPv4 route
1687366c0a4SAlexander V. ChernikovRTA_KNH_ID	Kernel-specific index of the nexthop
1697366c0a4SAlexander V. Chernikov.Ed
1707366c0a4SAlexander V. Chernikov.It Dv RTA_KNH_ID
1717366c0a4SAlexander V. Chernikov(uint32_t) (FreeBSD-specific) Auto-allocated kernel index of the nexthop.
1727366c0a4SAlexander V. Chernikov.It Dv RTA_RTFLAGS
1737366c0a4SAlexander V. Chernikov(uint32_t) (FreeBSD-specific) rtsock route flags.
1747366c0a4SAlexander V. Chernikov.It Dv RTA_TABLE
1757366c0a4SAlexander V. Chernikov(uint32_t) Fib number of the route.
1767366c0a4SAlexander V. ChernikovDefault route table is
1777366c0a4SAlexander V. Chernikov.Dv RT_TABLE_MAIN .
178*ffc4f93eSBenedict ReuschlingTo explicitly specify "all tables" one needs to set the value to
1797366c0a4SAlexander V. Chernikov.Dv RT_TABLE_UNSPEC .
1807366c0a4SAlexander V. Chernikov.It Dv RTA_EXPIRES
1817366c0a4SAlexander V. Chernikov(uint32_t) seconds till path expiration.
1827366c0a4SAlexander V. Chernikov.It Dv RTA_NH_ID
1837366c0a4SAlexander V. Chernikov(uint32_t) useland nexthop or nexthop group index.
1847366c0a4SAlexander V. Chernikov.El
1857366c0a4SAlexander V. Chernikov.Ss Groups
1867366c0a4SAlexander V. ChernikovThe following groups are defined:
1877366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
1887366c0a4SAlexander V. ChernikovRTNLGRP_IPV4_ROUTE	Notifies on IPv4 route arrival/removal/change
1897366c0a4SAlexander V. ChernikovRTNLGRP_IPV6_ROUTE	Notifies on IPv6 route arrival/removal/change
1907366c0a4SAlexander V. Chernikov.Ed
1917366c0a4SAlexander V. Chernikov.Sh NEXTHOPS
1927366c0a4SAlexander V. ChernikovAll nexthop/nexthop group configuration messages share the common header:
1937366c0a4SAlexander V. Chernikov.Bd -literal
1947366c0a4SAlexander V. Chernikovstruct nhmsg {
1957366c0a4SAlexander V. Chernikov        unsigned char	nh_family;	/* transport family */
1967366c0a4SAlexander V. Chernikov	unsigned char	nh_scope;	/* ignored on RX, filled by kernel */
1977366c0a4SAlexander V. Chernikov	unsigned char	nh_protocol;	/* Routing protocol that installed nh */
1987366c0a4SAlexander V. Chernikov	unsigned char	resvd;
1997366c0a4SAlexander V. Chernikov	unsigned int	nh_flags;	/* RTNH_F_* flags from route.h */
2007366c0a4SAlexander V. Chernikov};
2017366c0a4SAlexander V. Chernikov.Ed
2027366c0a4SAlexander V. ChernikovThe
2037366c0a4SAlexander V. Chernikov.Va nh_family
204*ffc4f93eSBenedict Reuschlingspecifies the gateway address family.
2057366c0a4SAlexander V. ChernikovIt can be different from route address family for IPv4 routes with IPv6
2067366c0a4SAlexander V. Chernikovnexthops.
2077366c0a4SAlexander V. ChernikovThe
2087366c0a4SAlexander V. Chernikov.Va nh_protocol
2097366c0a4SAlexander V. Chernikovis similar to
2107366c0a4SAlexander V. Chernikov.Va rtm_protocol
2117366c0a4SAlexander V. Chernikovfield, which designates originator application identity.
2127366c0a4SAlexander V. Chernikov.Pp
2137366c0a4SAlexander V. ChernikovThe following messages are supported:
2147366c0a4SAlexander V. Chernikov.Ss RTM_NEWNEXTHOP
2157366c0a4SAlexander V. ChernikovCreates a new nexthop or nexthop group.
2167366c0a4SAlexander V. Chernikov.Ss RTM_DELNEXTHOP
2177366c0a4SAlexander V. ChernikovDeletes nexthop or nexthhop group.
2187366c0a4SAlexander V. ChernikovThe required object is specified by the
2197366c0a4SAlexander V. Chernikov.Dv RTA_NH_ID
2207366c0a4SAlexander V. Chernikovattribute.
2217366c0a4SAlexander V. Chernikov.Ss RTM_GETNEXTHOP
2227366c0a4SAlexander V. ChernikovFetches a single nexthop or all nexthops/nexthop groups, depending on the
2237366c0a4SAlexander V. Chernikov.Dv NLM_F_DUMP
2247366c0a4SAlexander V. Chernikovflag.
2257366c0a4SAlexander V. ChernikovThe following filters are recognised by the kernel:
2267366c0a4SAlexander V. Chernikov.Pp
2277366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
2287366c0a4SAlexander V. ChernikovRTA_NH_ID	nexthop or nexthtop group id
2297366c0a4SAlexander V. ChernikovNHA_GROUPS	match only nexthtop groups
2307366c0a4SAlexander V. Chernikov.Ed
2317366c0a4SAlexander V. Chernikov.Ss TLVs
2327366c0a4SAlexander V. Chernikov.Bl -tag -width indent
2337366c0a4SAlexander V. Chernikov.It Dv RTA_NH_ID
2347366c0a4SAlexander V. Chernikov(uint32_t) Nexthhop index used to identify particular nexthop or nexthop group.
2357366c0a4SAlexander V. ChernikovShould be provided by userland at the nexthtop creation time.
2367366c0a4SAlexander V. Chernikov.It Dv NHA_GROUP
2377366c0a4SAlexander V. ChernikovThis attribute designates the nexthtop group and contains all of its nexthtops
2387366c0a4SAlexander V. Chernikovand their relative weights.
239fa826f64SGordon BerglingThe attribute consists of a list of
2407366c0a4SAlexander V. Chernikov.Va nexthop_grp
2417366c0a4SAlexander V. Chernikovstructures:
2427366c0a4SAlexander V. Chernikov.Bd -literal
2437366c0a4SAlexander V. Chernikovstruct nexthop_grp {
2447366c0a4SAlexander V. Chernikov	uint32_t	id;		/* nexhop userland index */
2457366c0a4SAlexander V. Chernikov	uint8_t		weight;         /* weight of this nexthop */
2467366c0a4SAlexander V. Chernikov	uint8_t		resvd1;
2477366c0a4SAlexander V. Chernikov	uint16_t	resvd2;
2487366c0a4SAlexander V. Chernikov};
2497366c0a4SAlexander V. Chernikov.Ed
2507366c0a4SAlexander V. Chernikov.It Dv NHA_GROUP_TYPE
2517366c0a4SAlexander V. Chernikov(uint16_t) Nexthtop group type, set to one of the following types:
2527366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
2537366c0a4SAlexander V. ChernikovNEXTHOP_GRP_TYPE_MPATH	default multipath group
2547366c0a4SAlexander V. Chernikov.Ed
2557366c0a4SAlexander V. Chernikov.It Dv NHA_BLACKHOLE
2567366c0a4SAlexander V. Chernikov(flag) Marks the nexthtop as blackhole.
2577366c0a4SAlexander V. Chernikov.It Dv NHA_OIF
2587366c0a4SAlexander V. Chernikov(uint32_t) Transmit interface index of the nexthtop.
2597366c0a4SAlexander V. Chernikov.It Dv NHA_GATEWAY
2607366c0a4SAlexander V. Chernikov(binary) IPv4/IPv6 gateway address
2617366c0a4SAlexander V. Chernikov.It Dv NHA_GROUPS
2627366c0a4SAlexander V. Chernikov(flag) Matches nexthtop groups during dump.
2637366c0a4SAlexander V. Chernikov.El
2647366c0a4SAlexander V. Chernikov.Ss Groups
2657366c0a4SAlexander V. ChernikovThe following groups are defined:
2667366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
2677366c0a4SAlexander V. ChernikovRTNLGRP_NEXTHOP		Notifies on nexthop/groups arrival/removal/change
2687366c0a4SAlexander V. Chernikov.Ed
2697366c0a4SAlexander V. Chernikov.Sh INTERFACES
2707366c0a4SAlexander V. ChernikovAll interface configuration messages share the common header:
2717366c0a4SAlexander V. Chernikov.Bd -literal
2727366c0a4SAlexander V. Chernikovstruct ifinfomsg {
2737366c0a4SAlexander V. Chernikov	unsigned char	ifi_family;	/* not used, set to 0 */
2747366c0a4SAlexander V. Chernikov	unsigned char	__ifi_pad;
2757366c0a4SAlexander V. Chernikov	unsigned short	ifi_type;	/* ARPHRD_* */
276*ffc4f93eSBenedict Reuschling	int		ifi_index;	/* Interface index */
2777366c0a4SAlexander V. Chernikov	unsigned	ifi_flags;	/* IFF_* flags */
2787366c0a4SAlexander V. Chernikov	unsigned	ifi_change;	/* IFF_* change mask */
2797366c0a4SAlexander V. Chernikov};
2807366c0a4SAlexander V. Chernikov.Ed
2817366c0a4SAlexander V. Chernikov.Ss RTM_NEWLINK
2827366c0a4SAlexander V. ChernikovCreates a new interface.
2837366c0a4SAlexander V. ChernikovThe only mandatory TLV is
2847366c0a4SAlexander V. Chernikov.Dv IFLA_IFNAME .
28525c2dd2fSAlexander V. ChernikovThe following attributes are returned inside the nested
28625c2dd2fSAlexander V. Chernikov.Dv NLMSGERR_ATTR_COOKIE :
28725c2dd2fSAlexander V. Chernikov.Pp
28825c2dd2fSAlexander V. Chernikov.Bd -literal -offset indent -compact
28925c2dd2fSAlexander V. ChernikovIFLA_NEW_IFINDEX	(uint32) created interface index
29025c2dd2fSAlexander V. ChernikovIFLA_IFNAME		(string) created interface name
29125c2dd2fSAlexander V. Chernikov.Ed
2927366c0a4SAlexander V. Chernikov.Ss RTM_DELLINK
2937366c0a4SAlexander V. ChernikovDeletes the interface specified by
2947366c0a4SAlexander V. Chernikov.Dv IFLA_IFNAME .
2957366c0a4SAlexander V. Chernikov.Ss RTM_GETLINK
2967366c0a4SAlexander V. ChernikovFetches a single interface or all interfaces in the current VNET, depending on the
2977366c0a4SAlexander V. Chernikov.Dv NLM_F_DUMP
2987366c0a4SAlexander V. Chernikovflag.
2997366c0a4SAlexander V. ChernikovEach interface is reported as a
3007366c0a4SAlexander V. Chernikov.Dv RTM_NEWLINK
3017366c0a4SAlexander V. Chernikovmessage.
3027366c0a4SAlexander V. ChernikovThe following filters are recognised by the kernel:
3037366c0a4SAlexander V. Chernikov.Pp
3047366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
3057366c0a4SAlexander V. Chernikovifi_index	interface index
3067366c0a4SAlexander V. ChernikovIFLA_IFNAME	interface name
3077366c0a4SAlexander V. ChernikovIFLA_ALT_IFNAME	interface name
3087366c0a4SAlexander V. Chernikov.Ed
3097366c0a4SAlexander V. Chernikov.Ss TLVs
3107366c0a4SAlexander V. Chernikov.Bl -tag -width indent
3117366c0a4SAlexander V. Chernikov.It Dv IFLA_ADDRESS
3127366c0a4SAlexander V. Chernikov(binary) Llink-level interface address (MAC).
3137366c0a4SAlexander V. Chernikov.It Dv IFLA_BROADCAST
3147366c0a4SAlexander V. Chernikov(binary) (readonly) Link-level broadcast address.
3157366c0a4SAlexander V. Chernikov.It Dv IFLA_IFNAME
3167366c0a4SAlexander V. Chernikov(string) New interface name.
31780f03e63SAlexander V. Chernikov.It Dv IFLA_IFALIAS
31880f03e63SAlexander V. Chernikov(string) Interface description.
3197366c0a4SAlexander V. Chernikov.It Dv IFLA_LINK
3207366c0a4SAlexander V. Chernikov(uint32_t) (readonly) Interface index.
3217366c0a4SAlexander V. Chernikov.It Dv IFLA_MASTER
3227366c0a4SAlexander V. Chernikov(uint32_t) Parent interface index.
3237366c0a4SAlexander V. Chernikov.It Dv IFLA_LINKINFO
3247366c0a4SAlexander V. Chernikov(nested) Interface type-specific attributes:
3257366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
3267366c0a4SAlexander V. ChernikovIFLA_INFO_KIND		(string) interface type ("vlan")
3277366c0a4SAlexander V. ChernikovIFLA_INFO_DATA		(nested) custom attributes
3287366c0a4SAlexander V. Chernikov.Ed
3297366c0a4SAlexander V. ChernikovThe following types and attributes are supported:
3307366c0a4SAlexander V. Chernikov.Bl -tag -width indent
3317366c0a4SAlexander V. Chernikov.It Dv vlan
3327366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
3337366c0a4SAlexander V. ChernikovIFLA_VLAN_ID		(uint16_t) 802.1Q vlan id
3347366c0a4SAlexander V. ChernikovIFLA_VLAN_PROTOCOL	(uint16_t) Protocol: ETHERTYPE_VLAN or ETHERTYPE_QINQ
3357366c0a4SAlexander V. Chernikov.Ed
3367366c0a4SAlexander V. Chernikov.El
3377366c0a4SAlexander V. Chernikov.It Dv IFLA_OPERSTATE
3387366c0a4SAlexander V. Chernikov(uint8_t) Interface operational state per RFC 2863.
3397366c0a4SAlexander V. ChernikovCan be one of the following:
3407366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
3417366c0a4SAlexander V. ChernikovIF_OPER_UNKNOWN		status can not be determined
3427366c0a4SAlexander V. ChernikovIF_OPER_NOTPRESENT	some (hardware) component not present
3437366c0a4SAlexander V. ChernikovIF_OPER_DOWN		down
3447366c0a4SAlexander V. ChernikovIF_OPER_LOWERLAYERDOWN	some lower-level interface is down
3457366c0a4SAlexander V. ChernikovIF_OPER_TESTING		in some test mode
3467366c0a4SAlexander V. ChernikovIF_OPER_DORMANT		"up" but waiting for some condition (802.1X)
3477366c0a4SAlexander V. ChernikovIF_OPER_UP		ready to pass packets
3487366c0a4SAlexander V. Chernikov.Ed
3497366c0a4SAlexander V. Chernikov.It Dv IFLA_STATS64
3507366c0a4SAlexander V. Chernikov(readonly) Consists of the following 64-bit counters structure:
3517366c0a4SAlexander V. Chernikov.Bd -literal
3527366c0a4SAlexander V. Chernikovstruct rtnl_link_stats64 {
3537366c0a4SAlexander V. Chernikov	uint64_t rx_packets;	/* total RX packets (IFCOUNTER_IPACKETS) */
3547366c0a4SAlexander V. Chernikov	uint64_t tx_packets;	/* total TX packets (IFCOUNTER_OPACKETS) */
3557366c0a4SAlexander V. Chernikov	uint64_t rx_bytes;	/* total RX bytes (IFCOUNTER_IBYTES) */
3567366c0a4SAlexander V. Chernikov	uint64_t tx_bytes;	/* total TX bytes (IFCOUNTER_OBYTES) */
3577366c0a4SAlexander V. Chernikov	uint64_t rx_errors;	/* RX errors (IFCOUNTER_IERRORS) */
3587366c0a4SAlexander V. Chernikov	uint64_t tx_errors;	/* RX errors (IFCOUNTER_OERRORS) */
3597366c0a4SAlexander V. Chernikov	uint64_t rx_dropped;	/* RX drop (no space in ring/no bufs) (IFCOUNTER_IQDROPS) */
3607366c0a4SAlexander V. Chernikov	uint64_t tx_dropped;	/* TX drop (IFCOUNTER_OQDROPS) */
3617366c0a4SAlexander V. Chernikov	uint64_t multicast;	/* RX multicast packets (IFCOUNTER_IMCASTS) */
3627366c0a4SAlexander V. Chernikov	uint64_t collisions;	/* not supported */
3637366c0a4SAlexander V. Chernikov	uint64_t rx_length_errors;	/* not supported */
3647366c0a4SAlexander V. Chernikov	uint64_t rx_over_errors;	/* not supported */
3657366c0a4SAlexander V. Chernikov	uint64_t rx_crc_errors;		/* not supported */
3667366c0a4SAlexander V. Chernikov	uint64_t rx_frame_errors;	/* not supported */
3677366c0a4SAlexander V. Chernikov	uint64_t rx_fifo_errors;	/* not supported */
3687366c0a4SAlexander V. Chernikov	uint64_t rx_missed_errors;	/* not supported */
3697366c0a4SAlexander V. Chernikov	uint64_t tx_aborted_errors;	/* not supported */
3707366c0a4SAlexander V. Chernikov	uint64_t tx_carrier_errors;	/* not supported */
3717366c0a4SAlexander V. Chernikov	uint64_t tx_fifo_errors;	/* not supported */
3727366c0a4SAlexander V. Chernikov	uint64_t tx_heartbeat_errors;	/* not supported */
3737366c0a4SAlexander V. Chernikov	uint64_t tx_window_errors;	/* not supported */
3747366c0a4SAlexander V. Chernikov	uint64_t rx_compressed;		/* not supported */
3757366c0a4SAlexander V. Chernikov	uint64_t tx_compressed;		/* not supported */
3767366c0a4SAlexander V. Chernikov	uint64_t rx_nohandler;	/* dropped due to no proto handler (IFCOUNTER_NOPROTO) */
3777366c0a4SAlexander V. Chernikov};
3787366c0a4SAlexander V. Chernikov.Ed
3797366c0a4SAlexander V. Chernikov.El
3807366c0a4SAlexander V. Chernikov.Ss Groups
3817366c0a4SAlexander V. ChernikovThe following groups are defined:
3827366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
3837366c0a4SAlexander V. ChernikovRTNLGRP_LINK		Notifies on interface arrival/removal/change
3847366c0a4SAlexander V. Chernikov.Ed
3857366c0a4SAlexander V. Chernikov.Sh INTERFACE ADDRESSES
3867366c0a4SAlexander V. ChernikovAll interface address configuration messages share the common header:
3877366c0a4SAlexander V. Chernikov.Bd -literal
3887366c0a4SAlexander V. Chernikovstruct ifaddrmsg {
3897366c0a4SAlexander V. Chernikov	uint8_t		ifa_family;	/* Address family */
3907366c0a4SAlexander V. Chernikov	uint8_t		ifa_prefixlen;	/* Prefix length */
3917366c0a4SAlexander V. Chernikov	uint8_t		ifa_flags;	/* Address-specific flags */
3927366c0a4SAlexander V. Chernikov	uint8_t		ifa_scope;	/* Address scope */
3937366c0a4SAlexander V. Chernikov	uint32_t	ifa_index;	/* Link ifindex */
3947366c0a4SAlexander V. Chernikov};
3957366c0a4SAlexander V. Chernikov.Ed
3967366c0a4SAlexander V. Chernikov.Pp
3977366c0a4SAlexander V. ChernikovThe
3987366c0a4SAlexander V. Chernikov.Va ifa_family
3997366c0a4SAlexander V. Chernikovspecifies the address family of the interface address.
4007366c0a4SAlexander V. ChernikovThe
4017366c0a4SAlexander V. Chernikov.Va ifa_prefixlen
4027366c0a4SAlexander V. Chernikovspecifies the prefix length if applicable for the address family.
4037366c0a4SAlexander V. ChernikovThe
4047366c0a4SAlexander V. Chernikov.Va ifa_index
4057366c0a4SAlexander V. Chernikovspecifies the interface index of the target interface.
4067366c0a4SAlexander V. Chernikov.Ss RTM_NEWADDR
4077366c0a4SAlexander V. ChernikovNot supported
4087366c0a4SAlexander V. Chernikov.Ss RTM_DELADDR
4097366c0a4SAlexander V. ChernikovNot supported
4107366c0a4SAlexander V. Chernikov.Ss RTM_GETADDR
411c1871a33SAlexander V. ChernikovFetches interface addresses in the current VNET matching conditions.
412c1871a33SAlexander V. ChernikovEach address is reported as a
413c1871a33SAlexander V. Chernikov.Dv RTM_NEWADDR
414c1871a33SAlexander V. Chernikovmessage.
415c1871a33SAlexander V. ChernikovThe following filters are recognised by the kernel:
416c1871a33SAlexander V. Chernikov.Pp
417c1871a33SAlexander V. Chernikov.Bd -literal -offset indent -compact
418c1871a33SAlexander V. Chernikovifa_family	required family or AF_UNSPEC
419c1871a33SAlexander V. Chernikovifa_index	matching interface index or 0
420c1871a33SAlexander V. Chernikov.Ed
4217366c0a4SAlexander V. Chernikov.Ss TLVs
4227366c0a4SAlexander V. Chernikov.Bl -tag -width indent
4237366c0a4SAlexander V. Chernikov.It Dv IFA_ADDRESS
4247366c0a4SAlexander V. Chernikov(binary) masked interface address or destination address for p2p interfaces.
4257366c0a4SAlexander V. Chernikov.It Dv IFA_LOCAL
426c1871a33SAlexander V. Chernikov(binary) local interface address.
427c1871a33SAlexander V. ChernikovSet for IPv4 and p2p addresses.
428c1871a33SAlexander V. Chernikov.It Dv IFA_LABEL
429c1871a33SAlexander V. Chernikov(string) interface name.
4307366c0a4SAlexander V. Chernikov.It Dv IFA_BROADCAST
431*ffc4f93eSBenedict Reuschling(binary) broadcast interface address.
4327366c0a4SAlexander V. Chernikov.El
4337366c0a4SAlexander V. Chernikov.Ss Groups
4347366c0a4SAlexander V. ChernikovThe following groups are defined:
4357366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
4367366c0a4SAlexander V. ChernikovRTNLGRP_IPV4_IFADDR	Notifies on IPv4 ifaddr arrival/removal/change
4377366c0a4SAlexander V. ChernikovRTNLGRP_IPV6_IFADDR	Notifies on IPv6 ifaddr arrival/removal/change
4387366c0a4SAlexander V. Chernikov.Ed
4397366c0a4SAlexander V. Chernikov.Sh NEIGHBORS
4407366c0a4SAlexander V. ChernikovAll neighbor configuration messages share the common header:
4417366c0a4SAlexander V. Chernikov.Bd -literal
4427366c0a4SAlexander V. Chernikovstruct ndmsg {
4437366c0a4SAlexander V. Chernikov	uint8_t		ndm_family;
4447366c0a4SAlexander V. Chernikov	uint8_t		ndm_pad1;
4457366c0a4SAlexander V. Chernikov	uint16_t	ndm_pad2;
4467366c0a4SAlexander V. Chernikov	int32_t		ndm_ifindex;
4477366c0a4SAlexander V. Chernikov	uint16_t	ndm_state;
4487366c0a4SAlexander V. Chernikov	uint8_t		ndm_flags;
4497366c0a4SAlexander V. Chernikov	uint8_t		ndm_type;
4507366c0a4SAlexander V. Chernikov};
4517366c0a4SAlexander V. Chernikov.Ed
4527366c0a4SAlexander V. Chernikov.Pp
4537366c0a4SAlexander V. ChernikovThe
4547366c0a4SAlexander V. Chernikov.Va ndm_family
4557366c0a4SAlexander V. Chernikovfield specifies the address family (IPv4 or IPv6) of the neighbor.
4567366c0a4SAlexander V. ChernikovThe
4577366c0a4SAlexander V. Chernikov.Va ndm_ifindex
4587366c0a4SAlexander V. Chernikovspecifies the interface to operate on.
4597366c0a4SAlexander V. ChernikovThe
4607366c0a4SAlexander V. Chernikov.Va ndm_state
4617366c0a4SAlexander V. Chernikovrepresents the entry state according to the neighbor model.
4627366c0a4SAlexander V. ChernikovThe state can be one of the following:
4637366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
4647366c0a4SAlexander V. ChernikovNUD_INCOMPLETE		No lladdr, address resolution in progress
4657366c0a4SAlexander V. ChernikovNUD_REACHABLE		reachable & recently resolved
4667366c0a4SAlexander V. ChernikovNUD_STALE		has lladdr but it's stale
4677366c0a4SAlexander V. ChernikovNUD_DELAY		has lladdr, is stale, probes delayed
4687366c0a4SAlexander V. ChernikovNUD_PROBE		has lladdr, is stale, probes sent
4697366c0a4SAlexander V. ChernikovNUD_FAILED		unused
4707366c0a4SAlexander V. Chernikov.Ed
4717366c0a4SAlexander V. Chernikov.Pp
4727366c0a4SAlexander V. ChernikovThe
4737366c0a4SAlexander V. Chernikov.Va ndm_flags
4747366c0a4SAlexander V. Chernikovfield stores the options specific to this entry.
4757366c0a4SAlexander V. ChernikovAvailable flags:
4767366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
4777366c0a4SAlexander V. ChernikovNTF_SELF		local station (LLE_IFADDR)
4787366c0a4SAlexander V. ChernikovNTF_PROXY		proxy entry (LLE_PUB)
479*ffc4f93eSBenedict ReuschlingNTF_STICKY		permanent entry (LLE_STATIC)
4807366c0a4SAlexander V. ChernikovNTF_ROUTER		dst indicated itself as a router
4817366c0a4SAlexander V. Chernikov.Ed
4827366c0a4SAlexander V. Chernikov.Ss RTM_NEWNEIGH
4837366c0a4SAlexander V. ChernikovCreates new neighbor entry.
4847366c0a4SAlexander V. ChernikovThe mandatory options are
4857366c0a4SAlexander V. Chernikov.Dv NDA_DST ,
4867366c0a4SAlexander V. Chernikov.Dv NDA_LLADDR
4877366c0a4SAlexander V. Chernikovand
4887366c0a4SAlexander V. Chernikov.Dv NDA_IFINDEX .
4897366c0a4SAlexander V. Chernikov.Ss RTM_DELNEIGH
4907366c0a4SAlexander V. ChernikovDeletes the neighbor entry.
4917366c0a4SAlexander V. ChernikovThe entry is specified by the combination of
4927366c0a4SAlexander V. Chernikov.Dv NDA_DST
4937366c0a4SAlexander V. Chernikovand
4947366c0a4SAlexander V. Chernikov.Dv NDA_IFINDEX .
4957366c0a4SAlexander V. Chernikov.Ss RTM_GETNEIGH
4967366c0a4SAlexander V. ChernikovFetches a single neighbor or all neighbors in the current VNET, depending on the
4977366c0a4SAlexander V. Chernikov.Dv NLM_F_DUMP
4987366c0a4SAlexander V. Chernikovflag.
4997366c0a4SAlexander V. ChernikovEach entry is reported as
5007366c0a4SAlexander V. Chernikov.Dv RTM_NEWNEIGH
5017366c0a4SAlexander V. Chernikovmessage.
5027366c0a4SAlexander V. ChernikovThe following filters are recognised by the kernel:
5037366c0a4SAlexander V. Chernikov.Pp
5047366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
5057366c0a4SAlexander V. Chernikovndm_family	required family or AF_UNSPEC
5067366c0a4SAlexander V. Chernikovndm_ifindex	target ifindex
5077366c0a4SAlexander V. ChernikovNDA_IFINDEX	target ifindex
5087366c0a4SAlexander V. Chernikov.Ed
5097366c0a4SAlexander V. Chernikov.Ss TLVs
5107366c0a4SAlexander V. Chernikov.Bl -tag -width indent
5117366c0a4SAlexander V. Chernikov.It Dv NDA_DST
5127366c0a4SAlexander V. Chernikov(binary) neighbor IPv4/IPv6 address.
5137366c0a4SAlexander V. Chernikov.It Dv NDA_LLADDR
5147366c0a4SAlexander V. Chernikov(binary) neighbor link-level address.
5157366c0a4SAlexander V. Chernikov.It Dv NDA_IFINDEX
5167366c0a4SAlexander V. Chernikov(uint32_t) interface index.
5177366c0a4SAlexander V. Chernikov.It Dv NDA_FLAGS_EXT
5187366c0a4SAlexander V. Chernikov(uint32_t) extended version of
5197366c0a4SAlexander V. Chernikov.Va ndm_flags .
5207366c0a4SAlexander V. Chernikov.El
5217366c0a4SAlexander V. Chernikov.Ss Groups
5227366c0a4SAlexander V. ChernikovThe following groups are defined:
5237366c0a4SAlexander V. Chernikov.Bd -literal -offset indent -compact
5247366c0a4SAlexander V. ChernikovRTNLGRP_NEIGH	Notifies on ARP/NDP neighbor  arrival/removal/change
5257366c0a4SAlexander V. Chernikov.Ed
5267366c0a4SAlexander V. Chernikov.Sh SEE ALSO
5277366c0a4SAlexander V. Chernikov.Xr netlink 4 ,
5287366c0a4SAlexander V. Chernikov.Xr route 4
5297366c0a4SAlexander V. Chernikov.Sh HISTORY
5307366c0a4SAlexander V. ChernikovThe
5317366c0a4SAlexander V. Chernikov.Dv NETLINK_ROUTE
5327366c0a4SAlexander V. Chernikovprotocol family appeared in
5336d2feb39STom Hukins.Fx 13.2 .
5347366c0a4SAlexander V. Chernikov.Sh AUTHORS
535*ffc4f93eSBenedict ReuschlingThe netlink was implemented by
5367366c0a4SAlexander V. Chernikov.An -nosplit
5377366c0a4SAlexander V. Chernikov.An Alexander Chernikov Aq Mt melifaro@FreeBSD.org .
5387366c0a4SAlexander V. ChernikovIt was derived from the Google Summer of Code 2021 project by
5397366c0a4SAlexander V. Chernikov.An Ng Peng Nam Sean .
540