}
int link_add(Manager *m, struct udev_device *device, Link **ret) {
- Link *link;
+ Link *link = NULL;
Network *network;
int r;
r = sd_bus_message_new_method_call(
bus,
+ &m,
"org.freedesktop.hostname1",
"/org/freedesktop/hostname1",
"org.freedesktop.hostname1",
- "SetHostname",
- &m);
+ "SetHostname");
if (r < 0)
return r;
log_debug_link(link, "setting MTU: %" PRIu32, mtu);
- r = sd_rtnl_message_new_link(link->manager->rtnl, RTM_SETLINK,
- link->ifindex, &req);
+ r = sd_rtnl_message_new_link(link->manager->rtnl, &req,
+ RTM_SETLINK, link->ifindex);
if (r < 0) {
log_error_link(link, "Could not allocate RTM_SETLINK message");
return r;
assert(link);
assert(link->dhcp_lease);
+ log_warning_link(link, "DHCP lease lost");
+
r = address_new_dynamic(&address);
if (r >= 0) {
sd_dhcp_lease_get_address(link->dhcp_lease, &addr);
}
if (link->network->dhcp_hostname) {
- r = set_hostname(link->manager->bus, "");
- if (r < 0)
- log_error("Failed to reset transient hostname");
+ const char *hostname = NULL;
+
+ r = sd_dhcp_lease_get_hostname(link->dhcp_lease, &hostname);
+ if (r >= 0 && hostname) {
+ r = set_hostname(link->manager->bus, "");
+ if (r < 0)
+ log_error("Failed to reset transient hostname");
+ }
}
link->dhcp_lease = sd_dhcp_lease_unref(link->dhcp_lease);
log_debug_link(link, "bringing link up");
- r = sd_rtnl_message_new_link(link->manager->rtnl, RTM_SETLINK,
- link->ifindex, &req);
+ r = sd_rtnl_message_new_link(link->manager->rtnl, &req,
+ RTM_SETLINK, link->ifindex);
if (r < 0) {
log_error_link(link, "Could not allocate RTM_SETLINK message");
return r;
log_debug_link(link, "requesting link status");
- r = sd_rtnl_message_new_link(link->manager->rtnl, RTM_GETLINK,
- link->ifindex, &req);
+ r = sd_rtnl_message_new_link(link->manager->rtnl, &req,
+ RTM_GETLINK, link->ifindex);
if (r < 0) {
log_error_link(link, "Could not allocate RTM_GETLINK message");
return r;