| .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 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. Unless there is no 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, the message itself, |
| and the |
| .B 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. |
| |
| .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 contains 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 |
| 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 |