mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-08 14:48:10 +02:00
dhcp: move nm_utils_dhcp_client_id_mac() to "nm-core-utils.c"
We will need it outside of "src/devices/nm-device.c".
This commit is contained in:
parent
3bce451c60
commit
2ef9a089eb
3 changed files with 86 additions and 53 deletions
|
|
@ -7457,53 +7457,6 @@ get_dhcp_timeout (NMDevice *self, int addr_family)
|
||||||
return timeout ?: NM_DHCP_TIMEOUT_DEFAULT;
|
return timeout ?: NM_DHCP_TIMEOUT_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_ASSERT_arp_type (guint16 arp_type,
|
|
||||||
const guint8 *hwaddr,
|
|
||||||
gsize hwaddr_len)
|
|
||||||
{
|
|
||||||
/* we actually only support ethernet and infiniband below. Assert that
|
|
||||||
* the arp-type and the address length correspond. */
|
|
||||||
nm_assert (NM_IN_SET (arp_type, ARPHRD_ETHER, ARPHRD_INFINIBAND));
|
|
||||||
nm_assert (arp_type <= 255);
|
|
||||||
nm_assert (hwaddr_len > 0);
|
|
||||||
nm_assert (arp_type != ARPHRD_ETHER || hwaddr_len == ETH_ALEN);
|
|
||||||
nm_assert (arp_type != ARPHRD_INFINIBAND || hwaddr_len == INFINIBAND_ALEN);
|
|
||||||
nm_assert (hwaddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_hwaddr_get_relevant_part (guint16 arp_type,
|
|
||||||
const guint8 **hwaddr,
|
|
||||||
gsize *hwaddr_len)
|
|
||||||
{
|
|
||||||
nm_assert (hwaddr);
|
|
||||||
nm_assert (hwaddr_len);
|
|
||||||
_ASSERT_arp_type (arp_type, *hwaddr, *hwaddr_len);
|
|
||||||
|
|
||||||
/* for infiniband, we only consider the last 8 bytes. */
|
|
||||||
if (arp_type == ARPHRD_INFINIBAND) {
|
|
||||||
*hwaddr += (INFINIBAND_ALEN - 8);
|
|
||||||
*hwaddr_len = 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GBytes *
|
|
||||||
dhcp4_get_client_id_mac (guint16 arp_type,
|
|
||||||
const guint8 *hwaddr,
|
|
||||||
gsize hwaddr_len)
|
|
||||||
{
|
|
||||||
guint8 *client_id_buf;
|
|
||||||
const guint8 hwaddr_type = arp_type;
|
|
||||||
|
|
||||||
_hwaddr_get_relevant_part (arp_type, &hwaddr, &hwaddr_len);
|
|
||||||
|
|
||||||
client_id_buf = g_malloc (hwaddr_len + 1);
|
|
||||||
client_id_buf[0] = hwaddr_type;
|
|
||||||
memcpy (&client_id_buf[1], hwaddr, hwaddr_len);
|
|
||||||
return g_bytes_new_take (client_id_buf, hwaddr_len + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GBytes *
|
static GBytes *
|
||||||
dhcp4_get_client_id (NMDevice *self,
|
dhcp4_get_client_id (NMDevice *self,
|
||||||
NMConnection *connection,
|
NMConnection *connection,
|
||||||
|
|
@ -7553,7 +7506,7 @@ dhcp4_get_client_id (NMDevice *self,
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = dhcp4_get_client_id_mac ((guint16) arp_type, hwaddr_bin, hwaddr_len);
|
result = nm_utils_dhcp_client_id_mac (arp_type, hwaddr_bin, hwaddr_len);
|
||||||
goto out_good;
|
goto out_good;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -7575,7 +7528,7 @@ dhcp4_get_client_id (NMDevice *self,
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = dhcp4_get_client_id_mac ((guint16) arp_type, hwaddr_bin_buf, hwaddr_len);
|
result = nm_utils_dhcp_client_id_mac (arp_type, hwaddr_bin_buf, hwaddr_len);
|
||||||
goto out_good;
|
goto out_good;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -8230,7 +8183,7 @@ dhcp6_prefix_delegated (NMDhcpClient *client,
|
||||||
#define EPOCH_DATETIME_200001010000 946684800
|
#define EPOCH_DATETIME_200001010000 946684800
|
||||||
|
|
||||||
static GBytes *
|
static GBytes *
|
||||||
generate_duid_llt (guint16 arp_type,
|
generate_duid_llt (int arp_type,
|
||||||
const guint8 *hwaddr,
|
const guint8 *hwaddr,
|
||||||
gsize hwaddr_len,
|
gsize hwaddr_len,
|
||||||
gint64 time)
|
gint64 time)
|
||||||
|
|
@ -8240,7 +8193,8 @@ generate_duid_llt (guint16 arp_type,
|
||||||
const guint16 hw_type = htons (arp_type);
|
const guint16 hw_type = htons (arp_type);
|
||||||
const guint32 duid_time = htonl (NM_MAX (0, time - EPOCH_DATETIME_200001010000));
|
const guint32 duid_time = htonl (NM_MAX (0, time - EPOCH_DATETIME_200001010000));
|
||||||
|
|
||||||
_hwaddr_get_relevant_part (arp_type, &hwaddr, &hwaddr_len);
|
if (!nm_utils_arp_type_get_hwaddr_relevant_part (arp_type, &hwaddr, &hwaddr_len))
|
||||||
|
nm_assert_not_reached ();
|
||||||
|
|
||||||
arr = g_new (guint8, 2 + 2 + 4 + hwaddr_len);
|
arr = g_new (guint8, 2 + 2 + 4 + hwaddr_len);
|
||||||
|
|
||||||
|
|
@ -8253,7 +8207,7 @@ generate_duid_llt (guint16 arp_type,
|
||||||
}
|
}
|
||||||
|
|
||||||
static GBytes *
|
static GBytes *
|
||||||
generate_duid_ll (guint16 arp_type,
|
generate_duid_ll (int arp_type,
|
||||||
const guint8 *hwaddr,
|
const guint8 *hwaddr,
|
||||||
gsize hwaddr_len)
|
gsize hwaddr_len)
|
||||||
{
|
{
|
||||||
|
|
@ -8261,7 +8215,8 @@ generate_duid_ll (guint16 arp_type,
|
||||||
const guint16 duid_type = htons (3);
|
const guint16 duid_type = htons (3);
|
||||||
const guint16 hw_type = htons (arp_type);
|
const guint16 hw_type = htons (arp_type);
|
||||||
|
|
||||||
_hwaddr_get_relevant_part (arp_type, &hwaddr, &hwaddr_len);
|
if (!nm_utils_arp_type_get_hwaddr_relevant_part (arp_type, &hwaddr, &hwaddr_len))
|
||||||
|
nm_assert_not_reached ();
|
||||||
|
|
||||||
arr = g_new (guint8, 2 + 2 + hwaddr_len);
|
arr = g_new (guint8, 2 + 2 + hwaddr_len);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2867,6 +2867,51 @@ nm_utils_arp_type_detect_from_hwaddrlen (gsize hwaddr_len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
nm_utils_arp_type_validate_hwaddr (int arp_type,
|
||||||
|
const guint8 *hwaddr,
|
||||||
|
gsize hwaddr_len)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!hwaddr)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (arp_type == ARPHRD_ETHER) {
|
||||||
|
G_STATIC_ASSERT (ARPHRD_ETHER >= 0 && ARPHRD_ETHER <= 0xFF);
|
||||||
|
if (hwaddr_len != ETH_ALEN)
|
||||||
|
return FALSE;
|
||||||
|
} else if (arp_type == ARPHRD_INFINIBAND) {
|
||||||
|
G_STATIC_ASSERT (ARPHRD_INFINIBAND >= 0 && ARPHRD_INFINIBAND <= 0xFF);
|
||||||
|
if (hwaddr_len != INFINIBAND_ALEN)
|
||||||
|
return FALSE;
|
||||||
|
} else
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
nm_assert (arp_type == nm_utils_arp_type_detect_from_hwaddrlen (hwaddr_len));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
nm_utils_arp_type_get_hwaddr_relevant_part (int arp_type,
|
||||||
|
const guint8 **hwaddr,
|
||||||
|
gsize *hwaddr_len)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail ( hwaddr
|
||||||
|
&& hwaddr_len
|
||||||
|
&& nm_utils_arp_type_validate_hwaddr (arp_type, *hwaddr, *hwaddr_len),
|
||||||
|
FALSE);
|
||||||
|
|
||||||
|
/* for infiniband, we only consider the last 8 bytes. */
|
||||||
|
if (arp_type == ARPHRD_INFINIBAND) {
|
||||||
|
*hwaddr += (INFINIBAND_ALEN - 8);
|
||||||
|
*hwaddr_len = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
/* Returns the "u" (universal/local) bit value for a Modified EUI-64 */
|
/* Returns the "u" (universal/local) bit value for a Modified EUI-64 */
|
||||||
static gboolean
|
static gboolean
|
||||||
get_gre_eui64_u_bit (guint32 addr)
|
get_gre_eui64_u_bit (guint32 addr)
|
||||||
|
|
@ -3514,6 +3559,23 @@ nm_utils_hw_addr_gen_stable_eth (NMUtilsStableType stable_type,
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
GBytes *
|
||||||
|
nm_utils_dhcp_client_id_mac (int arp_type,
|
||||||
|
const guint8 *hwaddr,
|
||||||
|
gsize hwaddr_len)
|
||||||
|
{
|
||||||
|
guint8 *client_id_buf;
|
||||||
|
const guint8 hwaddr_type = arp_type;
|
||||||
|
|
||||||
|
if (!nm_utils_arp_type_get_hwaddr_relevant_part (arp_type, &hwaddr, &hwaddr_len))
|
||||||
|
g_return_val_if_reached (NULL);
|
||||||
|
|
||||||
|
client_id_buf = g_malloc (hwaddr_len + 1);
|
||||||
|
client_id_buf[0] = hwaddr_type;
|
||||||
|
memcpy (&client_id_buf[1], hwaddr, hwaddr_len);
|
||||||
|
return g_bytes_new_take (client_id_buf, hwaddr_len + 1);
|
||||||
|
}
|
||||||
|
|
||||||
#define HASH_KEY ((const guint8[16]) { 0x80, 0x11, 0x8c, 0xc2, 0xfe, 0x4a, 0x03, 0xee, 0x3e, 0xd6, 0x0c, 0x6f, 0x36, 0x39, 0x14, 0x09 })
|
#define HASH_KEY ((const guint8[16]) { 0x80, 0x11, 0x8c, 0xc2, 0xfe, 0x4a, 0x03, 0xee, 0x3e, 0xd6, 0x0c, 0x6f, 0x36, 0x39, 0x14, 0x09 })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -279,8 +279,20 @@ gboolean nm_utils_host_id_get (const guint8 **out_host_id,
|
||||||
gsize *out_host_id_len);
|
gsize *out_host_id_len);
|
||||||
gint64 nm_utils_host_id_get_timestamp_ns (void);
|
gint64 nm_utils_host_id_get_timestamp_ns (void);
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
int nm_utils_arp_type_detect_from_hwaddrlen (gsize hwaddr_len);
|
int nm_utils_arp_type_detect_from_hwaddrlen (gsize hwaddr_len);
|
||||||
|
|
||||||
|
gboolean nm_utils_arp_type_validate_hwaddr (int arp_type,
|
||||||
|
const guint8 *hwaddr,
|
||||||
|
gsize hwaddr_len);
|
||||||
|
|
||||||
|
gboolean nm_utils_arp_type_get_hwaddr_relevant_part (int arp_type,
|
||||||
|
const guint8 **hwaddr,
|
||||||
|
gsize *hwaddr_len);
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
/* IPv6 Interface Identifier helpers */
|
/* IPv6 Interface Identifier helpers */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -375,6 +387,10 @@ char *nm_utils_hw_addr_gen_stable_eth (NMUtilsStableType stable_type,
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
GBytes *nm_utils_dhcp_client_id_mac (int arp_type,
|
||||||
|
const guint8 *hwaddr,
|
||||||
|
gsize hwaddr_len);
|
||||||
|
|
||||||
guint32 nm_utils_create_dhcp_iaid (gboolean legacy_unstable_byteorder,
|
guint32 nm_utils_create_dhcp_iaid (gboolean legacy_unstable_byteorder,
|
||||||
const guint8 *interface_id,
|
const guint8 *interface_id,
|
||||||
gsize interface_id_len);
|
gsize interface_id_len);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue