]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/networkd-queue.h
369e7db3a26cd0005b7244af5bc8523227df46e1
[thirdparty/systemd.git] / src / network / networkd-queue.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 #include "sd-event.h"
5
6 #include "networkd-link.h"
7
8 typedef struct Neighbor Neighbor;
9 typedef struct RoutingPolicyRule RoutingPolicyRule;
10
11 typedef struct Request Request;
12
13 typedef int (*request_after_configure_handler_t)(Request*, void*);
14 typedef void (*request_on_free_handler_t)(Request*);
15
16 typedef enum RequestType {
17 REQUEST_TYPE_NEIGHBOR,
18 REQUEST_TYPE_ROUTING_POLICY_RULE,
19 _REQUEST_TYPE_MAX,
20 _REQUEST_TYPE_INVALID = -EINVAL,
21 } RequestType;
22
23 typedef struct Request {
24 Link *link;
25 RequestType type;
26 bool consume_object;
27 union {
28 Neighbor *neighbor;
29 RoutingPolicyRule *rule;
30 void *object;
31 };
32 void *userdata;
33 unsigned *message_counter;
34 link_netlink_message_handler_t netlink_handler;
35 request_after_configure_handler_t after_configure;
36 request_on_free_handler_t on_free;
37 } Request;
38
39 Request *request_free(Request *req);
40 void request_drop(Request *req);
41
42 int link_queue_request(
43 Link *link,
44 RequestType type,
45 void *object,
46 bool consume_object,
47 unsigned *message_counter,
48 link_netlink_message_handler_t netlink_handler,
49 Request **ret);
50
51 int manager_process_requests(sd_event_source *s, void *userdata);