]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/networkd-manager.h
Merge pull request #7893 from poettering/parse-tweaks
[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"
05d0c2e3 28#include "sd-resolve.h"
634f0f98 29#include "udev.h"
f579559b 30
634f0f98 31#include "dhcp-identifier.h"
f579559b
TG
32#include "hashmap.h"
33#include "list.h"
34
fc2f9534
LP
35#include "networkd-address-pool.h"
36#include "networkd-link.h"
71d35b6b 37#include "networkd-network.h"
11bf3cce 38
634f0f98
ZJS
39extern const char* const network_dirs[];
40
f579559b 41struct Manager {
1c4baffc 42 sd_netlink *rtnl;
05d0c2e3
JT
43 /* lazy initialized */
44 sd_netlink *genl;
f579559b 45 sd_event *event;
05d0c2e3 46 sd_resolve *resolve;
9c0a72f9 47 sd_event_source *bus_retry_event_source;
1346b1f0 48 sd_bus *bus;
9c0a72f9 49 sd_bus_slot *prepare_for_sleep_slot;
d7afd945 50 sd_bus_slot *connected_slot;
f579559b
TG
51 struct udev *udev;
52 struct udev_monitor *udev_monitor;
53 sd_event_source *udev_event_source;
54
84de38c5
TG
55 bool enumerating:1;
56 bool dirty:1;
57
58 Set *dirty_links;
6a24f148 59
bbf7c048 60 char *state_file;
e331e246 61 LinkOperationalState operational_state;
bbf7c048 62
f579559b 63 Hashmap *links;
52433f6b 64 Hashmap *netdevs;
dbffab87 65 Hashmap *networks_by_name;
e133b289 66 Hashmap *dhcp6_prefixes;
f579559b 67 LIST_HEAD(Network, networks);
11bf3cce 68 LIST_HEAD(AddressPool, address_pools);
f579559b 69
f579559b 70 usec_t network_dirs_ts_usec;
413708d1 71
8341a5c3 72 DUID duid;
7901cea1
MP
73 char* dynamic_hostname;
74 char* dynamic_timezone;
bce67bbe
SS
75
76 Set *rules;
77 Set *rules_foreign;
78 Set *rules_saved;
f579559b
TG
79};
80
8341a5c3
ZJS
81static inline const DUID* link_duid(const Link *link) {
82 if (link->network->duid.type != _DUID_TYPE_INVALID)
83 return &link->network->duid;
84 else
85 return &link->manager->duid;
86}
87
e331e246
TG
88extern const sd_bus_vtable manager_vtable[];
89
b76d99d9 90int manager_new(Manager **ret, sd_event *event);
f579559b
TG
91void manager_free(Manager *m);
92
8f203c16 93int manager_connect_bus(Manager *m);
b76d99d9 94int manager_start(Manager *m);
a97dcc12 95
02b59d57
TG
96int manager_load_config(Manager *m);
97bool manager_should_reload(Manager *m);
98
505f8da7 99int manager_rtnl_enumerate_links(Manager *m);
45af44d4 100int manager_rtnl_enumerate_addresses(Manager *m);
1c8e710c 101int manager_rtnl_enumerate_routes(Manager *m);
bce67bbe 102int manager_rtnl_enumerate_rules(Manager *m);
f579559b 103
200a0868 104int manager_rtnl_process_address(sd_netlink *nl, sd_netlink_message *message, void *userdata);
1c8e710c 105int manager_rtnl_process_route(sd_netlink *nl, sd_netlink_message *message, void *userdata);
bce67bbe 106int manager_rtnl_process_rule(sd_netlink *nl, sd_netlink_message *message, void *userdata);
200a0868 107
e331e246 108int manager_send_changed(Manager *m, const char *property, ...) _sentinel_;
84de38c5 109void manager_dirty(Manager *m);
3bef724f 110
0dd25fb9 111int manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, union in_addr_union *found);
11bf3cce 112
4f5f911e
LP
113Link* manager_find_uplink(Manager *m, Link *exclude);
114
59eb33e0
MP
115int manager_set_hostname(Manager *m, const char *hostname);
116int manager_set_timezone(Manager *m, const char *timezone);
117
e133b289
PF
118Link *manager_dhcp6_prefix_get(Manager *m, struct in6_addr *addr);
119int manager_dhcp6_prefix_add(Manager *m, struct in6_addr *addr, Link *link);
120int manager_dhcp6_prefix_remove(Manager *m, struct in6_addr *addr);
121int manager_dhcp6_prefix_remove_all(Manager *m, Link *link);
122
f579559b
TG
123DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
124#define _cleanup_manager_free_ _cleanup_(manager_freep)