diff options
author | wdenk <wdenk> | 2004-03-12 00:14:09 +0000 |
---|---|---|
committer | wdenk <wdenk> | 2004-03-12 00:14:09 +0000 |
commit | 232c150a250bb2fcb894b15d67c65df2458e271f (patch) | |
tree | 3d714bb0eb041a6499b8e2286a7fedb6fc150847 /net/bootp.c | |
parent | 79d696fc558b2bcdb8aa8dc6cd7e4ccd22008e21 (diff) | |
download | u-boot-imx-232c150a250bb2fcb894b15d67c65df2458e271f.zip u-boot-imx-232c150a250bb2fcb894b15d67c65df2458e271f.tar.gz u-boot-imx-232c150a250bb2fcb894b15d67c65df2458e271f.tar.bz2 |
Add support for Siemens SX1 mobile phone;
add support for USB-based console
(enable with "setenv stdout usbtty; setenv stdin usbtty")
Diffstat (limited to 'net/bootp.c')
-rw-r--r-- | net/bootp.c | 526 |
1 files changed, 261 insertions, 265 deletions
diff --git a/net/bootp.c b/net/bootp.c index e02372c..f5adce4 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -5,12 +5,12 @@ * (See License) * Copyright 2000 Roland Borde * Copyright 2000 Paolo Scaffardi - * Copyright 2000-2002 Wolfgang Denk, wd@denx.de + * Copyright 2000-2004 Wolfgang Denk, wd@denx.de */ #if 0 -#define DEBUG 1 /* general debug */ -#define DEBUG_BOOTP_EXT 1 /* Debug received vendor fields */ +#define DEBUG 1 /* general debug */ +#define DEBUG_BOOTP_EXT 1 /* Debug received vendor fields */ #endif #ifdef DEBUG_BOOTP_EXT @@ -24,26 +24,27 @@ #include <net.h> #include "bootp.h" #include "tftp.h" +#include "nfs.h" #ifdef CONFIG_STATUS_LED #include <status_led.h> #endif -#define BOOTP_VENDOR_MAGIC 0x63825363 /* RFC1048 Magic Cookie */ +#define BOOTP_VENDOR_MAGIC 0x63825363 /* RFC1048 Magic Cookie */ #if (CONFIG_COMMANDS & CFG_CMD_NET) #define TIMEOUT 5 /* Seconds before trying BOOTP again */ -#ifndef CONFIG_NET_RETRY_COUNT +#ifndef CONFIG_NET_RETRY_COUNT # define TIMEOUT_COUNT 5 /* # of timeouts before giving up */ #else -# define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT) +# define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT) #endif #define PORT_BOOTPS 67 /* BOOTP server UDP port */ #define PORT_BOOTPC 68 /* BOOTP client UDP port */ #ifndef CONFIG_DHCP_MIN_EXT_LEN /* minimal length of extension list */ -#define CONFIG_DHCP_MIN_EXT_LEN 64 +#define CONFIG_DHCP_MIN_EXT_LEN 64 #endif ulong BootpID; @@ -63,13 +64,13 @@ static void DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len); static char *dhcpmsg2str(int type) { switch (type) { - case 1: return "DHCPDISCOVER"; break; - case 2: return "DHCPOFFER"; break; - case 3: return "DHCPREQUEST"; break; - case 4: return "DHCPDECLINE"; break; - case 5: return "DHCPACK"; break; - case 6: return "DHCPNACK"; break; - case 7: return "DHCPRELEASE"; break; + case 1: return "DHCPDISCOVER"; break; + case 2: return "DHCPOFFER"; break; + case 3: return "DHCPREQUEST"; break; + case 4: return "DHCPDECLINE"; break; + case 5: return "DHCPACK"; break; + case 6: return "DHCPNACK"; break; + case 7: return "DHCPRELEASE"; break; default: return "UNKNOWN/INVALID MSG TYPE"; break; } } @@ -144,159 +145,158 @@ static int truncate_sz (const char *name, int maxlen, int curlen) #if !(CONFIG_COMMANDS & CFG_CMD_DHCP) -static void BootpVendorFieldProcess(u8 *ext) +static void BootpVendorFieldProcess (u8 * ext) { - int size = *(ext+1) ; + int size = *(ext + 1); - debug_ext ("[BOOTP] Processing extension %d... (%d bytes)\n", *ext, *(ext+1)); + debug_ext ("[BOOTP] Processing extension %d... (%d bytes)\n", *ext, + *(ext + 1)); - NetBootFileSize = 0; + NetBootFileSize = 0; - switch (*ext) { - /* Fixed length fields */ - case 1: /* Subnet mask */ + switch (*ext) { + /* Fixed length fields */ + case 1: /* Subnet mask */ if (NetOurSubnetMask == 0) - NetCopyIP(&NetOurSubnetMask, (IPaddr_t*)(ext+2)); + NetCopyIP (&NetOurSubnetMask, (IPaddr_t *) (ext + 2)); break; - case 2: /* Time offset - Not yet supported */ + case 2: /* Time offset - Not yet supported */ break; - /* Variable length fields */ - case 3: /* Gateways list */ + /* Variable length fields */ + case 3: /* Gateways list */ if (NetOurGatewayIP == 0) { - NetCopyIP(&NetOurGatewayIP, (IPaddr_t*)(ext+2)); + NetCopyIP (&NetOurGatewayIP, (IPaddr_t *) (ext + 2)); } break; - case 4: /* Time server - Not yet supported */ + case 4: /* Time server - Not yet supported */ break; - case 5: /* IEN-116 name server - Not yet supported */ + case 5: /* IEN-116 name server - Not yet supported */ break; case 6: if (NetOurDNSIP == 0) { - NetCopyIP(&NetOurDNSIP, (IPaddr_t*)(ext+2)); + NetCopyIP (&NetOurDNSIP, (IPaddr_t *) (ext + 2)); } #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_DNS2) if ((NetOurDNS2IP == 0) && (size > 4)) { - NetCopyIP(&NetOurDNS2IP, (IPaddr_t*)(ext+2+4)); + NetCopyIP (&NetOurDNS2IP, (IPaddr_t *) (ext + 2 + 4)); } #endif break; - case 7: /* Log server - Not yet supported */ + case 7: /* Log server - Not yet supported */ break; - case 8: /* Cookie/Quote server - Not yet supported */ + case 8: /* Cookie/Quote server - Not yet supported */ break; - case 9: /* LPR server - Not yet supported */ + case 9: /* LPR server - Not yet supported */ break; - case 10: /* Impress server - Not yet supported */ + case 10: /* Impress server - Not yet supported */ break; - case 11: /* RPL server - Not yet supported */ + case 11: /* RPL server - Not yet supported */ break; - case 12: /* Host name */ + case 12: /* Host name */ if (NetOurHostName[0] == 0) { - size = truncate_sz("Host Name", sizeof(NetOurHostName), size); - memcpy(&NetOurHostName, ext+2, size); - NetOurHostName[size] = 0 ; + size = truncate_sz ("Host Name", sizeof (NetOurHostName), size); + memcpy (&NetOurHostName, ext + 2, size); + NetOurHostName[size] = 0; } break; - case 13: /* Boot file size */ + case 13: /* Boot file size */ if (size == 2) - NetBootFileSize = ntohs(*(ushort*)(ext+2)); + NetBootFileSize = ntohs (*(ushort *) (ext + 2)); else if (size == 4) - NetBootFileSize = ntohl(*(ulong*)(ext+2)); + NetBootFileSize = ntohl (*(ulong *) (ext + 2)); break; - case 14: /* Merit dump file - Not yet supported */ + case 14: /* Merit dump file - Not yet supported */ break; - case 15: /* Domain name - Not yet supported */ + case 15: /* Domain name - Not yet supported */ break; - case 16: /* Swap server - Not yet supported */ + case 16: /* Swap server - Not yet supported */ break; - case 17: /* Root path */ + case 17: /* Root path */ if (NetOurRootPath[0] == 0) { - size = truncate_sz("Root Path", sizeof(NetOurRootPath), size); - memcpy(&NetOurRootPath, ext+2, size); - NetOurRootPath[size] = 0 ; + size = truncate_sz ("Root Path", sizeof (NetOurRootPath), size); + memcpy (&NetOurRootPath, ext + 2, size); + NetOurRootPath[size] = 0; } break; - case 18: /* Extension path - Not yet supported */ + case 18: /* Extension path - Not yet supported */ /* * This can be used to send the information of the * vendor area in another file that the client can * access via TFTP. */ break; - /* IP host layer fields */ - case 40: /* NIS Domain name */ + /* IP host layer fields */ + case 40: /* NIS Domain name */ if (NetOurNISDomain[0] == 0) { - size = truncate_sz ("NIS Domain Name", - sizeof(NetOurNISDomain), - size); - memcpy(&NetOurNISDomain, ext+2, size); - NetOurNISDomain[size] = 0 ; + size = truncate_sz ("NIS Domain Name", sizeof (NetOurNISDomain), size); + memcpy (&NetOurNISDomain, ext + 2, size); + NetOurNISDomain[size] = 0; } break; - /* Application layer fields */ - case 43: /* Vendor specific info - Not yet supported */ + /* Application layer fields */ + case 43: /* Vendor specific info - Not yet supported */ /* * Binary information to exchange specific * product information. */ break; - /* Reserved (custom) fields (128..254) */ - } + /* Reserved (custom) fields (128..254) */ + } } -static void BootpVendorProcess(u8 *ext, int size) +static void BootpVendorProcess (u8 * ext, int size) { - u8 *end = ext + size ; + u8 *end = ext + size; - debug_ext ("[BOOTP] Checking extension (%d bytes)...\n", size); + debug_ext ("[BOOTP] Checking extension (%d bytes)...\n", size); - while ((ext < end) && (*ext != 0xff)) { - if (*ext == 0) { - ext ++ ; - } else { - u8 *opt = ext ; - ext += ext[1] + 2 ; - if (ext <= end) - BootpVendorFieldProcess (opt) ; + while ((ext < end) && (*ext != 0xff)) { + if (*ext == 0) { + ext++; + } else { + u8 *opt = ext; + + ext += ext[1] + 2; + if (ext <= end) + BootpVendorFieldProcess (opt); + } } - } #ifdef DEBUG_BOOTP_EXT - printf("[BOOTP] Received fields: \n"); - if (NetOurSubnetMask) { - puts ("NetOurSubnetMask : "); - print_IPaddr (NetOurSubnetMask); - putc('\n'); - } - - if (NetOurGatewayIP) { - puts ("NetOurGatewayIP : "); - print_IPaddr (NetOurGatewayIP); - putc('\n'); - } - - if (NetBootFileSize) { - printf("NetBootFileSize : %d\n", NetBootFileSize); - } - - if (NetOurHostName[0]) { - printf("NetOurHostName : %s\n", NetOurHostName); - } - - if (NetOurRootPath[0]) { - printf("NetOurRootPath : %s\n", NetOurRootPath); - } - - if (NetOurNISDomain[0]) { - printf("NetOurNISDomain : %s\n", NetOurNISDomain); - } - - if (NetBootFileSize) { - printf("NetBootFileSize: %d\n", NetBootFileSize); - } -#endif /* DEBUG_BOOTP_EXT */ -} + printf ("[BOOTP] Received fields: \n"); + if (NetOurSubnetMask) { + puts ("NetOurSubnetMask : "); + print_IPaddr (NetOurSubnetMask); + putc ('\n'); + } + + if (NetOurGatewayIP) { + puts ("NetOurGatewayIP : "); + print_IPaddr (NetOurGatewayIP); + putc ('\n'); + } + + if (NetBootFileSize) { + printf ("NetBootFileSize : %d\n", NetBootFileSize); + } + if (NetOurHostName[0]) { + printf ("NetOurHostName : %s\n", NetOurHostName); + } + + if (NetOurRootPath[0]) { + printf ("NetOurRootPath : %s\n", NetOurRootPath); + } + + if (NetOurNISDomain[0]) { + printf ("NetOurNISDomain : %s\n", NetOurNISDomain); + } + + if (NetBootFileSize) { + printf ("NetBootFileSize: %d\n", NetBootFileSize); + } +#endif /* DEBUG_BOOTP_EXT */ +} /* * Handle a BOOTP received packet. */ @@ -311,11 +311,11 @@ BootpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) bp = (Bootp_t *)pkt; - if (BootpCheckPkt(pkt, dest, src, len)) /* Filter out pkts we don't want */ + if (BootpCheckPkt(pkt, dest, src, len)) /* Filter out pkts we don't want */ return; /* - * Got a good BOOTP reply. Copy the data into our variables. + * Got a good BOOTP reply. Copy the data into our variables. */ #ifdef CONFIG_STATUS_LED status_led_set (STATUS_LED_BOOT, STATUS_LED_OFF); @@ -371,179 +371,180 @@ BootpTimeout(void) * Initialize BOOTP extension fields in the request. */ #if (CONFIG_COMMANDS & CFG_CMD_DHCP) -static int DhcpExtended(u8 *e, int message_type, IPaddr_t ServerID, IPaddr_t RequestedIP) +static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t RequestedIP) { - u8 *start = e ; - u8 *cnt; + u8 *start = e; + u8 *cnt; + #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_VENDOREX) - u8 *x; + u8 *x; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_SEND_HOSTNAME) - uchar *hostname; + uchar *hostname; #endif - *e++ = 99; /* RFC1048 Magic Cookie */ - *e++ = 130; - *e++ = 83; - *e++ = 99; - - *e++ = 53; /* DHCP Message Type */ - *e++ = 1; - *e++ = message_type; + *e++ = 99; /* RFC1048 Magic Cookie */ + *e++ = 130; + *e++ = 83; + *e++ = 99; - *e++ = 57; /* Maximum DHCP Message Size */ - *e++ = 2; - *e++ = (576-312+OPT_SIZE) >> 8; - *e++ = (576-312+OPT_SIZE) & 0xff; + *e++ = 53; /* DHCP Message Type */ + *e++ = 1; + *e++ = message_type; - if ( ServerID ) { - int tmp = ntohl(ServerID); + *e++ = 57; /* Maximum DHCP Message Size */ + *e++ = 2; + *e++ = (576 - 312 + OPT_SIZE) >> 8; + *e++ = (576 - 312 + OPT_SIZE) & 0xff; - *e++ = 54; /* ServerID */ - *e++ = 4; - *e++ = tmp >> 24; - *e++ = tmp >> 16; - *e++ = tmp >> 8; - *e++ = tmp & 0xff; - } + if (ServerID) { + int tmp = ntohl (ServerID); - if ( RequestedIP ) { - int tmp = ntohl(RequestedIP); + *e++ = 54; /* ServerID */ + *e++ = 4; + *e++ = tmp >> 24; + *e++ = tmp >> 16; + *e++ = tmp >> 8; + *e++ = tmp & 0xff; + } - *e++ = 50; /* Requested IP */ - *e++ = 4; - *e++ = tmp >> 24; - *e++ = tmp >> 16; - *e++ = tmp >> 8; - *e++ = tmp & 0xff; - } + if (RequestedIP) { + int tmp = ntohl (RequestedIP); + *e++ = 50; /* Requested IP */ + *e++ = 4; + *e++ = tmp >> 24; + *e++ = tmp >> 16; + *e++ = tmp >> 8; + *e++ = tmp & 0xff; + } #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_SEND_HOSTNAME) - if ( (hostname = getenv("hostname")) ) { - int hostnamelen = strlen(hostname); - *e++ = 12; /* Hostname */ - *e++ = hostnamelen; - memcpy(e,hostname,hostnamelen); - e += hostnamelen; - } + if ((hostname = getenv ("hostname"))) { + int hostnamelen = strlen (hostname); + + *e++ = 12; /* Hostname */ + *e++ = hostnamelen; + memcpy (e, hostname, hostnamelen); + e += hostnamelen; + } #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_VENDOREX) - if ((x = dhcp_vendorex_prep (e))) - return x - start ; + if ((x = dhcp_vendorex_prep (e))) + return x - start; #endif - *e++ = 55; /* Parameter Request List */ - cnt = e++; /* Pointer to count of requested items */ - *cnt = 0; + *e++ = 55; /* Parameter Request List */ + cnt = e++; /* Pointer to count of requested items */ + *cnt = 0; #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_SUBNETMASK) - *e++ = 1; /* Subnet Mask */ - *cnt += 1; + *e++ = 1; /* Subnet Mask */ + *cnt += 1; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_GATEWAY) - *e++ = 3; /* Router Option */ - *cnt += 1; + *e++ = 3; /* Router Option */ + *cnt += 1; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_DNS) - *e++ = 6; /* DNS Server(s) */ - *cnt += 1; + *e++ = 6; /* DNS Server(s) */ + *cnt += 1; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_HOSTNAME) - *e++ = 12; /* Hostname */ - *cnt += 1; + *e++ = 12; /* Hostname */ + *cnt += 1; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_BOOTFILESIZE) - *e++ = 13; /* Boot File Size */ - *cnt += 1; + *e++ = 13; /* Boot File Size */ + *cnt += 1; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_BOOTPATH) - *e++ = 17; /* Boot path */ - *cnt += 1; + *e++ = 17; /* Boot path */ + *cnt += 1; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_NISDOMAIN) - *e++ = 40; /* NIS Domain name request */ - *cnt += 1; + *e++ = 40; /* NIS Domain name request */ + *cnt += 1; #endif - *e++ = 255; /* End of the list */ + *e++ = 255; /* End of the list */ - /* Pad to minimal length */ + /* Pad to minimal length */ #ifdef CONFIG_DHCP_MIN_EXT_LEN - while ((e - start) <= CONFIG_DHCP_MIN_EXT_LEN) - *e++ = 0; + while ((e - start) <= CONFIG_DHCP_MIN_EXT_LEN) + *e++ = 0; #endif - return e - start ; + return e - start; } #else /* CFG_CMD_DHCP */ /* * Warning: no field size check - change CONFIG_BOOTP_MASK at your own risk! */ -static int BootpExtended (u8 *e) +static int BootpExtended (u8 * e) { - u8 *start = e ; + u8 *start = e; - *e++ = 99; /* RFC1048 Magic Cookie */ - *e++ = 130; - *e++ = 83; - *e++ = 99; + *e++ = 99; /* RFC1048 Magic Cookie */ + *e++ = 130; + *e++ = 83; + *e++ = 99; #if (CONFIG_COMMANDS & CFG_CMD_DHCP) - *e++ = 53; /* DHCP Message Type */ - *e++ = 1; - *e++ = DHCP_DISCOVER; - - *e++ = 57; /* Maximum DHCP Message Size */ - *e++ = 2; - *e++ = (576-312+OPT_SIZE) >> 16; - *e++ = (576-312+OPT_SIZE) & 0xff; -#endif /* CFG_CMD_DHCP */ + *e++ = 53; /* DHCP Message Type */ + *e++ = 1; + *e++ = DHCP_DISCOVER; + + *e++ = 57; /* Maximum DHCP Message Size */ + *e++ = 2; + *e++ = (576 - 312 + OPT_SIZE) >> 16; + *e++ = (576 - 312 + OPT_SIZE) & 0xff; +#endif /* CFG_CMD_DHCP */ #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_SUBNETMASK) - *e++ = 1; /* Subnet mask request */ - *e++ = 4; - e += 4; + *e++ = 1; /* Subnet mask request */ + *e++ = 4; + e += 4; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_GATEWAY) - *e++ = 3; /* Default gateway request */ - *e++ = 4; - e += 4; + *e++ = 3; /* Default gateway request */ + *e++ = 4; + e += 4; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_DNS) - *e++ = 6; /* Domain Name Server */ - *e++ = 4; - e += 4; + *e++ = 6; /* Domain Name Server */ + *e++ = 4; + e += 4; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_HOSTNAME) - *e++ = 12; /* Host name request */ - *e++ = 32; - e += 32; + *e++ = 12; /* Host name request */ + *e++ = 32; + e += 32; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_BOOTFILESIZE) - *e++ = 13; /* Boot file size */ - *e++ = 2; - e += 2; + *e++ = 13; /* Boot file size */ + *e++ = 2; + e += 2; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_BOOTPATH) - *e++ = 17; /* Boot path */ - *e++ = 32; - e += 32; + *e++ = 17; /* Boot path */ + *e++ = 32; + e += 32; #endif #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_NISDOMAIN) - *e++ = 40; /* NIS Domain name request */ - *e++ = 32; - e += 32; + *e++ = 40; /* NIS Domain name request */ + *e++ = 32; + e += 32; #endif - *e++ = 255; /* End of the list */ + *e++ = 255; /* End of the list */ - return e - start ; + return e - start; } #endif /* CFG_CMD_DHCP */ @@ -678,7 +679,7 @@ BootpRequest (void) | ((ulong)NetOurEther[4] << 8) | (ulong)NetOurEther[5]; BootpID += get_timer(0); - BootpID = htonl(BootpID); + BootpID = htonl(BootpID); NetCopyLong(&bp->bp_id, &BootpID); /* @@ -700,64 +701,59 @@ BootpRequest (void) } #if (CONFIG_COMMANDS & CFG_CMD_DHCP) -static void DhcpOptionsProcess(uchar *popt) +static void DhcpOptionsProcess (uchar * popt) { uchar *end = popt + BOOTP_HDR_SIZE; int oplen, size; - while ( popt < end && *popt != 0xff ) { + while (popt < end && *popt != 0xff) { oplen = *(popt + 1); - switch(*popt) { - case 1: - NetCopyIP(&NetOurSubnetMask, (popt+2)); - break; - case 3: - NetCopyIP(&NetOurGatewayIP, (popt+2)); - break; - case 6: - NetCopyIP(&NetOurDNSIP, (popt+2)); + switch (*popt) { + case 1: + NetCopyIP (&NetOurSubnetMask, (popt + 2)); + break; + case 3: + NetCopyIP (&NetOurGatewayIP, (popt + 2)); + break; + case 6: + NetCopyIP (&NetOurDNSIP, (popt + 2)); #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_DNS2) - if ( *(popt+1) > 4 ) { - NetCopyIP(&NetOurDNS2IP, (popt+2+4)); - } + if (*(popt + 1) > 4) { + NetCopyIP (&NetOurDNS2IP, (popt + 2 + 4)); + } #endif - break; - case 12: - size = truncate_sz ("Host Name", - sizeof(NetOurHostName), - oplen); - memcpy(&NetOurHostName, popt+2, size); - NetOurHostName[size] = 0 ; - break; - case 15: /* Ignore Domain Name Option */ - break; - case 17: - size = truncate_sz ("Root Path", - sizeof(NetOurRootPath), - oplen); - memcpy(&NetOurRootPath, popt+2, size); - NetOurRootPath[size] = 0 ; - break; - case 51: - NetCopyLong (&dhcp_leasetime, (ulong *)(popt + 2)); - break; - case 53: /* Ignore Message Type Option */ - break; - case 54: - NetCopyIP(&NetDHCPServerIP, (popt+2)); - break; - case 58: /* Ignore Renewal Time Option */ - break; - case 59: /* Ignore Rebinding Time Option */ - break; - default: + break; + case 12: + size = truncate_sz ("Host Name", sizeof (NetOurHostName), oplen); + memcpy (&NetOurHostName, popt + 2, size); + NetOurHostName[size] = 0; + break; + case 15: /* Ignore Domain Name Option */ + break; + case 17: + size = truncate_sz ("Root Path", sizeof (NetOurRootPath), oplen); + memcpy (&NetOurRootPath, popt + 2, size); + NetOurRootPath[size] = 0; + break; + case 51: + NetCopyLong (&dhcp_leasetime, (ulong *) (popt + 2)); + break; + case 53: /* Ignore Message Type Option */ + break; + case 54: + NetCopyIP (&NetDHCPServerIP, (popt + 2)); + break; + case 58: /* Ignore Renewal Time Option */ + break; + case 59: /* Ignore Rebinding Time Option */ + break; + default: #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_VENDOREX) - if (dhcp_vendorex_proc(popt)) + if (dhcp_vendorex_proc (popt)) break; #endif - printf("*** Unhandled DHCP Option in OFFER/ACK: %d\n", - *popt); - break; + printf ("*** Unhandled DHCP Option in OFFER/ACK: %d\n", *popt); + break; } popt += oplen + 2; /* Process next option */ } @@ -837,7 +833,7 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) debug ("DHCPHandler: got packet: (src=%d, dst=%d, len=%d) state: %d\n", src, dest, len, dhcp_state); - if (BootpCheckPkt(pkt, dest, src, len)) /* Filter out pkts we don't want */ + if (BootpCheckPkt(pkt, dest, src, len)) /* Filter out pkts we don't want */ return; debug ("DHCPHandler: got DHCP packet: (src=%d, dst=%d, len=%d) state: %d\n", @@ -864,7 +860,7 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC)) DhcpOptionsProcess(&bp->bp_vend[4]); - BootpCopyNetParams(bp); /* Store net params from reply */ + BootpCopyNetParams(bp); /* Store net params from reply */ NetSetTimeout(TIMEOUT * CFG_HZ, BootpTimeout); DhcpSendRequestPkt(bp); @@ -882,7 +878,7 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC)) DhcpOptionsProcess(&bp->bp_vend[4]); - BootpCopyNetParams(bp); /* Store net params from reply */ + BootpCopyNetParams(bp); /* Store net params from reply */ dhcp_state = BOUND; printf("DHCP client bound to address "); print_IPaddr(NetOurIP); |