]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/networkd-manager.h
network/nexthop: cache requested nexthop IDs
[thirdparty/systemd.git] / src / network / networkd-manager.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 #include "sd-bus.h"
5 #include "sd-device.h"
6 #include "sd-event.h"
7 #include "sd-id128.h"
8 #include "sd-netlink.h"
9 #include "sd-resolve.h"
10
11 #include "dhcp-identifier.h"
12 #include "firewall-util.h"
13 #include "hashmap.h"
14 #include "networkd-link.h"
15 #include "networkd-network.h"
16 #include "networkd-sysctl.h"
17 #include "ordered-set.h"
18 #include "set.h"
19 #include "time-util.h"
20
21 struct Manager {
22 sd_netlink *rtnl;
23 /* lazy initialized */
24 sd_netlink *genl;
25 sd_event *event;
26 sd_resolve *resolve;
27 sd_bus *bus;
28 sd_device_monitor *device_monitor;
29 Hashmap *polkit_registry;
30 int ethtool_fd;
31
32 KeepConfiguration keep_configuration;
33 IPv6PrivacyExtensions ipv6_privacy_extensions;
34
35 bool test_mode;
36 bool enumerating;
37 bool dirty;
38 bool restarting;
39 bool manage_foreign_routes;
40 bool manage_foreign_rules;
41 bool manage_foreign_nexthops;
42
43 Set *dirty_links;
44 Set *new_wlan_ifindices;
45
46 char *state_file;
47 LinkOperationalState operational_state;
48 LinkCarrierState carrier_state;
49 LinkAddressState address_state;
50 LinkAddressState ipv4_address_state;
51 LinkAddressState ipv6_address_state;
52 LinkOnlineState online_state;
53
54 Hashmap *links_by_index;
55 Hashmap *links_by_name;
56 Hashmap *links_by_hw_addr;
57 Hashmap *links_by_dhcp_pd_subnet_prefix;
58 Hashmap *netdevs;
59 OrderedHashmap *networks;
60 OrderedSet *address_pools;
61 Set *dhcp_pd_subnet_ids;
62
63 DUID dhcp_duid;
64 DUID dhcp6_duid;
65 DUID duid_product_uuid;
66 bool has_product_uuid;
67 bool product_uuid_requested;
68
69 char* dynamic_hostname;
70 char* dynamic_timezone;
71
72 Set *rules;
73
74 /* Manage nexthops by id. */
75 Hashmap *nexthops_by_id;
76 Set *nexthop_ids; /* requested IDs in .network files */
77
78 /* Manager stores routes without RTA_OIF attribute. */
79 unsigned route_remove_messages;
80 Set *routes;
81
82 /* Route table name */
83 Hashmap *route_table_numbers_by_name;
84 Hashmap *route_table_names_by_number;
85
86 /* Wiphy */
87 Hashmap *wiphy_by_index;
88 Hashmap *wiphy_by_name;
89
90 /* For link speed meter */
91 bool use_speed_meter;
92 sd_event_source *speed_meter_event_source;
93 usec_t speed_meter_interval_usec;
94 usec_t speed_meter_usec_new;
95 usec_t speed_meter_usec_old;
96
97 bool bridge_mdb_on_master_not_supported;
98
99 FirewallContext *fw_ctx;
100
101 OrderedSet *request_queue;
102
103 Hashmap *tuntap_fds_by_name;
104 };
105
106 int manager_new(Manager **ret, bool test_mode);
107 Manager* manager_free(Manager *m);
108
109 int manager_setup(Manager *m);
110 int manager_start(Manager *m);
111
112 int manager_load_config(Manager *m);
113
114 int manager_enumerate_internal(
115 Manager *m,
116 sd_netlink *nl,
117 sd_netlink_message *req,
118 int (*process)(sd_netlink *, sd_netlink_message *, Manager *));
119 int manager_enumerate(Manager *m);
120
121 int manager_set_hostname(Manager *m, const char *hostname);
122 int manager_set_timezone(Manager *m, const char *timezone);
123
124 int manager_reload(Manager *m);
125
126 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);