mirror of
https://github.com/A2osX/A2osX.git
synced 2025-01-11 10:29:46 +00:00
LIBTCPIP:Cache expiration, retry count....
This commit is contained in:
parent
de7341b7f9
commit
f6adb05c07
@ -5,6 +5,91 @@ INC 1
|
||||
AUTO 6
|
||||
.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
|
||||
ldx #3
|
||||
|
||||
@ -78,53 +163,27 @@ ARP.IN.REP lda #K.ARP.TTL
|
||||
clc
|
||||
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
|
||||
bcs .3 send an ARP request
|
||||
|
||||
lda (ZPCachePtr) get status...
|
||||
bpl .9 Pending...
|
||||
|
||||
lda ZPCachePtr
|
||||
clc
|
||||
adc #S.ARPCACHE.MAC
|
||||
sta ZPCachePtr
|
||||
bcc .1
|
||||
inc ZPCachePtr+1
|
||||
ldy #S.ARPCACHE.MAC
|
||||
|
||||
.1 ldy #5
|
||||
|
||||
.2 lda (ZPCachePtr),y
|
||||
sta (ZPPtrMAC),y
|
||||
dey
|
||||
bpl .2
|
||||
sta ARP.TmpCache,y
|
||||
iny
|
||||
cpy #S.ARPCACHE.MAC+6
|
||||
bne .2
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 ldy #3
|
||||
.3 ldx #3
|
||||
|
||||
.4 lda (ZPPtrIP),y
|
||||
sta ARP.REQ.TPA,y
|
||||
sta ARP.TmpCache+S.ARPCACHE.IP,y
|
||||
dey
|
||||
.4 lda ARP.TmpCache+S.ARPCACHE.IP,x
|
||||
sta ARP.REQ.TPA,x
|
||||
dex
|
||||
bpl .4
|
||||
|
||||
>PUSHW L.ARP.REQ
|
||||
@ -140,114 +199,10 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP
|
||||
lda #S.ARPCACHE.STATUS.PENDING
|
||||
jsr ARP.ADD.I
|
||||
|
||||
.9 lda #ERR.ARPPENDING
|
||||
.9 lda #ERR.ARP.PENDING
|
||||
sec
|
||||
.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
|
||||
>STYA ZPCachePtr
|
||||
|
||||
@ -260,8 +215,8 @@ ARP.FIND.BY.IP >LDYA L.ARP.CACHE
|
||||
ldx #3
|
||||
ldy #S.ARPCACHE.IP+3
|
||||
|
||||
.2 lda (ZPCachePtr),y
|
||||
cmp ARP.TmpCache+S.ARPCACHE.IP,x
|
||||
.2 lda ARP.TmpCache+S.ARPCACHE.IP,x
|
||||
cmp (ZPCachePtr),y
|
||||
bne .3
|
||||
dey
|
||||
dex
|
||||
|
@ -44,11 +44,11 @@ DNS.QUERY.I jsr DNS.FIND.BY.NAME
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 lda #ERR.DNSPENDING
|
||||
.9 lda #ERR.DNS.PENDING
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
DNS.REQUEST jsr HST.PSTR2DNS.I
|
||||
DNS.REQUEST jsr DNS.PSTR2DNS
|
||||
|
||||
ldx #0
|
||||
ldy #DNS.MSG.NAME-DNS.MSG
|
||||
@ -111,7 +111,7 @@ DNS.REQUEST jsr HST.PSTR2DNS.I
|
||||
>PUSHB hDNSSocket2
|
||||
jsr SKT.SEND
|
||||
|
||||
.3 lda #ERR.DNSPENDING
|
||||
.3 lda #ERR.DNS.PENDING
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -357,8 +357,9 @@ DNS.EXPIRE >LDYA L.DNS.CACHE
|
||||
*--------------------------------------
|
||||
DNS.FREE ldy #S.DNSCACHE.hNAME
|
||||
lda (ZPCachePtr),y
|
||||
beq .1
|
||||
>SYSCALL SYS.FreeMemA
|
||||
lda #0
|
||||
.1 lda #0
|
||||
sta (ZPCachePtr)
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -398,41 +399,75 @@ DNS.DecodeMsg sta hFrame1
|
||||
ldy #S.DNS.ANCOUNT+1
|
||||
lda (ZPFrameBase1),y
|
||||
beq .9
|
||||
pha save Answer count...
|
||||
|
||||
ldy #S.DNS.QDCOUNT+1
|
||||
lda (ZPFrameBase1),y
|
||||
|
||||
ldy #S.DNS Point to DATA
|
||||
|
||||
tax
|
||||
beq .3 no QUERY to skip
|
||||
|
||||
ldy #S.DNS Read query
|
||||
|
||||
.1 lda (ZPFrameBase1),y
|
||||
beq .2
|
||||
bpl .11 Pointer ?
|
||||
iny yes, skip 2 bytes
|
||||
iny
|
||||
bne .1
|
||||
.2 tya
|
||||
clc
|
||||
adc #4 Skip QTYPE & QCLASS
|
||||
bra .2
|
||||
|
||||
.11 tya
|
||||
sec
|
||||
adc (ZPFrameBase1),y Skip LEN+1 bytes
|
||||
tay
|
||||
dex skip another QUERY ?
|
||||
bra .1
|
||||
|
||||
.2 iny
|
||||
iny
|
||||
iny Skip QTYPE & QCLASS
|
||||
iny
|
||||
|
||||
.21 dex skip another QUERY ?
|
||||
bne .1
|
||||
|
||||
.3 iny Skip Pointer or labels....
|
||||
lda (ZPFrameBase1),y
|
||||
bne .3
|
||||
plx get back answer count
|
||||
|
||||
iny skip S.DNS.QTYPE HIGH
|
||||
.3 lda (ZPFrameBase1),y
|
||||
beq .32
|
||||
bpl .31 Pointer ?
|
||||
iny yes, skip 2 bytes
|
||||
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
|
||||
cmp #S.DNS.QTYPE.A
|
||||
bne .9
|
||||
iny skip QCLASS
|
||||
beq .40
|
||||
|
||||
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
|
||||
|
||||
ldx #3
|
||||
.4 iny
|
||||
lda (ZPFrameBase1),y
|
||||
.4 lda (ZPFrameBase1),y
|
||||
sta DNS.TmpCache+S.DNSCACHE.TTL,x
|
||||
iny
|
||||
dex
|
||||
bpl .4
|
||||
|
||||
@ -453,6 +488,50 @@ DNS.DecodeMsg sta hFrame1
|
||||
>SYSCALL SYS.FreeMemA
|
||||
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
|
||||
SAVE LIB/LIBTCPIP.S.DNS
|
||||
LOAD LIB/LIBTCPIP.S
|
||||
|
@ -5,6 +5,35 @@ INC 1
|
||||
AUTO 6
|
||||
.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:
|
||||
* Y,A = Frame PTR
|
||||
* X = hMem
|
||||
@ -129,6 +158,7 @@ NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN
|
||||
*--------------------------------------
|
||||
SEND.ICMP.FRAME >PULLW ZPFrameBase1
|
||||
jsr FRM.GetLen1
|
||||
stz hFrame1
|
||||
SEND.ICMP.FRAME.I
|
||||
>PUSHW ZPFrameLen1
|
||||
>PUSHWI S.ICMP.TYPE-2
|
||||
@ -152,12 +182,14 @@ SEND.ICMP.FRAME.I
|
||||
*--------------------------------------
|
||||
SEND.TCP.FRAME >PULLW ZPFrameBase1
|
||||
jsr FRM.GetLen1
|
||||
stz hFrame1
|
||||
SEND.TCP.FRAME.I
|
||||
|
||||
bra SEND.IP.FRAME.I
|
||||
*--------------------------------------
|
||||
SEND.UDP.FRAME >PULLW ZPFrameBase1
|
||||
jsr FRM.GetLen1
|
||||
stz hFrame1
|
||||
SEND.UDP.FRAME.I
|
||||
ldy #S.UDP.LENGTH+1
|
||||
lda ZPFrameLen1
|
||||
@ -172,15 +204,15 @@ SEND.UDP.FRAME.I
|
||||
*--------------------------------------
|
||||
SEND.IP.FRAME >PULLW ZPFrameBase1
|
||||
jsr FRM.GetLen1
|
||||
|
||||
stz hFrame1
|
||||
SEND.IP.FRAME.I ldx #3
|
||||
ldy #S.IP.SRC+3
|
||||
|
||||
.10 lda IPCFG+S.IPCFG.IP,x
|
||||
.1 lda IPCFG+S.IPCFG.IP,x
|
||||
sta (ZPFrameBase1),y
|
||||
dey
|
||||
dex
|
||||
bpl .10
|
||||
bpl .1
|
||||
|
||||
ldy #S.IP.TOTAL.LENGTH+1
|
||||
lda ZPFrameLen1
|
||||
@ -206,7 +238,7 @@ SEND.IP.FRAME.I ldx #3
|
||||
ldy #S.IP.V.IHL.DSCP.ECN
|
||||
ldx #10 10 words for IP Header
|
||||
|
||||
.1 lda (ZPFrameBase1),y
|
||||
.2 lda (ZPFrameBase1),y
|
||||
adc IP.CHECKSUM
|
||||
sta IP.CHECKSUM
|
||||
|
||||
@ -216,7 +248,7 @@ SEND.IP.FRAME.I ldx #3
|
||||
sta IP.CHECKSUM+1
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
bne .2
|
||||
|
||||
ldy #S.IP.HDR.CHECKSUM
|
||||
lda IP.CHECKSUM
|
||||
@ -234,64 +266,71 @@ SEND.IP.FRAME.I ldx #3
|
||||
cmp #S.IP.PROTOCOL.TCP
|
||||
bne .3
|
||||
jsr TCP.ComputeChecksum
|
||||
bra .8
|
||||
bra .4
|
||||
|
||||
.3 cmp #S.IP.PROTOCOL.UDP
|
||||
bne .8
|
||||
bne .4
|
||||
jsr UDP.ComputeChecksum
|
||||
|
||||
.8 lda DevFlags
|
||||
.4 lda DevFlags
|
||||
and #S.DEVINFO.NET.FLAGS.ARPOFFLOAD
|
||||
bne .81
|
||||
bne .5
|
||||
|
||||
jsr IP.SetDestMAC
|
||||
bcs FRM.Queue
|
||||
|
||||
jsr ARP.RESOLVE
|
||||
bcs .9
|
||||
|
||||
.81 >PUSHW ZPFrameBase1
|
||||
.5 >PUSHW ZPFrameBase1
|
||||
ldx #DEVMGR.NET.SEND
|
||||
jmp NetDevJmp
|
||||
.9 rts
|
||||
jsr NetDevJmp
|
||||
bcs FRM.Queue
|
||||
rts
|
||||
*--------------------------------------
|
||||
SEND.ARP.FRAME >PUSHW ZPFrameBase1
|
||||
ldx #DEVMGR.NET.SEND
|
||||
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
|
||||
FRM.Queue ldx hFrame1 no hFrame, cannot queue for retry
|
||||
beq .9
|
||||
|
||||
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
|
||||
*--------------------------------------
|
||||
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
|
||||
sta ZPFrameLen1
|
||||
ldy #1
|
||||
|
@ -8,12 +8,8 @@ AUTO 6
|
||||
HST.GETBYNAME >PULLW ZPPtrDNS
|
||||
>PULLW ZPPtrIP
|
||||
jsr HST.ScanIP
|
||||
bcc .1
|
||||
jsr DNS.QUERY.I
|
||||
bcs .9
|
||||
>LDYA TmpBuffer256
|
||||
>STYA ZPPtrMAC
|
||||
.1 jmp ARP.QUERY.I
|
||||
bcc .9
|
||||
jmp DNS.QUERY.I
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
HST.GETBYADDR >PULLW ZPPtrIP
|
||||
@ -23,57 +19,6 @@ HST.GETBYADDR >PULLW ZPPtrIP
|
||||
sec
|
||||
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
|
||||
|
||||
lda (ZPPtrDNS)
|
||||
|
@ -94,6 +94,69 @@ IP.ComputeChecksum
|
||||
eor #$FF
|
||||
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
|
||||
SAVE LIB/LIBTCPIP.S.IP
|
||||
LOAD LIB/LIBTCPIP.S
|
||||
|
@ -45,7 +45,7 @@ SKT.NEW >PULLW ZPTmpPtr1
|
||||
cpy #S.SOCKET.DST.PORT+2
|
||||
bne .3
|
||||
|
||||
lda ERR.SBUSY
|
||||
lda #ERR.SKT.BUSY
|
||||
sec
|
||||
rts
|
||||
|
||||
@ -81,7 +81,7 @@ SKT.NEW >PULLW ZPTmpPtr1
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 lda #ERR.OOS
|
||||
.9 lda #ERR.SKT.OOS
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -111,7 +111,7 @@ SKT.ACCEPTA jsr SKT.GetA
|
||||
clc
|
||||
rts
|
||||
|
||||
.99 lda #ERR.SBAD
|
||||
.99 lda #ERR.SKT.BAD
|
||||
sec
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
@ -214,7 +214,7 @@ SKT.SEND.UDP jsr NEW.UDP.FRAME
|
||||
bra .3
|
||||
|
||||
.4 jsr SEND.UDP.FRAME.I
|
||||
bcc .9
|
||||
bcs .9
|
||||
lda hFrame1
|
||||
>SYSCALL SYS.FreeMemA
|
||||
sec
|
||||
@ -298,7 +298,7 @@ SKT.GetA stz ZPPtrSKT
|
||||
>LDYA ZPPtrSKT
|
||||
rts CC
|
||||
|
||||
.9 lda #ERR.SBAD
|
||||
.9 lda #ERR.SKT.BAD
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -57,8 +57,8 @@ CS.START cld
|
||||
.DA SEND.TCP.FRAME
|
||||
.DA SEND.UDP.FRAME
|
||||
.DA SEND.IP.FRAME
|
||||
.DA SEND.ARP.FRAME
|
||||
.DA SEND.ETH.FRAME
|
||||
.DA $ffff SEND.ARP.FRAME
|
||||
.DA $ffff SEND.ETH.FRAME
|
||||
|
||||
.DA ARP.CLEAR
|
||||
.DA ARP.QUERY
|
||||
@ -71,7 +71,7 @@ CS.START cld
|
||||
.DA DNS.GETCACHE
|
||||
|
||||
.DA RCVD.FRAMEA
|
||||
.DA RCVD.FRAME
|
||||
.DA PULSEA
|
||||
|
||||
.DA SKT.NEW
|
||||
.DA $FFFF
|
||||
@ -211,6 +211,15 @@ GET.IPCFG >LDYA L.IPCFG
|
||||
clc
|
||||
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'
|
||||
bcc .1
|
||||
cmp #'Z'+1
|
||||
@ -321,7 +330,7 @@ DNS.MSG.LEN .BS 2
|
||||
DNS.MSG
|
||||
DNS.MSG.ID .BS 2
|
||||
.DA /S.DNS.F.RD Flags=query
|
||||
.DA #S.DNS.F.RD Flags=query
|
||||
.DA #S.DNS.F.RD
|
||||
.DA $100 QDCOUNT
|
||||
.BS 6 ANCOUNT,NSCOUNT,ARCOUNT
|
||||
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
|
||||
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
||||
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
|
||||
DevFlags .BS 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user