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