X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-dhcp4.c;h=38321905e6e6094cdb82117bf5ae139edab77d01;hb=3e43b2cd97bd82efe6a09e8b9b2e6b5f33f578a0;hp=0a8c8ba8e452b862ab6e3144ee406c8971c00f41;hpb=79008bddf679a5e0900369950eb346c9fa687107;p=elogind.git diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 0a8c8ba8e..38321905e 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -296,11 +296,8 @@ static int dhcp4_address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, log_link_error(link, "could not set DHCPv4 address: %s", strerror(-r)); link_enter_failed(link); - } else if (r >= 0) { - /* calling handler directly so take a ref */ - link_ref(link); - link_get_address_handler(rtnl, m, link); - } + } else if (r >= 0) + link_rtnl_process_address(rtnl, m, link->manager); link_set_dhcp_routes(link); @@ -442,7 +439,7 @@ static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) { } if (r >= 0) - log_link_struct(LOG_INFO, link, + log_link_struct(link, LOG_INFO, "MESSAGE=%-*s: DHCPv4 address %u.%u.%u.%u/%u via %u.%u.%u.%u", IFNAMSIZ, link->ifname, @@ -457,7 +454,7 @@ static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) { ADDRESS_FMT_VAL(gateway), NULL); else - log_link_struct(LOG_INFO, link, + log_link_struct(link, LOG_INFO, "MESSAGE=%-*s: DHCPv4 address %u.%u.%u.%u/%u", IFNAMSIZ, link->ifname, @@ -589,7 +586,7 @@ int dhcp4_configure(Link *link) { assert(link); assert(link->network); - assert(IN_SET(link->network->dhcp, DHCP_SUPPORT_BOTH, DHCP_SUPPORT_V4)); + assert(IN_SET(link->network->dhcp, ADDRESS_FAMILY_YES, ADDRESS_FAMILY_IPV4)); r = sd_dhcp_client_new(&link->dhcp_client); if (r < 0) @@ -664,5 +661,21 @@ int dhcp4_configure(Link *link) { return r; } + switch (link->network->dhcp_client_identifier) { + case DHCP_CLIENT_ID_DUID: + /* Library defaults to this. */ + break; + case DHCP_CLIENT_ID_MAC: + r = sd_dhcp_client_set_client_id(link->dhcp_client, + ARPHRD_ETHER, + (const uint8_t *) &link->mac, + sizeof (link->mac)); + if (r < 0) + return r; + break; + default: + assert_not_reached("Unknown client identifier type."); + } + return 0; }