if (r < 0)
return r;
- r = sd_bus_call_async(link->manager->bus, m, set_hostname_handler, link, 0, NULL);
+ r = sd_bus_call_async(link->manager->bus, NULL, m, set_hostname_handler, link, 0);
if (r < 0)
log_error_link(link, "Could not set transient hostname: %s", strerror(-r));
link_save(link);
- if (!link->network->bridge && !link->network->bond &&
+ if (!link->network->bridge &&
+ !link->network->bond &&
+ !link->network->tunnel &&
hashmap_isempty(link->network->vlans) &&
hashmap_isempty(link->network->macvlans))
return link_enslaved(link);
link->enslaving ++;
}
+ if (link->network->tunnel) {
+ log_struct_link(LOG_DEBUG, link,
+ "MESSAGE=%s: enslaving by '%s'",
+ link->ifname, link->network->tunnel->name,
+ NETDEV(link->network->tunnel),
+ NULL);
+
+ r = netdev_enslave(link->network->tunnel, link, &enslave_handler);
+ if (r < 0) {
+ log_struct_link(LOG_WARNING, link,
+ "MESSAGE=%s: could not enslave by '%s': %s",
+ link->ifname, link->network->tunnel->name, strerror(-r),
+ NETDEV(link->network->tunnel),
+ NULL);
+ link_enter_failed(link);
+ return r;
+ }
+
+ link_ref(link);
+ link->enslaving ++;
+ }
+
HASHMAP_FOREACH(vlan, link->network->vlans, i) {
log_struct_link(LOG_DEBUG, link,
"MESSAGE=%s: enslaving by '%s'",
r = sd_rtnl_message_addr_get_ifindex(message, &ifindex);
if (r < 0 || ifindex <= 0) {
- log_warning("rtnl: received address message without valid ifindix, ignoring");
+ log_warning("rtnl: received address message without valid ifindex, ignoring");
return 0;
} else {
r = link_get(m, ifindex, &link);
if (r < 0 || !link) {
- log_warning("rtnl: received address for non-existing link, ignoring");
+ log_warning("rtnl: received address for a nonexistent link, ignoring");
return 0;
}
}