libnetlink.h revision 370d67ba5678b222ccbdd19647ae81ccc3c97801
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef __LIBNETLINK_H__ 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define __LIBNETLINK_H__ 1 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <asm/types.h> 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <linux/netlink.h> 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <linux/rtnetlink.h> 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct rtnl_handle 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int fd; 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) struct sockaddr_nl local; 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) struct sockaddr_nl peer; 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __u32 seq; 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __u32 dump; 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions); 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int rtnl_open_byproto(struct rtnl_handle *rth, unsigned subscriptions, int protocol); 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern void rtnl_close(struct rtnl_handle *rth); 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int rtnl_wilddump_request(struct rtnl_handle *rth, int fam, int type); 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len); 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef int (*rtnl_filter_t)(const struct sockaddr_nl *, 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) struct nlmsghdr *n, void *); 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int rtnl_dump_filter(struct rtnl_handle *rth, rtnl_filter_t filter, 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void *arg1, 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rtnl_filter_t junk, 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void *arg2); 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer, 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned groups, struct nlmsghdr *answer, 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rtnl_filter_t junk, 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void *jarg); 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int rtnl_send(struct rtnl_handle *rth, const char *buf, int); 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 36e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)extern int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data); 37d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)extern int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data, int alen); 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)extern int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data); 3910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochextern int rta_addattr_l(struct rtattr *rta, int maxlen, int type, const void *data, int alen); 40e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)extern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len); 43c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)extern int rtnl_listen(struct rtnl_handle *, rtnl_filter_t handler, 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void *jarg); 460019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochextern int rtnl_from_file(FILE *, rtnl_filter_t handler, 471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void *jarg); 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 49e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#define NLMSG_TAIL(nmsg) \ 50197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len))) 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 52d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif /* __LIBNETLINK_H__ */ 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)