From f6adb05c0741b7f7fdcf9f0148ae468a5a19ac7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 20 Mar 2016 23:16:01 +0100 Subject: [PATCH] LIBTCPIP:Cache expiration, retry count.... --- LIB/LIBTCPIP.S.ARP.txt | 239 +++++++++++++++++------------------------ LIB/LIBTCPIP.S.DNS.txt | 117 ++++++++++++++++---- LIB/LIBTCPIP.S.FRM.txt | 139 +++++++++++++++--------- LIB/LIBTCPIP.S.HST.txt | 59 +--------- LIB/LIBTCPIP.S.IP.txt | 63 +++++++++++ LIB/LIBTCPIP.S.SKT.txt | 10 +- LIB/LIBTCPIP.S.txt | 22 +++- 7 files changed, 372 insertions(+), 277 deletions(-) diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index b91d46d3..7cb0a21d 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -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 diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 74f39244..03312578 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -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 diff --git a/LIB/LIBTCPIP.S.FRM.txt b/LIB/LIBTCPIP.S.FRM.txt index 97d3678a..8ac0bf5c 100644 --- a/LIB/LIBTCPIP.S.FRM.txt +++ b/LIB/LIBTCPIP.S.FRM.txt @@ -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 diff --git a/LIB/LIBTCPIP.S.HST.txt b/LIB/LIBTCPIP.S.HST.txt index 0a041650..cce2c786 100644 --- a/LIB/LIBTCPIP.S.HST.txt +++ b/LIB/LIBTCPIP.S.HST.txt @@ -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) diff --git a/LIB/LIBTCPIP.S.IP.txt b/LIB/LIBTCPIP.S.IP.txt index 64dadd06..db8da6fa 100644 --- a/LIB/LIBTCPIP.S.IP.txt +++ b/LIB/LIBTCPIP.S.IP.txt @@ -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 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 9dc221b8..22bed9a3 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -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 *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index a045d8f7..b98d7614 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -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