dhcp/systemd: gracefully fail when the interface has unknown ARP type
This commit is contained in:
@@ -517,7 +517,7 @@ get_arp_type (const GByteArray *hwaddr)
|
|||||||
else if (hwaddr->len == INFINIBAND_ALEN)
|
else if (hwaddr->len == INFINIBAND_ALEN)
|
||||||
return ARPHRD_INFINIBAND;
|
return ARPHRD_INFINIBAND;
|
||||||
else
|
else
|
||||||
g_assert_not_reached ();
|
return ARPHRD_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@@ -534,6 +534,7 @@ ip4_start (NMDhcpClient *client, const char *dhcp_anycast_addr, const char *last
|
|||||||
const char *hostname, *fqdn;
|
const char *hostname, *fqdn;
|
||||||
int r, i;
|
int r, i;
|
||||||
gboolean success = FALSE;
|
gboolean success = FALSE;
|
||||||
|
guint16 arp_type;
|
||||||
|
|
||||||
g_assert (priv->client4 == NULL);
|
g_assert (priv->client4 == NULL);
|
||||||
g_assert (priv->client6 == NULL);
|
g_assert (priv->client6 == NULL);
|
||||||
@@ -555,10 +556,16 @@ ip4_start (NMDhcpClient *client, const char *dhcp_anycast_addr, const char *last
|
|||||||
|
|
||||||
hwaddr = nm_dhcp_client_get_hw_addr (client);
|
hwaddr = nm_dhcp_client_get_hw_addr (client);
|
||||||
if (hwaddr) {
|
if (hwaddr) {
|
||||||
|
arp_type= get_arp_type (hwaddr);
|
||||||
|
if (arp_type == ARPHRD_NONE) {
|
||||||
|
nm_log_warn (LOGD_DHCP4, "(%s): failed to determine ARP type", iface);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
r = sd_dhcp_client_set_mac (priv->client4,
|
r = sd_dhcp_client_set_mac (priv->client4,
|
||||||
hwaddr->data,
|
hwaddr->data,
|
||||||
hwaddr->len,
|
hwaddr->len,
|
||||||
get_arp_type (hwaddr));
|
arp_type);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
nm_log_warn (LOGD_DHCP4, "(%s): failed to set DHCP MAC address (%d)", iface, r);
|
nm_log_warn (LOGD_DHCP4, "(%s): failed to set DHCP MAC address (%d)", iface, r);
|
||||||
goto error;
|
goto error;
|
||||||
|
Reference in New Issue
Block a user