]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/networkd-queue.h
network: bridgeFDB: rename FdbEntry -> BridgeFDB
[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 Address Address;
9 typedef struct Neighbor Neighbor;
10 typedef struct NextHop NextHop;
11 typedef struct Route Route;
12 typedef struct RoutingPolicyRule RoutingPolicyRule;
13
14 typedef struct Request Request;
15
16 typedef int (*request_after_configure_handler_t)(Request*, void*);
17 typedef void (*request_on_free_handler_t)(Request*);
18
19 typedef enum RequestType {
20 REQUEST_TYPE_ADDRESS,
21 REQUEST_TYPE_NEIGHBOR,
22 REQUEST_TYPE_NEXTHOP,
23 REQUEST_TYPE_ROUTE,
24 REQUEST_TYPE_ROUTING_POLICY_RULE,
25 _REQUEST_TYPE_MAX,
26 _REQUEST_TYPE_INVALID = -EINVAL,
27 } RequestType;
28
29 typedef struct Request {
30 Link *link;
31 RequestType type;
32 bool consume_object;
33 union {
34 Address *address;
35 Neighbor *neighbor;
36 NextHop *nexthop;
37 Route *route;
38 RoutingPolicyRule *rule;
39 void *object;
40 };
41 void *userdata;
42 unsigned *message_counter;
43 link_netlink_message_handler_t netlink_handler;
44 request_after_configure_handler_t after_configure;
45 request_on_free_handler_t on_free;
46 } Request;
47
48 Request *request_free(Request *req);
49 void request_drop(Request *req);
50
51 int link_queue_request(
52 Link *link,
53 RequestType type,
54 void *object,
55 bool consume_object,
56 unsigned *message_counter,
57 link_netlink_message_handler_t netlink_handler,
58 Request **ret);
59
60 int manager_process_requests(sd_event_source *s, void *userdata);