#ifndef _RTNL_H
|
#define _RTNL_H
|
|
#include <linux/types.h>
|
#include <linux/rtnetlink.h>
|
|
struct rtnl_handler {
|
struct rtnl_handler *next;
|
|
u_int16_t nlmsg_type;
|
int (*handlefn)(struct nlmsghdr *h, void *arg);
|
void *arg;
|
};
|
|
struct rtnl_handle {
|
int rtnl_fd;
|
int rtnl_seq;
|
int rtnl_dump;
|
struct sockaddr_nl rtnl_local;
|
struct rtnl_handler *handlers;
|
};
|
|
/* api for handler plugins */
|
int rtnl_handler_register(struct rtnl_handle *rtnl_handle,
|
struct rtnl_handler *hdlr);
|
int rtnl_handler_unregister(struct rtnl_handle *rtnl_handle,
|
struct rtnl_handler *hdlr);
|
int rtnl_parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len);
|
int rtnl_dump_type(struct rtnl_handle *rtnl_handle, unsigned int type);
|
|
/* api for core program */
|
struct rtnl_handle *rtnl_open(void);
|
void rtnl_close(struct rtnl_handle *rtnl_handle);
|
int rtnl_receive(struct rtnl_handle *rtnl_handle);
|
int rtnl_receive_multi(struct rtnl_handle *rtnl_handle);
|
|
#endif
|