#include "udev-util.h"
#include "rtnl-util.h"
#include "mkdir.h"
+#include "virt.h"
const char* const network_dirs[] = {
"/etc/systemd/network",
if (!m->udev)
return -ENOMEM;
- m->udev_monitor = udev_monitor_new_from_netlink(m->udev, "udev");
- if (!m->udev_monitor)
- return -ENOMEM;
+ /* udev does not initialize devices inside containers,
+ * so we rely on them being already initialized before
+ * entering the container */
+ if (detect_container(NULL) > 0) {
+ m->udev_monitor = udev_monitor_new_from_netlink(m->udev, "kernel");
+ if (!m->udev_monitor)
+ return -ENOMEM;
+ } else {
+ m->udev_monitor = udev_monitor_new_from_netlink(m->udev, "udev");
+ if (!m->udev_monitor)
+ return -ENOMEM;
+ }
m->links = hashmap_new(uint64_hash_func, uint64_compare_func);
if (!m->links)
void manager_free(Manager *m) {
Network *network;
- Netdev *netdev;
+ NetDev *netdev;
Link *link;
+ if (!m)
+ return;
+
udev_monitor_unref(m->udev_monitor);
udev_unref(m->udev);
sd_bus_unref(m->bus);
if (r < 0)
return r;
- r = udev_enumerate_add_match_is_initialized(e);
- if (r < 0)
- return r;
+ /* udev does not initialize devices inside containers,
+ * so we rely on them being already initialized before
+ * entering the container */
+ if (detect_container(NULL) <= 0) {
+ r = udev_enumerate_add_match_is_initialized(e);
+ if (r < 0)
+ return r;
+ }
r = udev_enumerate_scan_devices(e);
if (r < 0)
if (r < 0)
log_debug("received RTM_NEWLINK message without valid IFLA_IFNAME");
else {
- Netdev *netdev;
+ NetDev *netdev;
r = netdev_get(m, name, &netdev);
if (r >= 0) {
"# static file or a different symlink.\n\n", f);
HASHMAP_FOREACH(link, m->links, i) {
- if (link->dhcp) {
+ if (link->dhcp_lease) {
struct in_addr *nameservers;
size_t nameservers_size;
if (link->network->dhcp_dns) {
- r = sd_dhcp_client_get_dns(link->dhcp, &nameservers, &nameservers_size);
+ r = sd_dhcp_lease_get_dns(link->dhcp_lease, &nameservers, &nameservers_size);
if (r >= 0) {
unsigned j;
}
if (link->network->dhcp_domainname && !domainname) {
- r = sd_dhcp_client_get_domainname(link->dhcp, &domainname);
+ r = sd_dhcp_lease_get_domainname(link->dhcp_lease, &domainname);
if (r >= 0)
fprintf(f, "domain %s\n", domainname);
}