changeset 18787:c9df1d0ea29a

8800 loader: use the same option list for dhcp discovery and request
author Toomas Soome <tsoome@me.com>
date Sun, 28 May 2017 23:59:26 +0300
parents 0423606f1348
children fecd8df30b1e
files usr/src/boot/lib/libstand/bootp.c
diffstat 1 files changed, 31 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/boot/lib/libstand/bootp.c	Sun May 28 09:48:07 2017 +0300
+++ b/usr/src/boot/lib/libstand/bootp.c	Sun May 28 23:59:26 2017 +0300
@@ -88,6 +88,35 @@
 struct bootp *bootp_response;
 size_t bootp_response_size;
 
+static void
+bootp_fill_request(unsigned char *bp_vend)
+{
+	/*
+	 * We are booting from PXE, we want to send the string
+	 * 'PXEClient' to the DHCP server so you have the option of
+	 * only responding to PXE aware dhcp requests.
+	 */
+	bp_vend[0] = TAG_CLASSID;
+	bp_vend[1] = 9;
+	bcopy("PXEClient", &bp_vend[2], 9);
+	bp_vend[11] = TAG_USER_CLASS;
+	/* len of each user class + number of user class */
+	bp_vend[12] = 8;
+	/* len of the first user class */
+	bp_vend[13] = 7;
+	bcopy("illumos", &bp_vend[14], 7);
+	bp_vend[21] = TAG_PARAM_REQ;
+	bp_vend[22] = 7;
+	bp_vend[23] = TAG_SUBNET_MASK;
+	bp_vend[24] = TAG_GATEWAY;
+	bp_vend[25] = TAG_HOSTNAME;
+	bp_vend[26] = TAG_SWAPSERVER;
+	bp_vend[27] = TAG_ROOTPATH;
+	bp_vend[28] = TAG_INTF_MTU;
+	bp_vend[29] = TAG_SERVERID;
+	bp_vend[30] = TAG_END;
+}
+
 /* Fetch required bootp infomation */
 void
 bootp(int sock)
@@ -131,31 +160,7 @@
 	bp->bp_vend[4] = TAG_DHCP_MSGTYPE;
 	bp->bp_vend[5] = 1;
 	bp->bp_vend[6] = DHCPDISCOVER;
-
-	/*
-	 * We are booting from PXE, we want to send the string
-	 * 'PXEClient' to the DHCP server so you have the option of
-	 * only responding to PXE aware dhcp requests.
-	 */
-	bp->bp_vend[7] = TAG_CLASSID;
-	bp->bp_vend[8] = 9;
-	bcopy("PXEClient", &bp->bp_vend[9], 9);
-	bp->bp_vend[18] = TAG_USER_CLASS;
-	/* len of each user class + number of user class */
-	bp->bp_vend[19] = 8;
-	/* len of the first user class */
-	bp->bp_vend[20] = 7;
-	bcopy("illumos", &bp->bp_vend[21], 7);
-	bp->bp_vend[28] = TAG_PARAM_REQ;
-	bp->bp_vend[29] = 7;
-	bp->bp_vend[30] = TAG_ROOTPATH;
-	bp->bp_vend[31] = TAG_HOSTNAME;
-	bp->bp_vend[32] = TAG_SWAPSERVER;
-	bp->bp_vend[33] = TAG_GATEWAY;
-	bp->bp_vend[34] = TAG_SUBNET_MASK;
-	bp->bp_vend[35] = TAG_INTF_MTU;
-	bp->bp_vend[36] = TAG_SERVERID;
-	bp->bp_vend[37] = TAG_END;
+	bootp_fill_request(&bp->bp_vend[7]);
 #else
 	bp->bp_vend[4] = TAG_END;
 #endif
@@ -191,10 +196,7 @@
 		bp->bp_vend[20] = 4;
 		leasetime = htonl(300);
 		bcopy(&leasetime, &bp->bp_vend[21], 4);
-		bp->bp_vend[25] = TAG_CLASSID;
-		bp->bp_vend[26] = 9;
-		bcopy("PXEClient", &bp->bp_vend[27], 9);
-		bp->bp_vend[36] = TAG_END;
+		bootp_fill_request(&bp->bp_vend[25]);
 
 		expected_dhcpmsgtype = DHCPACK;