39
39
extern int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data);
40
40
extern int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data, int alen);
41
41
extern int addraw_l(struct nlmsghdr *n, int maxlen, const void *data, int len);
42
extern struct rtattr *addattr_nest(struct nlmsghdr *n, int maxlen, int type);
43
extern int addattr_nest_end(struct nlmsghdr *n, struct rtattr *nest);
44
extern struct rtattr *addattr_nest_compat(struct nlmsghdr *n, int maxlen, int type, const void *data, int len);
45
extern int addattr_nest_compat_end(struct nlmsghdr *n, struct rtattr *nest);
42
46
extern int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data);
43
47
extern int rta_addattr_l(struct rtattr *rta, int maxlen, int type, const void *data, int alen);
45
49
extern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len);
46
50
extern int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len);
51
extern int __parse_rtattr_nested_compat(struct rtattr *tb[], int max, struct rtattr *rta, int len);
48
53
#define parse_rtattr_nested(tb, max, rta) \
49
54
(parse_rtattr((tb), (max), RTA_DATA(rta), RTA_PAYLOAD(rta)))
56
#define parse_rtattr_nested_compat(tb, max, rta, data, len) \
57
({ data = RTA_PAYLOAD(rta) >= len ? RTA_DATA(rta) : NULL; \
58
__parse_rtattr_nested_compat(tb, max, rta, len); })
51
60
extern int rtnl_listen(struct rtnl_handle *, rtnl_filter_t handler,
53
62
extern int rtnl_from_file(FILE *, rtnl_filter_t handler,