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)