]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/networkd-manager.h
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / network / networkd-manager.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
0ef6f454
LP
2#pragma once
3
f579559b
TG
4/***
5 This file is part of systemd.
6
7 Copyright 2013 Tom Gundersen <teg@jklm.no>
8
9 systemd is free software; you can redistribute it and/or modify it
10 under the terms of the GNU Lesser General Public License as published by
11 the Free Software Foundation; either version 2.1 of the License, or
12 (at your option) any later version.
13
14 systemd is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public License
20 along with systemd; If not, see <http://www.gnu.org/licenses/>.
21***/
22
f579559b 23#include <arpa/inet.h>
f579559b 24
71d35b6b 25#include "sd-bus.h"
f579559b 26#include "sd-event.h"
1c4baffc 27#include "sd-netlink.h"
634f0f98 28#include "udev.h"
f579559b 29
634f0f98 30#include "dhcp-identifier.h"
f579559b
TG
31#include "hashmap.h"
32#include "list.h"
33
fc2f9534
LP
34#include "networkd-address-pool.h"
35#include "networkd-link.h"
71d35b6b 36#include "networkd-network.h"
11bf3cce 37
634f0f98
ZJS
38extern const char* const network_dirs[];
39
f579559b 40struct Manager {
1c4baffc 41 sd_netlink *rtnl;
f579559b 42 sd_event *event;
9c0a72f9 43 sd_event_source *bus_retry_event_source;
1346b1f0 44 sd_bus *bus;
9c0a72f9 45 sd_bus_slot *prepare_for_sleep_slot;
f579559b
TG
46 struct udev *udev;
47 struct udev_monitor *udev_monitor;
48 sd_event_source *udev_event_source;
49
84de38c5
TG
50 bool enumerating:1;
51 bool dirty:1;
52
53 Set *dirty_links;
6a24f148 54
bbf7c048 55 char *state_file;
e331e246 56 LinkOperationalState operational_state;
bbf7c048 57
f579559b 58 Hashmap *links;
52433f6b 59 Hashmap *netdevs;
dbffab87 60 Hashmap *networks_by_name;
f579559b 61 LIST_HEAD(Network, networks);
11bf3cce 62 LIST_HEAD(AddressPool, address_pools);
f579559b 63
f579559b 64 usec_t network_dirs_ts_usec;
413708d1 65
8341a5c3 66 DUID duid;
7901cea1
MP
67 char* dynamic_hostname;
68 char* dynamic_timezone;
bce67bbe
SS
69
70 Set *rules;
71 Set *rules_foreign;
72 Set *rules_saved;
f579559b
TG
73};
74
8341a5c3
ZJS
75static inline const DUID* link_duid(const Link *link) {
76 if (link->network->duid.type != _DUID_TYPE_INVALID)
77 return &link->network->duid;
78 else
79 return &link->manager->duid;
80}
81
e331e246
TG
82extern const sd_bus_vtable manager_vtable[];
83
b76d99d9 84int manager_new(Manager **ret, sd_event *event);
f579559b
TG
85void manager_free(Manager *m);
86
8f203c16 87int manager_connect_bus(Manager *m);
b76d99d9 88int manager_start(Manager *m);
a97dcc12 89
02b59d57
TG
90int manager_load_config(Manager *m);
91bool manager_should_reload(Manager *m);
92
505f8da7 93int manager_rtnl_enumerate_links(Manager *m);
45af44d4 94int manager_rtnl_enumerate_addresses(Manager *m);
1c8e710c 95int manager_rtnl_enumerate_routes(Manager *m);
bce67bbe 96int manager_rtnl_enumerate_rules(Manager *m);
f579559b 97
200a0868 98int manager_rtnl_process_address(sd_netlink *nl, sd_netlink_message *message, void *userdata);
1c8e710c 99int manager_rtnl_process_route(sd_netlink *nl, sd_netlink_message *message, void *userdata);
bce67bbe 100int manager_rtnl_process_rule(sd_netlink *nl, sd_netlink_message *message, void *userdata);
200a0868 101
e331e246 102int manager_send_changed(Manager *m, const char *property, ...) _sentinel_;
84de38c5 103void manager_dirty(Manager *m);
3bef724f 104
0dd25fb9 105int manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, union in_addr_union *found);
11bf3cce 106
4f5f911e
LP
107Link* manager_find_uplink(Manager *m, Link *exclude);
108
59eb33e0
MP
109int manager_set_hostname(Manager *m, const char *hostname);
110int manager_set_timezone(Manager *m, const char *timezone);
111
f579559b
TG
112DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
113#define _cleanup_manager_free_ _cleanup_(manager_freep)