*/
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);
}
#ifdef DEBUG_BOOTP_EXT
- printf ("[BOOTP] Received fields: \n");
+ puts ("[BOOTP] Received fields: \n");
if (NetOurSubnetMask) {
puts ("NetOurSubnetMask : ");
print_IPaddr (NetOurSubnetMask);
*/
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
}
}
*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;
#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 */
}
}
#ifdef DEBUG
- printf("BootpRequest => Our Mac: ");
+ puts ("BootpRequest => Our Mac: ");
for (reg=0; reg<6; reg++) {
printf ("%x%c",
bi_enetaddr[reg],
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
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;
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;
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;
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) {
*/
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();
}
break;
default:
- printf("DHCP: INVALID STATE\n");
+ puts ("DHCP: INVALID STATE\n");
break;
}