summaryrefslogtreecommitdiffstats
path: root/man7/rtnetlink.7
diff options
context:
space:
mode:
Diffstat (limited to 'man7/rtnetlink.7')
-rw-r--r--man7/rtnetlink.7468
1 files changed, 468 insertions, 0 deletions
diff --git a/man7/rtnetlink.7 b/man7/rtnetlink.7
new file mode 100644
index 000000000..54040c3af
--- /dev/null
+++ b/man7/rtnetlink.7
@@ -0,0 +1,468 @@
+'\" t
+.\" Don't remove the line above, it tells man that tbl is needed.
+.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
+.\" Permission is granted to distribute possibly modified copies
+.\" of this page provided the header is included verbatim,
+.\" and in case of nontrivial modification author and date
+.\" of the modification is added to the header.
+.\" Based on the original comments from Alexey Kuznetsov, written with
+.\" help from Matthew Wilcox.
+.\" $Id: rtnetlink.7,v 1.8 2000/01/22 01:55:04 freitag Exp $
+.TH RTNETLINK 7 1999-04-30 "Linux Man Page" "Linux Programmer's Manual"
+.SH NAME
+rtnetlink, NETLINK_ROUTE \- Linux IPv4 routing socket
+.SH SYNOPSIS
+.B #include <asm/types.h>
+.br
+.B #include <linux/netlink.h>
+.br
+.B #include <linux/rtnetlink.h>
+.br
+.B #include <sys/socket.h>
+
+.BI "rtnetlink_socket = socket(PF_NETLINK, int " socket_type ", NETLINK_ROUTE);"
+
+.SH DESCRIPTION
+Rtnetlink allows the kernel's routing tables to be read and altered.
+It is used within the kernel to communicate between
+various subsystems, though this usage is not documented here, and for
+communication with user-space programs.
+Network routes, ip addresses, link parameters, neighbour setups, queueing
+disciplines, traffic classes and packet classifiers may all be controlled
+through
+.B NETLINK_ROUTE
+sockets. It is based on netlink messages, see
+.BR netlink (7)
+for more information.
+
+.\" XXX: all these macros could be moved to rtnetlink(3)
+
+.SH "ROUTING ATTRIBUTES"
+Some rtnetlink messages have optional attributes after the initial header:
+
+.nf
+.ta 4 19 32
+struct rtattr
+{
+ unsigned short rta_len; /* Length of option */
+ unsigned short rta_type; /* Type of option */
+ /* Data follows */
+};
+.fi
+
+These attributes should be only manipulated using the RTA_* macros or libnetlink,
+see
+.BR rtnetlink (3).
+
+.SH MESSAGES
+Rtnetlink consists of these message types
+(in addition to standard netlink messages):
+.TP
+.BR RTM_NEWLINK ", " RTM_DELLINK ", " RTM_GETLINK
+Create, remove or get information about a specific network interface.
+These messages contain an
+.B ifinfomsg
+structure followed by a series of
+.B rtattr
+structures.
+
+.nf
+.ta 4 19 32
+struct ifinfomsg
+{
+ unsigned char ifi_family; /* AF_UNSPEC */
+ unsigned short ifi_type; /* Device type */
+ int ifi_index; /* Interface index */
+ unsigned int ifi_flags; /* Device flags */
+ unsigned int ifi_change; /* change mask */
+};
+.fi
+
+.\" XXX ifi_type
+.B ifi_flags
+contains the device flags, see
+.BR netdevice(7);
+.B ifi_index
+is the unique interface index,
+.B ifi_change
+is reserved for future use and should be always set to 0xFFFFFFFF.
+
+
+.TS
+tab(:);
+c
+l l l.
+Routing attributes
+rta_type:value type:description
+_
+IFLA_UNSPEC:-:unspecified.
+IFLA_ADDRESS:hardware address:interface L2 address
+IFLA_BROADCAST:hardware address:L2 broadcast address.
+IFLA_IFNAME:asciiz string:Device name.
+IFLA_MTU:unsigned int:MTU of the device.
+IFLA_LINK:int:Link type.
+IFLA_QDISC:asciiz string:Queueing discipline.
+IFLA_STATS:T{
+struct net_device_stats
+T}:Interface Statistics.
+.TE
+.TP
+.BR RTM_NEWADDR ", " RTM_DELADDR ", " RTM_GETADDR
+Add, remove or receive information about an IP address associated with
+an interface. In Linux 2.2 an interface can carry multiple IP addresses,
+this replaces the alias device concept in 2.0. In Linux 2.2 these messages
+support IPv4 and IPv6 addresses. They contain an
+.B ifaddrmsg
+structure, optionally followed by
+.B rtaddr
+routing attributes.
+
+.nf
+.ta 4 19 32
+struct ifaddrmsg
+{
+ unsigned char ifa_family; /* Address type */
+ unsigned char ifa_prefixlen; /* Prefixlength of the address */
+ unsigned char ifa_flags; /* Address flags */
+ unsigned char ifa_scope; /* Address scope */
+ int ifa_index; /* Interface index */
+};
+.fi
+
+.B ifa_family
+is the address family type (currently
+.B AF_INET
+or
+.B AF_INET6),
+.B ifa_prefixlen
+is the length of the address mask of the address if defined for the
+family (like for IPv4),
+.B ifa_scope
+is the address scope,
+.B ifa_index
+is the interface index of the interface the address is associated with.
+.B ifa_flags
+is a flag word of
+.B IFA_F_SECONDARY
+for secondary address (old alias interface),
+.B IFA_F_PERMANENT
+for a permanent address set by the user and other undocumented flags.
+
+.TS
+tab(:);
+c
+l l l.
+Attributes
+rta_type:value type:description
+_
+IFA_UNSPEC:-:unspecified.
+IFA_ADDRESS:raw protocol address:interface address
+IFA_LOCAL:raw protocol address:local address
+IFA_LABEL:asciiz string:name of the interface
+IFA_BROADCAST:raw protocol address:broadcast address.
+IFA_ANYCAST:raw protocol address:anycast address
+IFA_CACHEINFO:struct ifa_cacheinfo:Address information.
+.TE
+
+.\" XXX struct ifa_cacheinfo
+.TP
+.BR RTM_NEWROUTE ", " RTM_DELROUTE ", " RTM_GETROUTE
+Create, remove or receive information about a network route.
+These messages contain an
+.B rtmsg
+structure with an optional sequence of
+.B rtattr
+structures following. For
+.B RTM_GETROUTE
+setting
+.B rtm_dst_len
+and
+.B rtm_src_len
+to 0 means you get all entries for the specified routing table.
+For the other fields except
+.B rtm_table
+and
+.B rtm_protocol
+0 is the wildcard.
+
+.nf
+.ta 4 19 32
+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 int rtm_flags;
+};
+.fi
+
+.TS
+tab(:);
+l l
+l l.
+rtm_type:Route type
+_
+RTN_UNSPEC:unknown route
+RTN_UNICAST:a gateway or direct route
+RTN_LOCAL:a local interface route
+RTN_BROADCAST:T{
+a local broadcast route (sent as a broadcast)
+T}
+RTN_ANYCAST:T{
+a local broadcast route (sent as a unicast)
+T}
+RTN_MULTICAST:a multicast route
+RTN_BLACKHOLE:a packet dropping route
+RTN_UNREACHABLE:an unreachable destination
+RTN_PROHIBIT:a packet rejection route
+RTN_THROW:continue routing lookup in another table
+RTN_NAT:a network address translation rule
+RTN_XRESOLVE:T{
+refer to an external resolver (not implemented)
+T}
+.TE
+
+.TS
+tab(:);
+l l.
+rtm_protocol:Route origin.
+_
+RTPROT_UNSPEC:unknown
+RTPROT_REDIRECT:T{
+by an ICMP redirect (currently unused)
+T}
+RTPROT_KERNEL:by the kernel
+RTPROT_BOOT:during boot
+RTPROT_STATIC:by the administrator
+.TE
+
+Values larger than
+.B RTPROT_STATIC
+are not interpreted by the kernel, they are just for user information. They
+may be used to tag the source of a routing information or to distingush between
+multiple routing daemons. See
+.BR <linux/rtnetlink.h>
+for the routing daemon identifiers which are already assigned.
+
+.B rtm_scope
+is the distance to the destination:
+
+.TS
+tab(:);
+l l.
+RT_SCOPE_UNIVERSE:global route
+RT_SCOPE_SITE:T{
+interior route in the local autonomous system
+T}
+RT_SCOPE_LINK:route on this link
+RT_SCOPE_HOST:route on the local host
+RT_SCOPE_NOWHERE:destination doesn't exist
+.TE
+
+The values between
+.B RT_SCOPE_UNIVERSE
+and
+.B RT_SCOPE_SITE
+are available to the user.
+
+The
+.B rtm_flags
+have the following meanings:
+
+.TS
+tab(:);
+l l.
+RTM_F_NOTIFY:T{
+if the route changes, notify the user via rtnetlink
+T}
+RTM_F_CLONED:route is cloned from another route
+RTM_F_EQUALIZE:a multicast equalizer (not yet implemented)
+.TE
+
+.B rtm_table
+specifies the routing table
+
+.TS
+tab(:);
+l l.
+RT_TABLE_UNSPEC:an unspecified routing table
+RT_TABLE_DEFAULT:the default table
+RT_TABLE_MAIN:the main table
+RT_TABLE_LOCAL:the local table
+.TE
+
+The user may assign arbitary values between
+.B RT_TABLE_UNSPEC
+and
+.BR RT_TABLE_DEFAULT .
+
+.TS
+tab(:);
+c
+l l l.
+Attributes
+rta_type:value type:description
+_
+RTA_UNSPEC:-:ignored.
+RTA_DST:protocol address:Route destination address.
+RTA_SRC:protocol address:Route source address.
+RTA_IIF:int:Input interface index.
+RTA_OIF:int:Output interface index.
+RTA_GATEWAY:protocol address:The gateway of the route
+RTA_PRIORITY:int:Priority of route.
+RTA_PREFSRC::
+RTA_METRICS:int:Route metric
+RTA_MULTIPATH::
+RTA_PROTOINFO::
+RTA_FLOW::
+RTA_CACHEINFO::
+.TE
+
+.B Fill these values in!
+.TP
+.BR RTM_NEWNEIGH ", " RTM_DELNEIGH ", " RTM_GETNEIGH
+Add, remove or receive information about a neighbour table entry (e.g. an ARP
+entry). The message contains an
+.B ndmsg
+structure.
+
+.nf
+.ta 4 19 32
+struct ndmsg
+{
+ unsigned char ndm_family;
+ int ndm_ifindex; /* Interface 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;
+};
+.fi
+
+.B ndm_state
+is a bitmask of the following states:
+
+.TS
+tab(:);
+l l.
+NUD_INCOMPLETE:a currently resolving cache entry
+NUD_REACHABLE:a confirmed working cache entry
+NUD_STALE:an expired cache entry
+NUD_DELAY:an entry waiting for a timer
+NUD_PROBE:a cache entry that is currently reprobed
+NUD_FAILED:an invalid cache entry
+NUD_NOARP:a device with no destination cache
+NUD_PERMANENT:a static entry
+.TE
+
+Valid
+.B ndm_flags
+are:
+
+.TS
+tab(:);
+l l.
+NTF_PROXY:a proxy arp entry
+NTF_ROUTER:an IPv6 router
+.TE
+
+.B document the members of the struct better
+
+The
+.B rtaddr
+struct has the following meanings for the
+.B rta_type
+field:
+
+.TS
+tab(:);
+l l.
+NDA_UNSPEC:unknown type
+NDA_DST:a neighbour cache network layer destination address
+NDA_LLADDR:a neighbour cache link layer address
+NDA_CACHEINFO:cache statistics.
+.TE
+
+If the
+.B rta_type
+field is
+.B NDA_CACHEINFO
+then a
+.B struct nda_cacheinfo
+header follows
+.TP
+.BR RTM_NEWRULE ", " RTM_DELRULE ", " RTM_GETRULE
+Add, delete or retrieve a routing rule. Carries a
+.B struct rtmsg
+.TP
+.BR RTM_NEWQDISC ", " RTM_DELQDISC ", " RTM_GETQDISC
+Add, remove or get a queueing discipline. The message contains a
+.B struct tcmsg
+and may be followed by a series of
+attributes.
+
+.nf
+.ta 4 19 32
+struct tcmsg
+{
+ unsigned char tcm_family;
+ int tcm_ifindex; /* interface index */
+ __u32 tcm_handle; /* Qdisc handle */
+ __u32 tcm_parent; /* Parent qdisc */
+ __u32 tcm_info;
+};
+.fi
+
+.TS
+tab(:);
+c
+l l l.
+Attributes
+rta_type:value type:Description
+_
+TCA_UNSPEC:-:unspecified
+TCA_KIND:asciiz string:Name of queueing discipline
+TCA_OPTIONS:byte sequence:Qdisc specific options follow
+TCA_STATS:struct tc_stats:Qdisc statistics.
+TCA_XSTATS:qdisc specific:Module specific statistics.
+TCA_RATE:struct tc_estimator:Rate limit.
+.TE
+
+In addition various other qdisc module specific attributes are allowed.
+For more information see the appropriate include files.
+.TP
+.BR RTM_NEWTCLASS ", " RTM_DELTCLASS ", " RTM_GETTCLASS
+Add, remove or get a traffic class. These messages contain a
+.B struct tcmsg
+as described above.
+.TP
+.BR RTM_NEWTFILTER ", " RTM_DELTFILTER ", " RTM_GETTFILTER
+Add, remove or receive information about a traffic filter. These
+messages contain a
+.B struct tcmsg
+as described above.
+.SH VERSIONS
+.B rtnetlink
+is a new feature of Linux 2.2.
+.SH BUGS
+This manual page is lacking and incomplete.
+
+.SH "SEE ALSO"
+.BR cmsg (3),
+.BR rtnetlink (3),
+.BR ip (7),
+.BR netlink (7)