diff options
author | hpa <hpa> | 1999-09-27 02:42:03 +0000 |
---|---|---|
committer | hpa <hpa> | 1999-09-27 02:42:03 +0000 |
commit | ed3255d73a41d785b20de890840be6895571531a (patch) | |
tree | 2909a044f069ede2e14545671a61bb90c95a71b6 | |
parent | 7e44c9e8c7ee1a10b88ea2015bc9e043794eaa61 (diff) | |
download | syslinux-ed3255d73a41d785b20de890840be6895571531a.tar.gz |
Make filename display correctly.
Delete note that COMBOOT files don't work.
-rw-r--r-- | pxelinux.asm | 84 | ||||
-rw-r--r-- | pxelinux.doc | 3 |
2 files changed, 53 insertions, 34 deletions
diff --git a/pxelinux.asm b/pxelinux.asm index a194ffda..d52edec0 100644 --- a/pxelinux.asm +++ b/pxelinux.asm @@ -123,6 +123,30 @@ setup_seg equ 9020h setup_entry equ 0h ; Entry point 9020:0000 ; +; BOOTP/DHCP packet pattern +; + struc bootp_t +bootp: +.opcode resb 1 ; BOOTP/DHCP "opcode" +.hardware resb 1 ; ARP hardware type +.hardlen resb 1 ; Hardware address length +.gatehops resb 1 ; Used by forwarders +.ident resd 1 ; Transaction ID +.seconds resw 1 ; Seconds elapsed +.flags resw 1 ; Broadcast flags +.cip resd 1 ; Client IP +.yip resd 1 ; "Your" IP +.sip resd 1 ; Next server IP +.gip resd 1 ; Relay agent IP +.macaddr resb 16 ; Client MAC address +.sname resb 64 ; Server name (optional) +.bootfile resb 128 ; Boot file name +.v_magic resd 1 ; DHCP magic cookie +.v_flags resd 1 ; DHCP flags +.v_pad resb 56 ; Vendor options padding + endstruc + +; ; Magic number of su_header field ; HEADER_ID equ 'HdrS' ; HdrS (in littleendian hex) @@ -287,6 +311,7 @@ FKeyName resb 10*FILENAME_MAX ; File names for F-key help NumBuf resb 16 ; Buffer to load number NumBufEnd equ NumBuf+15 ; Pointer to last byte in NumBuf alignb 32 +BootFile resb 128 ; Boot file name from DHCP query KernelName resb FILENAME_MAX ; Mangled name for kernel KernelCName resb FILENAME_MAX ; Unmangled kernel name InitRDCName resb FILENAME_MAX ; Unmangled initrd name @@ -299,6 +324,7 @@ HighMemSize resd 1 ; End of memory pointer (bytes) KernelSize resd 1 ; Size of kernel (bytes) Stack resd 1 ; Pointer to reset stack PXEEntry resd 1 ; !PXE API entry point +MyIP resd 1 ; My IP address ServerIP resd 1 ; IP address of boot server SavedSSSP resw 1 ; Our SS:SP while running a COMBOOT image FBytes equ $ ; Used by open/getc @@ -340,28 +366,6 @@ Sockets resb MAX_SOCKETS*tftp_port_t_size alignb 16 ; BOOTP/DHCP packet buffer -bootp: -.opcode resb 1 ; BOOTP/DHCP "opcode" -.hardware resb 1 ; ARP hardware type -.hardlen resb 1 ; Hardware address length -.gatehops resb 1 ; Used by forwarders -.ident resd 1 ; Transaction ID -.seconds resw 1 ; Seconds elapsed -.flags resw 1 ; Broadcast flags -.cip resd 1 ; Client IP -.yip resd 1 ; "Your" IP -.sip resd 1 ; Next server IP -.gip resd 1 ; Relay agent IP -.macaddr resb 16 ; Client MAC address -.sname resb 64 ; Server name (optional) -.bootfile resb 128 ; Boot file name -.v_magic resd 1 ; DHCP magic cookie -.v_flags resd 1 ; DHCP flags -.v_pad resb 56 ; Vendor options padding - -.options resb 0500h ; Additional option space - -bootp_size equ $-bootp alignb 16 packet_buf resb 2048 ; Transfer packet @@ -537,9 +541,15 @@ query_bootp: mov ax,ds call writehex4 call crlf -.pxe_ok: mov si,myipaddr_msg +.pxe_ok: mov si,trackbuf+bootp.bootfile + mov di,BootFile + mov cx,128 >> 2 + rep movsd ; Copy bootfile name + + mov si,myipaddr_msg call writestr - mov eax,[bootp.yip] ; "Your" IP address + mov eax,[trackbuf+bootp.yip] ; "Your" IP address + mov [MyIP],eax xchg ah,al ; Host byte order ror eax,16 xchg ah,al @@ -555,7 +565,7 @@ query_bootp: mov ax,ds ; ; Save away the server IP and port number ; - mov eax,[bootp.sip] + mov eax,[trackbuf+bootp.sip] mov [ServerIP],eax mov [ServerPort], word TFTP_PORT @@ -563,7 +573,7 @@ query_bootp: mov ax,ds ; Initialize UDP stack ; udp_init: - mov eax,[bootp.yip] + mov eax,[MyIP] mov [pxe_udp_open_pkt.sip],eax mov di,pxe_udp_open_pkt mov bx,PXENV_UDP_OPEN @@ -678,7 +688,7 @@ mkkeymap: stosb ; ; Store standard filename prefix ; -prefix: mov si,bootp.bootfile +prefix: mov si,BootFile mov di,PathPrefix cld call strcpy @@ -717,7 +727,7 @@ find_config: mov di,trackbuf mov cx,cfgprefix_len rep movsb mov cx,8 - mov eax,[bootp.yip] + mov eax,[MyIP] xchg ah,al ; Host byte order ror eax,16 xchg ah,al @@ -1293,6 +1303,14 @@ kernel_corrupt: mov si,err_notkernel ; Anything else is assumed to be a Linux kernel. ; kernel_good: + pusha + mov si,KernelName + mov di,KernelCName + call unmangle_name + sub di,KernelCName + mov [KernelCNameLen],di + popa + push di push ax mov di,KernelName @@ -2374,7 +2392,7 @@ searchdir: mov [pxe_udp_read_pkt.buffer],di mov di,packet_buf_size mov [pxe_udp_read_pkt.buffersize],di - mov eax,[bootp.yip] ; Our own IP + mov eax,[MyIP] mov [pxe_udp_read_pkt.dip],eax mov [pxe_udp_read_pkt.lport],bx mov di,pxe_udp_read_pkt @@ -3365,7 +3383,7 @@ getfssec: mov [pxe_udp_read_pkt.buffersize],word packet_buf_size mov eax,[bx+tftp_remoteip] mov [pxe_udp_read_pkt.sip],eax - mov eax,[bootp.yip] + mov eax,[MyIP] mov [pxe_udp_read_pkt.dip],eax mov ax,[si+tftp_remoteport] mov [pxe_udp_read_pkt.rport],ax @@ -3642,9 +3660,9 @@ PXENVEntry dw pxe_thunk,0 pxe_bootp_query_pkt: .status: dw 0 ; Status .packettype: dw 3 ; DHCPACK packet -.buffersize: dw bootp_size ; Packet size -.buffer: dw bootp, 0 ; seg:off of buffer -.bufferlimit: dw bootp_size ; Unused +.buffersize: dw trackbufsize ; Packet size +.buffer: dw trackbuf, 0 ; seg:off of buffer +.bufferlimit: dw trackbufsize ; Unused pxe_bootp_size_query_pkt: .status: dw 0 ; Status diff --git a/pxelinux.doc b/pxelinux.doc index eef86110..dd86b196 100644 --- a/pxelinux.doc +++ b/pxelinux.doc @@ -171,4 +171,5 @@ Currently known problems: problem. + We should probably call the UDP receive function in the keyboard entry loop, so that we answer ARP requests. -+ COMBOOT images or boot sectors don't work yet. ++ Boot sectors don't work yet... they probably need auxilliary information + (such as device) to work at all. |