LIBTCPIP:Cache expiration, retry count....

This commit is contained in:
Rémy GIBERT 2016-03-20 23:16:01 +01:00
parent de7341b7f9
commit f6adb05c07
7 changed files with 372 additions and 277 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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
*-------------------------------------- *--------------------------------------

View File

@ -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