]> git.sur5r.net Git - u-boot/blobdiff - net/bootp.c
Fixes to the Lubbock (PXA 25x) support:
[u-boot] / net / bootp.c
index f5adce4f5e34d7f40fe67bf74e85da1cc35865dc..b907351f25c5434969731cfa2bb587ecd860eba6 100644 (file)
@@ -117,10 +117,15 @@ static int BootpCheckPkt(uchar *pkt, unsigned dest, unsigned src, unsigned len)
  */
 static void BootpCopyNetParams(Bootp_t *bp)
 {
+       IPaddr_t tmp_ip;
+
        NetCopyIP(&NetOurIP, &bp->bp_yiaddr);
-       NetCopyIP(&NetServerIP, &bp->bp_siaddr);
+       NetCopyIP(&tmp_ip, &bp->bp_siaddr);
+       if (tmp_ip != 0)
+               NetCopyIP(&NetServerIP, &bp->bp_siaddr);
        memcpy (NetServerEther, ((Ethernet_t *)NetRxPkt)->et_src, 6);
-       copy_filename (BootFile, bp->bp_file, sizeof(BootFile));
+       if (strlen(bp->bp_file) > 0)
+               copy_filename (BootFile, bp->bp_file, sizeof(BootFile));
 
        debug ("Bootfile: %s\n", BootFile);
 
@@ -263,7 +268,7 @@ static void BootpVendorProcess (u8 * ext, int size)
        }
 
 #ifdef DEBUG_BOOTP_EXT
-       printf ("[BOOTP] Received fields: \n");
+       puts ("[BOOTP] Received fields: \n");
        if (NetOurSubnetMask) {
                puts ("NetOurSubnetMask : ");
                print_IPaddr (NetOurSubnetMask);
@@ -339,12 +344,14 @@ BootpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
                         */
                        NetState = NETLOOP_SUCCESS;
                        return;
+#if (CONFIG_COMMANDS & CFG_CMD_NFS)
                } else if (strcmp(s, "NFS") == 0) {
                        /*
                         * Use NFS to load the bootfile.
                         */
                        NfsStart();
                        return;
+#endif
                }
        }
 
@@ -441,6 +448,10 @@ static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t R
        *e++  = 1;              /* Subnet Mask */
        *cnt += 1;
 #endif
+#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_TIMEOFFSET)
+       *e++  = 2;
+       *cnt += 1;
+#endif
 #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_GATEWAY)
        *e++  = 3;              /* Router Option */
        *cnt += 1;
@@ -464,6 +475,10 @@ static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t R
 #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_NISDOMAIN)
        *e++  = 40;             /* NIS Domain name request */
        *cnt += 1;
+#endif
+#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_NTPSERVER)
+       *e++  = 42;
+       *cnt += 1;
 #endif
        *e++  = 255;            /* End of the list */
 
@@ -578,7 +593,7 @@ BootpRequest (void)
                        }
                }
 #ifdef DEBUG
-               printf("BootpRequest => Our Mac: ");
+               puts ("BootpRequest => Our Mac: ");
                for (reg=0; reg<6; reg++) {
                        printf ("%x%c",
                                bi_enetaddr[reg],
@@ -637,8 +652,7 @@ BootpRequest (void)
        pkt = NetTxPacket;
        memset ((void*)pkt, 0, PKTSIZE);
 
-       NetSetEther(pkt, NetBcastAddr, PROT_IP);
-       pkt += ETHER_HDR_SIZE;
+       pkt += NetSetEther(pkt, NetBcastAddr, PROT_IP);
 
        /*
         * Next line results in incorrect packet size being transmitted, resulting
@@ -712,6 +726,12 @@ static void DhcpOptionsProcess (uchar * popt)
                case 1:
                        NetCopyIP (&NetOurSubnetMask, (popt + 2));
                        break;
+#if (CONFIG_COMMANDS & CFG_CMD_SNTP) && (CONFIG_BOOTP_MASK & CONFIG_BOOTP_TIMEOFFSET)
+               case 2:         /* Time offset  */
+                       NetCopyLong (&NetTimeOffset, (ulong *) (popt + 2));
+                       NetTimeOffset = ntohl (NetTimeOffset);
+                       break;
+#endif
                case 3:
                        NetCopyIP (&NetOurGatewayIP, (popt + 2));
                        break;
@@ -735,6 +755,11 @@ static void DhcpOptionsProcess (uchar * popt)
                        memcpy (&NetOurRootPath, popt + 2, size);
                        NetOurRootPath[size] = 0;
                        break;
+#if (CONFIG_COMMANDS & CFG_CMD_SNTP) && (CONFIG_BOOTP_MASK & CONFIG_BOOTP_NTPSERVER)
+               case 42:        /* NTP server IP */
+                       NetCopyIP (&NetNtpServerIP, (popt + 2));
+                       break;
+#endif
                case 51:
                        NetCopyLong (&dhcp_leasetime, (ulong *) (popt + 2));
                        break;
@@ -784,8 +809,7 @@ static void DhcpSendRequestPkt(Bootp_t *bp_offer)
        pkt = NetTxPacket;
        memset ((void*)pkt, 0, PKTSIZE);
 
-       NetSetEther(pkt, NetBcastAddr, PROT_IP);
-       pkt += ETHER_HDR_SIZE;
+       pkt += NetSetEther(pkt, NetBcastAddr, PROT_IP);
 
        iphdr = pkt;            /* We'll need this later to set proper pkt size */
        pkt += IP_HDR_SIZE;
@@ -880,9 +904,9 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
                                DhcpOptionsProcess(&bp->bp_vend[4]);
                        BootpCopyNetParams(bp); /* Store net params from reply */
                        dhcp_state = BOUND;
-                       printf("DHCP client bound to address ");
+                       puts ("DHCP client bound to address ");
                        print_IPaddr(NetOurIP);
-                       printf("\n");
+                       putc ('\n');
 
                        /* Obey the 'autoload' setting */
                        if ((s = getenv("autoload")) != NULL) {
@@ -893,12 +917,14 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
                                         */
                                        NetState = NETLOOP_SUCCESS;
                                        return;
+#if (CONFIG_COMMANDS & CFG_CMD_NFS)
                                } else if (strcmp(s, "NFS") == 0) {
                                        /*
                                         * Use NFS to load the bootfile.
                                         */
                                        NfsStart();
                                        return;
+#endif
                                }
                        }
                        TftpStart();
@@ -906,7 +932,7 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
                }
                break;
        default:
-               printf("DHCP: INVALID STATE\n");
+               puts ("DHCP: INVALID STATE\n");
                break;
        }