]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-netlink.h
tree-wide: sort includes in *.h
[thirdparty/systemd.git] / src / systemd / sd-netlink.h
CommitLineData
1c4baffc
TG
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#ifndef foosdnetlinkhfoo
4#define foosdnetlinkhfoo
5
6/***
7 This file is part of systemd.
8
9 Copyright 2013 Tom Gundersen <teg@jklm.no>
10
11 systemd is free software; you can redistribute it and/or modify it
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Lesser General Public License for more details.
20
21 You should have received a copy of the GNU Lesser General Public License
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
25#include <inttypes.h>
1c4baffc 26#include <netinet/ether.h>
71d35b6b 27#include <netinet/in.h>
1c4baffc
TG
28#include <linux/rtnetlink.h>
29#include <linux/neighbour.h>
30
31#include "sd-event.h"
71d35b6b 32
1c4baffc
TG
33#include "_sd-common.h"
34
35_SD_BEGIN_DECLARATIONS;
36
37typedef struct sd_netlink sd_netlink;
38typedef struct sd_netlink_message sd_netlink_message;
39
40/* callback */
41
42typedef int (*sd_netlink_message_handler_t)(sd_netlink *nl, sd_netlink_message *m, void *userdata);
43
44/* bus */
45int sd_netlink_new_from_netlink(sd_netlink **nl, int fd);
46int sd_netlink_open(sd_netlink **nl);
47int sd_netlink_open_fd(sd_netlink **nl, int fd);
48int sd_netlink_inc_rcvbuf(const sd_netlink *const rtnl, const int size);
49
50sd_netlink *sd_netlink_ref(sd_netlink *nl);
51sd_netlink *sd_netlink_unref(sd_netlink *nl);
52
53int sd_netlink_send(sd_netlink *nl, sd_netlink_message *message, uint32_t *serial);
54int sd_netlink_call_async(sd_netlink *nl, sd_netlink_message *message,
55 sd_netlink_message_handler_t callback,
56 void *userdata, uint64_t usec, uint32_t *serial);
57int sd_netlink_call_async_cancel(sd_netlink *nl, uint32_t serial);
58int sd_netlink_call(sd_netlink *nl, sd_netlink_message *message, uint64_t timeout,
59 sd_netlink_message **reply);
60
61int sd_netlink_get_events(sd_netlink *nl);
62int sd_netlink_get_timeout(sd_netlink *nl, uint64_t *timeout);
63int sd_netlink_process(sd_netlink *nl, sd_netlink_message **ret);
64int sd_netlink_wait(sd_netlink *nl, uint64_t timeout);
1c4baffc
TG
65
66int sd_netlink_add_match(sd_netlink *nl, uint16_t match, sd_netlink_message_handler_t c, void *userdata);
67int sd_netlink_remove_match(sd_netlink *nl, uint16_t match, sd_netlink_message_handler_t c, void *userdata);
68
69int sd_netlink_attach_event(sd_netlink *nl, sd_event *e, int priority);
70int sd_netlink_detach_event(sd_netlink *nl);
71
72int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, const char *data);
c06aead0 73int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type);
1c4baffc
TG
74int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data);
75int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, uint16_t data);
76int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, uint32_t data);
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
97int sd_netlink_message_rewind(sd_netlink_message *m);
98
99sd_netlink_message *sd_netlink_message_next(sd_netlink_message *m);
100
101sd_netlink_message *sd_netlink_message_ref(sd_netlink_message *m);
102sd_netlink_message *sd_netlink_message_unref(sd_netlink_message *m);
103
104int sd_netlink_message_request_dump(sd_netlink_message *m, int dump);
105int sd_netlink_message_is_error(sd_netlink_message *m);
106int sd_netlink_message_get_errno(sd_netlink_message *m);
107int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *type);
c06cb593 108int sd_netlink_message_set_flags(sd_netlink_message *m, uint16_t flags);
1c4baffc
TG
109int sd_netlink_message_is_broadcast(sd_netlink_message *m);
110
111/* rtnl */
112
113int sd_rtnl_message_new_link(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index);
114int sd_rtnl_message_new_addr_update(sd_netlink *nl, sd_netlink_message **ret, int index, int family);
115int sd_rtnl_message_new_addr(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index, int family);
116int sd_rtnl_message_new_route(sd_netlink *nl, sd_netlink_message **ret, uint16_t nlmsg_type, int rtm_family, unsigned char rtm_protocol);
117int sd_rtnl_message_new_neigh(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index, int nda_family);
118
89489ef7 119int sd_rtnl_message_get_family(sd_netlink_message *m, int *family);
1c4baffc
TG
120
121int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen);
122int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope);
123int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags);
124int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family);
125int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen);
126int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope);
127int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags);
128int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex);
129
130int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsigned change);
131int sd_rtnl_message_link_set_type(sd_netlink_message *m, unsigned type);
132int sd_rtnl_message_link_set_family(sd_netlink_message *m, unsigned family);
133int sd_rtnl_message_link_get_ifindex(sd_netlink_message *m, int *ifindex);
134int sd_rtnl_message_link_get_flags(sd_netlink_message *m, unsigned *flags);
135int sd_rtnl_message_link_get_type(sd_netlink_message *m, unsigned *type);
136
137int sd_rtnl_message_route_set_dst_prefixlen(sd_netlink_message *m, unsigned char prefixlen);
138int sd_rtnl_message_route_set_src_prefixlen(sd_netlink_message *m, unsigned char prefixlen);
139int sd_rtnl_message_route_set_scope(sd_netlink_message *m, unsigned char scope);
6b9e85a7
TG
140int sd_rtnl_message_route_set_flags(sd_netlink_message *m, unsigned flags);
141int sd_rtnl_message_route_get_flags(sd_netlink_message *m, unsigned *flags);
1c4baffc 142int sd_rtnl_message_route_get_family(sd_netlink_message *m, int *family);
ad70f789
TG
143int sd_rtnl_message_route_get_protocol(sd_netlink_message *m, unsigned char *protocol);
144int sd_rtnl_message_route_get_scope(sd_netlink_message *m, unsigned char *scope);
145int sd_rtnl_message_route_get_tos(sd_netlink_message *m, unsigned char *tos);
146int sd_rtnl_message_route_get_table(sd_netlink_message *m, unsigned char *table);
1c4baffc
TG
147int sd_rtnl_message_route_get_dst_prefixlen(sd_netlink_message *m, unsigned char *dst_len);
148int sd_rtnl_message_route_get_src_prefixlen(sd_netlink_message *m, unsigned char *src_len);
149
150int sd_rtnl_message_neigh_set_flags(sd_netlink_message *m, uint8_t flags);
151int sd_rtnl_message_neigh_set_state(sd_netlink_message *m, uint16_t state);
152int sd_rtnl_message_neigh_get_family(sd_netlink_message *m, int *family);
153int sd_rtnl_message_neigh_get_ifindex(sd_netlink_message *m, int *family);
154int sd_rtnl_message_neigh_get_state(sd_netlink_message *m, uint16_t *state);
155int sd_rtnl_message_neigh_get_flags(sd_netlink_message *m, uint8_t *flags);
156
157_SD_END_DECLARATIONS;
158
159#endif