Kernel version 0.9 : TCP Client sockets

This commit is contained in:
Rémy GIBERT 2017-03-13 08:07:07 +01:00
parent eb7b12f642
commit 6a05b3a3bb
8 changed files with 87 additions and 95 deletions

Binary file not shown.

Binary file not shown.

View File

@ -74,6 +74,8 @@ CS.RUN >LDYA L.MSG0
ldy #S.SOCKET.TCP.STATUS ldy #S.SOCKET.TCP.STATUS
lda (ZPPTR1),y lda (ZPPTR1),y
cmp #S.SOCKET.TCP.STATUS.TIMEWT+1
bcs *
asl asl
tax tax
>PUSHB L.MSG1.S+1,x >PUSHB L.MSG1.S+1,x

View File

@ -210,7 +210,7 @@ READBLOCK.RxOK and /PP.RxEvent.Brdcast
adc #2 adc #2
tay tay
pla pla
adc #2 adc #0
>PUSHYA Size+2 >PUSHYA Size+2
>PUSHBI 0 >PUSHBI 0

View File

@ -13,7 +13,12 @@ AUTO 6
* YA = PTR to new S.SOCKET * YA = PTR to new S.SOCKET
* X = hSocket * X = hSocket
*\-------------------------------------- *\--------------------------------------
SKT.New >PULLW ZPTmpPtr1 SKT.New clc
.HS B0 BCS
SKT.New.Listen sec
ror
sta .71+1
>PULLW ZPTmpPtr1
ldy #S.SOCKET.SRC.PORT+1 ldy #S.SOCKET.SRC.PORT+1
lda (ZPTmpPtr1),y lda (ZPTmpPtr1),y
dey dey
@ -93,6 +98,14 @@ SKT.New >PULLW ZPTmpPtr1
jsr SKT.New.TCP jsr SKT.New.TCP
bcs .99 bcs .99
.71 lda #$ff
bmi .8 From Listen, do not send SYN packet
>LDYA ZPTmpPtr3
>STYA ZPPtrSKT
jsr TCP.OUT.SYN Only for CLIENT conn!!!!
bcs .99
.8 ldx TmpOffset .8 ldx TmpOffset
>LDYA ZPTmpPtr3 >LDYA ZPTmpPtr3
clc clc
@ -102,21 +115,22 @@ SKT.New >PULLW ZPTmpPtr1
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
SKT.New.TCP >PUSHW S.TCB SKT.New.TCP >PUSHWI S.TCB
>PUSHBI 0 >PUSHBI S.MEM.F.INIT0
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
>STYA .4+1
txa txa
ldy #S.SOCKET.SQ.hTCB ldy #S.SOCKET.SQ.hTCB
sta (ZPTmpPtr3),y sta (ZPTmpPtr3),y
ldx #S.TCB.OUTTAIL+1 * ldx #S.TCB.OUTTAIL+1
.10 stz SKT.TCBCache,x *.1 stz SKT.TCBCache,x
dex * dex
bpl .10 * bpl .1
lda #K.TCP.WSIZE lda #K.TCP.WSIZE
sta SKT.TCBCache+S.TCB.INFREE sta SKT.TCBCache+S.TCB.INFREE
@ -125,19 +139,19 @@ SKT.New.TCP >PUSHW S.TCB
sta SKT.TCBCache+S.TCB.INFREE+1 sta SKT.TCBCache+S.TCB.INFREE+1
sta SKT.TCBCache+S.TCB.OUTFREE+1 sta SKT.TCBCache+S.TCB.OUTFREE+1
stz SKT.TCBCache+S.TCB.INUSED * stz SKT.TCBCache+S.TCB.INUSED
stz SKT.TCBCache+S.TCB.INUSED+1 * stz SKT.TCBCache+S.TCB.INUSED+1
stz SKT.TCBCache+S.TCB.OUTUSED * stz SKT.TCBCache+S.TCB.OUTUSED
stz SKT.TCBCache+S.TCB.OUTUSED+1 * stz SKT.TCBCache+S.TCB.OUTUSED+1
ldx #3 ldx #3
.1 lda A2osX.TIMER16,x .2 lda A2osX.TIMER16,x
sta SKT.TCBCache+S.TCB.SEQNUM,x sta SKT.TCBCache+S.TCB.SEQNUM,x
dex dex
bpl .1 bpl .2
>PUSHW K.TCP.WSIZE >PUSHWI K.TCP.WSIZE
>PUSHBI 0 >PUSHBI 0
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
@ -146,7 +160,7 @@ SKT.New.TCP >PUSHW S.TCB
ldy #S.SOCKET.SQ.hInMem ldy #S.SOCKET.SQ.hInMem
sta (ZPTmpPtr3),y sta (ZPTmpPtr3),y
>PUSHW K.TCP.WSIZE >PUSHWI K.TCP.WSIZE
>PUSHBI 0 >PUSHBI 0
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
@ -155,9 +169,12 @@ SKT.New.TCP >PUSHW S.TCB
ldy #S.SOCKET.SQ.hOutMem ldy #S.SOCKET.SQ.hOutMem
sta (ZPTmpPtr3),y sta (ZPTmpPtr3),y
jsr SKT.StoreTCB ldx #S.TCB-1
jsr TCP.OUT.SYN .3 lda SKT.TCBCache,x
.4 sta $ffff,x
dex
bpl .3
clc clc
.9 rts .9 rts
@ -329,7 +346,6 @@ SKT.AcceptA jsr SKT.GetA.I
.99 lda #ERR.SKT.BAD .99 lda #ERR.SKT.BAD
sec sec
.9 rts .9 rts
*/-------------------------------------- */--------------------------------------
* #SKT.MkNodA * #SKT.MkNodA
* Create a new file from TCP socket * Create a new file from TCP socket
@ -637,22 +653,19 @@ SKT.AddToQueueA sta .2+1
* Dst : hOutMem/OUTTAIL * Dst : hOutMem/OUTTAIL
*-------------------------------------- *--------------------------------------
SKT.AckDataToSktOut SKT.AckDataToSktOut
jsr SKT.GetTCB
ldy #S.TCP.ACK.NUMBER+3 Get new ACK number from FrameIn... ldy #S.TCP.ACK.NUMBER+3 Get new ACK number from FrameIn...
ldx #0 Substract old Ack from socket ldx #3 Substract old SEQ from socket
sec sec
.1 lda (ZPFrameInPtr),y .1 lda (ZPFrameInPtr),y
pha pha
sbc SKT.TCBCache+S.TCB.ACKNUM,x sbc SKT.TCBCache+S.TCB.SEQNUM,x
sta TmpDWord,x sta TmpDWord,x
pla pla
sta SKT.TCBCache+S.TCB.ACKNUM,x sta SKT.TCBCache+S.TCB.SEQNUM,x
dey dey
inx dex
cpx #4
bpl .1 bpl .1
lda SKT.TCBCache+S.TCB.OUTTAIL lda SKT.TCBCache+S.TCB.OUTTAIL
@ -683,7 +696,8 @@ SKT.AckDataToSktOut
sbc TmpDWord+1 sbc TmpDWord+1
sta SKT.TCBCache+S.TCB.OUTUSED+1 sta SKT.TCBCache+S.TCB.OUTUSED+1
jmp SKT.StoreTCB clc
rts
*-------------------------------------- *--------------------------------------
* From TCP.IN * From TCP.IN
* Src : ZPDataInPtr/ZPDataInLen * Src : ZPDataInPtr/ZPDataInLen

