]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/networkd-manager.h
network: add mechanism to configure default UseDomains= setting, update man page...
[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-duid-internal.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 #include "varlink.h"
21
22 struct Manager {
23 sd_netlink *rtnl;
24 /* lazy initialized */
25 sd_netlink *genl;
26 sd_event *event;
27 sd_resolve *resolve;
28 sd_bus *bus;
29 VarlinkServer *varlink_server;
30 sd_device_monitor *device_monitor;
31 Hashmap *polkit_registry;
32 int ethtool_fd;
33 int persistent_storage_fd;
34
35 KeepConfiguration keep_configuration;
36 IPv6PrivacyExtensions ipv6_privacy_extensions;
37
38 bool test_mode;
39 bool enumerating;
40 bool dirty;
41 bool restarting;
42 bool manage_foreign_routes;
43 bool manage_foreign_rules;
44 bool manage_foreign_nexthops;
45 bool dhcp_server_persist_leases;
46
47 Set *dirty_links;
48 Set *new_wlan_ifindices;
49
50 char *state_file;
51 LinkOperationalState operational_state;
52 LinkCarrierState carrier_state;
53 LinkAddressState address_state;
54 LinkAddressState ipv4_address_state;
55 LinkAddressState ipv6_address_state;
56 LinkOnlineState online_state;
57
58 Hashmap *links_by_index;
59 Hashmap *links_by_name;
60 Hashmap *links_by_hw_addr;
61 Hashmap *links_by_dhcp_pd_subnet_prefix;
62 Hashmap *netdevs;
63 OrderedHashmap *networks;
64 OrderedSet *address_pools;
65 Set *dhcp_pd_subnet_ids;
66
67 DHCPUseDomains dhcp_use_domains;
68 DHCPUseDomains dhcp6_use_domains;
69
70 DUID dhcp_duid;
71 DUID dhcp6_duid;
72 DUID duid_product_uuid;
73 bool has_product_uuid;
74 bool product_uuid_requested;
75
76 char* dynamic_hostname;
77 char* dynamic_timezone;
78
79 Set *rules;
80
81 /* Manage nexthops by id. */
82 Hashmap *nexthops_by_id;
83 Set *nexthop_ids; /* requested IDs in .network files */
84
85 /* Manager stores routes without RTA_OIF attribute. */
86 unsigned route_remove_messages;
87 Set *routes;
88
89 /* Route table name */
90 Hashmap *route_table_numbers_by_name;
91 Hashmap *route_table_names_by_number;
92
93 /* Wiphy */
94 Hashmap *wiphy_by_index;
95 Hashmap *wiphy_by_name;
96
97 /* For link speed meter */
98 bool use_speed_meter;
99 sd_event_source *speed_meter_event_source;
100 usec_t speed_meter_interval_usec;
101 usec_t speed_meter_usec_new;
102 usec_t speed_meter_usec_old;
103
104 bool bridge_mdb_on_master_not_supported;
105
106 FirewallContext *fw_ctx;
107
108 bool request_queued;
109 OrderedSet *request_queue;
110 OrderedSet *remove_request_queue;
111
112 Hashmap *tuntap_fds_by_name;
113
114 unsigned reloading;
115
116 /* sysctl */
117 int ip_forwarding[2];
118 };
119
120 int manager_new(Manager **ret, bool test_mode);
121 Manager* manager_free(Manager *m);
122
123 int manager_setup(Manager *m);
124 int manager_start(Manager *m);
125
126 int manager_load_config(Manager *m);
127
128 int manager_enumerate_internal(
129 Manager *m,
130 sd_netlink *nl,
131 sd_netlink_message *req,
132 int (*process)(sd_netlink *, sd_netlink_message *, Manager *));
133 int manager_enumerate(Manager *m);
134
135 int manager_set_hostname(Manager *m, const char *hostname);
136 int manager_set_timezone(Manager *m, const char *timezone);
137
138 int manager_reload(Manager *m, sd_bus_message *message);
139
140 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);