# libnetlink - A library for accessing the netlink service - man(3) - [phpMan]

[_libnetlink_(3)](https://www.chedong.com/phpMan.php/man/libnetlink/3/markdown)                         Library Functions Manual                         [_libnetlink_(3)](https://www.chedong.com/phpMan.php/man/libnetlink/3/markdown)

## NAME
       libnetlink - A library for accessing the netlink service

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

       int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions)

       int rtnl_wilddump_request(struct rtnl_handle *rth, int family, int type)

       int rtnl_send(struct rtnl_handle *rth, char *buf, int len)

       int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len)

       int rtnl_dump_filter(struct rtnl_handle *rth,
                      int (*filter)(struct sockaddr_nl *, struct nlmsghdr *n, void *),
                      void *arg1,
                      int (*junk)(struct sockaddr_nl *,struct nlmsghdr *n, void *),
                      void *arg2)

       int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
                  unsigned groups, struct nlmsghdr *answer,
                  int (*junk)(struct sockaddr_nl *,struct nlmsghdr *n, void *),
                  void *jarg)

       int rtnl_listen(struct rtnl_handle *rtnl,
                  int (*handler)(struct sockaddr_nl *, struct rtnl_ctrl_data *,
                           struct nlmsghdr *n, void *),
                  void *jarg)

       int rtnl_from_file(FILE *rtnl,
                  int (*handler)(struct sockaddr_nl *,struct nlmsghdr *n, void *),
                  void *jarg)

       int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data)

       int addattr_l(struct nlmsghdr *n, int maxlen, int type, void *data, int alen)

       int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data)

       int rta_addattr_l(struct rtattr *rta, int maxlen, int type, void *data, int alen)

## DESCRIPTION
       libnetlink provides a higher level interface to [**rtnetlink**(7)](https://www.chedong.com/phpMan.php/man/rtnetlink/7/markdown).  The read functions return 0 on
       success  and a negative errno on failure.  The send functions return the amount of data sent,
       or -1 on error.

       rtnl_open
              Open a rtnetlink socket and save the state into the **rth **handle. This handle is  passed
              to  all subsequent calls.  **subscriptions **is a bitmap of the rtnetlink multicast groups
              the socket will be a member of.


       rtnl_wilddump_request
              Request a full dump of the **type **database for **family **addresses.  **type  **is  a  rtnetlink
              message type.


       rtnl_dump_request
              Request a full dump of the **type **data buffer into **buf **with maximum length of **len.  type**
              is a rtnetlink message type.


       rtnl_dump_filter
              Receive netlink data after a request and filter it.  The **filter **callback checks if the
              received message is wanted. It gets the source address of the message, the message it‐
              self and **arg1 **as arguments. 0 as return means that the filter passed, a negative value
              is  returned  by _rtnl_dump_filter_ in case of error. NULL for _filter_ means to not use a
              filter.  **junk **is used to filter messages not destined to the local socket.   Only  one
              message  bundle  is  received.  If  there is a message pending, this function does not
              block.


       rtnl_listen
              Receive netlink data after a request and pass it to _handler._  **handler  **is  a  callback
              that  gets  the  message  source address, anscillary data, the message itself, and the
              **jarg **cookie as arguments. It will get called for all received messages.  Only one mes‐
              sage bundle is received. If there is a message pending this function does not block.


       rtnl_from_file
              Works like _rtnl_listen,_ but reads a netlink message bundle  from  the  file  **file  **and
              passes  the  messages  to **handler **for parsing. The file should contain raw data as re‐
              ceived from a rtnetlink socket.

       The following functions are useful to construct custom rtnetlink messages. For  simple  data‐
       base  dumping  with  filtering  it is better to use the higher level functions above. See **rt‐**
       [**netlink**(3)](https://www.chedong.com/phpMan.php/man/netlink/3/markdown) and [**netlink**(3)](https://www.chedong.com/phpMan.php/man/netlink/3/markdown) on how to generate a rtnetlink message. The following utility func‐
       tions require a continuous buffer that already contains a netlink message header  and  a  rt‐
       netlink request.


       rtnl_send
              Send the rtnetlink message in **buf **of length **len **to handle **rth.**


       addattr32
              Add  a __u32 attribute of type **type **and with value **data **to netlink message **n, **which is
              part of a buffer of length **maxlen.**


       addattr_l
              Add a variable length attribute of type **type **and with value **data **and  **alen  **length  to
              netlink message **n, **which is part of a buffer of length **maxlen.  data **is copied.


       rta_addattr32
              Initialize the rtnetlink attribute **rta **with a __u32 data value.


       rta_addattr32
              Initialize the rtnetlink attribute **rta **with a variable length data value.


## BUGS
       This library is meant for internal use, use libmnl for new programs.

       The  functions sometimes use fprintf and exit when a fatal error occurs.  This library should
       be named librtnetlink.


## AUTHORS
       netlink/rtnetlink was designed and written by Alexey Kuznetsov.  Andi  Kleen  wrote  the  man
       page.


## SEE ALSO
       [**netlink**(7)](https://www.chedong.com/phpMan.php/man/netlink/7/markdown), [**rtnetlink**(7)](https://www.chedong.com/phpMan.php/man/rtnetlink/7/markdown)
       /usr/include/linux/rtnetlink.h

                                                                                       [_libnetlink_(3)](https://www.chedong.com/phpMan.php/man/libnetlink/3/markdown)
