net/bootp: add VCI support for BOOTP also
authorIlya Yanok <ilya.yanok@cogentembedded.com>
Mon, 17 Sep 2012 10:26:25 +0000 (10:26 +0000)
committerTom Rini <trini@ti.com>
Mon, 1 Oct 2012 17:02:14 +0000 (10:02 -0700)
Vendor Class Identifier option is common to BOOTP and DHCP and
can be useful without PXE. So send VCI in both BOOTP and DHCP
requests if CONFIG_BOOTP_VCI_STRING is defined.

Signed-off-by: Ilya Yanok <ilya.yanok@cogentembedded.com>
Signed-off-by: Tom Rini <trini@ti.com>
net/bootp.c

index 661e371063ac6273d0f3302ca0d85f12e1c4a1dd..ccf9ee66758492c112595ee7d93c1066eea8b4a0 100644 (file)
@@ -341,6 +341,15 @@ BootpTimeout(void)
        }
 }
 
+#define put_vci(e, str)                                                \
+       do {                                                    \
+               size_t vci_strlen = strlen(str);                \
+               *e++ = 60;      /* Vendor Class Identifier */   \
+               *e++ = vci_strlen;                              \
+               memcpy(e, str, vci_strlen);                     \
+               e += vci_strlen;                                \
+       } while (0)
+
 /*
  *     Initialize BOOTP extension fields in the request.
  */
@@ -352,7 +361,6 @@ static int DhcpExtended(u8 *e, int message_type, IPaddr_t ServerID,
        u8 *cnt;
 #if defined(CONFIG_BOOTP_PXE)
        char *uuid;
-       size_t vci_strlen;
        u16 clientarch;
 #endif
 
@@ -437,12 +445,10 @@ static int DhcpExtended(u8 *e, int message_type, IPaddr_t ServerID,
                        printf("Invalid pxeuuid: %s\n", uuid);
                }
        }
+#endif
 
-       *e++ = 60;      /* Vendor Class Identifier */
-       vci_strlen = strlen(CONFIG_BOOTP_VCI_STRING);
-       *e++ = vci_strlen;
-       memcpy(e, CONFIG_BOOTP_VCI_STRING, vci_strlen);
-       e += vci_strlen;
+#ifdef CONFIG_BOOTP_VCI_STRING
+       put_vci(e, CONFIG_BOOTP_VCI_STRING);
 #endif
 
 #if defined(CONFIG_BOOTP_VENDOREX)
@@ -529,6 +535,10 @@ static int BootpExtended(u8 *e)
        *e++ = (576 - 312 + OPT_FIELD_SIZE) & 0xff;
 #endif
 
+#ifdef CONFIG_BOOTP_VCI_STRING
+       put_vci(e, CONFIG_BOOTP_VCI_STRING);
+#endif
+
 #if defined(CONFIG_BOOTP_SUBNETMASK)
        *e++ = 1;               /* Subnet mask request */
        *e++ = 4;