2 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
4 .\" %%%LICENSE_START(VERBATIM_ONE_PARA)
5 .\" Permission is granted to distribute possibly modified copies
6 .\" of this page provided the header is included verbatim,
7 .\" and in case of nontrivial modification author and date
8 .\" of the modification is added to the header.
11 .\" Based on the original comments from Alexey Kuznetsov, written with
12 .\" help from Matthew Wilcox.
13 .\" $Id: rtnetlink.7,v 1.8 2000/01/22 01:55:04 freitag Exp $
15 .TH RTNETLINK 7 2013-03-05 "Linux" "Linux Programmer's Manual"
17 rtnetlink \- Linux IPv4 routing socket
19 .B #include <asm/types.h>
21 .B #include <linux/netlink.h>
23 .B #include <linux/rtnetlink.h>
25 .B #include <sys/socket.h>
27 .BI "rtnetlink_socket = socket(AF_NETLINK, int " socket_type ", NETLINK_ROUTE);"
29 Rtnetlink allows the kernel's routing tables to be read and altered.
30 It is used within the kernel to communicate between
31 various subsystems, though this usage is not documented here, and for
32 communication with user-space programs.
33 Network routes, IP addresses, link parameters, neighbor setups, queueing
34 disciplines, traffic classes and packet classifiers may all be controlled
38 It is based on netlink messages; see
41 .\" FIXME ? all these macros could be moved to rtnetlink(3)
42 .SS Routing attributes
43 Some rtnetlink messages have optional attributes after the initial header:
48 unsigned short rta_len; /* Length of option */
49 unsigned short rta_type; /* Type of option */
55 These attributes should be only manipulated using the RTA_* macros
59 Rtnetlink consists of these message types
60 (in addition to standard netlink messages):
62 .BR RTM_NEWLINK ", " RTM_DELLINK ", " RTM_GETLINK
63 Create, remove or get information about a specific network interface.
64 These messages contain an
66 structure followed by a series of
72 unsigned char ifi_family; /* AF_UNSPEC */
73 unsigned short ifi_type; /* Device type */
74 int ifi_index; /* Interface index */
75 unsigned int ifi_flags; /* Device flags */
76 unsigned int ifi_change; /* change mask */
82 contains the device flags, see
85 is the unique interface index
86 (since Linux 3.7, it is possible to feed a nonzero value with the
88 message, thus creating a link with the given
91 is reserved for future use and should be always set to 0xFFFFFFFF.
98 rta_type:value type:description
100 IFLA_UNSPEC:-:unspecified.
101 IFLA_ADDRESS:hardware address:interface L2 address
102 IFLA_BROADCAST:hardware address:L2 broadcast address.
103 IFLA_IFNAME:asciiz string:Device name.
104 IFLA_MTU:unsigned int:MTU of the device.
105 IFLA_LINK:int:Link type.
106 IFLA_QDISC:asciiz string:Queueing discipline.
109 T}:Interface Statistics.
116 .IR "struct rtnl_link_stats"
117 .RI ( "struct net_device_stats"
118 in Linux 2.4 and earlier).
120 .BR RTM_NEWADDR ", " RTM_DELADDR ", " RTM_GETADDR
121 Add, remove or receive information about an IP address associated with
123 In Linux 2.2, an interface can carry multiple IP addresses,
124 this replaces the alias device concept in 2.0.
125 In Linux 2.2, these messages
126 support IPv4 and IPv6 addresses.
129 structure, optionally followed by
135 unsigned char ifa_family; /* Address type */
136 unsigned char ifa_prefixlen; /* Prefixlength of address */
137 unsigned char ifa_flags; /* Address flags */
138 unsigned char ifa_scope; /* Address scope */
139 int ifa_index; /* Interface index */
144 is the address family type (currently
149 is the length of the address mask of the address if defined for the
150 family (like for IPv4),
152 is the address scope,
154 is the interface index of the interface the address is associated with.
158 for secondary address (old alias interface),
160 for a permanent address set by the user and other undocumented flags.
166 rta_type:value type:description
168 IFA_UNSPEC:-:unspecified.
169 IFA_ADDRESS:raw protocol address:interface address
170 IFA_LOCAL:raw protocol address:local address
171 IFA_LABEL:asciiz string:name of the interface
172 IFA_BROADCAST:raw protocol address:broadcast address.
173 IFA_ANYCAST:raw protocol address:anycast address
174 IFA_CACHEINFO:struct ifa_cacheinfo:Address information.
176 .\" FIXME struct ifa_cacheinfo
178 .BR RTM_NEWROUTE ", " RTM_DELROUTE ", " RTM_GETROUTE
179 Create, remove or receive information about a network route.
180 These messages contain an
182 structure with an optional sequence of
184 structures following.
191 to 0 means you get all entries for the specified routing table.
192 For the other fields, except
200 unsigned char rtm_family; /* Address family of route */
201 unsigned char rtm_dst_len; /* Length of destination */
202 unsigned char rtm_src_len; /* Length of source */
203 unsigned char rtm_tos; /* TOS filter */
205 unsigned char rtm_table; /* Routing table ID */
206 unsigned char rtm_protocol; /* Routing protocol; see below */
207 unsigned char rtm_scope; /* See below */
208 unsigned char rtm_type; /* See below */
210 unsigned int rtm_flags;
219 RTN_UNSPEC:unknown route
220 RTN_UNICAST:a gateway or direct route
221 RTN_LOCAL:a local interface route
223 a local broadcast route (sent as a broadcast)
226 a local broadcast route (sent as a unicast)
228 RTN_MULTICAST:a multicast route
229 RTN_BLACKHOLE:a packet dropping route
230 RTN_UNREACHABLE:an unreachable destination
231 RTN_PROHIBIT:a packet rejection route
232 RTN_THROW:continue routing lookup in another table
233 RTN_NAT:a network address translation rule
235 refer to an external resolver (not implemented)
243 rtm_protocol:Route origin.
245 RTPROT_UNSPEC:unknown
247 by an ICMP redirect (currently unused)
249 RTPROT_KERNEL:by the kernel
250 RTPROT_BOOT:during boot
251 RTPROT_STATIC:by the administrator
257 are not interpreted by the kernel, they are just for user information.
258 They may be used to tag the source of a routing information or to
259 distinguish between multiple routing daemons.
261 .I <linux/rtnetlink.h>
262 for the routing daemon identifiers which are already assigned.
265 is the distance to the destination:
270 RT_SCOPE_UNIVERSE:global route
272 interior route in the local autonomous system
274 RT_SCOPE_LINK:route on this link
275 RT_SCOPE_HOST:route on the local host
276 RT_SCOPE_NOWHERE:destination doesn't exist
284 are available to the user.
288 have the following meanings:
294 if the route changes, notify the user via rtnetlink
296 RTM_F_CLONED:route is cloned from another route
297 RTM_F_EQUALIZE:a multipath equalizer (not yet implemented)
302 specifies the routing table
306 RT_TABLE_UNSPEC:an unspecified routing table
307 RT_TABLE_DEFAULT:the default table
308 RT_TABLE_MAIN:the main table
309 RT_TABLE_LOCAL:the local table
312 The user may assign arbitrary values between
315 .BR RT_TABLE_DEFAULT .
316 .\" Keep table on same page
323 rta_type:value type:description
325 RTA_UNSPEC:-:ignored.
326 RTA_DST:protocol address:Route destination address.
327 RTA_SRC:protocol address:Route source address.
328 RTA_IIF:int:Input interface index.
329 RTA_OIF:int:Output interface index.
330 RTA_GATEWAY:protocol address:The gateway of the route
331 RTA_PRIORITY:int:Priority of route.
333 RTA_METRICS:int:Route metric
340 .B Fill these values in!
342 .BR RTM_NEWNEIGH ", " RTM_DELNEIGH ", " RTM_GETNEIGH
343 Add, remove or receive information about a neighbor table
344 entry (e.g., an ARP entry).
345 The message contains an
351 unsigned char ndm_family;
352 int ndm_ifindex; /* Interface index */
353 __u16 ndm_state; /* State */
354 __u8 ndm_flags; /* Flags */
358 struct nda_cacheinfo {
367 is a bit mask of the following states:
371 NUD_INCOMPLETE:a currently resolving cache entry
372 NUD_REACHABLE:a confirmed working cache entry
373 NUD_STALE:an expired cache entry
374 NUD_DELAY:an entry waiting for a timer
375 NUD_PROBE:a cache entry that is currently reprobed
376 NUD_FAILED:an invalid cache entry
377 NUD_NOARP:a device with no destination cache
378 NUD_PERMANENT:a static entry
387 NTF_PROXY:a proxy arp entry
388 NTF_ROUTER:an IPv6 router
392 .\" document the members of the struct better
395 struct has the following meanings for the
401 NDA_UNSPEC:unknown type
402 NDA_DST:a neighbor cache n/w layer destination address
403 NDA_LLADDR:a neighbor cache link layer address
404 NDA_CACHEINFO:cache statistics.
412 .I struct nda_cacheinfo
415 .BR RTM_NEWRULE ", " RTM_DELRULE ", " RTM_GETRULE
416 Add, delete or retrieve a routing rule.
420 .BR RTM_NEWQDISC ", " RTM_DELQDISC ", " RTM_GETQDISC
421 Add, remove or get a queueing discipline.
422 The message contains a
424 and may be followed by a series of
429 unsigned char tcm_family;
430 int tcm_ifindex; /* interface index */
431 __u32 tcm_handle; /* Qdisc handle */
432 __u32 tcm_parent; /* Parent qdisc */
441 rta_type:value type:Description
443 TCA_UNSPEC:-:unspecified
444 TCA_KIND:asciiz string:Name of queueing discipline
445 TCA_OPTIONS:byte sequence:Qdisc-specific options follow
446 TCA_STATS:struct tc_stats:Qdisc statistics.
447 TCA_XSTATS:qdisc specific:Module-specific statistics.
448 TCA_RATE:struct tc_estimator:Rate limit.
451 In addition various other qdisc module specific attributes are allowed.
452 For more information see the appropriate include files.
454 .BR RTM_NEWTCLASS ", " RTM_DELTCLASS ", " RTM_GETTCLASS
455 Add, remove or get a traffic class.
456 These messages contain a
460 .BR RTM_NEWTFILTER ", " RTM_DELTFILTER ", " RTM_GETTFILTER
461 Add, remove or receive information about a traffic filter.
462 These messages contain a
467 is a new feature of Linux 2.2.
469 This manual page is incomplete.