mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-28 03:55:01 +00:00
LIBTCPIP:Cache expiration, retry count....
This commit is contained in:
parent
de7341b7f9
commit
f6adb05c07
@ -5,6 +5,91 @@ INC 1
|
|||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
ARP.CLEAR ldx #K.ARPCACHE.SIZE*S.ARPCACHE
|
||||||
|
.1 dex
|
||||||
|
stz ARP.CACHE,x
|
||||||
|
txa
|
||||||
|
bne .1
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* ARP.QUERY
|
||||||
|
* In:
|
||||||
|
* PULLW PTR to IP
|
||||||
|
* PULLW PTR to MAC (to fill)
|
||||||
|
* Out:
|
||||||
|
* CC: hit: MAC filled
|
||||||
|
* CS: missed
|
||||||
|
*--------------------------------------
|
||||||
|
ARP.QUERY >PULLW ZPPtrIP IP
|
||||||
|
>PULLW ZPPtrMAC MAC
|
||||||
|
|
||||||
|
ldy #3
|
||||||
|
.1 lda (ZPPtrIP),y
|
||||||
|
sta ARP.TmpCache+S.ARPCACHE.IP,y
|
||||||
|
dey
|
||||||
|
bpl .1
|
||||||
|
jsr ARP.QUERY.I
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #5
|
||||||
|
.2 lda ARP.TmpCache+S.ARPCACHE.MAC,y
|
||||||
|
sta (ZPPtrMAC),y
|
||||||
|
dey
|
||||||
|
bpl .2
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
* ARP.ADD
|
||||||
|
* In:
|
||||||
|
* PULLW PTR to IP
|
||||||
|
* PULLW PTR to MAC
|
||||||
|
*--------------------------------------
|
||||||
|
ARP.ADD >PULLW ZPPtrIP IP
|
||||||
|
>PULLW ZPPtrMAC MAC
|
||||||
|
|
||||||
|
stz ARP.TmpCache+S.ARPCACHE.TTL
|
||||||
|
stz ARP.TmpCache+S.ARPCACHE.TTL+1
|
||||||
|
|
||||||
|
ldy #3
|
||||||
|
.1 lda (ZPPtrIP),y
|
||||||
|
sta ARP.TmpCache+S.ARPCACHE.IP,y
|
||||||
|
dey
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
ldy #5
|
||||||
|
.2 lda (ZPPtrMAC),y
|
||||||
|
sta ARP.TmpCache+S.ARPCACHE.MAC,y
|
||||||
|
dey
|
||||||
|
bpl .2
|
||||||
|
|
||||||
|
lda #S.ARPCACHE.STATUS.RESOLVED+S.ARPCACHE.STATUS.STATIC
|
||||||
|
|
||||||
|
ARP.ADD.I sta ARP.TmpCache
|
||||||
|
|
||||||
|
jsr ARP.FIND.BY.IP
|
||||||
|
bcc .1
|
||||||
|
jsr ARP.FIND.FREE
|
||||||
|
|
||||||
|
.1 ldy #S.ARPCACHE-1
|
||||||
|
.2 lda ARP.TmpCache,y
|
||||||
|
sta (ZPCachePtr),y
|
||||||
|
dey
|
||||||
|
bpl .2
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* ARP.GETCACHE
|
||||||
|
* Out:
|
||||||
|
* Y,A = PTR to ARP.CACHE
|
||||||
|
*--------------------------------------
|
||||||
|
ARP.GETCACHE >LDYA L.ARP.CACHE
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* PRIVATE
|
||||||
|
*--------------------------------------
|
||||||
ARP.IN ldy #S.ARP.TPA+3
|
ARP.IN ldy #S.ARP.TPA+3
|
||||||
ldx #3
|
ldx #3
|
||||||
|
|
||||||
@ -78,53 +163,27 @@ ARP.IN.REP lda #K.ARP.TTL
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ARP.CLEAR ldx #K.ARPCACHE.SIZE*S.ARPCACHE
|
|
||||||
.1 dex
|
|
||||||
stz ARP.CACHE,x
|
|
||||||
txa
|
|
||||||
bne .1
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* ARP.QUERY
|
|
||||||
* In:
|
|
||||||
* PULLW PTR to IP
|
|
||||||
* PULLW PTR to MAC (to fill)
|
|
||||||
* Out:
|
|
||||||
* CC: hit: MAC filled
|
|
||||||
* CS: missed
|
|
||||||
*--------------------------------------
|
|
||||||
ARP.QUERY >PULLW ZPPtrIP IP
|
|
||||||
>PULLW ZPPtrMAC MAC
|
|
||||||
|
|
||||||
ARP.QUERY.I jsr ARP.FIND.BY.IP
|
ARP.QUERY.I jsr ARP.FIND.BY.IP
|
||||||
bcs .3 send an ARP request
|
bcs .3 send an ARP request
|
||||||
|
|
||||||
lda (ZPCachePtr) get status...
|
lda (ZPCachePtr) get status...
|
||||||
bpl .9 Pending...
|
bpl .9 Pending...
|
||||||
|
|
||||||
lda ZPCachePtr
|
ldy #S.ARPCACHE.MAC
|
||||||
clc
|
|
||||||
adc #S.ARPCACHE.MAC
|
|
||||||
sta ZPCachePtr
|
|
||||||
bcc .1
|
|
||||||
inc ZPCachePtr+1
|
|
||||||
|
|
||||||
.1 ldy #5
|
|
||||||
|
|
||||||
.2 lda (ZPCachePtr),y
|
.2 lda (ZPCachePtr),y
|
||||||
sta (ZPPtrMAC),y
|
sta ARP.TmpCache,y
|
||||||
dey
|
iny
|
||||||
bpl .2
|
cpy #S.ARPCACHE.MAC+6
|
||||||
|
bne .2
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.3 ldy #3
|
.3 ldx #3
|
||||||
|
|
||||||
.4 lda (ZPPtrIP),y
|
.4 lda ARP.TmpCache+S.ARPCACHE.IP,x
|
||||||
sta ARP.REQ.TPA,y
|
sta ARP.REQ.TPA,x
|
||||||
sta ARP.TmpCache+S.ARPCACHE.IP,y
|
dex
|
||||||
dey
|
|
||||||
bpl .4
|
bpl .4
|
||||||
|
|
||||||
>PUSHW L.ARP.REQ
|
>PUSHW L.ARP.REQ
|
||||||
@ -140,114 +199,10 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP
|
|||||||
lda #S.ARPCACHE.STATUS.PENDING
|
lda #S.ARPCACHE.STATUS.PENDING
|
||||||
jsr ARP.ADD.I
|
jsr ARP.ADD.I
|
||||||
|
|
||||||
.9 lda #ERR.ARPPENDING
|
.9 lda #ERR.ARP.PENDING
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* ARP.ADD
|
|
||||||
* In:
|
|
||||||
* PULLW PTR to IP
|
|
||||||
* PULLW PTR to MAC
|
|
||||||
*--------------------------------------
|
|
||||||
ARP.ADD >PULLW ZPPtrIP IP
|
|
||||||
>PULLW ZPPtrMAC MAC
|
|
||||||
|
|
||||||
stz ARP.TmpCache+S.ARPCACHE.TTL
|
|
||||||
stz ARP.TmpCache+S.ARPCACHE.TTL+1
|
|
||||||
|
|
||||||
ldy #3
|
|
||||||
.1 lda (ZPPtrIP),y
|
|
||||||
sta ARP.TmpCache+S.ARPCACHE.IP,y
|
|
||||||
dey
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
ldy #5
|
|
||||||
.2 lda (ZPPtrMAC),y
|
|
||||||
sta ARP.TmpCache+S.ARPCACHE.MAC,y
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
lda #S.ARPCACHE.STATUS.RESOLVED+S.ARPCACHE.STATUS.STATIC
|
|
||||||
|
|
||||||
ARP.ADD.I sta ARP.TmpCache
|
|
||||||
|
|
||||||
jsr ARP.FIND.BY.IP
|
|
||||||
bcc .1
|
|
||||||
jsr ARP.FIND.FREE
|
|
||||||
|
|
||||||
.1 ldy #S.ARPCACHE-1
|
|
||||||
.2 lda ARP.TmpCache,y
|
|
||||||
sta (ZPCachePtr),y
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* ARP.GETCACHE
|
|
||||||
* Out:
|
|
||||||
* Y,A = PTR to ARP.CACHE
|
|
||||||
*--------------------------------------
|
|
||||||
ARP.GETCACHE >LDYA L.ARP.CACHE
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* PRIVATE
|
|
||||||
*--------------------------------------
|
|
||||||
ARP.RESOLVE ldy #S.IP.DST
|
|
||||||
lda (ZPFrameBase1),y
|
|
||||||
iny
|
|
||||||
.1 and (ZPFrameBase1),y
|
|
||||||
iny
|
|
||||||
cpy #S.IP.DST+4
|
|
||||||
bne .1
|
|
||||||
cmp #$FF
|
|
||||||
bne .3 not a broadcast....
|
|
||||||
|
|
||||||
ldy #S.ETH.DSTMAC
|
|
||||||
.2 sta (ZPFrameBase1),y
|
|
||||||
iny
|
|
||||||
cpy #S.ETH.DSTMAC+6
|
|
||||||
bne .2
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 ldy #S.IP.DST+3
|
|
||||||
ldx #3
|
|
||||||
.4 lda (ZPFrameBase1),y
|
|
||||||
eor IPCFG+S.IPCFG.IP,x
|
|
||||||
and IPCFG+S.IPCFG.MASK,x
|
|
||||||
bne .5
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .4
|
|
||||||
|
|
||||||
lda ZPFrameBase1 Same network, query ARP for dest IP
|
|
||||||
clc
|
|
||||||
adc #S.IP.DST
|
|
||||||
sta ZPPtrIP
|
|
||||||
lda ZPFrameBase1+1
|
|
||||||
adc /S.IP.DST
|
|
||||||
sta ZPPtrIP+1
|
|
||||||
bra .6
|
|
||||||
|
|
||||||
.5 lda L.IPCFG Not Same network, query ARP for GW
|
|
||||||
clc
|
|
||||||
adc #S.IPCFG.GW
|
|
||||||
sta ZPPtrIP
|
|
||||||
lda L.IPCFG+1
|
|
||||||
adc /S.IPCFG.GW
|
|
||||||
sta ZPPtrIP+1
|
|
||||||
|
|
||||||
.6 lda ZPFrameBase1
|
|
||||||
clc
|
|
||||||
adc #S.ETH.DSTMAC
|
|
||||||
sta ZPPtrMAC
|
|
||||||
lda ZPFrameBase1+1
|
|
||||||
adc /S.ETH.DSTMAC
|
|
||||||
sta ZPPtrMAC+1
|
|
||||||
jmp ARP.QUERY.I
|
|
||||||
*--------------------------------------
|
|
||||||
ARP.FIND.BY.IP >LDYA L.ARP.CACHE
|
ARP.FIND.BY.IP >LDYA L.ARP.CACHE
|
||||||
>STYA ZPCachePtr
|
>STYA ZPCachePtr
|
||||||
|
|
||||||
@ -260,8 +215,8 @@ ARP.FIND.BY.IP >LDYA L.ARP.CACHE
|
|||||||
ldx #3
|
ldx #3
|
||||||
ldy #S.ARPCACHE.IP+3
|
ldy #S.ARPCACHE.IP+3
|
||||||
|
|
||||||
.2 lda (ZPCachePtr),y
|
.2 lda ARP.TmpCache+S.ARPCACHE.IP,x
|
||||||
cmp ARP.TmpCache+S.ARPCACHE.IP,x
|
cmp (ZPCachePtr),y
|
||||||
bne .3
|
bne .3
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
|
@ -44,11 +44,11 @@ DNS.QUERY.I jsr DNS.FIND.BY.NAME
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 lda #ERR.DNSPENDING
|
.9 lda #ERR.DNS.PENDING
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DNS.REQUEST jsr HST.PSTR2DNS.I
|
DNS.REQUEST jsr DNS.PSTR2DNS
|
||||||
|
|
||||||
ldx #0
|
ldx #0
|
||||||
ldy #DNS.MSG.NAME-DNS.MSG
|
ldy #DNS.MSG.NAME-DNS.MSG
|
||||||
@ -111,7 +111,7 @@ DNS.REQUEST jsr HST.PSTR2DNS.I
|
|||||||
>PUSHB hDNSSocket2
|
>PUSHB hDNSSocket2
|
||||||
jsr SKT.SEND
|
jsr SKT.SEND
|
||||||
|
|
||||||
.3 lda #ERR.DNSPENDING
|
.3 lda #ERR.DNS.PENDING
|
||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -357,8 +357,9 @@ DNS.EXPIRE >LDYA L.DNS.CACHE
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DNS.FREE ldy #S.DNSCACHE.hNAME
|
DNS.FREE ldy #S.DNSCACHE.hNAME
|
||||||
lda (ZPCachePtr),y
|
lda (ZPCachePtr),y
|
||||||
|
beq .1
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
lda #0
|
.1 lda #0
|
||||||
sta (ZPCachePtr)
|
sta (ZPCachePtr)
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -398,41 +399,75 @@ DNS.DecodeMsg sta hFrame1
|
|||||||
ldy #S.DNS.ANCOUNT+1
|
ldy #S.DNS.ANCOUNT+1
|
||||||
lda (ZPFrameBase1),y
|
lda (ZPFrameBase1),y
|
||||||
beq .9
|
beq .9
|
||||||
|
pha save Answer count...
|
||||||
|
|
||||||
ldy #S.DNS.QDCOUNT+1
|
ldy #S.DNS.QDCOUNT+1
|
||||||
lda (ZPFrameBase1),y
|
lda (ZPFrameBase1),y
|
||||||
|
|
||||||
|
ldy #S.DNS Point to DATA
|
||||||
|
|
||||||
tax
|
tax
|
||||||
beq .3 no QUERY to skip
|
beq .3 no QUERY to skip
|
||||||
|
|
||||||
ldy #S.DNS Read query
|
|
||||||
|
|
||||||
.1 lda (ZPFrameBase1),y
|
.1 lda (ZPFrameBase1),y
|
||||||
beq .2
|
beq .2
|
||||||
|
bpl .11 Pointer ?
|
||||||
|
iny yes, skip 2 bytes
|
||||||
iny
|
iny
|
||||||
bne .1
|
bra .2
|
||||||
.2 tya
|
|
||||||
clc
|
.11 tya
|
||||||
adc #4 Skip QTYPE & QCLASS
|
sec
|
||||||
|
adc (ZPFrameBase1),y Skip LEN+1 bytes
|
||||||
tay
|
tay
|
||||||
dex skip another QUERY ?
|
bra .1
|
||||||
|
|
||||||
|
.2 iny
|
||||||
|
iny
|
||||||
|
iny Skip QTYPE & QCLASS
|
||||||
|
iny
|
||||||
|
|
||||||
|
.21 dex skip another QUERY ?
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
.3 iny Skip Pointer or labels....
|
plx get back answer count
|
||||||
lda (ZPFrameBase1),y
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
iny skip S.DNS.QTYPE HIGH
|
.3 lda (ZPFrameBase1),y
|
||||||
|
beq .32
|
||||||
|
bpl .31 Pointer ?
|
||||||
|
iny yes, skip 2 bytes
|
||||||
iny
|
iny
|
||||||
|
bra .32
|
||||||
|
|
||||||
|
.31 tya
|
||||||
|
sec
|
||||||
|
adc (ZPFrameBase1),y Skip LEN+1 bytes
|
||||||
|
tay
|
||||||
|
bra .3
|
||||||
|
|
||||||
|
.32 iny skip S.DNS.QTYPE HIGH
|
||||||
lda (ZPFrameBase1),y
|
lda (ZPFrameBase1),y
|
||||||
cmp #S.DNS.QTYPE.A
|
cmp #S.DNS.QTYPE.A
|
||||||
bne .9
|
beq .40
|
||||||
iny skip QCLASS
|
|
||||||
|
tya
|
||||||
|
clc
|
||||||
|
adc #7 skip CLASS,TTL+DATALENHIGH
|
||||||
|
tay
|
||||||
|
sec skip DATALENLO
|
||||||
|
adc (ZPFrameBase1),y add DATALEN
|
||||||
|
tay
|
||||||
|
dex
|
||||||
|
bne .3
|
||||||
|
bra .9
|
||||||
|
|
||||||
|
.40 iny skip QCLASS
|
||||||
iny
|
iny
|
||||||
|
|
||||||
ldx #3
|
ldx #3
|
||||||
.4 iny
|
.4 lda (ZPFrameBase1),y
|
||||||
lda (ZPFrameBase1),y
|
|
||||||
sta DNS.TmpCache+S.DNSCACHE.TTL,x
|
sta DNS.TmpCache+S.DNSCACHE.TTL,x
|
||||||
|
iny
|
||||||
dex
|
dex
|
||||||
bpl .4
|
bpl .4
|
||||||
|
|
||||||
@ -453,6 +488,50 @@ DNS.DecodeMsg sta hFrame1
|
|||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
DNS.PSTR2DNS lda (ZPPtrDNS)
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
cmp #K.DNS.MAXLEN-1
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
tay
|
||||||
|
|
||||||
|
inc
|
||||||
|
sta DNS.HostNameLen
|
||||||
|
|
||||||
|
lda #0 Ending 0
|
||||||
|
sta DNS.HostName+1,y
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.1 lda (ZPPtrDNS),y
|
||||||
|
and #$7f
|
||||||
|
cmp #'.'
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
cmp #'A'
|
||||||
|
bcc .10
|
||||||
|
cmp #'Z'+1
|
||||||
|
bcs .10
|
||||||
|
adc #$20
|
||||||
|
|
||||||
|
.10 inx
|
||||||
|
bra .3
|
||||||
|
|
||||||
|
.2 txa
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.3 sta DNS.HostName,y
|
||||||
|
dey
|
||||||
|
bne .1
|
||||||
|
stx DNS.HostName
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE LIB/LIBTCPIP.S.DNS
|
SAVE LIB/LIBTCPIP.S.DNS
|
||||||
LOAD LIB/LIBTCPIP.S
|
LOAD LIB/LIBTCPIP.S
|
||||||
|
@ -5,6 +5,35 @@ INC 1
|
|||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
RCVD.FRAMEA sta hFrame1
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPFrameBase1
|
||||||
|
|
||||||
|
jsr FRM.GetLen1
|
||||||
|
|
||||||
|
ldy #S.ETH.ETHERTYPE
|
||||||
|
lda (ZPFrameBase1),y
|
||||||
|
tax
|
||||||
|
iny
|
||||||
|
lda (ZPFrameBase1),y
|
||||||
|
|
||||||
|
cmp #S.ETH.ETHERTYPE.ARP
|
||||||
|
bne .1
|
||||||
|
cpx /S.ETH.ETHERTYPE.ARP
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
jmp ARP.IN
|
||||||
|
|
||||||
|
.1 cmp #S.ETH.ETHERTYPE.IP
|
||||||
|
bne .9
|
||||||
|
cpx /S.ETH.ETHERTYPE.IP
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
jmp IP.IN
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
* Out:
|
* Out:
|
||||||
* Y,A = Frame PTR
|
* Y,A = Frame PTR
|
||||||
* X = hMem
|
* X = hMem
|
||||||
@ -129,6 +158,7 @@ NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SEND.ICMP.FRAME >PULLW ZPFrameBase1
|
SEND.ICMP.FRAME >PULLW ZPFrameBase1
|
||||||
jsr FRM.GetLen1
|
jsr FRM.GetLen1
|
||||||
|
stz hFrame1
|
||||||
SEND.ICMP.FRAME.I
|
SEND.ICMP.FRAME.I
|
||||||
>PUSHW ZPFrameLen1
|
>PUSHW ZPFrameLen1
|
||||||
>PUSHWI S.ICMP.TYPE-2
|
>PUSHWI S.ICMP.TYPE-2
|
||||||
@ -152,12 +182,14 @@ SEND.ICMP.FRAME.I
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SEND.TCP.FRAME >PULLW ZPFrameBase1
|
SEND.TCP.FRAME >PULLW ZPFrameBase1
|
||||||
jsr FRM.GetLen1
|
jsr FRM.GetLen1
|
||||||
|
stz hFrame1
|
||||||
SEND.TCP.FRAME.I
|
SEND.TCP.FRAME.I
|
||||||
|
|
||||||
bra SEND.IP.FRAME.I
|
bra SEND.IP.FRAME.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SEND.UDP.FRAME >PULLW ZPFrameBase1
|
SEND.UDP.FRAME >PULLW ZPFrameBase1
|
||||||
jsr FRM.GetLen1
|
jsr FRM.GetLen1
|
||||||
|
stz hFrame1
|
||||||
SEND.UDP.FRAME.I
|
SEND.UDP.FRAME.I
|
||||||
ldy #S.UDP.LENGTH+1
|
ldy #S.UDP.LENGTH+1
|
||||||
lda ZPFrameLen1
|
lda ZPFrameLen1
|
||||||
@ -172,15 +204,15 @@ SEND.UDP.FRAME.I
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SEND.IP.FRAME >PULLW ZPFrameBase1
|
SEND.IP.FRAME >PULLW ZPFrameBase1
|
||||||
jsr FRM.GetLen1
|
jsr FRM.GetLen1
|
||||||
|
stz hFrame1
|
||||||
SEND.IP.FRAME.I ldx #3
|
SEND.IP.FRAME.I ldx #3
|
||||||
ldy #S.IP.SRC+3
|
ldy #S.IP.SRC+3
|
||||||
|
|
||||||
.10 lda IPCFG+S.IPCFG.IP,x
|
.1 lda IPCFG+S.IPCFG.IP,x
|
||||||
sta (ZPFrameBase1),y
|
sta (ZPFrameBase1),y
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
bpl .10
|
bpl .1
|
||||||
|
|
||||||
ldy #S.IP.TOTAL.LENGTH+1
|
ldy #S.IP.TOTAL.LENGTH+1
|
||||||
lda ZPFrameLen1
|
lda ZPFrameLen1
|
||||||
@ -206,7 +238,7 @@ SEND.IP.FRAME.I ldx #3
|
|||||||
ldy #S.IP.V.IHL.DSCP.ECN
|
ldy #S.IP.V.IHL.DSCP.ECN
|
||||||
ldx #10 10 words for IP Header
|
ldx #10 10 words for IP Header
|
||||||
|
|
||||||
.1 lda (ZPFrameBase1),y
|
.2 lda (ZPFrameBase1),y
|
||||||
adc IP.CHECKSUM
|
adc IP.CHECKSUM
|
||||||
sta IP.CHECKSUM
|
sta IP.CHECKSUM
|
||||||
|
|
||||||
@ -216,7 +248,7 @@ SEND.IP.FRAME.I ldx #3
|
|||||||
sta IP.CHECKSUM+1
|
sta IP.CHECKSUM+1
|
||||||
iny
|
iny
|
||||||
dex
|
dex
|
||||||
bne .1
|
bne .2
|
||||||
|
|
||||||
ldy #S.IP.HDR.CHECKSUM
|
ldy #S.IP.HDR.CHECKSUM
|
||||||
lda IP.CHECKSUM
|
lda IP.CHECKSUM
|
||||||
@ -234,64 +266,71 @@ SEND.IP.FRAME.I ldx #3
|
|||||||
cmp #S.IP.PROTOCOL.TCP
|
cmp #S.IP.PROTOCOL.TCP
|
||||||
bne .3
|
bne .3
|
||||||
jsr TCP.ComputeChecksum
|
jsr TCP.ComputeChecksum
|
||||||
bra .8
|
bra .4
|
||||||
|
|
||||||
.3 cmp #S.IP.PROTOCOL.UDP
|
.3 cmp #S.IP.PROTOCOL.UDP
|
||||||
bne .8
|
bne .4
|
||||||
jsr UDP.ComputeChecksum
|
jsr UDP.ComputeChecksum
|
||||||
|
|
||||||
.8 lda DevFlags
|
.4 lda DevFlags
|
||||||
and #S.DEVINFO.NET.FLAGS.ARPOFFLOAD
|
and #S.DEVINFO.NET.FLAGS.ARPOFFLOAD
|
||||||
bne .81
|
bne .5
|
||||||
|
|
||||||
jsr ARP.RESOLVE
|
jsr IP.SetDestMAC
|
||||||
bcs .9
|
bcs FRM.Queue
|
||||||
|
|
||||||
.81 >PUSHW ZPFrameBase1
|
.5 >PUSHW ZPFrameBase1
|
||||||
ldx #DEVMGR.NET.SEND
|
ldx #DEVMGR.NET.SEND
|
||||||
jmp NetDevJmp
|
jsr NetDevJmp
|
||||||
.9 rts
|
bcs FRM.Queue
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SEND.ARP.FRAME >PUSHW ZPFrameBase1
|
FRM.Queue ldx hFrame1 no hFrame, cannot queue for retry
|
||||||
ldx #DEVMGR.NET.SEND
|
beq .9
|
||||||
jmp NetDevJmp
|
|
||||||
*--------------------------------------
|
|
||||||
SEND.ETH.FRAME >PUSHW ZPFrameBase1
|
|
||||||
ldx #DEVMGR.NET.SEND
|
|
||||||
jmp NetDevJmp
|
|
||||||
*--------------------------------------
|
|
||||||
RCVD.FRAME >PULLW ZPFrameBase1
|
|
||||||
bra *
|
|
||||||
*--------------------------------------
|
|
||||||
RCVD.FRAMEA sta hFrame1
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>STYA ZPFrameBase1
|
|
||||||
|
|
||||||
jsr FRM.GetLen1
|
|
||||||
|
|
||||||
ldy #S.ETH.ETHERTYPE
|
|
||||||
lda (ZPFrameBase1),y
|
|
||||||
tax
|
|
||||||
iny
|
|
||||||
lda (ZPFrameBase1),y
|
|
||||||
|
|
||||||
cmp #S.ETH.ETHERTYPE.ARP
|
|
||||||
bne .1
|
|
||||||
cpx /S.ETH.ETHERTYPE.ARP
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
jmp ARP.IN
|
|
||||||
|
|
||||||
.1 cmp #S.ETH.ETHERTYPE.IP
|
|
||||||
bne .9
|
|
||||||
cpx /S.ETH.ETHERTYPE.IP
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
jmp IP.IN
|
|
||||||
|
|
||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
FRM.Retry ldx FRM.QUEUE.Tail
|
||||||
|
|
||||||
|
.10 cpx FRM.QUEUE.Head
|
||||||
|
beq .8 Queue is empty, exit....
|
||||||
|
lda FRM.QUEUE.hMem,x
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPFrameBase1
|
||||||
|
|
||||||
|
ldx FRM.QUEUE.Tail
|
||||||
|
lda FRM.QUEUE.State,x
|
||||||
|
cmp #ERR.DEV+1 Device error ?
|
||||||
|
bcc .1 yes, retry sending...
|
||||||
|
jsr IP.SetDestMAC Err is ARP or higher, retry getting MAC
|
||||||
|
bcs .2 still error getting dest MAC
|
||||||
|
|
||||||
|
.1 >PUSHW ZPFrameBase1 try sending again to DRV
|
||||||
|
ldx #DEVMGR.NET.SEND
|
||||||
|
jsr NetDevJmp
|
||||||
|
bcc .3
|
||||||
|
|
||||||
|
.2 ldx FRM.QUEUE.Tail save error...
|
||||||
|
sta FRM.QUEUE.State,x
|
||||||
|
dec FRM.QUEUE.Retry,x
|
||||||
|
bne .8 exit....until next run!
|
||||||
|
|
||||||
|
.3 ldx FRM.QUEUE.Tail Success,or max retry, discard entry
|
||||||
|
lda FRM.QUEUE.hMem,x
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
|
.4 ldx FRM.QUEUE.Tail
|
||||||
|
inx
|
||||||
|
cpx #K.FRMQUEUE.SIZE
|
||||||
|
bne .5
|
||||||
|
ldx #0
|
||||||
|
.5 stx FRM.QUEUE.Tail
|
||||||
|
bra .10
|
||||||
|
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
FRM.GetLen1 lda (ZPFrameBase1) Get Frame Len
|
FRM.GetLen1 lda (ZPFrameBase1) Get Frame Len
|
||||||
sta ZPFrameLen1
|
sta ZPFrameLen1
|
||||||
ldy #1
|
ldy #1
|
||||||
|
@ -8,12 +8,8 @@ AUTO 6
|
|||||||
HST.GETBYNAME >PULLW ZPPtrDNS
|
HST.GETBYNAME >PULLW ZPPtrDNS
|
||||||
>PULLW ZPPtrIP
|
>PULLW ZPPtrIP
|
||||||
jsr HST.ScanIP
|
jsr HST.ScanIP
|
||||||
bcc .1
|
bcc .9
|
||||||
jsr DNS.QUERY.I
|
jmp DNS.QUERY.I
|
||||||
bcs .9
|
|
||||||
>LDYA TmpBuffer256
|
|
||||||
>STYA ZPPtrMAC
|
|
||||||
.1 jmp ARP.QUERY.I
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
HST.GETBYADDR >PULLW ZPPtrIP
|
HST.GETBYADDR >PULLW ZPPtrIP
|
||||||
@ -23,57 +19,6 @@ HST.GETBYADDR >PULLW ZPPtrIP
|
|||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
HST.DNS2PSTR >PULLW ZPPtrDNS
|
|
||||||
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
HST.PSTR2DNS >PULLW ZPPtrDNS
|
|
||||||
|
|
||||||
HST.PSTR2DNS.I lda (ZPPtrDNS)
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
cmp #K.DNS.MAXLEN-1
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
tay
|
|
||||||
|
|
||||||
inc
|
|
||||||
sta DNS.HostNameLen
|
|
||||||
|
|
||||||
lda #0 Ending 0
|
|
||||||
sta DNS.HostName+1,y
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 lda (ZPPtrDNS),y
|
|
||||||
and #$7f
|
|
||||||
cmp #'.'
|
|
||||||
beq .2
|
|
||||||
|
|
||||||
cmp #'A'
|
|
||||||
bcc .10
|
|
||||||
cmp #'Z'+1
|
|
||||||
bcs .10
|
|
||||||
adc #$20
|
|
||||||
|
|
||||||
.10 inx
|
|
||||||
bra .3
|
|
||||||
|
|
||||||
.2 txa
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.3 sta DNS.HostName,y
|
|
||||||
dey
|
|
||||||
bne .1
|
|
||||||
stx DNS.HostName
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
HST.ScanIP stz HST.IP
|
HST.ScanIP stz HST.IP
|
||||||
|
|
||||||
lda (ZPPtrDNS)
|
lda (ZPPtrDNS)
|
||||||
|
@ -94,6 +94,69 @@ IP.ComputeChecksum
|
|||||||
eor #$FF
|
eor #$FF
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
IP.SetDestMAC ldy #S.IP.DST
|
||||||
|
lda (ZPFrameBase1),y
|
||||||
|
iny
|
||||||
|
|
||||||
|
.1 and (ZPFrameBase1),y
|
||||||
|
iny
|
||||||
|
cpy #S.IP.DST+4
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
cmp #$FF
|
||||||
|
bne .3 not a broadcast....
|
||||||
|
|
||||||
|
ldy #S.ETH.DSTMAC
|
||||||
|
|
||||||
|
.2 sta (ZPFrameBase1),y
|
||||||
|
iny
|
||||||
|
cpy #S.ETH.DSTMAC+6
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.3 ldy #S.IP.DST+3
|
||||||
|
ldx #3
|
||||||
|
|
||||||
|
.4 lda (ZPFrameBase1),y
|
||||||
|
eor IPCFG+S.IPCFG.IP,x
|
||||||
|
and IPCFG+S.IPCFG.MASK,x
|
||||||
|
bne .6
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .4
|
||||||
|
|
||||||
|
ldy #S.IP.DST+3 Same network, query ARP for dest IP
|
||||||
|
ldx #3
|
||||||
|
|
||||||
|
.5 lda (ZPFrameBase1),y
|
||||||
|
sta ARP.TmpCache+S.ARPCACHE.IP,x
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .5
|
||||||
|
bra .8
|
||||||
|
|
||||||
|
.6 ldx #3 Not Same network, query ARP for GW
|
||||||
|
|
||||||
|
.7 lda IPCFG+S.IPCFG.GW,x
|
||||||
|
sta ARP.TmpCache+S.ARPCACHE.IP,x
|
||||||
|
dex
|
||||||
|
bpl .7
|
||||||
|
|
||||||
|
.8 jsr ARP.QUERY.I
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
ldx #5
|
||||||
|
ldy #S.ETH.DSTMAC+5
|
||||||
|
.11 lda ARP.TmpCache+S.ARPCACHE.MAC,x
|
||||||
|
sta (ZPFrameBase1),y
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .11
|
||||||
|
clc
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE LIB/LIBTCPIP.S.IP
|
SAVE LIB/LIBTCPIP.S.IP
|
||||||
LOAD LIB/LIBTCPIP.S
|
LOAD LIB/LIBTCPIP.S
|
||||||
|
@ -45,7 +45,7 @@ SKT.NEW >PULLW ZPTmpPtr1
|
|||||||
cpy #S.SOCKET.DST.PORT+2
|
cpy #S.SOCKET.DST.PORT+2
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
lda ERR.SBUSY
|
lda #ERR.SKT.BUSY
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ SKT.NEW >PULLW ZPTmpPtr1
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 lda #ERR.OOS
|
.9 lda #ERR.SKT.OOS
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -111,7 +111,7 @@ SKT.ACCEPTA jsr SKT.GetA
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.99 lda #ERR.SBAD
|
.99 lda #ERR.SKT.BAD
|
||||||
sec
|
sec
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -214,7 +214,7 @@ SKT.SEND.UDP jsr NEW.UDP.FRAME
|
|||||||
bra .3
|
bra .3
|
||||||
|
|
||||||
.4 jsr SEND.UDP.FRAME.I
|
.4 jsr SEND.UDP.FRAME.I
|
||||||
bcc .9
|
bcs .9
|
||||||
lda hFrame1
|
lda hFrame1
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
sec
|
sec
|
||||||
@ -298,7 +298,7 @@ SKT.GetA stz ZPPtrSKT
|
|||||||
>LDYA ZPPtrSKT
|
>LDYA ZPPtrSKT
|
||||||
rts CC
|
rts CC
|
||||||
|
|
||||||
.9 lda #ERR.SBAD
|
.9 lda #ERR.SKT.BAD
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -57,8 +57,8 @@ CS.START cld
|
|||||||
.DA SEND.TCP.FRAME
|
.DA SEND.TCP.FRAME
|
||||||
.DA SEND.UDP.FRAME
|
.DA SEND.UDP.FRAME
|
||||||
.DA SEND.IP.FRAME
|
.DA SEND.IP.FRAME
|
||||||
.DA SEND.ARP.FRAME
|
.DA $ffff SEND.ARP.FRAME
|
||||||
.DA SEND.ETH.FRAME
|
.DA $ffff SEND.ETH.FRAME
|
||||||
|
|
||||||
.DA ARP.CLEAR
|
.DA ARP.CLEAR
|
||||||
.DA ARP.QUERY
|
.DA ARP.QUERY
|
||||||
@ -71,7 +71,7 @@ CS.START cld
|
|||||||
.DA DNS.GETCACHE
|
.DA DNS.GETCACHE
|
||||||
|
|
||||||
.DA RCVD.FRAMEA
|
.DA RCVD.FRAMEA
|
||||||
.DA RCVD.FRAME
|
.DA PULSEA
|
||||||
|
|
||||||
.DA SKT.NEW
|
.DA SKT.NEW
|
||||||
.DA $FFFF
|
.DA $FFFF
|
||||||
@ -211,6 +211,15 @@ GET.IPCFG >LDYA L.IPCFG
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* Expire = every sec
|
||||||
|
* Retry = every 100 msec
|
||||||
|
*--------------------------------------
|
||||||
|
PULSEA asl
|
||||||
|
bpl .1
|
||||||
|
jsr ARP.EXPIRE
|
||||||
|
* jsr DNS.EXPIRE
|
||||||
|
.1 jmp FRM.RETRY
|
||||||
|
*--------------------------------------
|
||||||
ToLowerCaseA cmp #'A'
|
ToLowerCaseA cmp #'A'
|
||||||
bcc .1
|
bcc .1
|
||||||
cmp #'Z'+1
|
cmp #'Z'+1
|
||||||
@ -321,7 +330,7 @@ DNS.MSG.LEN .BS 2
|
|||||||
DNS.MSG
|
DNS.MSG
|
||||||
DNS.MSG.ID .BS 2
|
DNS.MSG.ID .BS 2
|
||||||
.DA /S.DNS.F.RD Flags=query
|
.DA /S.DNS.F.RD Flags=query
|
||||||
.DA #S.DNS.F.RD Flags=query
|
.DA #S.DNS.F.RD
|
||||||
.DA $100 QDCOUNT
|
.DA $100 QDCOUNT
|
||||||
.BS 6 ANCOUNT,NSCOUNT,ARCOUNT
|
.BS 6 ANCOUNT,NSCOUNT,ARCOUNT
|
||||||
DNS.MSG.NAME .BS K.DNS.MAXLEN+6
|
DNS.MSG.NAME .BS K.DNS.MAXLEN+6
|
||||||
@ -329,6 +338,11 @@ DNS.MSG.NAME .BS K.DNS.MAXLEN+6
|
|||||||
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
|
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
|
||||||
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
||||||
SKT.TABLE .BS K.SKTTABLE.SIZE*S.SOCKET
|
SKT.TABLE .BS K.SKTTABLE.SIZE*S.SOCKET
|
||||||
|
FRM.QUEUE.Tail .BS 1
|
||||||
|
FRM.QUEUE.Head .BS 1
|
||||||
|
FRM.QUEUE.hMem .BS K.FRMQUEUE.SIZE
|
||||||
|
FRM.QUEUE.State .BS K.FRMQUEUE.SIZE
|
||||||
|
FRM.QUEUE.Retry .BS K.FRMQUEUE.SIZE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
bFirstLoad .DA #0
|
bFirstLoad .DA #0
|
||||||
DevFlags .BS 1
|
DevFlags .BS 1
|
||||||
|
Loading…
Reference in New Issue
Block a user