RTNETLINK(4)        Linux Programmer's Manual        RTNETLINK(4)

NAME
       rtnetlink, NETLINK_ROUTE - Linux IPv4 routing socket.

SYNOPSIS
       #include <asm/types.h>
       #include <linux/netlink.h>
       #include <linux/rtnetlink.h>
       #include <sys/socket.h>

       rtnetlink_socket    =    socket(PF_NETLINK,   socket_type,
       NETLINK_ROUTE);

DESCRIPTION
       UNFINISHED. WORK IN PROGRESS.

       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.   Pay-
               load is an ifaddrmsg structure.

       RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE
               Create, remove or receive information about a net-
               work 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_PRO-
       HIBIT  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 dis-
       tingush    between    multiple    routing   daemons.   See
       linux/rtnetlink.h for  the  already  standardized  routing
       daemon identifiers.  rtm_scope is the distance to the des-
       tination:    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 equal-
       izer.  rtm_table may contain: RT_TABLE_UNSPEC for unspeci-
       fied  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  neigh-
               bour 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.

BUGS
       This manual page is lacking and incomplete.

VERSIONS
       rtnetlink is a new feature of Linux 2.2.

SEE ALSO
       netlink(4), cmsg(3), ip(4)

Linux Man Page             23 Oct 1998                          1