* New simple menu system, as an alternative to the advanced
menu system already present. See README.menu for details.
* PXELINUX: Filenames can now be prefixed with an IP address
- plus :: (e.g. 192.0.2.1::filename), which downloads a file
- from an alternate TFTP server, or just a ::
- (e.g. ::filename), which suppresses the common pathname
- prefix. See pxelinux.doc.
+ or *fully qualified* DNS name plus ::
+ (e.g. 192.0.2.1::filename or server.domain.com::filename),
+ which downloads a file from an alternate TFTP server, or
+ just a :: (e.g. ::filename), which suppresses the common
+ pathname prefix. See pxelinux.doc.
* SYSLINUX: Add an -m option to the Win32 installer (only!)
to write an MBR and -a to mark the partition SYSLINUX is
being installed on active. This will hopefully be added
;
dns_compare:
pusha
+%if 0
.label:
lodsb
; We have a string of bytes that need to match now
repe cmpsb
- jz .label
+ je .label
.done:
+%else
+ xor ax,ax
+%endif
popa
ret
section .text
dns_resolv:
- push si
push di
push cx
push dx
stosw
call dns_mangle ; Convert name to DNS labels
+
+ push si ; Save pointer to after DNS string
+
mov ax,htons(1)
stosw ; QTYPE = 1 = A
stosw ; QCLASS = 1 = IN
mov dx,PKT_TIMEOUT
mov cx,PKT_RETRY
.backoff:
- mov di,DNSServers
+ mov si,DNSServers
.servers:
- cmp di,[LastDNSServer]
+ cmp si,[LastDNSServer]
jb .moreservers
.nomoreservers:
xor eax,eax ; Nothing...
.done:
+ pop si
pop dx
pop cx
pop di
- pop si
ret
.moreservers:
- push di
+ lodsd ; EAX <- next server
+ push si
push cx
push dx
- mov eax,[di]
-
mov word [pxe_udp_write_pkt_dns.status],0
mov [pxe_udp_write_pkt_dns.sip],eax
call pxenv
and ax,ax
jnz .waitrecv
+ cmp [pxe_udp_read_pkt_dns.status],ax
+ jnz .waitrecv
; Got a packet, deal with it...
mov si,DNSRecvBuf
call dns_compare
pushf
call dns_skiplabel
- mov ax,[si+8] ; RDLENGHT
+ mov ax,[si+8] ; RDLENGTH
xchg ah,al ; ntohs
popf
jnz .notsame
- cmp word [si],htons(1) ; TYPE = A?
- jne .notsame
- cmp word [si+2],htons(1) ; CLASS = IN?
+ cmp dword [si],htons(1)*0x10001 ; TYPE = A, CLASS = IN?
jne .notsame
cmp ax,4 ; RDLENGTH = 4?
jne .notsame
jmp .done
.notsame:
- add di,10
- add di,ax
+ add si,10
+ add si,ax
loop .parseanswer
.badness:
.timeout:
pop dx
pop cx
- pop di
- add di,4
+ pop si
jmp .servers
IP address::filename (e.g. 192.0.2.1::filename)
Suppresses the common filename prefix, *and* sends a request
- to an alternate TFTP server.
+ to an alternate TFTP server. Instead of an IP address, a
+ *fully qualified* DNS name can be used,
+ e.g. "bootserver.domain.com::filename" should work, but
+ "bootserver::filename" typically will not.
:: was chosen because it is unlikely to conflict with operating system
usage. However, if you happen to have an environment for which the
%define _TRACERS_INC
; Note: The Makefile builds one version with DEBUG_MESSAGES automatically.
-; %define DEBUG_TRACERS ; Uncomment to get debugging tracers
+%define DEBUG_TRACERS 1 ; Uncomment to get debugging tracers
; %define DEBUG_MESSAGES ; Uncomment to get debugging messages
%ifdef DEBUG_TRACERS