.TH libnetlink 3
.SH NAME
libnetlink \- A library for accessing the netlink service
.SH SYNOPSIS
.nf
#include <asm/types.h>
.br
#include <libnetlink.h>
.br
#include <linux/netlink.h>
.br
#include <linux/rtnetlink.h>
.sp
int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions)
.sp
int rtnl_wilddump_request(struct rtnl_handle *rth, int family, int type)
.sp
int rtnl_send(struct rtnl_handle *rth, char *buf, int len)
.sp
int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len)
.sp
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)
.sp
int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
	      unsigned groups, struct nlmsghdr *answer,
.br
	      int (*junk)(struct sockaddr_nl *,struct nlmsghdr *n, void *),
.br
	      void *jarg)
.sp
int rtnl_listen(struct rtnl_handle *rtnl, 
	      int (*handler)(struct sockaddr_nl *, struct rtnl_ctrl_data *,
			     struct nlmsghdr *n, void *),
	      void *jarg)
.sp
int rtnl_from_file(FILE *rtnl, 
	      int (*handler)(struct sockaddr_nl *,struct nlmsghdr *n, void *),
	      void *jarg)
.sp
int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data)
.sp
int addattr_l(struct nlmsghdr *n, int maxlen, int type, void *data, int alen)
.sp
int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data)
.sp
int rta_addattr_l(struct rtattr *rta, int maxlen, int type, void *data, int alen)
.SH DESCRIPTION
libnetlink provides a higher level interface to 
.BR 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.
.TP 
rtnl_open
Open a rtnetlink socket and save the state into the
.B rth
handle. This handle is passed to all subsequent calls. 
.B subscriptions
is a bitmap of the rtnetlink multicast groups the socket will be
a member of.

.TP
rtnl_wilddump_request
Request a full dump of the 
.B type
database for
.B family
addresses.
.B type
is a rtnetlink message type. 
.\" XXX

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

.TP
rtnl_dump_filter
Receive netlink data after a request and filter it.
The
.B filter
callback checks if the received message is wanted. It gets the source
address of the message, the message itself and
.B arg1 
as arguments. 0 as return means that the filter passed, a negative
value is returned
by
.I rtnl_dump_filter 
in case of error. NULL for 
.I filter
means to not use a filter.
.B 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.

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

.TP
rtnl_from_file
Works like 
.I rtnl_listen, 
but reads a netlink message bundle from the file
.B file
and passes the messages to
.B handler
for parsing. The file should contain raw data as received from a rtnetlink socket.
.PP
The following functions are useful to construct custom rtnetlink messages. For
simple database dumping with filtering it is better to use the higher level
functions above. See
.BR rtnetlink(3)
and
.BR 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. 

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

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

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

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

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

.SH 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.

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

.SH SEE ALSO
.BR netlink(7),
.BR rtnetlink(7)
.br
/usr/include/linux/rtnetlink.h
