diff options
author | hpa <hpa> | 2000-12-29 01:16:04 +0000 |
---|---|---|
committer | hpa <hpa> | 2000-12-29 01:16:04 +0000 |
commit | fcf3a07de5c293b6bfbad6f2b0d45c9436dd988d (patch) | |
tree | a8defebd4f73662cd60b3cc3efae97e02fc7e11a | |
parent | 0f521d2df21e8a18c23717891c49022100a41cce (diff) | |
download | syslinux-fcf3a07de5c293b6bfbad6f2b0d45c9436dd988d.tar.gz |
If packet 2 doesn't contain a valid IP address, try packet 3 anyway...
-rw-r--r-- | pxelinux.asm | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/pxelinux.asm b/pxelinux.asm index 9f33e884..9926ee3b 100644 --- a/pxelinux.asm +++ b/pxelinux.asm @@ -548,15 +548,9 @@ query_bootp: call crlf .pxe_ok: - mov si,myipaddr_msg - call writestr mov eax,[trackbuf+bootp.yip] ; "Your" IP address mov [MyIP],eax - xchg ah,al ; Host byte order - ror eax,16 - xchg ah,al - call writehex8 - call crlf + ; ; Now, get the boot file and other info. This lives in the CACHED_REPLY ; packet (query info 3). @@ -578,6 +572,26 @@ query_bootp: rep movsd ; Copy bootfile name ; +; If packet 2 didn't contain a valid IP address, guess that it's in this +; packet instead +; + mov si,myipaddr_msg + call writestr + mov eax,[MyIP] + cmp eax, byte 0 ; 0.0.0.0 bad + je .badip + cmp al,224 ; 224..255.x.x.x + jb .goodip +.badip: + mov eax,[trackbuf+bootp.yip] ; Hope this is better... + mov [MyIP],eax +.goodip: + xchg ah,al ; Host byte order + ror eax,16 + xchg ah,al + call writehex8 + call crlf +; ; Normalize ES = DS ; mov ax,ds |