Rtnetlink allows to set up and read
network routes, ip addresses, link parameters,
neighbour setups, queueing disciplines, traffic classes packet classifiers.
It is used to communicate between user level daemons and setup programs and
the kernel and to communicate internally between kernel subsystems
(not documented). It is based on netlink messages, see
netlink(4)
for more information.
Valid family specific netlink message types:
RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK
Create, remove or get information about a specific network
interface.
Carries a
ifinfomsg
message as payload.
RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
Add, remove or receive information about an IP address associated with
an interface. In Linux 2.1 an interface can carry multiple IP addresses,
this replaces the alias device concept in 2.0. These commands handle IP
interface address lists.
Payload is an
ifaddrmsg
structure.
RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE
Create, remove or receive information about a network route. Payload is a rtmsg
structure with an optional sequence of
rtattr
structures following.
struct rtmsg
{
unsigned char rtm_family; /* Address family of route */
unsigned char rtm_dst_len; /* Length of source */
unsigned char rtm_src_len; /* Length of destination */
unsigned char rtm_tos; /* TOS filter */
unsigned char rtm_table; /* Routing table id */
unsigned char rtm_protocol; /* Routing protocol; see below */
unsigned char rtm_scope; /* See below */
unsigned char rtm_type; /* See below */
unsigned rtm_flags;
};
struct rtattr
{
unsigned short rta_len;
unsigned short rta_type;
/* Data follows (use RTA_DATA to access) */
};
Valid
rtm_type
values are
RTN_UNICAST
for specifying a gateway or direct route,
RTN_LOCAL
for a local interface route,
RTN_BROADCAST
for a local broadcast route (sent as broadcast),
RTN_ANYCAST
for a local broadcast route that is a sent as unicast,
RTN_MULTICAST
for a multitasking route,
RTN_BLACKHOLE
for a packet dropping route,
RTN_UNREACHABLE
for an unreachable destination,
RTN_PROHIBIT
for a packet rejection route,
RTN_THROW
to continue routing lookup in another table,
RTN_NAT
for a network address translation rule,
RTN_XRESOLVE
to refer to an external resolver (not implemented).
Valid values for
rtm_protocol
are
RTPROT_UNSPEC,RTPROT_REDIRECT
for routes installed by ICMP redirects (currently not used),
RTPROT_KERNEL
for routes installed by the kernel,
RTPROT_BOOT
for routes installed during boot,
RTPROT_STATIC
for routes installed by the administrator. Values bigger than RTPROT_STATIC
are not interpreted by the kernel, they are just for user information. It
can be used to tag the source of a routing information or to distingush between
multiple routing daemons. See
linux/rtnetlink.h
for the already standardized routing daemon identifiers.
rtm_scope
is the distance to the destination:
RT_SCOPE_UNIVERSE
for global routes,
RT_SCOPE_SITE
for intereour routes in the local autonomous system,
RT_SCOPE_LINK
for on link routes,
RT_SCOPE_HOST
for routes on the local host and
RT_SCOPE_NOWHERE
for non existent destinations. The user may use his own values between
RT_SCOPE_UNIVERSE and RT_SCOPE_SITE. Valid
rtm_flags
are
RTM_F_NOTIFY
to notify the user via rtnetlink of a route change,
RTM_F_CLONED
for routes cloned from other routes for the destination cache,
RTM_F_EQUALIZE
for an not yet implemented multicast equalizer.
rtm_table
may contain:
RT_TABLE_UNSPEC
for unspecified routing table,
RT_TABLE_DEFAULT
for the default table,
RT_TABLE_MAIN
for the main table,
RT_TABLE_LOCAL
for the local table. The user may assign arbitary values between RT_TABLE_UNSPEC
and RT_TABLE_DEFAULT.
RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
Add, remove or receive information about a neighbour table entry (e.g. an ARP
entry). Payload is a
ndmsg
structure.
struct ndmsg
{
unsigned char ndm_family;
unsigned char ndm_pad1;
unsigned short ndm_pad2;
int ndm_ifindex; /* Link index */
__u16 ndm_state; /* State */
__u8 ndm_flags; /* Flags */
__u8 ndm_type;
};
struct nda_cacheinfo
{
__u32 ndm_confirmed;
__u32 ndm_used;
__u32 ndm_updated;
__u32 ndm_refcnt;
};
Valid
ndm_type
values are:
NDA_UNSPEC
for unknown type,
NDA_DST
for a neighbour cache network layer destination address,
ND_LLADDR
for a neighbour cache link layer address,
ND_CACHEINFO
for cache statistics (a
struct nda_cacheinfo
header follows).
Valid states are:
NUD_INCOMPLETE
for a currently resolving cache entry,
NUD_REACHABLE
for a confirmed working cache entry,
NUD_STALE
for an expired cache entry,
NUD_DELAY
for an entry waiting for a timer,
NUD_PROBE
for a cache entry that is currently reprobed,
NUD_FAILED
for an invalid cache entry,
NUD_NOARP
for devices with no destination cache,
NUD_PERMANENT
for static entries,
NUD_NONE
for nothing. Valid flags in
ndm_flags
are
NTF_PROXY
for a proxy arp entry,
NTF_ROUTER
for an IPv6 router.
See
<linux/rtnetlink.h>
for the declaration of the
rtmsg,
ifinfomsg,
and
ifaddrmsg
structures.