libnetlink.h revision ead2ba7008c9db02954dae6f180aed8770a0560d
1aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef __LIBNETLINK_H__
2aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define __LIBNETLINK_H__ 1
3aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
4aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <asm/types.h>
5aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <linux/netlink.h>
6aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <linux/rtnetlink.h>
7ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#include <linux/if_link.h>
8ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#include <linux/if_addr.h>
9ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#include <linux/neighbour.h>
10aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
11aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstruct rtnl_handle
12aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{
13aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	int			fd;
14aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	struct sockaddr_nl	local;
15aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	struct sockaddr_nl	peer;
16aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	__u32			seq;
17aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	__u32			dump;
18aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger};
19aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
20aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions);
21c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerextern int rtnl_open_byproto(struct rtnl_handle *rth, unsigned subscriptions, int protocol);
22aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern void rtnl_close(struct rtnl_handle *rth);
23aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int rtnl_wilddump_request(struct rtnl_handle *rth, int fam, int type);
24aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len);
256dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemminger
2650772dc51ac02239958e1ebcdb21277fcdf133a7osdl.net!shemmingertypedef int (*rtnl_filter_t)(const struct sockaddr_nl *,
2750772dc51ac02239958e1ebcdb21277fcdf133a7osdl.net!shemminger			     struct nlmsghdr *n, void *);
286dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemmingerextern int rtnl_dump_filter(struct rtnl_handle *rth, rtnl_filter_t filter,
29aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger			    void *arg1,
306dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemminger			    rtnl_filter_t junk,
31aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger			    void *arg2);
32aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
33aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger		     unsigned groups, struct nlmsghdr *answer,
346dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemminger		     rtnl_filter_t junk,
35aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger		     void *jarg);
366dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemmingerextern int rtnl_send(struct rtnl_handle *rth, const char *buf, int);
37aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
38aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
39aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data);
406dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemmingerextern int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data, int alen);
41a10ab08b002dfd25a2d48c6f493835140467a272struct nlmsghdr *n, int maxlen, const void *data, int len);extern int addraw_l(struct nlmsghdr *n, int maxlen, const void *data, int len);
42aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data);
436dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemmingerextern int rta_addattr_l(struct rtattr *rta, int maxlen, int type, const void *data, int alen);
44aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
45aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len);
46c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerextern int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len);
47aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
48753fca4f54bdc4178fac97954746ded6553920a7tb, max, rta) \#define parse_rtattr_nested(tb, max, rta) \
49753fca4f54bdc4178fac97954746ded6553920a7parse_rtattr((tb), (max), RTA_DATA(rta), RTA_PAYLOAD(rta)))	(parse_rtattr((tb), (max), RTA_DATA(rta), RTA_PAYLOAD(rta)))
506dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemminger
51aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int rtnl_listen(struct rtnl_handle *, rtnl_filter_t handler,
526dc9f016347441fbf94cf851c054b0f45ba32c1cosdl.net!shemminger		       void *jarg);
53aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int rtnl_from_file(FILE *, rtnl_filter_t handler,
54aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger		       void *jarg);
55370d67ba5678b222ccbdd19647ae81ccc3c97801nmsg) \
56370d67ba5678b222ccbdd19647ae81ccc3c97801(struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))#define NLMSG_TAIL(nmsg) \
57ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger	((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))
58ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger
59ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#ifndef IFA_RTA
60ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define IFA_RTA(r) \
61ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger	((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
62ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#endif
63ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#ifndef IFA_PAYLOAD
64ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define IFA_PAYLOAD(n)	NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
65ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#endif
66ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger
67ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#ifndef IFLA_RTA
68ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define IFLA_RTA(r) \
69ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger	((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
70ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#endif
71ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#ifndef IFLA_PAYLOAD
72ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define IFLA_PAYLOAD(n)	NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
73ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#endif
74ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger
75ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#ifndef NDA_RTA
76ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define NDA_RTA(r) \
77ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger	((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg))))
78ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#endif
79ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#ifndef NDA_PAYLOAD
80ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define NDA_PAYLOAD(n)	NLMSG_PAYLOAD(n,sizeof(struct ndmsg))
81ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#endif
82ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger
83ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#ifndef NDTA_RTA
84ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define NDTA_RTA(r) \
85ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger	((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndtmsg))))
86ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#endif
87ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#ifndef NDTA_PAYLOAD
88ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define NDTA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndtmsg))
89aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#endif
90aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
91#endif /* __LIBNETLINK_H__ */
92
93