A2osX/BIN/IPCONFIG.S.DHCP.txt

384 lines
6.5 KiB
Plaintext
Raw Normal View History

2018-12-06 16:39:53 +00:00
NEW
PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
2019-01-17 15:05:48 +00:00
DHCP.INIT lda IPCFG+S.NETCFG.STATUS
2018-12-06 16:39:53 +00:00
and #S.IPCFG.STATUS.OK
bne .99 Already Configured, exit
2019-01-17 15:05:48 +00:00
stz IPCFG+S.NETCFG.STATUS
2018-12-06 16:39:53 +00:00
ldx #3
2019-01-15 07:36:21 +00:00
.1 lda A2osX.TIMER16,x
2018-12-06 16:39:53 +00:00
sta DHCP.DISC.XID,x
sta DHCP.REQ.XID,x
dex
2019-01-15 07:36:21 +00:00
bpl .1
2018-12-06 16:39:53 +00:00
ldx #5
2019-01-17 15:05:48 +00:00
.2 lda IPCFG+S.NETCFG.MAC,x
2018-12-06 16:39:53 +00:00
sta DHCP.DISC.CHADDR,x
sta DHCP.REQ.CHADDR,x
dex
bpl .2
clc
.9 rts
2019-01-05 20:33:08 +00:00
.99 >LDYA L.MSG.DHCP.NA
2018-12-06 16:39:53 +00:00
2019-01-15 16:37:32 +00:00
>SYSCALL puts
2018-12-06 16:39:53 +00:00
lda #0
sec
rts
*--------------------------------------
2019-01-05 20:33:08 +00:00
DHCP.RUN >PUSHBI 0 no protocol
2018-12-06 16:39:53 +00:00
lda #S.SOCKET.T.DGRAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcc .1
2019-01-05 20:33:08 +00:00
.9 jmp DHCP.RUN.KO
2018-12-06 16:39:53 +00:00
.1 >STA.G hSocket
pha
>PUSHW L.SA.LOCAL
pla
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9
>PUSHWI S.SOCKET.O.BROADCAST
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.setsockopt
>PUSHW L.SA.REMOTE
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
2019-01-05 20:33:08 +00:00
>LDYA L.MSG.DHCP.CFG1
2018-12-06 16:39:53 +00:00
>SYSCALL puts
jsr Init.Timeout
2019-01-05 20:33:08 +00:00
DHCP.RUN.SDISC >PUSHWI DHCP.DISC.LEN
2018-12-06 16:39:53 +00:00
>PUSHW L.DHCP.DISC
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .1
2019-01-05 20:33:08 +00:00
jmp DHCP.RUN.KO
2018-12-06 16:39:53 +00:00
.1 lda #S.IPCFG.STATUS.SDISC
sta IPCFG
2019-01-05 20:33:08 +00:00
DHCP.RUN.ROFFER >SLEEP
2018-12-06 16:39:53 +00:00
2019-01-05 20:33:08 +00:00
jsr DHCP.RUN.SKT.RCVD
2018-12-06 16:39:53 +00:00
bcc .1
jsr Wait.Timeout
2019-01-05 20:33:08 +00:00
bne DHCP.RUN.ROFFER
2018-12-06 16:39:53 +00:00
lda #1
2019-01-05 20:33:08 +00:00
jmp DHCP.RUN.KO
2018-12-06 16:39:53 +00:00
.1 jsr CheckDHCPOffer
2019-01-05 20:33:08 +00:00
bcs DHCP.RUN.ROFFER
2018-12-06 16:39:53 +00:00
lda #S.IPCFG.STATUS.ROFFER
sta IPCFG
2019-01-05 20:33:08 +00:00
DHCP.RUN.SREQ ldx #3
2018-12-06 16:39:53 +00:00
.1 >PUSHB IPCFG+S.IPCFG.DHCPSRVR,x
dex
bpl .1
>PUSHBI 4
2019-01-05 20:33:08 +00:00
>LDYA L.MSG.DHCP.CFG2
2018-12-06 16:39:53 +00:00
>SYSCALL printf
>PUSHWI DHCP.REQ.LEN
>PUSHW L.DHCP.REQ
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
2019-01-05 20:33:08 +00:00
bcs DHCP.RUN.KO
2018-12-06 16:39:53 +00:00
lda #S.IPCFG.STATUS.SREQ
sta IPCFG
2019-01-05 20:33:08 +00:00
DHCP.RUN.RACK >SLEEP
2018-12-06 16:39:53 +00:00
2019-01-05 20:33:08 +00:00
jsr DHCP.RUN.SKT.RCVD
2018-12-06 16:39:53 +00:00
bcc .1
jsr Wait.Timeout
2019-01-05 20:33:08 +00:00
bne DHCP.RUN.RACK
2018-12-06 16:39:53 +00:00
lda #2
2019-01-05 20:33:08 +00:00
bra DHCP.RUN.KO
2018-12-06 16:39:53 +00:00
.1 jsr CheckDHCPAck
2019-01-05 20:33:08 +00:00
bcs DHCP.RUN.RACK
2018-12-06 16:39:53 +00:00
2019-01-05 20:33:08 +00:00
DHCP.RUN.OK lda #S.IPCFG.STATUS.OK
2018-12-06 16:39:53 +00:00
sta IPCFG
>PUSHW L.IPCFG
2019-01-14 07:11:50 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.SETCFG
2018-12-06 16:39:53 +00:00
ldx #3
2019-01-05 20:33:08 +00:00
2018-12-06 16:39:53 +00:00
.1 lda IPCFG+S.IPCFG.MASK,x
>PUSHA
dex
bpl .1
ldx #3
2019-01-05 20:33:08 +00:00
2018-12-06 16:39:53 +00:00
.2 lda IPCFG+S.IPCFG.IP,x
>PUSHA
dex
bpl .2
>PUSHBI 8
2019-01-05 20:33:08 +00:00
>LDYA L.MSG.DHCP.OK
2018-12-06 16:39:53 +00:00
>SYSCALL printf
lda #0 Leave with NO ERROR
sec
rts
2019-01-05 20:33:08 +00:00
DHCP.RUN.KO pha
2018-12-06 16:39:53 +00:00
>PUSHA
>PUSHBI 1
2019-01-05 20:33:08 +00:00
>LDYA L.MSG.DHCP.KO
2018-12-06 16:39:53 +00:00
>SYSCALL printf
pla
sec
rts
*--------------------------------------
2019-01-05 20:33:08 +00:00
DHCP.RUN.SKT.RCVD
>LDA.G hSocket
2018-12-06 16:39:53 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcs .9
>STA.G hFrame
>SYSCALL GetMemPtr
>STYA ZPFrameBase
.9 rts
*--------------------------------------
2019-01-05 20:33:08 +00:00
DHCP.QUIT >LDA.G hSocket
2018-12-06 16:39:53 +00:00
beq .1
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
2019-01-05 20:33:08 +00:00
.1 clc
2018-12-06 16:39:53 +00:00
rts
*--------------------------------------
CheckDHCPOffer jsr CheckDHCPXID
bcs .9
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
cmp #S.DHCP.OPTIONS.DHCPOffer
bne .9
2019-01-17 15:05:48 +00:00
* ldy #S.DHCP.YIADDR+11 Copy YIADDR,SIADDR+GIADDR
* ldx #11
2018-12-06 16:39:53 +00:00
2019-01-17 15:05:48 +00:00
*.1 lda (ZPFrameBase),y
* sta DHCP.REQ.YIADDR,x
* dey
* dex
* bpl .1
2018-12-06 16:39:53 +00:00
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
2019-01-17 15:05:48 +00:00
ldy #S.DHCP.SIADDR+3
lda (ZPFrameBase),y
bne .3
2018-12-06 16:39:53 +00:00
ldy #S.IP.SRC+3
2019-01-17 15:05:48 +00:00
.3 ldx #3
.4 lda (ZPFrameBase),y
2018-12-06 16:39:53 +00:00
sta IPCFG+S.IPCFG.DHCPSRVR,x
2019-01-17 15:05:48 +00:00
sta DHCP.REQ.OPT.SVRIP,x
2018-12-06 16:39:53 +00:00
dey
dex
2019-01-17 15:05:48 +00:00
bpl .4
2018-12-06 16:39:53 +00:00
.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
2019-01-17 15:05:48 +00:00
jsr GetDHCPOption May override SVRIP
2018-12-06 16:39:53 +00:00
bra .5
.8 jsr CS.RUN.DISCARD
clc
rts
.9 jsr CS.RUN.DISCARD
sec
rts
*--------------------------------------
GetDHCPOption cmp #S.DHCP.OPTIONS.MASK
bne .1
ldx #S.IPCFG.MASK
bra GetDHCPOption.CopyIP
.1 cmp #S.DHCP.OPTIONS.GW
bne .2
ldx #S.IPCFG.GW
bra GetDHCPOption.CopyIP
.2 cmp #S.DHCP.OPTIONS.DNS
bne .3
ldx #S.IPCFG.DNS1
bra GetDHCPOption.CopyIP
2019-01-17 15:05:48 +00:00
.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
2018-12-06 16:39:53 +00:00
bne .9
ldy #1
lda (ZPFramePtr),y Get String len
2019-01-17 15:05:48 +00:00
cmp #45
bcc .6
lda #44
2018-12-06 16:39:53 +00:00
2019-01-17 15:05:48 +00:00
.6 sta IPCFG+S.IPCFG.DOMAIN store len
2018-12-06 16:39:53 +00:00
tax
2019-01-17 15:05:48 +00:00
.7 iny
2018-12-06 16:39:53 +00:00
lda (ZPFramePtr),y
sta IPCFG+S.IPCFG.DOMAIN-1,y
dex
2019-01-17 15:05:48 +00:00
bne .7
2018-12-06 16:39:53 +00:00
.9 rts
*--------------------------------------
GetDHCPOption.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
*--------------------------------------
CheckDHCPAck jsr CheckDHCPXID
bcs .9
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
cmp #S.DHCP.OPTIONS.DHCPAck
bne .9
jsr CS.RUN.DISCARD
clc
rts
.9 jsr CS.RUN.DISCARD
sec
rts
*--------------------------------------
2019-01-05 20:33:08 +00:00
CS.RUN.DISCARD >LDA.G hFrame
>SYSCALL FreeMem
rts
*--------------------------------------
2018-12-06 16:39:53 +00:00
CheckDHCPXID ldy #S.DHCP.XID+3
ldx #3
.1 lda (ZPFrameBase),y
cmp DHCP.DISC.XID,x same XID ?
bne .9
dey
dex
bpl .1
clc
rts
.9 sec
rts
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/IPCONFIG.S.DHCP
LOAD USR/SRC/SBIN/IPCONFIG.S
ASM