summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2016-01-25 09:46:53 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2016-01-25 15:22:15 +0100
commit5b5a3512d2b5eab84bd6f6db68cd265e3a5b0857 (patch)
tree968ba995dce61acd630a5ed046a3255298b8b9da
parenta47b2abeb173bf2459c1a96a40d3e2fc126cd62f (diff)
downloadNetworkManager-5b5a3512d2b5eab84bd6f6db68cd265e3a5b0857.tar.gz
dhcp/systemd: gracefully fail when the interface has unknown ARP type
-rw-r--r--src/dhcp-manager/nm-dhcp-systemd.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/dhcp-manager/nm-dhcp-systemd.c b/src/dhcp-manager/nm-dhcp-systemd.c
index 4f68a0b6d6..bafc7c9d3b 100644
--- a/src/dhcp-manager/nm-dhcp-systemd.c
+++ b/src/dhcp-manager/nm-dhcp-systemd.c
@@ -517,7 +517,7 @@ get_arp_type (const GByteArray *hwaddr)
else if (hwaddr->len == INFINIBAND_ALEN)
return ARPHRD_INFINIBAND;
else
- g_assert_not_reached ();
+ return ARPHRD_NONE;
}
static gboolean
@@ -534,6 +534,7 @@ ip4_start (NMDhcpClient *client, const char *dhcp_anycast_addr, const char *last
const char *hostname, *fqdn;
int r, i;
gboolean success = FALSE;
+ guint16 arp_type;
g_assert (priv->client4 == 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);
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,
hwaddr->data,
hwaddr->len,
- get_arp_type (hwaddr));
+ arp_type);
if (r < 0) {
nm_log_warn (LOGD_DHCP4, "(%s): failed to set DHCP MAC address (%d)", iface, r);
goto error;