dhcp/systemd: gracefully fail when the interface has unknown ARP type
authorBeniamino Galvani <bgalvani@redhat.com>
Mon, 25 Jan 2016 08:46:53 +0000 (09:46 +0100)
committerBeniamino Galvani <bgalvani@redhat.com>
Mon, 25 Jan 2016 16:46:01 +0000 (17:46 +0100)
src/dhcp-manager/nm-dhcp-systemd.c

index 4f68a0b..bafc7c9 100644 (file)
@@ -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;