diff options
Diffstat (limited to 'man7/rtnetlink.7')
-rw-r--r-- | man7/rtnetlink.7 | 468 |
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) |