From: Yu Watanabe Date: Fri, 27 Nov 2020 00:08:01 +0000 (+0900) Subject: Merge pull request #17474 from yuwata/network-drop-link-deserialization-logic X-Git-Tag: v248-rc1~628 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dca63b5b46f36989f69b154d7af3b4da433ae59e;p=thirdparty%2Fsystemd.git Merge pull request #17474 from yuwata/network-drop-link-deserialization-logic network: drop link deserialization logic --- dca63b5b46f36989f69b154d7af3b4da433ae59e diff --cc src/network/networkd-dhcp4.c index 3983b335277,c20e2e2b0a1..a521822a50e --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@@ -1268,27 -1217,17 +1217,27 @@@ static int dhcp4_set_client_identifier( duid->raw_data_len > 0 ? duid->raw_data : NULL, duid->raw_data_len); if (r < 0) - return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set DUID: %m"); + return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set DUID: %m"); break; } - case DHCP_CLIENT_ID_MAC: + case DHCP_CLIENT_ID_MAC: { + const uint8_t *hw_addr = link->hw_addr.addr.bytes; + size_t hw_addr_len = link->hw_addr.length; + + if (link->iftype == ARPHRD_INFINIBAND && hw_addr_len == INFINIBAND_ALEN) { + /* set_client_id expects only last 8 bytes of an IB address */ + hw_addr += INFINIBAND_ALEN - 8; + hw_addr_len -= INFINIBAND_ALEN - 8; + } + r = sd_dhcp_client_set_client_id(link->dhcp_client, - ARPHRD_ETHER, - (const uint8_t *) &link->mac, - sizeof(link->mac)); + link->iftype, + hw_addr, + hw_addr_len); if (r < 0) - return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set client ID: %m"); + return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set client ID: %m"); break; + } default: assert_not_reached("Unknown client identifier type."); } @@@ -1326,20 -1269,21 +1279,22 @@@ int dhcp4_configure(Link *link) if (!link_dhcp4_enabled(link)) return 0; - r = dhcp4_set_promote_secondaries(link); - if (r < 0) - return r; + if (!link->dhcp_client) { + r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize); + if (r < 0) + return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to allocate DHCP4 client: %m"); - r = dhcp4_init(link); - if (r < 0) - return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to initialize DHCP4 client: %m"); + r = sd_dhcp_client_attach_event(link->dhcp_client, link->manager->event, 0); + if (r < 0) + return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to attach event to DHCP4 client: %m"); + } r = sd_dhcp_client_set_mac(link->dhcp_client, - (const uint8_t *) &link->mac, - sizeof (link->mac), ARPHRD_ETHER); + link->hw_addr.addr.bytes, + link->bcast_addr.length > 0 ? link->bcast_addr.addr.bytes : NULL, + link->hw_addr.length, link->iftype); if (r < 0) - return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set MAC address: %m"); + return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set MAC address: %m"); r = sd_dhcp_client_set_ifindex(link->dhcp_client, link->ifindex); if (r < 0)