1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 Copyright © 2013 Tom Gundersen <teg@jklm.no>
12 #include "sd-netlink.h"
13 #include "sd-resolve.h"
16 #include "dhcp-identifier.h"
20 #include "networkd-address-pool.h"
21 #include "networkd-link.h"
22 #include "networkd-network.h"
24 extern const char* const network_dirs
[];
28 /* lazy initialized */
33 sd_bus_slot
*prepare_for_sleep_slot
;
34 sd_bus_slot
*connected_slot
;
36 struct udev_monitor
*udev_monitor
;
37 sd_event_source
*udev_event_source
;
45 LinkOperationalState operational_state
;
49 Hashmap
*networks_by_name
;
50 Hashmap
*dhcp6_prefixes
;
51 LIST_HEAD(Network
, networks
);
52 LIST_HEAD(AddressPool
, address_pools
);
54 usec_t network_dirs_ts_usec
;
57 char* dynamic_hostname
;
58 char* dynamic_timezone
;
65 static inline const DUID
* link_duid(const Link
*link
) {
66 if (link
->network
->duid
.type
!= _DUID_TYPE_INVALID
)
67 return &link
->network
->duid
;
69 return &link
->manager
->duid
;
72 extern const sd_bus_vtable manager_vtable
[];
74 int manager_new(Manager
**ret
, sd_event
*event
);
75 void manager_free(Manager
*m
);
77 int manager_connect_bus(Manager
*m
);
78 int manager_start(Manager
*m
);
80 int manager_load_config(Manager
*m
);
81 bool manager_should_reload(Manager
*m
);
83 int manager_rtnl_enumerate_links(Manager
*m
);
84 int manager_rtnl_enumerate_addresses(Manager
*m
);
85 int manager_rtnl_enumerate_routes(Manager
*m
);
86 int manager_rtnl_enumerate_rules(Manager
*m
);
88 int manager_rtnl_process_address(sd_netlink
*nl
, sd_netlink_message
*message
, void *userdata
);
89 int manager_rtnl_process_route(sd_netlink
*nl
, sd_netlink_message
*message
, void *userdata
);
90 int manager_rtnl_process_rule(sd_netlink
*nl
, sd_netlink_message
*message
, void *userdata
);
92 int manager_send_changed(Manager
*m
, const char *property
, ...) _sentinel_
;
93 void manager_dirty(Manager
*m
);
95 int manager_address_pool_acquire(Manager
*m
, int family
, unsigned prefixlen
, union in_addr_union
*found
);
97 Link
* manager_find_uplink(Manager
*m
, Link
*exclude
);
99 int manager_set_hostname(Manager
*m
, const char *hostname
);
100 int manager_set_timezone(Manager
*m
, const char *timezone
);
102 Link
*manager_dhcp6_prefix_get(Manager
*m
, struct in6_addr
*addr
);
103 int manager_dhcp6_prefix_add(Manager
*m
, struct in6_addr
*addr
, Link
*link
);
104 int manager_dhcp6_prefix_remove(Manager
*m
, struct in6_addr
*addr
);
105 int manager_dhcp6_prefix_remove_all(Manager
*m
, Link
*link
);
107 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager
*, manager_free
);