]>
Commit | Line | Data |
---|---|---|
cc73685d | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
d38dd64a CB |
2 | |
3 | #ifndef _GNU_SOURCE | |
4 | #define _GNU_SOURCE 1 | |
5 | #endif | |
0ad19a3f | 6 | #include <errno.h> |
0ad19a3f | 7 | #include <linux/netlink.h> |
8 | #include <linux/rtnetlink.h> | |
d38dd64a CB |
9 | #include <stdio.h> |
10 | #include <stdlib.h> | |
11 | #include <string.h> | |
12 | #include <sys/socket.h> | |
13 | #include <unistd.h> | |
f549edcc | 14 | |
d38dd64a | 15 | #include "config.h" |
f549edcc GK |
16 | #include "nl.h" |
17 | #include "rtnl.h" | |
0ad19a3f | 18 | |
6822ba9b | 19 | int rtnetlink_open(struct rtnl_handler *handler) |
0ad19a3f | 20 | { |
21 | return netlink_open(&handler->nlh, NETLINK_ROUTE); | |
22 | } | |
23 | ||
6822ba9b | 24 | void rtnetlink_close(struct rtnl_handler *handler) |
0ad19a3f | 25 | { |
d16bda44 | 26 | netlink_close(&handler->nlh); |
0ad19a3f | 27 | } |
28 | ||
6ce39620 CB |
29 | #pragma GCC diagnostic push |
30 | #pragma GCC diagnostic ignored "-Wcast-align" | |
31 | ||
6822ba9b | 32 | int rtnetlink_rcv(struct rtnl_handler *handler, struct rtnlmsg *rtnlmsg) |
0ad19a3f | 33 | { |
34 | return netlink_rcv(&handler->nlh, (struct nlmsg *)&rtnlmsg->nlmsghdr); | |
35 | } | |
36 | ||
6822ba9b | 37 | int rtnetlink_send(struct rtnl_handler *handler, struct rtnlmsg *rtnlmsg) |
0ad19a3f | 38 | { |
39 | ||
40 | return netlink_send(&handler->nlh, (struct nlmsg *)&rtnlmsg->nlmsghdr); | |
41 | } | |
42 | ||
6822ba9b CB |
43 | int rtnetlink_transaction(struct rtnl_handler *handler, struct rtnlmsg *request, |
44 | struct rtnlmsg *answer) | |
0ad19a3f | 45 | { |
736da9d0 CB |
46 | return netlink_transaction(&handler->nlh, |
47 | (struct nlmsg *)&request->nlmsghdr, | |
0ad19a3f | 48 | (struct nlmsg *)&answer->nlmsghdr); |
49 | } | |
50 | ||
6ce39620 CB |
51 | #pragma GCC diagnostic pop |
52 | ||
6822ba9b | 53 | struct rtnlmsg *rtnlmsg_alloc(size_t size) |
0ad19a3f | 54 | { |
736da9d0 CB |
55 | /* |
56 | size_t len; | |
57 | ||
58 | len = NLMSG_LENGTH(NLMSG_ALIGN(sizeof(struct rtnlmsghdr))) + size; | |
59 | return (struct rtnlmsg *)nlmsg_alloc(len); | |
60 | */ | |
61 | ||
0ad19a3f | 62 | return NULL; |
63 | } | |
64 | ||
6822ba9b | 65 | void rtnlmsg_free(struct rtnlmsg *rtnlmsg) { free(rtnlmsg); } |