We now officially support FQDNs in TFTP prefixes.
authorhpa <hpa>
Tue, 28 Dec 2004 08:04:19 +0000 (08:04 +0000)
committerhpa <hpa>
Tue, 28 Dec 2004 08:04:19 +0000 (08:04 +0000)
NEWS
dnsresolv.inc
pxelinux.doc
tracers.inc

diff --git a/NEWS b/NEWS
index d5bd270..20bf6b3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -27,10 +27,11 @@ Changes in 3.00:
        * 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
index 47573b9..4364c44 100644 (file)
@@ -73,6 +73,7 @@ dns_mangle:
 ;
 dns_compare:
                pusha
+%if 0
 
 .label:
                lodsb
@@ -94,9 +95,12 @@ dns_compare:
                
                ; 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
 
@@ -179,7 +183,6 @@ LastDNSServer       dw DNSServers
 
                section .text
 dns_resolv:
-               push si
                push di
                push cx
                push dx
@@ -201,6 +204,9 @@ dns_resolv:
                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
@@ -215,9 +221,9 @@ dns_resolv:
                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:
@@ -226,19 +232,18 @@ dns_resolv:
 
                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
@@ -271,6 +276,8 @@ dns_resolv:
                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
@@ -307,13 +314,11 @@ dns_resolv:
                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
@@ -326,8 +331,8 @@ dns_resolv:
                jmp .done
 
 .notsame:
-               add di,10
-               add di,ax
+               add si,10
+               add si,ax
                loop .parseanswer
 
 .badness:
@@ -350,6 +355,5 @@ dns_resolv:
 .timeout:
                pop dx
                pop cx
-               pop di
-               add di,4
+               pop si
                jmp .servers
index 2fe2c2a..d76e3f3 100644 (file)
@@ -320,7 +320,10 @@ PXELINUX supports the following special pathname conventions:
 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
index b158e09..c67d8a0 100644 (file)
@@ -21,7 +21,7 @@
 %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