diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index 7cb0a21d..73b795c0 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -192,7 +192,7 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP bcs .99 - lda #5 + lda #K.ARP.PENDING.TTL sta ARP.TmpCache+S.ARPCACHE.TTL stz ARP.TmpCache+S.ARPCACHE.TTL+1 diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 03312578..84c3e175 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -31,12 +31,13 @@ DNS.QUERY.I jsr DNS.FIND.BY.NAME lda ZPCachePtr clc - adc S.DNSCACHE.IP + adc #S.DNSCACHE.IP sta ZPCachePtr bcc .1 inc ZPCachePtr+1 .1 ldy #3 + .2 lda (ZPCachePtr),y sta (ZPPtrIP),y dey @@ -48,7 +49,13 @@ DNS.QUERY.I jsr DNS.FIND.BY.NAME sec rts *-------------------------------------- -DNS.REQUEST jsr DNS.PSTR2DNS +DNS.REQUEST lda hDNSSocket1 + bne .10 + lda #ERR.DNS.ERROR + sec + rts + +.10 jsr DNS.PSTR2DNS ldx #0 ldy #DNS.MSG.NAME-DNS.MSG @@ -80,15 +87,12 @@ DNS.REQUEST jsr DNS.PSTR2DNS lda #0 sta DNS.MSG.LEN+1 - lda hDNSSocket1 - beq .9 - >LDYA A2osX.RANDOM16 >STYA DNS.MSG.ID >STYA DNS.TmpCache+S.DNSCACHE.ID - lda #5 + lda #K.DNS.PENDING.TTL sta DNS.TmpCache+S.DNSCACHE.TTL stz DNS.TmpCache+S.DNSCACHE.TTL+1 stz DNS.TmpCache+S.DNSCACHE.TTL+2 @@ -140,46 +144,29 @@ DNS.ADD >PULLW ZPPtrDNS Get host string DNS.ADD.I sta DNS.TmpCache jsr DNS.FIND.BY.NAME - bcs .1 not found, go create new - - ldy #S.DNSCACHE.hNAME - lda (ZPCachePtr),y - sta DNS.TmpCache,y - bra .20 + bcc .2 Found, go update... -.1 jsr DNS.FIND.FREE + jsr DNS.FIND.FREE - lda (ZPPtrDNS) - iny add 1 for len byte - lda #0 - >PUSHYA push PSTR len - >PUSHBI 0 no option - >SYSCALL SYS.GetMem + >LDYA ZPPtrDNS + >SYSCALL SYS.NewPStrYA bcs .9 - >STYA ZPTmpPtr1 - stx DNS.TmpCache+S.DNSCACHE.hNAME - - lda (ZPPtrDNS) - sta (ZPTmpPtr1) - tay + ldy #S.DNSCACHE.hNAME + sta (ZPCachePtr),y + +.2 lda DNS.TmpCache + sta (ZPCachePtr) -.2 lda (ZPPtrDNS),y - sta (ZPTmpPtr1),y - dey - bne .2 - -.20 ldy #S.DNSCACHE-1 + ldy #S.DNSCACHE.ID .3 lda DNS.TmpCache,y sta (ZPCachePtr),y - dey - bpl .3 + iny + cpy #S.DNSCACHE + bne .3 clc - rts - -.9 sec - rts +.9 rts *-------------------------------------- DNS.GETCACHE >LDYA L.DNS.CACHE clc @@ -198,6 +185,7 @@ DNS.FIND.BY.NAME ldy #S.DNSCACHE.hNAME lda (ZPCachePtr),y >SYSCALL SYS.GetMemPtrA + bcs * >STYA ZPTmpPtr1 lda (ZPPtrDNS) @@ -235,6 +223,7 @@ DNS.UPDATE.BY.ID .1 lda (ZPCachePtr) beq .6 empty DNS cache entry? + bmi .6 resolved ? ldy #S.DNSCACHE.ID lda (ZPCachePtr),y @@ -245,15 +234,16 @@ DNS.UPDATE.BY.ID cmp DNS.TmpCache+S.DNSCACHE.ID+1 bne .6 - ldy #S.DNSCACHE-1 -.2 lda DNS.TmpCache,y - sta (ZPCachePtr),y - dey - cpy #S.DNSCACHE.hNAME - bne .2 lda #S.DNSCACHE.STATUS.RESOLVED sta (ZPCachePtr) + ldy #S.DNSCACHE.TTL +.2 lda DNS.TmpCache,y + sta (ZPCachePtr),y + iny + cpy #S.DNSCACHE + bne .2 + clc rts @@ -287,7 +277,7 @@ DNS.FIND.FREE >LDYA L.DNS.CACHE ldy #S.DNSCACHE.TTL ldx #3 sec -.2 lda TmpDWord,x is save TTL greater then actual TTL? +.2 lda TmpDWord,x is saved TTL greater then actual TTL? sbc (ZPCachePtr),y iny dex @@ -382,7 +372,7 @@ DNS.DecodeMsg sta hFrame1 >SYSCALL SYS.GetMemPtrA >STYA ZPFrameBase1 - >DEBUG +* >DEBUG ldy #S.DNS.F+1 lda (ZPFrameBase1),y @@ -391,10 +381,10 @@ DNS.DecodeMsg sta hFrame1 ldy #S.DNS.ID lda (ZPFrameBase1),y - sta DNS.TmpCache+S.DNSCACHE.ID+1 + sta DNS.TmpCache+S.DNSCACHE.ID iny lda (ZPFrameBase1),y - sta DNS.TmpCache+S.DNSCACHE.ID + sta DNS.TmpCache+S.DNSCACHE.ID+1 ldy #S.DNS.ANCOUNT+1 lda (ZPFrameBase1),y @@ -427,6 +417,8 @@ DNS.DecodeMsg sta hFrame1 iny Skip QTYPE & QCLASS iny + iny next pos + .21 dex skip another QUERY ? bne .1 @@ -464,6 +456,8 @@ DNS.DecodeMsg sta hFrame1 .40 iny skip QCLASS iny + iny next pos + ldx #3 .4 lda (ZPFrameBase1),y sta DNS.TmpCache+S.DNSCACHE.TTL,x @@ -475,9 +469,9 @@ DNS.DecodeMsg sta hFrame1 iny ldx #0 -.5 iny - lda (ZPFrameBase1),y +.5 lda (ZPFrameBase1),y sta DNS.TmpCache+S.DNSCACHE.IP,x + iny inx cpx #4 bne .5 diff --git a/LIB/LIBTCPIP.S.FRM.txt b/LIB/LIBTCPIP.S.FRM.txt index 8ac0bf5c..419a8152 100644 --- a/LIB/LIBTCPIP.S.FRM.txt +++ b/LIB/LIBTCPIP.S.FRM.txt @@ -8,7 +8,6 @@ AUTO 6 RCVD.FRAMEA sta hFrame1 >SYSCALL SYS.GetMemPtrA >STYA ZPFrameBase1 - jsr FRM.GetLen1 ldy #S.ETH.ETHERTYPE @@ -77,8 +76,11 @@ NEW.UDP.FRAME jsr NEW.IP.FRAME * Y,A = Frame PTR * X = hMem *-------------------------------------- -NEW.IP.FRAME jsr NEW.ETH.FRAME +NEW.IP.FRAME >PUSHWI K.ETH.FRAME.LEN + >PUSHBI S.MEM.F.INIT0 + >SYSCALL SYS.GetMem bcs .9 + >STYA ZPFrameBase1 ldy #S.ETH.ETHERTYPE lda /S.ETH.ETHERTYPE.IP @@ -112,50 +114,6 @@ NEW.IP.FRAME jsr NEW.ETH.FRAME clc .9 rts *-------------------------------------- -* Out: -* Y,A = Frame PTR -* X = hMem -*-------------------------------------- -NEW.ARP.FRAME jsr NEW.ETH.FRAME - bcs .9 - - ldy #S.ETH.ETHERTYPE - lda /S.ETH.ETHERTYPE.ARP - sta (ZPFrameBase1),y - iny - lda #S.ETH.ETHERTYPE.ARP - sta (ZPFrameBase1),y - - ldy #S.ARP.HTYPE - lda #0 - sta (ZPFrameBase1),y - iny - lda #1 - sta (ZPFrameBase1),y - iny - lda #8 - sta (ZPFrameBase1),y - iny - lda #0 - sta (ZPFrameBase1),y - iny - lda #6 - sta (ZPFrameBase1),y - iny - lda #4 - sta (ZPFrameBase1),y - >LDYA ZPFrameBase1 - clc -.9 rts -*-------------------------------------- -NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN - >PUSHBI S.MEM.F.INIT0 - >SYSCALL SYS.GetMem - bcs .9 - >STYA ZPFrameBase1 - clc -.9 rts -*-------------------------------------- SEND.ICMP.FRAME >PULLW ZPFrameBase1 jsr FRM.GetLen1 stz hFrame1 @@ -283,11 +241,33 @@ SEND.IP.FRAME.I ldx #3 ldx #DEVMGR.NET.SEND jsr NetDevJmp bcs FRM.Queue - rts -*-------------------------------------- -FRM.Queue ldx hFrame1 no hFrame, cannot queue for retry + lda hFrame1 beq .9 + >SYSCALL SYS.FreeMemA + clc +.9 rts +*-------------------------------------- +FRM.Queue ldy hFrame1 no hFrame, cannot queue for retry + beq .9 + + ldx FRM.QUEUE.Head + inx + cpx #K.FRMQUEUE.SIZE + bne .1 + ldx #0 +.1 cpx FRM.QUEUE.Tail + beq .9 + ldy FRM.QUEUE.Head + stx FRM.QUEUE.Head + + sta FRM.QUEUE.State,y + lda #K.FRMSEND.RETRY + sta FRM.QUEUE.Retry,y + lda hFrame1 + sta FRM.QUEUE.hMem,y + clc + rts .9 sec rts diff --git a/LIB/LIBTCPIP.S.ICMP.txt b/LIB/LIBTCPIP.S.ICMP.txt index 85fa1ec5..d5b75ee4 100644 --- a/LIB/LIBTCPIP.S.ICMP.txt +++ b/LIB/LIBTCPIP.S.ICMP.txt @@ -59,6 +59,7 @@ ICMP.IN ldy #S.ICMP.TYPE lda #S.ARPCACHE.STATUS.RESOLVED jsr ARP.ADD.I + stz hFrame1 DO NOT QUEUE/DISCARD this frame,it is SOURCE frame!!! jmp SEND.ICMP.FRAME.I .9 sec rts diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 22bed9a3..ef8634ec 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -197,27 +197,23 @@ SKT.SEND.UDP jsr NEW.UDP.FRAME lda #S.UDP clc adc ZPFrameBase1 - sta ZPFramePtr1 + sta ZPTmpPtr1 lda /S.UDP adc ZPFrameBase1+1 - sta ZPFramePtr1+1 + sta ZPTmpPtr1+1 ldy #0 .3 jsr DecDataLen beq .4 lda (ZPDataPtr),y - sta (ZPFramePtr1),y + sta (ZPTmpPtr1),y iny bne .3 inc ZPDataPtr - inc ZPFramePtr1 + inc ZPTmpPtr1 bra .3 -.4 jsr SEND.UDP.FRAME.I - bcs .9 - lda hFrame1 - >SYSCALL SYS.FreeMemA - sec +.4 jmp SEND.UDP.FRAME.I .9 rts *-------------------------------------- SKT.SEND.TCP @@ -230,18 +226,21 @@ SKT.RCVDA jsr SKT.GetA ldy #S.SOCKET.DQ.TAIL lda (ZPPtrSKT),y + tax ldy #S.SOCKET.DQ.HEAD cmp (ZPPtrSKT),y beq .99 - pha inc cmp #S.SOCKET.DQ.MAX bne .1 lda #0 -.1 sta (ZPPtrSKT),y - pla + +.1 ldy #S.SOCKET.DQ.TAIL + sta (ZPPtrSKT),y + + txa clc adc #S.SOCKET.DQ tay diff --git a/LIB/LIBTCPIP.S.UDP.txt b/LIB/LIBTCPIP.S.UDP.txt index 520b8631..6bc21800 100644 --- a/LIB/LIBTCPIP.S.UDP.txt +++ b/LIB/LIBTCPIP.S.UDP.txt @@ -39,20 +39,35 @@ UDP.IN ldy #S.IP.SRC+3 >STYA ZPPtrSKT ldx #0 - + .3 lda (ZPPtrSKT) beq .7 cmp #S.SOCKET.SOCK.DGRAM bne .7 ldy #S.SOCKET.SRC.ADDR + lda (ZPPtrSKT),y SOCKET.SRC.ADDR=0.0.0.0 ? + bne .41 + ldy #S.SOCKET.SRC.PORT yes, do not check if IP match -.4 lda TmpSocket,y - cmp (ZPPtrSKT),y +.4 lda (ZPPtrSKT),y +.41 cmp TmpSocket,y + bne .7 + iny + cpy #S.SOCKET.DST.ADDR + bne .4 + + lda (ZPPtrSKT),y SOCKET.DST.ADDR=FF.FF.FF.FF ? + cmp #$FF + bne .51 + ldy #S.SOCKET.DST.PORT yes, do not check if IP match + +.5 lda (ZPPtrSKT),y +.51 cmp TmpSocket,y bne .7 iny cpy #S.SOCKET.DST.PORT+2 - bne .4 + bne .5 jsr SKT.AddToQueueD bcs .99 diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index b98d7614..94e53ae0 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -14,7 +14,7 @@ AUTO 6 *-------------------------------------- ZPFrameBase1 .EQ ZPLIB ZPFrameLen1 .EQ ZPLIB+2 -ZPFramePtr1 .EQ ZPLIB+4 +*ZPFramePtr1 .EQ ZPLIB+4 ZPPtrIP .EQ ZPLIB+12 ZPPtrMAC .EQ ZPLIB+14 ZPPtrDNS .EQ ZPLIB+16 @@ -50,8 +50,8 @@ CS.START cld .DA NEW.TCP.FRAME .DA NEW.UDP.FRAME .DA NEW.IP.FRAME - .DA NEW.ARP.FRAME - .DA NEW.ETH.FRAME + .DA $ffff NEW.ARP.FRAME + .DA $ffff NEW.ETH.FRAME .DA SEND.ICMP.FRAME .DA SEND.TCP.FRAME @@ -217,7 +217,7 @@ GET.IPCFG >LDYA L.IPCFG PULSEA asl bpl .1 jsr ARP.EXPIRE -* jsr DNS.EXPIRE + jsr DNS.EXPIRE .1 jmp FRM.RETRY *-------------------------------------- ToLowerCaseA cmp #'A' @@ -267,8 +267,6 @@ NetDevJmp jmp * *-------------------------------------- CS.END *-------------------------------------- -IPCFG .BS S.IPCFG -*-------------------------------------- ARP.REQ .DA S.ARP-2 Frame size ARP.REQ.DSTMAC .HS FFFFFFFFFFFF ARP.REQ.SRCMAC .BS 6 @@ -335,6 +333,7 @@ DNS.MSG.ID .BS 2 .BS 6 ANCOUNT,NSCOUNT,ARCOUNT DNS.MSG.NAME .BS K.DNS.MAXLEN+6 *-------------------------------------- +IPCFG .BS S.IPCFG ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE SKT.TABLE .BS K.SKTTABLE.SIZE*S.SOCKET