View File

@ -77,6 +77,7 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
bcs * bcs *
asl asl
tax tax
jmp (L.TCP.IN.JMP,x) jmp (L.TCP.IN.JMP,x)
.7 lda ZPPtrSKT .7 lda ZPPtrSKT
@ -105,45 +106,38 @@ TCP.IN.JMP.CLOSED
TCP.IN.JMP.LISTEN TCP.IN.JMP.LISTEN
lda #S.SOCKET.SOCK.STREAM lda #S.SOCKET.SOCK.STREAM
sta SKT.Template+S.SOCKET.SOCK sta SKT.Template+S.SOCKET.SOCK
stz SKT.Template+S.SOCKET.SO stz SKT.Template+S.SOCKET.SO
stz SKT.Template+S.SOCKET.TCP.STATUS
>PUSHW L.SKT.Template >PUSHW L.SKT.Template
jsr SKT.New jsr SKT.New.Listen
bcs .9 bcs .99
phy sty .1+1
pha sta .2+1
txa txa
jsr SKT.AddToQueueA jsr SKT.AddToQueueA
pla bcs .99 Queued successfully ?
sta ZPPtrSKT+1
pla .1 lda #$ff
sta ZPPtrSKT sta ZPPtrSKT
.2 lda #$ff
sta ZPPtrSKT+1
bcc .3 Queued successfully ? ldy #S.TCP.SEQ.NUMBER+3
lda #0 error
sta (ZPPtrSKT) clear this socket
lda #ERR.SKT.OOS
.9 rts
.3 jsr SKT.GetTCB
ldy #S.TCP.SEQ.NUMBER
ldx #3 ldx #3
sec sec
.1 lda (ZPFrameInPtr),y Set ACK=SEQ+1 for new socket... .3 lda (ZPFrameInPtr),y Set ACK=SEQ+1 for new socket...
adc #0 adc #0
sta SKT.TCBCache+S.TCB.ACKNUM,x sta SKT.TCBCache+S.TCB.ACKNUM,x
iny dey
dex dex
bpl .1 bpl .3
jsr SKT.StoreTCB jsr SKT.StoreTCB
@ -156,11 +150,18 @@ TCP.IN.JMP.LISTEN
lda #S.SOCKET.TCP.STATUS.SYNRCVD lda #S.SOCKET.TCP.STATUS.SYNRCVD
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
clc clc
rts rts
.9 lda #0 error
sta (ZPPtrSKT) clear this socket
lda #ERR.SKT.OOS
.99 rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.SYNSENT TCP.IN.JMP.SYNSENT
clv
bra *
ldy #S.TCP.OPTIONS only accept SYN.ACK packet ldy #S.TCP.OPTIONS only accept SYN.ACK packet
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
cmp #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK cmp #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
@ -186,7 +187,7 @@ TCP.IN.JMP.SYNRCVD
jsr SKT.GetTCB jsr SKT.GetTCB
ldx #3 ldx #3
ldy #S.TCP.ACK.NUMBER ldy #S.TCP.ACK.NUMBER+3
sec sec
@ -195,7 +196,7 @@ TCP.IN.JMP.SYNRCVD
sta SKT.TCBCache+S.TCB.SEQNUM,x sta SKT.TCBCache+S.TCB.SEQNUM,x
eor (ZPFrameInPtr),y eor (ZPFrameInPtr),y
bne .8 bne .8
iny dey
dex dex
bpl .1 bpl .1
@ -218,19 +219,19 @@ TCP.IN.JMP.ESTBLSH
jsr SKT.AckDataToSktOut jsr SKT.AckDataToSktOut
.1 lda ZPDataInLen .1 jsr TCP.SetDataInPtrAndLen
lda ZPDataInLen
ora ZPDataInLen+1 ora ZPDataInLen+1
beq .2 No data in this incoming frame... beq .2 No data in this incoming frame...
jsr TCP.SetDataInPtrAndLen
jsr SKT.AddDataToSktIn jsr SKT.AddDataToSktIn
bcs .9 bcs .9
.2 ldy #S.TCP.OPTIONS .2 ldy #S.TCP.OPTIONS
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
bit #S.TCP.OPTIONS.FIN bit #S.TCP.OPTIONS.FIN
beq .1 beq .8
ldy #S.SOCKET.TCP.STATUS ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.CLWAIT lda #S.SOCKET.TCP.STATUS.CLWAIT
@ -241,9 +242,7 @@ TCP.IN.JMP.ESTBLSH
ora #S.TCP.OPTIONS.ACK ora #S.TCP.OPTIONS.ACK
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
.8 jsr SKT.StoreTCB .8 jmp TCP.OUT.I
clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.CLWAIT TCP.IN.JMP.CLWAIT
@ -293,11 +292,11 @@ TCP.OUT.SYN >LDYAI 0
bcs .9 bcs .9
ldx #3 ldx #3
ldy #S.TCP.SEQ.NUMBER ldy #S.TCP.SEQ.NUMBER+3
.1 lda SKT.TCBCache+S.TCB.SEQNUM,x .1 lda SKT.TCBCache+S.TCB.SEQNUM,x
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
iny dey
dex dex
bpl .1 bpl .1
@ -322,10 +321,6 @@ TCP.OUT.SYN >LDYAI 0
lda #0 lda #0
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.SYNSENT
sta (ZPPtrSKT),y
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -333,24 +328,15 @@ TCP.OUT.SYNACK >LDYAI 0
jsr TCP.NewFrame jsr TCP.NewFrame
bcs .9 bcs .9
ldx #3 ldx #7
ldy #S.TCP.SEQ.NUMBER ldy #S.TCP.SEQ.NUMBER+7
.1 lda SKT.TCBCache+S.TCB.SEQNUM,x .1 lda SKT.TCBCache+S.TCB.SEQNUM,x
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
iny dey
dex dex
bpl .1 bpl .1
ldy #S.TCP.ACK.NUMBER
ldx #3
.3 lda SKT.TCBCache+S.TCB.ACKNUM,x
sta (ZPFrameOutPtr),y
iny
dex
bpl .3
ldy #S.TCP.OPTIONS ldy #S.TCP.OPTIONS
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
@ -369,16 +355,12 @@ TCP.OUT.SYNACK >LDYAI 0
lda #0 lda #0
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.SYNSENT
sta (ZPPtrSKT),y
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
TCP.OUT jsr SKT.GetTCB TCP.OUT jsr SKT.GetTCB
lda SKT.TCBCache+S.TCB.OUTUSED+1 TCP.OUT.I lda SKT.TCBCache+S.TCB.OUTUSED+1
ldy SKT.TCBCache+S.TCB.OUTUSED ldy SKT.TCBCache+S.TCB.OUTUSED
bne .1 bne .1
@ -491,19 +473,13 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP
lda #$50 Header size = 5 DWORDS lda #$50 Header size = 5 DWORDS
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
ldy #S.TCB.INFREE
lda (ZPPtrSKT),y
pha
iny
lda (ZPPtrSKT),y
ldy #S.TCP.WINDOW ldy #S.TCP.WINDOW
lda SKT.TCBCache+S.TCB.INFREE+1
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
iny iny
pla lda SKT.TCBCache+S.TCB.INFREE
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------

View File

@ -112,7 +112,7 @@ CS.RUN.INIT ldx #3
beq .3 beq .3
* jsr CS.RUN.CLIENT jsr CS.RUN.CLIENT
.3 ldy #SktIndex .3 ldy #SktIndex
lda (pData),y lda (pData),y

View File

@ -20,7 +20,7 @@ K.IrqHandlerAuxLC
pha pha
and #$10 BRK? and #$10 BRK?
beq .10 beq .10
bra *
lda K.IrqMgr.A lda K.IrqMgr.A
.82 jmp (K.IrqMgrOldFFFE) .82 jmp (K.IrqMgrOldFFFE)