diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-08-02 15:45:03 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-08-06 04:53:36 +0900 |
commit | 8cad358e4afbe62a293c906113dc31abbebd4a77 (patch) | |
tree | 9e3ccb0a5d7969e2aefca6a069989370af1865bd /src/libsystemd-network | |
parent | 3b75435db6f1f229ef05ca2cb11a6f0e313169b2 (diff) | |
download | systemd-8cad358e4afbe62a293c906113dc31abbebd4a77.tar.gz |
dhcp: make dhcp_identifier_set_duid() take struct hw_addr_data
Diffstat (limited to 'src/libsystemd-network')
-rw-r--r-- | src/libsystemd-network/dhcp-identifier.c | 46 | ||||
-rw-r--r-- | src/libsystemd-network/dhcp-identifier.h | 3 | ||||
-rw-r--r-- | src/libsystemd-network/sd-dhcp-client.c | 2 | ||||
-rw-r--r-- | src/libsystemd-network/sd-dhcp6-client.c | 4 |
4 files changed, 32 insertions, 23 deletions
diff --git a/src/libsystemd-network/dhcp-identifier.c b/src/libsystemd-network/dhcp-identifier.c index 21048e51c5..68f6a7cb3c 100644 --- a/src/libsystemd-network/dhcp-identifier.c +++ b/src/libsystemd-network/dhcp-identifier.c @@ -63,20 +63,26 @@ int dhcp_validate_duid_len(DUIDType duid_type, size_t duid_len, bool strict) { return 0; } -static int dhcp_identifier_set_duid_llt(const uint8_t *addr, size_t addr_len, uint16_t arp_type, usec_t t, struct duid *ret_duid, size_t *ret_len) { +static int dhcp_identifier_set_duid_llt( + const struct hw_addr_data *hw_addr, + uint16_t arp_type, + usec_t t, + struct duid *ret_duid, + size_t *ret_len) { + uint16_t time_from_2000y; - assert(addr); + assert(hw_addr); assert(ret_duid); assert(ret_len); - if (addr_len == 0) + if (hw_addr->length == 0) return -EOPNOTSUPP; if (arp_type == ARPHRD_ETHER) - assert_return(addr_len == ETH_ALEN, -EINVAL); + assert_return(hw_addr->length == ETH_ALEN, -EINVAL); else if (arp_type == ARPHRD_INFINIBAND) - assert_return(addr_len == INFINIBAND_ALEN, -EINVAL); + assert_return(hw_addr->length == INFINIBAND_ALEN, -EINVAL); else return -EOPNOTSUPP; @@ -88,33 +94,38 @@ static int dhcp_identifier_set_duid_llt(const uint8_t *addr, size_t addr_len, ui unaligned_write_be16(&ret_duid->type, DUID_TYPE_LLT); unaligned_write_be16(&ret_duid->llt.htype, arp_type); unaligned_write_be32(&ret_duid->llt.time, time_from_2000y); - memcpy(ret_duid->llt.haddr, addr, addr_len); + memcpy(ret_duid->llt.haddr, hw_addr->bytes, hw_addr->length); - *ret_len = offsetof(struct duid, llt.haddr) + addr_len; + *ret_len = offsetof(struct duid, llt.haddr) + hw_addr->length; return 0; } -static int dhcp_identifier_set_duid_ll(const uint8_t *addr, size_t addr_len, uint16_t arp_type, struct duid *ret_duid, size_t *ret_len) { - assert(addr); +static int dhcp_identifier_set_duid_ll( + const struct hw_addr_data *hw_addr, + uint16_t arp_type, + struct duid *ret_duid, + size_t *ret_len) { + + assert(hw_addr); assert(ret_duid); assert(ret_len); - if (addr_len == 0) + if (hw_addr->length == 0) return -EOPNOTSUPP; if (arp_type == ARPHRD_ETHER) - assert_return(addr_len == ETH_ALEN, -EINVAL); + assert_return(hw_addr->length == ETH_ALEN, -EINVAL); else if (arp_type == ARPHRD_INFINIBAND) - assert_return(addr_len == INFINIBAND_ALEN, -EINVAL); + assert_return(hw_addr->length == INFINIBAND_ALEN, -EINVAL); else return -EOPNOTSUPP; unaligned_write_be16(&ret_duid->type, DUID_TYPE_LL); unaligned_write_be16(&ret_duid->ll.htype, arp_type); - memcpy(ret_duid->ll.haddr, addr, addr_len); + memcpy(ret_duid->ll.haddr, hw_addr->bytes, hw_addr->length); - *ret_len = offsetof(struct duid, ll.haddr) + addr_len; + *ret_len = offsetof(struct duid, ll.haddr) + hw_addr->length; return 0; } @@ -174,8 +185,7 @@ static int dhcp_identifier_set_duid_uuid(struct duid *ret_duid, size_t *ret_len) int dhcp_identifier_set_duid( DUIDType duid_type, - const uint8_t *addr, - size_t addr_len, + const struct hw_addr_data *hw_addr, uint16_t arp_type, usec_t llt_time, bool test_mode, @@ -184,11 +194,11 @@ int dhcp_identifier_set_duid( switch (duid_type) { case DUID_TYPE_LLT: - return dhcp_identifier_set_duid_llt(addr, addr_len, arp_type, llt_time, ret_duid, ret_len); + return dhcp_identifier_set_duid_llt(hw_addr, arp_type, llt_time, ret_duid, ret_len); case DUID_TYPE_EN: return dhcp_identifier_set_duid_en(test_mode, ret_duid, ret_len); case DUID_TYPE_LL: - return dhcp_identifier_set_duid_ll(addr, addr_len, arp_type, ret_duid, ret_len); + return dhcp_identifier_set_duid_ll(hw_addr, arp_type, ret_duid, ret_len); case DUID_TYPE_UUID: return dhcp_identifier_set_duid_uuid(ret_duid, ret_len); default: diff --git a/src/libsystemd-network/dhcp-identifier.h b/src/libsystemd-network/dhcp-identifier.h index 91c2a3f27a..8acb8c3210 100644 --- a/src/libsystemd-network/dhcp-identifier.h +++ b/src/libsystemd-network/dhcp-identifier.h @@ -59,8 +59,7 @@ int dhcp_validate_duid_len(DUIDType duid_type, size_t duid_len, bool strict); int dhcp_identifier_set_duid_en(bool test_mode, struct duid *ret_duid, size_t *ret_len); int dhcp_identifier_set_duid( DUIDType duid_type, - const uint8_t *addr, - size_t addr_len, + const struct hw_addr_data *hw_addr, uint16_t arp_type, usec_t llt_time, bool test_mode, diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index 3bae14e317..f134615965 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -434,7 +434,7 @@ static int dhcp_client_set_iaid_duid_internal( len = sizeof(client->client_id.ns.duid.type) + duid_len; } else { - r = dhcp_identifier_set_duid(duid_type, client->hw_addr.bytes, client->hw_addr.length, + r = dhcp_identifier_set_duid(duid_type, &client->hw_addr, client->arp_type, llt_time, client->test_mode, &client->client_id.ns.duid, &len); if (r == -EOPNOTSUPP) diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index 6203155f0f..273dd35e04 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -215,8 +215,8 @@ static int dhcp6_client_set_duid_internal( client->duid_len = sizeof(client->duid.type) + duid_len; } else { - r = dhcp_identifier_set_duid(duid_type, client->hw_addr.bytes, client->hw_addr.length, - client->arp_type, llt_time, client->test_mode, &client->duid, &client->duid_len); + r = dhcp_identifier_set_duid(duid_type, &client->hw_addr, client->arp_type, llt_time, + client->test_mode, &client->duid, &client->duid_len); if (r == -EOPNOTSUPP) return log_dhcp6_client_errno(client, r, "Failed to set %s. MAC address is not set or " |