A2osX/BIN/IPCONFIG.S.DHCP.txt
2023-11-12 14:20:15 +01:00

386 lines
6.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
DHCP.INIT.OK >LDYA L.MSG.DHCP.NA
>SYSCALL PutS
sec
rts
DHCP.INIT lda IPCFG+S.NETCFG.STATUS
and #S.IPCFG.STATUS.OK
bne DHCP.INIT.OK Already Configured, exit
ldx #3
.1 eor A2osX.T16,x
sta DHCP.DISC.XID,x
sta DHCP.REQ.XID,x
dex
bpl .1
ldx #5
.2 lda IPCFG+S.NETCFG.MAC,x
sta DHCP.DISC.CHADDR,x
sta DHCP.REQ.CHADDR,x
dex
bpl .2
>PUSHBI S.SOCKET.T.DGRAM
>PUSHBI 0 no protocol
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
sta hSocket
>PUSHA
>PUSHW L.SA.LOCAL
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9
>SLEEP
>PUSHB hSocket
>PUSHBI S.SOCKET.O.BROADCAST
>LIBCALL hLIBTCPIP,LIBTCPIP.setsockopt
>PUSHB hSocket
>PUSHW L.SA.REMOTE
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
>LDYA L.MSG.DHCP.CFG1
>SYSCALL PutS
rts
.9 jmp DHCP.RUN.KO
*--------------------------------------
DHCP.RUN stz IPCFG+S.NETCFG.STATUS
>SLEEP
DHCP.RUN.SDISC >PUSHB hSocket
>PUSHW L.DHCP.DISC
>PUSHWI DHCP.DISC.LEN
>PUSHW L.SA.DEST
>LIBCALL hLIBTCPIP,LIBTCPIP.SendTo
bcc .1
jmp DHCP.RUN.KO
.1 lda #S.IPCFG.STATUS.SDISC
sta IPCFG+S.NETCFG.STATUS
DHCP.RUN.ROFFER jsr DHCP.RUN.SKT.RECV
bcc .1
lda #1
jmp DHCP.RUN.KO
.1 jsr DHCP.CheckOffer
bcs DHCP.RUN.ROFFER
lda #S.IPCFG.STATUS.ROFFER
sta IPCFG+S.NETCFG.STATUS
DHCP.RUN.SREQ >PUSHW L.MSG.DHCP.CFG2
ldx #0
.1 >PUSHB IPCFG+S.IPCFG.DHCPSRVR,x
inx
cpx #4
bne .1
>PUSHBI 4
>SYSCALL PrintF
>PUSHB hSocket
>PUSHW L.DHCP.REQ
>PUSHWI DHCP.REQ.LEN
>PUSHW L.SA.DEST
>LIBCALL hLIBTCPIP,LIBTCPIP.SendTo
bcs DHCP.RUN.KO
lda #S.IPCFG.STATUS.SREQ
sta IPCFG+S.NETCFG.STATUS
DHCP.RUN.RACK jsr DHCP.RUN.SKT.RECV
bcc .1
lda #2
bra DHCP.RUN.KO
.1 jsr DHCP.CheckAck
bcs DHCP.RUN.RACK
DHCP.RUN.OK lda #S.IPCFG.STATUS.OK
sta IPCFG+S.NETCFG.STATUS
>PUSHW L.IPCFG
>LIBCALL hLIBTCPIP,LIBTCPIP.SETCFG
>PUSHW L.MSG.DHCP.OK
ldx #0
.1 lda IPCFG+S.IPCFG.IP,x
>PUSHA
inx
cpx #4
bne .1
ldx #0
.2 lda IPCFG+S.IPCFG.MASK,x
>PUSHA
inx
cpx #4
bne .2
>PUSHBI 8
>SYSCALL PrintF
rts Leave with NO ERROR
DHCP.RUN.KO pha
>PUSHW L.MSG.DHCP.KO
pla
pha
>PUSHA
>PUSHBI 1
>SYSCALL PrintF
pla
sec
rts
*--------------------------------------
DHCP.RUN.SKT.RECV
lda #TIMEOUT.MAX
sta TimeOut
.1 >SLEEP
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .8
cmp #E.NODATA
bne .9
lda TimeOut
bne .1
.9 sec
rts
.8 sta hFrame
>SYSCALL GetMemPtr
>STYA ZPFrameBase
rts
*--------------------------------------
DHCP.QUIT lda hSocket
beq .1
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.1 clc
rts
*--------------------------------------
DHCP.CheckOffer jsr DHCP.CheckXID
bcs .9
cmp #S.DHCP.OPTIONS.DHCPOffer
bne .9
* ldy #S.DHCP.YIADDR+11 Copy YIADDR,SIADDR+GIADDR
* ldx #11
*.1 lda (ZPFrameBase),y
* sta DHCP.REQ.YIADDR,x
* dey
* dex
* bpl .1
ldy #S.DHCP.YIADDR+3
ldx #3
.2 lda (ZPFrameBase),y
sta DHCP.REQ.OPT.REQIP,x
sta IPCFG+S.IPCFG.IP,x
dey
dex
bpl .2
ldy #S.DHCP.SIADDR+3
lda (ZPFrameBase),y
bne .3
ldy #S.IP.SRC+3
.3 ldx #3
.4 lda (ZPFrameBase),y
sta IPCFG+S.IPCFG.DHCPSRVR,x
sta DHCP.REQ.OPT.SVRIP,x
dey
dex
bpl .4
.5 inc ZPFramePtr skip Option 53 (DHCPOffer:530102)
bne .6
inc ZPFramePtr+1
.6 lda (ZPFramePtr)
sec
adc ZPFramePtr add option len + 1
sta ZPFramePtr
bcc .7
inc ZPFramePtr+1
.7 lda (ZPFramePtr)
cmp #S.DHCP.OPTIONS.END
beq .8
jsr DHCP.GetOption May override SVRIP
bra .5
.8 clc
.HS B0 BCS
.9 sec
php
lda hFrame
>SYSCALL FreeMem
stz hFrame
plp
rts
*--------------------------------------
DHCP.GetOption cmp #S.DHCP.OPTIONS.MASK
bne .1
ldx #S.IPCFG.MASK
bra DHCP.GetOption.CopyIP
.1 cmp #S.DHCP.OPTIONS.GW
bne .2
ldx #S.IPCFG.GW
bra DHCP.GetOption.CopyIP
.2 cmp #S.DHCP.OPTIONS.DNS
bne .3
ldx #S.IPCFG.DNS1
bra DHCP.GetOption.CopyIP
.3 cmp #S.DHCP.OPTIONS.SRVID
bne .4
ldy #5
ldx #3
.31 lda (ZPFramePtr),y
sta DHCP.REQ.OPT.SVRIP,x
dey
dex
bpl .31
rts
.4 cmp #S.DHCP.OPTIONS.DOMAIN
bne .9
ldy #1
lda (ZPFramePtr),y Get String len
cmp #45
bcc .6
lda #44
.6 sta IPCFG+S.IPCFG.DOMAIN store len
tax
.7 iny
lda (ZPFramePtr),y
sta IPCFG+S.IPCFG.DOMAIN-1,y
dex
bne .7
.9 rts
*--------------------------------------
DHCP.GetOption.CopyIP
ldy #1
lda (ZPFramePtr),y Get Byte count
cmp #9
bcc .1
lda #8 max 8 bytes (2 DNS)
.1 iny
.2 pha
lda (ZPFramePtr),y
sta IPCFG,x
iny
inx
pla
dec
bne .2
rts
*--------------------------------------
DHCP.CheckAck jsr DHCP.CheckXID
bcs .9
cmp #S.DHCP.OPTIONS.DHCPAck
bne .9
.8 clc
.HS B0 BCS
.9 sec
php
lda hFrame
>SYSCALL FreeMem
stz hFrame
plp
rts
*--------------------------------------
DHCP.CheckXID ldy #S.DHCP.XID+3
ldx #3
.1 lda (ZPFrameBase),y
cmp DHCP.DISC.XID,x same XID ?
bne .9
dey
dex
bpl .1
lda ZPFrameBase
clc
adc #S.DHCP.OPTIONS
sta ZPFramePtr
lda ZPFrameBase+1
adc /S.DHCP.OPTIONS
sta ZPFramePtr+1
lda (ZPFramePtr)
cmp #S.DHCP.OPTIONS.MSGTYPE
bne .9
ldy #2
lda (ZPFramePtr),y
clc
rts
.9 sec
rts
*--------------------------------------
MAN
SAVE usr/src/bin/ipconfig.s.dhcp
LOAD usr/src/bin/ipconfig.s
ASM