Blob Blame Raw
diff -up dhcp-4.3.1b1/client/dhclient.8.KrJcIv dhcp-4.3.1b1/client/dhclient.8
--- dhcp-4.3.1b1/client/dhclient.8.KrJcIv	2014-07-10 17:39:25.852763873 +0200
+++ dhcp-4.3.1b1/client/dhclient.8	2014-07-10 17:54:26.841012988 +0200
@@ -458,6 +458,9 @@ used to construct a RFC4361 style client
 in the client's messages.  This client id can be overridden by
 setting a client id in the configuration file.  Overridding the
 client id in this fashion is discouraged.
+This option is turned on by default, if you want to redefine or turn off
+sending of client id, use send dhcp-client-identifier = "better identifier"
+or send dhcp-client-identifier = "" in /etc/dhcp/dhclient.conf.
 .TP
 .BI \-I
 Use the standard DDNS scheme from RFCs 4701 & 4702.  
diff -up dhcp-4.3.1b1/client/dhclient.c.KrJcIv dhcp-4.3.1b1/client/dhclient.c
--- dhcp-4.3.1b1/client/dhclient.c.KrJcIv	2014-07-10 17:54:26.829013157 +0200
+++ dhcp-4.3.1b1/client/dhclient.c	2014-07-10 17:55:50.155835918 +0200
@@ -73,7 +73,7 @@ struct sockaddr_in sockaddr_broadcast;
 struct in_addr giaddr;
 struct data_string default_duid;
 int duid_type = 0;
-int duid_v4 = 0;
+int duid_v4 = 1;
 int std_dhcid = 0;
 
 /* ASSERT_STATE() does nothing now; it used to be
@@ -1301,7 +1301,7 @@ static void setup_ib_interface(struct in
 	}
 
 	/* No client ID specified */
-	log_fatal("dhcp-client-identifier must be specified for InfiniBand");
+	//log_fatal("dhcp-client-identifier must be specified for InfiniBand");
 }
 
 /* Individual States:
@@ -3342,6 +3342,7 @@ form_duid(struct data_string *duid, cons
 	struct interface_info *ip;
 	int len;
 	char *str;
+	unsigned hlen;
 
 	/* For now, just use the first interface on the list. */
 	ip = interfaces;
@@ -3365,6 +3366,11 @@ form_duid(struct data_string *duid, cons
 	if (duid_type == 0)
 		duid_type = stateless ? DUID_LL : DUID_LLT;
 
+	if (ip->hw_address.hbuf[0] == HTYPE_INFINIBAND)
+		hlen = 9;
+	else
+		hlen = ip->hw_address.hlen;
+
 	/*
 	 * 2 bytes for the 'duid type' field.
 	 * 2 bytes for the 'htype' field.
@@ -3372,7 +3378,7 @@ form_duid(struct data_string *duid, cons
 	 * enough bytes for the hardware address (note that hw_address has
 	 * the 'htype' on byte zero).
 	 */
-	len = 4 + (ip->hw_address.hlen - 1);
+	len = 4 + (hlen - 1);
 	if (duid_type == DUID_LLT)
 		len += 4;
 	if (!buffer_allocate(&duid->buffer, len, MDL))
@@ -3386,12 +3392,12 @@ form_duid(struct data_string *duid, cons
 		putUShort(duid->buffer->data + 2, ip->hw_address.hbuf[0]);
 		putULong(duid->buffer->data + 4, cur_time - DUID_TIME_EPOCH);
 		memcpy(duid->buffer->data + 8, ip->hw_address.hbuf + 1,
-		       ip->hw_address.hlen - 1);
+		       hlen - 1);
 	} else {
 		putUShort(duid->buffer->data, DUID_LL);
 		putUShort(duid->buffer->data + 2, ip->hw_address.hbuf[0]);
 		memcpy(duid->buffer->data + 4, ip->hw_address.hbuf + 1,
-		       ip->hw_address.hlen - 1);
+		       hlen - 1);
 	}
 
 	str = quotify_buf(duid->data, duid->len, MDL);