]> www.infradead.org Git - users/rw/ppcboot.git/commitdiff
Provide enough space in the request message for all requested
authorwdenk <wdenk>
Fri, 3 Nov 2000 20:20:31 +0000 (20:20 +0000)
committerwdenk <wdenk>
Fri, 3 Nov 2000 20:20:31 +0000 (20:20 +0000)
vendor extension stuff.

net/bootp.c

index 7f4010e5eb3bdb8b92ade581c1c1f818b7d5e74b..fa1d1c34d2999c4dab7eb9281672a1cc4f83f3c9 100644 (file)
@@ -29,6 +29,8 @@ char          BootFile[128];
 int            BootpTry;
 static ulong   lAddr;
 
+static int BootpExtended (u8 *e);
+
 void BootpVendorFieldProcess(u8 *ext)
 {
     int size = *(ext+1) ;
@@ -224,7 +226,7 @@ BootpTimeout(void)
 }
 
 /* Initialize BOOTP extension fields in the request. */
-int BootpExtended (u8 *e)
+static int BootpExtended (u8 *e)
 {
     u8 *start = e ;
     
@@ -265,8 +267,9 @@ int BootpExtended (u8 *e)
 void
 BootpRequest(char *fileName, ulong loadAdr)
 {
-       volatile uchar *        pkt;
-       Bootp_t *       bp;
+       volatile uchar *pkt;
+       Bootp_t *bp;
+       int ext_len;
 
        lAddr = loadAdr;
 
@@ -293,7 +296,10 @@ BootpRequest(char *fileName, ulong loadAdr)
        strcpy(bp->bp_file, fileName);
 
        /* Request additional information from the BOOTP server */
-       BootpExtended (bp->bp_vend) ;
+       ext_len = BootpExtended (bp->bp_vend) - sizeof(bp->bp_vend);
+       if (ext_len < 0) {
+               ext_len = 0;
+       }
 
        /* store boot file name for repetitions in case of bootp timeout */
        strcpy(BootFile, fileName);
@@ -309,7 +315,7 @@ BootpRequest(char *fileName, ulong loadAdr)
        BootpID += GetTicksSinceBoot();
        bp->bp_id = BootpID;
 
-       NetSendPacket(NetTxPacket, BOOTP_SIZE);
+       NetSendPacket(NetTxPacket, BOOTP_SIZE + ext_len);
 
        NetSetTimeout(TIMEOUT * HZ, BootpTimeout);
        NetSetHandler(BootpHandler);