Blob Blame History Raw
diff --git a/common/discover.c b/common/discover.c
index 26a78ca..ed01e45 100644
--- a/common/discover.c
+++ b/common/discover.c
@@ -635,6 +635,8 @@ discover_interfaces(int state) {
 			interface_dereference(&tmp, MDL);
 			tmp = interfaces; /* XXX */
 		}
+		if (tmp != NULL)
+			try_hw_addr(tmp);
 
 		if (dhcp_interface_discovery_hook) {
 			(*dhcp_interface_discovery_hook)(tmp);
diff --git a/common/lpf.c b/common/lpf.c
index 4a252ca..467b055 100644
--- a/common/lpf.c
+++ b/common/lpf.c
@@ -697,8 +697,22 @@ ioctl_get_ll(char *name)
 	return sll;
 }
 
+// define ? 
+void try_hw_addr(struct interface_info *info){
+  get_hw_addr2(info);
+};
+
 void
 get_hw_addr(struct interface_info *info)
+{
+  if (get_hw_addr2(info) == ISC_R_NOTFOUND){
+    log_fatal("Unsupported device type for \"%s\"",
+              info->name);
+  }
+}
+
+isc_result_t
+get_hw_addr2(struct interface_info *info)
 {
 	struct hardware *hw = &info->hw_address;
 	char *name = info->name;
@@ -708,7 +722,8 @@ get_hw_addr(struct interface_info *info)
 	int sll_allocated = 0;
 	char *dup = NULL;
 	char *colon = NULL;
-
+        isc_result_t result = ISC_R_SUCCESS;
+        
 	if (getifaddrs(&ifaddrs) == -1)
 		log_fatal("Failed to get interfaces");
 
@@ -792,14 +807,16 @@ get_hw_addr(struct interface_info *info)
 			hw->hbuf[4] = 0xef;
 			break;
 #endif
-		default:
-			freeifaddrs(ifaddrs);
-			log_fatal("Unsupported device type %hu for \"%s\"",
-				  sll->sll_hatype, name);
+        default:
+          log_error("Unsupported device type %hu for \"%s\"",
+                      sll->sll_hatype, name);
+          result = ISC_R_NOTFOUND;
+
 	}
 
 	if (sll_allocated)
 		dfree(sll, MDL);
 	freeifaddrs(ifaddrs);
+        return result;
 }
 #endif
diff --git a/includes/dhcpd.h b/includes/dhcpd.h
index d534f8c..66a21fb 100644
--- a/includes/dhcpd.h
+++ b/includes/dhcpd.h
@@ -2591,7 +2591,10 @@ void print_dns_status (int, struct dhcp_ddns_cb *, isc_result_t);
 #endif
 const char *print_time(TIME);
 
+
 void get_hw_addr(struct interface_info *info);
+void try_hw_addr(struct interface_info *info);
+isc_result_t get_hw_addr2(struct interface_info *info);
 char *buf_to_hex (const unsigned char *s, unsigned len,
                    const char *file, int line);
 char *format_lease_id(const unsigned char *s, unsigned len, int format,