]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-netlink.h
tree-wide: beautify remaining copyright statements
[thirdparty/systemd.git] / src / systemd / sd-netlink.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
1c4baffc
TG
2#ifndef foosdnetlinkhfoo
3#define foosdnetlinkhfoo
4
5/***
96b2fb93 6 Copyright © 2013 Tom Gundersen <teg@jklm.no>
1c4baffc
TG
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
22#include <inttypes.h>
1c4baffc 23#include <netinet/ether.h>
71d35b6b 24#include <netinet/in.h>
1c4baffc
TG
25#include <linux/rtnetlink.h>
26#include <linux/neighbour.h>
27
28#include "sd-event.h"
71d35b6b 29
1c4baffc
TG
30#include "_sd-common.h"
31
32_SD_BEGIN_DECLARATIONS;
33
34typedef struct sd_netlink sd_netlink;
05d0c2e3 35typedef struct sd_genl_socket sd_genl_socket;
1c4baffc 36typedef struct sd_netlink_message sd_netlink_message;
e5719363 37typedef enum {SD_GENL_ID_CTRL, SD_GENL_WIREGUARD} sd_genl_family;
1c4baffc
TG
38
39/* callback */
40
41typedef int (*sd_netlink_message_handler_t)(sd_netlink *nl, sd_netlink_message *m, void *userdata);
42
43/* bus */
44int sd_netlink_new_from_netlink(sd_netlink **nl, int fd);
45int sd_netlink_open(sd_netlink **nl);
46int sd_netlink_open_fd(sd_netlink **nl, int fd);
75f8a779 47int sd_netlink_inc_rcvbuf(sd_netlink *nl, const size_t size);
1c4baffc
TG
48
49sd_netlink *sd_netlink_ref(sd_netlink *nl);
50sd_netlink *sd_netlink_unref(sd_netlink *nl);
51
52int sd_netlink_send(sd_netlink *nl, sd_netlink_message *message, uint32_t *serial);
53int sd_netlink_call_async(sd_netlink *nl, sd_netlink_message *message,
54 sd_netlink_message_handler_t callback,
55 void *userdata, uint64_t usec, uint32_t *serial);
56int sd_netlink_call_async_cancel(sd_netlink *nl, uint32_t serial);
57int sd_netlink_call(sd_netlink *nl, sd_netlink_message *message, uint64_t timeout,
58 sd_netlink_message **reply);
59
60int sd_netlink_get_events(sd_netlink *nl);
61int sd_netlink_get_timeout(sd_netlink *nl, uint64_t *timeout);
62int sd_netlink_process(sd_netlink *nl, sd_netlink_message **ret);
63int sd_netlink_wait(sd_netlink *nl, uint64_t timeout);
1c4baffc
TG
64
65int sd_netlink_add_match(sd_netlink *nl, uint16_t match, sd_netlink_message_handler_t c, void *userdata);
66int sd_netlink_remove_match(sd_netlink *nl, uint16_t match, sd_netlink_message_handler_t c, void *userdata);
67
32d20645 68int sd_netlink_attach_event(sd_netlink *nl, sd_event *e, int64_t priority);
1c4baffc
TG
69int sd_netlink_detach_event(sd_netlink *nl);
70
71int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, const char *data);
c06aead0 72int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type);
1c4baffc
TG
73int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data);
74int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, uint16_t data);
75int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, uint32_t data);
17af840b 76int sd_netlink_message_append_data(sd_netlink_message *m, unsigned short type, const void *data, size_t len);
1c4baffc
TG
77int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data);
78int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data);
79int sd_netlink_message_append_ether_addr(sd_netlink_message *m, unsigned short type, const struct ether_addr *data);
80int sd_netlink_message_append_cache_info(sd_netlink_message *m, unsigned short type, const struct ifa_cacheinfo *info);
81
82int sd_netlink_message_open_container(sd_netlink_message *m, unsigned short type);
83int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned short type, const char *key);
84int sd_netlink_message_close_container(sd_netlink_message *m);
85
86int sd_netlink_message_read_string(sd_netlink_message *m, unsigned short type, const char **data);
87int sd_netlink_message_read_u8(sd_netlink_message *m, unsigned short type, uint8_t *data);
88int sd_netlink_message_read_u16(sd_netlink_message *m, unsigned short type, uint16_t *data);
89int sd_netlink_message_read_u32(sd_netlink_message *m, unsigned short type, uint32_t *data);
90int sd_netlink_message_read_ether_addr(sd_netlink_message *m, unsigned short type, struct ether_addr *data);
91int sd_netlink_message_read_cache_info(sd_netlink_message *m, unsigned short type, struct ifa_cacheinfo *info);
92int sd_netlink_message_read_in_addr(sd_netlink_message *m, unsigned short type, struct in_addr *data);
93int sd_netlink_message_read_in6_addr(sd_netlink_message *m, unsigned short type, struct in6_addr *data);
94int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short type);
95int sd_netlink_message_exit_container(sd_netlink_message *m);
96
05d0c2e3
JT
97int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t type);
98int sd_netlink_message_cancel_array(sd_netlink_message *m);
99
1c4baffc
TG
100int sd_netlink_message_rewind(sd_netlink_message *m);
101
102sd_netlink_message *sd_netlink_message_next(sd_netlink_message *m);
103
104sd_netlink_message *sd_netlink_message_ref(sd_netlink_message *m);
105sd_netlink_message *sd_netlink_message_unref(sd_netlink_message *m);
106
107int sd_netlink_message_request_dump(sd_netlink_message *m, int dump);
108int sd_netlink_message_is_error(sd_netlink_message *m);
109int sd_netlink_message_get_errno(sd_netlink_message *m);
110int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *type);
c06cb593 111int sd_netlink_message_set_flags(sd_netlink_message *m, uint16_t flags);
1c4baffc
TG
112int sd_netlink_message_is_broadcast(sd_netlink_message *m);
113
114/* rtnl */
115
116int sd_rtnl_message_new_link(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index);
117int sd_rtnl_message_new_addr_update(sd_netlink *nl, sd_netlink_message **ret, int index, int family);
118int sd_rtnl_message_new_addr(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index, int family);
119int sd_rtnl_message_new_route(sd_netlink *nl, sd_netlink_message **ret, uint16_t nlmsg_type, int rtm_family, unsigned char rtm_protocol);
120int sd_rtnl_message_new_neigh(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index, int nda_family);
121
89489ef7 122int sd_rtnl_message_get_family(sd_netlink_message *m, int *family);
1c4baffc
TG
123
124int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen);
125int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope);
126int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags);
127int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family);
128int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen);
129int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope);
130int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags);
131int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex);
132
133int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsigned change);
134int sd_rtnl_message_link_set_type(sd_netlink_message *m, unsigned type);
135int sd_rtnl_message_link_set_family(sd_netlink_message *m, unsigned family);
136int sd_rtnl_message_link_get_ifindex(sd_netlink_message *m, int *ifindex);
137int sd_rtnl_message_link_get_flags(sd_netlink_message *m, unsigned *flags);
1c4a6088 138int sd_rtnl_message_link_get_type(sd_netlink_message *m, unsigned short *type);
1c4baffc
TG
139
140int sd_rtnl_message_route_set_dst_prefixlen(sd_netlink_message *m, unsigned char prefixlen);
141int sd_rtnl_message_route_set_src_prefixlen(sd_netlink_message *m, unsigned char prefixlen);
142int sd_rtnl_message_route_set_scope(sd_netlink_message *m, unsigned char scope);
6b9e85a7 143int sd_rtnl_message_route_set_flags(sd_netlink_message *m, unsigned flags);
ec1bb279 144int sd_rtnl_message_route_set_table(sd_netlink_message *m, unsigned char table);
983226f3 145int sd_rtnl_message_route_set_type(sd_netlink_message *m, unsigned char type);
6b9e85a7 146int sd_rtnl_message_route_get_flags(sd_netlink_message *m, unsigned *flags);
1c4baffc 147int sd_rtnl_message_route_get_family(sd_netlink_message *m, int *family);
ec1bb279 148int sd_rtnl_message_route_set_family(sd_netlink_message *m, int family);
ad70f789
TG
149int sd_rtnl_message_route_get_protocol(sd_netlink_message *m, unsigned char *protocol);
150int sd_rtnl_message_route_get_scope(sd_netlink_message *m, unsigned char *scope);
151int sd_rtnl_message_route_get_tos(sd_netlink_message *m, unsigned char *tos);
152int sd_rtnl_message_route_get_table(sd_netlink_message *m, unsigned char *table);
1c4baffc
TG
153int sd_rtnl_message_route_get_dst_prefixlen(sd_netlink_message *m, unsigned char *dst_len);
154int sd_rtnl_message_route_get_src_prefixlen(sd_netlink_message *m, unsigned char *src_len);
983226f3 155int sd_rtnl_message_route_get_type(sd_netlink_message *m, unsigned char *type);
1c4baffc
TG
156
157int sd_rtnl_message_neigh_set_flags(sd_netlink_message *m, uint8_t flags);
158int sd_rtnl_message_neigh_set_state(sd_netlink_message *m, uint16_t state);
159int sd_rtnl_message_neigh_get_family(sd_netlink_message *m, int *family);
160int sd_rtnl_message_neigh_get_ifindex(sd_netlink_message *m, int *family);
161int sd_rtnl_message_neigh_get_state(sd_netlink_message *m, uint16_t *state);
162int sd_rtnl_message_neigh_get_flags(sd_netlink_message *m, uint8_t *flags);
163
30746d60
SS
164int sd_rtnl_message_new_addrlabel(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifindex, int ifal_family);
165int sd_rtnl_message_addrlabel_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen);
d37b7627 166int sd_rtnl_message_addrlabel_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen);
30746d60 167
bce67bbe
SS
168int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifal_family);
169int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, unsigned char tos);
170int sd_rtnl_message_routing_policy_rule_get_tos(sd_netlink_message *m, unsigned char *tos);
171int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, unsigned char table);
172int sd_rtnl_message_routing_policy_rule_get_table(sd_netlink_message *m, unsigned char *table);
173int sd_rtnl_message_routing_policy_rule_set_rtm_src_prefixlen(sd_netlink_message *m, unsigned char len);
174int sd_rtnl_message_routing_policy_rule_get_rtm_src_prefixlen(sd_netlink_message *m, unsigned char *len);
175int sd_rtnl_message_routing_policy_rule_set_rtm_dst_prefixlen(sd_netlink_message *m, unsigned char len);
176int sd_rtnl_message_routing_policy_rule_get_rtm_dst_prefixlen(sd_netlink_message *m, unsigned char *len);
177int sd_rtnl_message_routing_policy_rule_set_rtm_type(sd_netlink_message *m, unsigned char type);
178int sd_rtnl_message_routing_policy_rule_get_rtm_type(sd_netlink_message *m, unsigned char *type);
179
4afd3348
LP
180_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_netlink, sd_netlink_unref);
181_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_netlink_message, sd_netlink_message_unref);
182
05d0c2e3
JT
183/* genl */
184int sd_genl_socket_open(sd_netlink **nl);
185int sd_genl_message_new(sd_netlink *nl, sd_genl_family family, uint8_t cmd, sd_netlink_message **m);
186
1c4baffc
TG
187_SD_END_DECLARATIONS;
188
189#endif