DhcpRxBuf = &RxBuf[OfferIx];\r
\r
//\r
- // send DHCP request\r
- // if fail return false\r
+ // use next server address first.\r
//\r
- CopyMem (\r
- ((EFI_IPv4_ADDRESS *) &ServerIp),\r
- &((DHCPV4_OP_SERVER_IP *) DhcpRxBuf->OpAdds.PktOptAdds[OP_DHCP_SERVER_IP_IX - 1])->Ip,\r
- sizeof (EFI_IPv4_ADDRESS)\r
- );\r
+ ServerIp.Addr[0] = DhcpRxBuf->u.Dhcpv4.siaddr;\r
+ if (ServerIp.Addr[0] == 0) {\r
+ //\r
+ // next server address is NULL, use option 54.\r
+ //\r
+ CopyMem (\r
+ ((EFI_IPv4_ADDRESS *) &ServerIp),\r
+ &((DHCPV4_OP_SERVER_IP *) DhcpRxBuf->OpAdds.PktOptAdds[OP_DHCP_SERVER_IP_IX - 1])->Ip,\r
+ sizeof (EFI_IPv4_ADDRESS)\r
+ );\r
+ }\r
\r
//\r
// client IP address - filled in by client if it knows it\r