Re: netlink tester program

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> You really need something like rtnl_talk() or rtnl_dump_filter()
> from libnetlink to do this properly.

In case it's helpful I wrote manpages for libnetlink some time ago.

I also have some simple example programs using it. Other examples
can be found in the zebra or bird source code.

-Andi

-Andi

libnetlink(3)                                       libnetlink(3)



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 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).  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  mes-
              sage,  the  message itself 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.
              Unless  there  is no 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 mes-
              sage source address, the message  itself,  and  the
              jarg  cookie  as  arguments. It will get called for
              all received messages.  Only one message bundle  is
              received.  Unless  there is no 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 contains raw  data
              as received from a rtnetlink socket.

       The  following  functions  are  useful to construct custom
       rtnetlink messages. For simple database dumping with  fil-
       tering  it  is  better  to  use the higher level functions
       above. See rtnetlink(3) and netlink(3) on how to  generate
       a  rtnetlink  message.  The  following  utility  functions
       require  a  continuous  buffer  that  already  contains  a
       netlink message header and a rtnetlink 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 vari-
              able length data value.


BUGS
       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), rtnetlink(7)
       /usr/include/linux/rtnetlink.h



                                                    libnetlink(3)


> 
-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux