Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-11-01 09:53:47 +01:00
parent 8bcf18386a
commit 005c2ee1c6
12 changed files with 359 additions and 331 deletions

Binary file not shown.

Binary file not shown.

View File

@ -37,28 +37,35 @@ L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP L.SSCANF.IP .DA SSCANF.IP
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG.USAGE .DA MSG.USAGE
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.LIBTCPIP CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib >SYSCALL LoadLib
sta hLIBTCPIP sta hLIBTCPIP
* lda (pPs)
* ora #S.PS.F.EVENT Now accept events
* sta (pPs)
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN ldy #S.PS.ARGC CS.RUN ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
bne CS.RUN.ADD cmp #1
bne .1
jmp CS.RUN.DUMP jmp CS.RUN.DUMP
*--------------------------------------
CS.RUN.ADD cmp #2
beq .1
jmp .9
.1 >PUSHEA.G DST.IP+3 .1 cmp #3
beq CS.RUN.ADD
>PUSHBI 0
>LDYA L.MSG.USAGE
>SYSCALL printf
lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN.ADD >PUSHEA.G DST.IP+3
>PUSHEA.G DST.IP+2 >PUSHEA.G DST.IP+2
>PUSHEA.G DST.IP+1 >PUSHEA.G DST.IP+1
>PUSHEA.G DST.IP >PUSHEA.G DST.IP
@ -152,10 +159,12 @@ CS.QUIT lda hLIBTCPIP
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBTCPIP .AZ "libtcpip" LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
SSCANF.IP .AZ "%d.%d.%d.%d" SSCANF.IP .AZ "%d.%d.%d.%d"
MSG0 .AZ "STS TR.ID Hostname IP Address TTL" MSG0 .AZ "STS TR.ID Hostname IP Address TTL"
MSG1 .AZ "$%h $%H %32s %03d.%03d.%03d.%03d %u\r\n" MSG1 .AZ "$%h $%H %32s %03d.%03d.%03d.%03d %u\r\n"
hLIBTCPIP .BS 1 MSG.USAGE .AS "Usage : Add a static entry, DNSINFO <host> <IP>\r\n"
.AZ " Dump DNS Cache, DNSINFO \r\n"
*-------------------------------------- *--------------------------------------
DS.START DS.START
DST.IP .BS 4 DST.IP .BS 4

View File

@ -39,7 +39,6 @@ CS.START cld
.DA CS.QUIT .DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SA.LOCAL .DA SA.LOCAL L.SA.LOCAL .DA SA.LOCAL
L.SA.LOCAL.AD .DA SA.LOCAL+S.SOCKADDR.ADDR
L.SA.REMOTE .DA SA.REMOTE L.SA.REMOTE .DA SA.REMOTE
L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR
L.MSG.IPKO .DA MSG.IPKO L.MSG.IPKO .DA MSG.IPKO
@ -75,8 +74,17 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
CS.RUN.IPOK ldy #S.PS.ARGC CS.RUN.IPOK ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #2
bcc .9
beq .9 ldy #S.IPCFG.IP+3
ldx #3
.1 lda (ZPIPCfgPtr),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey
dex
bpl .1
jsr Init.Timeout jsr Init.Timeout
@ -105,13 +113,10 @@ CS.RUN.IPOK ldy #S.PS.ARGC
sec sec
rts rts
CS.RUN.HOSTOK ldy #S.PS.ARGC CS.RUN.HOSTOK lda #2
lda (pPs),y
cmp #2
bcc CS.RUN.PORTOK
lda #2
>SYSCALL ArgV >SYSCALL ArgV
bcs CS.RUN.PORTOK
>SYSCALL atoi >SYSCALL atoi
>STYA SA.REMOTE+S.SOCKADDR.PORT >STYA SA.REMOTE+S.SOCKADDR.PORT
@ -152,6 +157,7 @@ CS.RUN.OPENSKT >PUSHBI 0 no protocol
.2 >PUSHW L.SA.REMOTE .2 >PUSHW L.SA.REMOTE
>LDA.G hSocket >LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect >LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
>LDYA L.MSG.SKTOK >LDYA L.MSG.SKTOK
>SYSCALL puts >SYSCALL puts
@ -164,7 +170,6 @@ CS.RUN.OPENSKT >PUSHBI 0 no protocol
>STA.G hBuf >STA.G hBuf
CS.RUN.LOOP >SLEEP CS.RUN.LOOP >SLEEP
>PUSHWI BUFSIZE >PUSHWI BUFSIZE
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
>LDA.G hSocket >LDA.G hSocket
@ -179,14 +184,15 @@ CS.RUN.LOOP >SLEEP
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
ldy #S.PS.hStdOut ldy #S.PS.hStdOut
lda (pPs),y lda (pPs),y
>SYSCALL write >SYSCALL fwrite
bcs .11 bcs .11
.2 >PUSHWI BUFSIZE .2 >PUSHWI BUFSIZE
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
lda (pPs),y lda (pPs),y
>SYSCALL read
>SYSCALL fread
bcc .3 bcc .3
tay tay
beq CS.RUN.LOOP no char from STDIN beq CS.RUN.LOOP no char from STDIN
@ -198,14 +204,20 @@ CS.RUN.LOOP >SLEEP
cmp #3 Ctrl-C cmp #3 Ctrl-C
beq CS.RUN.USER beq CS.RUN.USER
>PUSHW ZPBufLen .4 >PUSHW ZPBufLen
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
>LDA.G hSocket >LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Write >LIBCALL hLIBTCPIP,LIBTCPIP.Write
bcs CS.RUN.SKTERR bcc .8
jmp CS.RUN.LOOP tay
bne CS.RUN.SKTERR
* >SLEEP
* bra .4
.8 jmp CS.RUN.LOOP
.9 lda #0 .9 lda #0
sec sec

View File

@ -106,8 +106,16 @@ DNS.REQUEST lda hDNSSocket
rts rts
*-------------------------------------- *--------------------------------------
DNS.REQUEST.SEND DNS.REQUEST.SEND
ldy #3
.1 lda IPCFG+S.IPCFG.DNS1,y
sta SA.REMOTE+S.SOCKADDR.ADDR,y
dey
bpl .1
* TODO : >PUSHW L.SOCKADDR.DNS1....DNS2 >LDYAI UDP.PORT.DNS
>STYA SA.REMOTE+S.SOCKADDR.PORT
>PUSHW L.SA.REMOTE
>PUSHW DNS.MSG.LEN >PUSHW DNS.MSG.LEN
>PUSHW L.DNS.MSG >PUSHW L.DNS.MSG
@ -415,7 +423,7 @@ DNS.DecodeMsg sta hFrameIn
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPFrameInPtr >STYA ZPFrameInPtr
ldy #S.DNS.F+1 ldy #S.DNS.F
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
and /S.DNS.F.QR and /S.DNS.F.QR
beq .9 beq .9

View File

@ -16,22 +16,19 @@ AUTO 4,1
* CC: A = hSOCKET * CC: A = hSOCKET
* CS: A = EC * CS: A = EC
*\-------------------------------------- *\--------------------------------------
SKT.Socket tax type (RAW,DGRAM,SEQPACKET,STREAM) SKT.Socket tax
>PULLA get protocol (RAW) >PULLA get protocol (RAW)
SKT.Socket.I jmp (J.SKT.Socket,x) SKT.Socket.I jmp (J.SKT.Socket,x)
SKT.Socket.RAW ldy #S.SOCKET socket.size SKT.Socket.RAW ldy #S.SOCKET
bra SKT.Socket.DSOCK bra SKT.Socket.DSOCK
SKT.Socket.DGRAM SKT.Socket.DGRAM
lda #S.IP.PROTOCOL.UDP lda #S.IP.PROTOCOL.UDP
ldy #S.SOCKET socket.size ldy #S.SOCKET
bra SKT.Socket.DSOCK bra SKT.Socket.DSOCK
SKT.Socket.SEQPACKET SKT.Socket.SEQPACKET
lda #S.IP.PROTOCOL.TCP lda #S.IP.PROTOCOL.TCP
ldy #S.SOCKET.TCP socket.size ldy #S.SOCKET.TCP
SKT.Socket.DSOCK SKT.Socket.DSOCK
stx FD.DSOCK+S.SOCKET.T save type stx FD.DSOCK+S.SOCKET.T save type
sta FD.DSOCK+S.SOCKET.PROTO ICMP,UDP,TCP sta FD.DSOCK+S.SOCKET.PROTO ICMP,UDP,TCP
@ -60,7 +57,7 @@ SKT.Socket.STREAM
ldy #S.SOCKET.TCP ldy #S.SOCKET.TCP
stx FD.SSOCK+S.SOCKET.T save type stx FD.SSOCK+S.SOCKET.T save type
sta FD.SSOCK+S.SOCKET.PROTO ICMP,UDP,TCP sta FD.SSOCK+S.SOCKET.PROTO
lda #0 Y = socket.size lda #0 Y = socket.size
>SYSCALL GetMem0 >SYSCALL GetMem0
bcs .9 bcs .9
@ -116,7 +113,6 @@ SKT.Socket.FindFree
*\-------------------------------------- *\--------------------------------------
SKT.bind >SYSCALL GetMemPtr SKT.bind >SYSCALL GetMemPtr
>STYA ZPPtrSKT >STYA ZPPtrSKT
jsr SKT.PullLocAddr jsr SKT.PullLocAddr
lda SKT.LOC.ADDR+S.SOCKADDR.PORT lda SKT.LOC.ADDR+S.SOCKADDR.PORT
@ -142,7 +138,7 @@ SKT.bind >SYSCALL GetMemPtr
rts rts
*/-------------------------------------- */--------------------------------------
* # Connect * # Connect
* Iinitiate a connection on a socket * Initiate a connection on a socket
* ## C * ## C
* `int connect(hFD fd, const struct sockaddr *addr);` * `int connect(hFD fd, const struct sockaddr *addr);`
* ## ASM * ## ASM
@ -163,71 +159,27 @@ SKT.connect >SYSCALL GetMemPtr
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
jmp (J.SKT.connect,x) jmp (J.SKT.connect,x)
SKT.connect.RAW SKT.connect.RAW
SKT.connect.DGRAM SKT.connect.DGRAM
jsr SKT.SetRemAddr jsr SKT.SetRemAddr
clc clc
rts rts
SKT.connect.STREAM SKT.connect.STREAM
>LDYAI K.TCP.WSIZE
>SYSCALL getmem
bcs SKT.connect.99
txa
ldy #S.SOCKET.SQ.hInMem
sta (ZPPtrSKT),y
>LDYAI K.TCP.WSIZE
>SYSCALL getmem
bcs SKT.connect.99
txa
ldy #S.SOCKET.SQ.hOutMem
sta (ZPPtrSKT),y
SKT.connect.SEQPACKET SKT.connect.SEQPACKET
ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y
bne SKT.connect.9
jsr SKT.SetRemAddr jsr SKT.SetRemAddr
jsr SKT.NewTCB
lda #K.TCP.WSIZE bcs SKT.connect.99
ldy #S.SOCKET.TCP.INFREE
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.OUTFREE
sta (ZPPtrSKT),y
lda /K.TCP.WSIZE
ldy #S.SOCKET.TCP.INFREE
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.OUTFREE
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.OUTNEXTSEQ
.2 lda A2osX.TIMER16-S.SOCKET.TCP.OUTNEXTSEQ,y
sta (ZPPtrSKT),y
iny
cpy #S.SOCKET.TCP.OUTNEXTSEQ+4
bne .2
lda #S.TCP.OPTIONS.SYN lda #S.TCP.OPTIONS.SYN
jsr TCP.OUT.SendOptA Send SYN jsr TCP.OUT.SendOptA Send SYN
bcs .9 bcs .9
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.SYNSENT lda #S.SOCKET.TCP.S.SYNSENT
sta (ZPPtrSKT),y sta SKT.TmpCache+S.SOCKET.TCP.S
clc jmp SKT.StoreTCB
.9 rts
SKT.connect.9 lda #ERR.SKT.BAD .9 lda #ERR.SKT.BAD
sec sec
SKT.connect.99 rts SKT.connect.99 rts
*/-------------------------------------- */--------------------------------------
@ -358,9 +310,7 @@ SKT.shutdown >SYSCALL GetMemPtr
>SYSCALL FreeMem >SYSCALL FreeMem
bra .1 bra .1
.8 lda #0 .8 clc
sta (ZPPtrSKT)
clc
rts rts
.9 lda #ERR.SKT.BAD .9 lda #ERR.SKT.BAD
@ -474,7 +424,7 @@ SKT.Write >SYSCALL GetMemPtr
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.SOCKET.TCP.S.ESTBLSH cmp #S.SOCKET.TCP.S.ESTBLSH
bne .91 bcc .90 Not yet established...no data
jsr SKT.AddDataToSktOut will call SKT.GetTCB jsr SKT.AddDataToSktOut will call SKT.GetTCB
bcs .90 bcs .90
@ -509,9 +459,14 @@ SKT.Write >SYSCALL GetMemPtr
* CC: A = hMem * CC: A = hMem
* CS: A = EC * CS: A = EC
*\-------------------------------------- *\--------------------------------------
SKT.RecvFrom sec SKT.RecvFrom pha
>PULLW ZPTmpPtr1 addr
pla
sec
.HS 90 BCC .HS 90 BCC
SKT.Recv clc SKT.Recv clc
php php
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
@ -544,13 +499,12 @@ SKT.Recv clc
tay tay
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
plp plp
bcc .9 bcc .9 Exit with CC and A=hFrame
pha pha
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPFrameInPtr >STYA ZPFrameInPtr
>PULLW ZPTmpPtr1 addr
ldy #S.IP.SRC ldy #S.IP.SRC
.2 lda (ZPFrameInPtr),y .2 lda (ZPFrameInPtr),y
@ -625,41 +579,35 @@ SKT.Send clc
>STYA ZPPtrSKT >STYA ZPPtrSKT
plp plp
>PULLW ZPDataInPtr
>PULLW ZPDataInLen
bcc .1 bcc .1
jsr SKT.PullRemAddr jsr SKT.PullRemAddr
jsr SKT.SetRemAddr
.1 >PULLW ZPDataInPtr .1 ldy #S.SOCKET.T
>PULLW ZPDataInLen
ldy #S.SOCKET.T
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
jmp (J.SKT.send,x) jmp (J.SKT.send,x)
*-------------------------------------- *--------------------------------------
SKT.Send.RAW ldy #S.SOCKET.PROTO SKT.Send.RAW ldy #S.SOCKET.PROTO
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
>LDYA ZPDataInLen >LDYA ZPDataInLen
jsr FRM.NewIP jsr FRM.NewIP
bcs SKT.Send.9 bcs SKT.Send.9
bra SKT.Send.DGRAM.8 bra SKT.Send.DGRAM.8
*-------------------------------------- *--------------------------------------
SKT.Send.DGRAM ldx #S.IP.PROTOCOL.UDP SKT.Send.DGRAM ldx #S.IP.PROTOCOL.UDP
>LDYA ZPDataInLen >LDYA ZPDataInLen
jsr FRM.NewIP jsr FRM.NewIP
bcs SKT.Send.9 bcs SKT.Send.9
jsr SKT.SetFrameOutTCPUDPPorts jsr SKT.SetFrameOutTCPUDPPorts
SKT.Send.DGRAM.8 SKT.Send.DGRAM.8
jsr SKT.SetFrameOutDstIP jsr SKT.SetFrameOutDstIP
jsr SKT.CopyDataInToOut jsr SKT.CopyDataInToOut
jmp FRM.SendIP jmp FRM.SendIP
*-------------------------------------- *--------------------------------------
SKT.Send.STREAM lda #ERR.SKT.BAD SKT.Send.STREAM lda #ERR.SKT.BAD
@ -685,9 +633,7 @@ SKT.GetTable >LDYA L.SKT.Table
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
SKT.PullLocAddr >PULLW ZPTmpPtr1 SKT.PullLocAddr >PULLW ZPTmpPtr1
ldy #S.SOCKADDR-1 ldy #S.SOCKADDR-1
.1 lda (ZPTmpPtr1),y .1 lda (ZPTmpPtr1),y
sta SKT.LOC.ADDR,y sta SKT.LOC.ADDR,y
dey dey
@ -695,9 +641,7 @@ SKT.PullLocAddr >PULLW ZPTmpPtr1
rts rts
*-------------------------------------- *--------------------------------------
SKT.PullRemAddr >PULLW ZPTmpPtr1 SKT.PullRemAddr >PULLW ZPTmpPtr1
ldy #S.SOCKADDR-1 ldy #S.SOCKADDR-1
.1 lda (ZPTmpPtr1),y .1 lda (ZPTmpPtr1),y
sta SKT.REM.ADDR,y sta SKT.REM.ADDR,y
dey dey
@ -705,7 +649,6 @@ SKT.PullRemAddr >PULLW ZPTmpPtr1
rts rts
*-------------------------------------- *--------------------------------------
SKT.SetLocAddr ldy #S.SOCKET.LOC.ADDR SKT.SetLocAddr ldy #S.SOCKET.LOC.ADDR
.1 lda SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y .1 lda SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
iny iny
@ -714,7 +657,6 @@ SKT.SetLocAddr ldy #S.SOCKET.LOC.ADDR
rts rts
*-------------------------------------- *--------------------------------------
SKT.SetRemAddr ldy #S.SOCKET.REM.ADDR SKT.SetRemAddr ldy #S.SOCKET.REM.ADDR
.1 lda SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y .1 lda SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
iny iny
@ -733,7 +675,12 @@ SKT.FindMatchingLocRem
>STYA ZPTmpPtr1 >STYA ZPTmpPtr1
plx plx
ldy #0 ldy #S.SOCKET.AF
lda (ZPTmpPtr1),y
cmp #AF.INET
bne .8
ldy #S.SOCKET.LOC.ADDR
.2 lda (ZPTmpPtr1),y .2 lda (ZPTmpPtr1),y
bne .4 bne .4
@ -745,28 +692,42 @@ SKT.FindMatchingLocRem
.4 cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y .4 cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
bne .8 bne .8
iny iny
cpy #S.SOCKET.REM.ADDR cpy #S.SOCKET.LOC.PORT+2
bne .3 bne .3
lda SKT.REM.ADDR+S.SOCKADDR.ADDR
cmp #$ff FF.FF.FF.FF, Broadcast ?
bne .5
ldy #S.SOCKET.O ldy #S.SOCKET.O
lda (ZPTmpPtr1),y
and #S.SOCKET.O.ACCEPTCONN
beq .6
ldy #S.TCP.OPTIONS Listening, only SYN packet....
lda (ZPFrameInPtr),y
cmp #S.TCP.OPTIONS.SYN
beq .7 a SYN recieved on a LISTEN socket, ok
bne .8 bad packet for this listening
.6 lda SKT.REM.ADDR+S.SOCKADDR.ADDR
cmp #$ff FF.FF.FF.FF, Broadcast ?
bne .41
* ldy #S.SOCKET.O
lda (ZPTmpPtr1),y lda (ZPTmpPtr1),y
and #S.SOCKET.O.BROADCAST and #S.SOCKET.O.BROADCAST
beq .9 this socket does not accept broadcast beq .9 this socket does not accept broadcast
ldy #S.SOCKET.REM.PORT Boradcast, check port only ldy #S.SOCKET.REM.PORT Boradcast, check port only
bra .5
.41 ldy #S.SOCKET.REM.ADDR
.5 lda (ZPTmpPtr1),y .5 lda (ZPTmpPtr1),y
cmp SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y cmp SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
bne .9 wrong remote host, exit.... bne .8 wrong remote host, exit....
iny iny
cpy #S.SOCKET.REM.PORT+2 cpy #S.SOCKET.REM.PORT+2
bne .5 bne .5
>LDYA ZPTmpPtr1 x = SKT.TABLE index .7 >LDYA ZPTmpPtr1 x = SKT.TABLE index
clc clc
rts rts
@ -775,14 +736,9 @@ SKT.FindMatchingLocRem
bne .1 bne .1
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
SKT.FindMatchingLoc SKT.FindMatchingLoc
ldy #S.SOCKET.LOC.PORT+1
phy
ldx #0 ldx #0
.1 lda SKT.TABLE,x .1 lda SKT.TABLE,x
@ -793,18 +749,20 @@ SKT.FindMatchingLoc
>STYA ZPTmpPtr1 >STYA ZPTmpPtr1
plx plx
ply ldy #S.SOCKET.AF
phy lda (ZPTmpPtr1),y
cmp #AF.INET
bne .7
ldy #S.SOCKET.LOC.ADDR
.2 lda (ZPTmpPtr1),y .2 lda (ZPTmpPtr1),y
cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
bne .7 bne .7
dey iny
cpy #S.SOCKET.LOC.ADDR-1 cpy #S.SOCKET.LOC.PORT+2
bne .2 bne .2
ply
>LDYA ZPTmpPtr1 x = SKT.TABLE index >LDYA ZPTmpPtr1 x = SKT.TABLE index
clc clc
rts rts
@ -813,16 +771,13 @@ SKT.FindMatchingLoc
cpx #K.SKTTABLE.SIZE cpx #K.SKTTABLE.SIZE
bne .1 bne .1
ply
* sec * sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* ZPPtrSKT -> actual socket * ZPPtrSKT -> actual socket
* A = hSocket or hFrame * A = hSocket or hFrame
*-------------------------------------- *--------------------------------------
SKT.AddToQueueA sta .2+1 SKT.AddToQueueA pha
ldy #S.SOCKET.HQ.HEAD ldy #S.SOCKET.HQ.HEAD
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
@ -842,12 +797,13 @@ SKT.AddToQueueA sta .2+1
adc #S.SOCKET.HQ adc #S.SOCKET.HQ
tay tay
.2 lda #$ff pla
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
clc clc
rts rts
.9 sec .9 pla dicard hFrame
* sec
rts rts
*-------------------------------------- *--------------------------------------
* From TCP.IN * From TCP.IN
@ -1107,7 +1063,6 @@ SKT.GetDataFromSktIn
>LDYA ZPTmpPtr3 >LDYA ZPTmpPtr3
clc clc
rts rts
.9 .9
* lda #0 NO DATA * lda #0 NO DATA
sec sec
@ -1207,8 +1162,7 @@ SKT.AddDataToSktOut
lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1
adc ZPDataInLen+1 adc ZPDataInLen+1
sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1
jsr SKT.StoreTCB jmp SKT.StoreTCB
rts
*-------------------------------------- *--------------------------------------
* From TCP.OUT * From TCP.OUT
* Src : hOutMem/OUTTAIL * Src : hOutMem/OUTTAIL
@ -1317,7 +1271,6 @@ SKT.AckDataToSktOut
adc SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1 adc SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1
and /K.TCP.WSIZE-1 and /K.TCP.WSIZE-1
sta SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1
lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE
clc clc
adc TmpDWord+3 adc TmpDWord+3
@ -1336,24 +1289,52 @@ SKT.AckDataToSktOut
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
SKT.GetTCB ldy #S.SOCKET.TCP-S.SOCKET SKT.NewTCB ldx #S.SOCKET
.1 dey .1 stz SKT.TmpCache,x
lda (ZPPtrSKT),y inx
sta SKT.TmpCache,y cpx #S.SOCKET.TCP
cpy #S.SOCKET
bne .1 bne .1
>LDYAI K.TCP.WSIZE
>STYA SKT.TmpCache+S.SOCKET.TCP.INFREE
>SYSCALL getmem
bcs SKT.StoreTCB.RTS
txa
ldy #S.SOCKET.SQ.hInMem
sta (ZPPtrSKT),y
>LDYAI K.TCP.WSIZE
>STYA SKT.TmpCache+S.SOCKET.TCP.OUTFREE
>SYSCALL getmem
bcs SKT.StoreTCB.RTS
txa
ldy #S.SOCKET.SQ.hOutMem
sta (ZPPtrSKT),y
ldx #3
.2 lda A2osX.TIMER16,x
sta SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ,x
dex
bpl .2
*--------------------------------------
SKT.StoreTCB ldy #S.SOCKET
.1 lda SKT.TmpCache,y
sta (ZPPtrSKT),y
iny
cpy #S.SOCKET.TCP
bne .1
clc Make CC for successfull exit
SKT.StoreTCB.RTS
rts rts
*-------------------------------------- *--------------------------------------
SKT.StoreTCB ldy #S.SOCKET.TCP-S.SOCKET SKT.GetTCB ldy #S.SOCKET
.1 lda (ZPPtrSKT),y
.1 dey sta SKT.TmpCache,y
lda SKT.TmpCache,y iny
sta (ZPPtrSKT),y cpy #S.SOCKET.TCP
cpy #S.SOCKET
bne .1 bne .1
rts rts
*-------------------------------------- *--------------------------------------
SKT.Destroy ldy #S.SOCKET.SQ.hOutMem SKT.Destroy ldy #S.SOCKET.SQ.hOutMem
@ -1366,9 +1347,7 @@ SKT.Destroy ldy #S.SOCKET.SQ.hOutMem
beq .2 beq .2
>SYSCALL FreeMem >SYSCALL FreeMem
.2 lda #0 .2 clc
sta (ZPPtrSKT)
clc
rts rts
*-------------------------------------- *--------------------------------------
SKT.SetFrameOutDstIP SKT.SetFrameOutDstIP

View File

@ -4,7 +4,6 @@ AUTO 4,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
TCP.IN jsr FRM.GetTargetSKT.TCPUDP TCP.IN jsr FRM.GetTargetSKT.TCPUDP
>DEBUG
jsr SKT.FindMatchingLocRem jsr SKT.FindMatchingLocRem
bcs TCP.IN.JMP.CLOSED no socket, go discard bcs TCP.IN.JMP.CLOSED no socket, go discard
@ -35,20 +34,15 @@ TCP.IN.JMP.CLOSED
rts rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.LISTEN TCP.IN.JMP.LISTEN
ldy #S.TCP.OPTIONS SYN Received, send SYN.ACK packet
lda (ZPFrameInPtr),y
cmp #S.TCP.OPTIONS.SYN
bne TCP.IN.JMP.CLOSED
ldy #S.SOCKET.T Create a new client socket ldy #S.SOCKET.T Create a new client socket
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax Same type a listening socket tax Same type a listening socket
iny #S.SOCKET.PROTO
lda (ZPPtrSKT),y
jsr SKT.Socket.I get new socket in ZPTmpPtr1 jsr SKT.Socket.I get new socket in ZPTmpPtr1
bcs TCP.IN.JMP.CLOSED bcs TCP.IN.JMP.CLOSED
txa
jsr SKT.AddToQueueA Queued successfully ? jsr SKT.AddToQueueA Queued successfully ?
bcs TCP.IN.JMP.CLOSED no, discard frame and new socket bcs TCP.IN.JMP.CLOSED no, discard frame and new socket
@ -57,27 +51,26 @@ TCP.IN.JMP.LISTEN
lda ZPTmpPtr1 lda ZPTmpPtr1
sta ZPPtrSKT sta ZPPtrSKT
ldaZPTmpPtr1+1 lda ZPTmpPtr1+1
sta ZPPtrSKT+1 sta ZPPtrSKT+1
jsr TCP.IN.ACKTheSYN jsr SKT.SetLocAddr
jsr SKT.SetRemAddr
jsr SKT.StoreTCB jsr SKT.NewTCB
bcs .99
jsr TCP.IN.ACKTheSYN
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA SYN received, Send SYN.ACK jsr TCP.OUT.SendOptA SYN received, Send SYN.ACK
bcs .9 bcs .9
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.SYNRCVD lda #S.SOCKET.TCP.S.SYNRCVD
sta (ZPPtrSKT),y sta SKT.TmpCache+S.SOCKET.TCP.S
jmp SKT.StoreTCB
clc .9 lda #ERR.SKT.OOS
rts
.9 lda #0 error
sta (ZPPtrSKT) clear this socket
lda #ERR.SKT.OOS
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.SYNSENT TCP.IN.JMP.SYNSENT
@ -109,10 +102,8 @@ TCP.IN.JMP.SYNSENT
jsr TCP.OUT.SendOptA SYN.ACK recieved, Send, ACK jsr TCP.OUT.SendOptA SYN.ACK recieved, Send, ACK
bcs .9 bcs .9
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.ESTBLSH lda #S.SOCKET.TCP.S.ESTBLSH
sta (ZPPtrSKT),y sta SKT.TmpCache+S.SOCKET.TCP.S
jmp SKT.StoreTCB jmp SKT.StoreTCB
.9 lda #S.TCP.OPTIONS.RST .9 lda #S.TCP.OPTIONS.RST
@ -143,9 +134,8 @@ TCP.IN.JMP.SYNRCVD
dex dex
bpl .1 bpl .1
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.ESTBLSH lda #S.SOCKET.TCP.S.ESTBLSH
sta (ZPPtrSKT),y sta SKT.TmpCache+S.SOCKET.TCP.S
jmp SKT.StoreTCB jmp SKT.StoreTCB
.8 clc .8 clc
@ -185,12 +175,13 @@ TCP.IN.JMP.ESTBLSH
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.CLWAIT lda #S.SOCKET.TCP.S.CLWAIT
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
jmp SKT.StoreTCB
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.CLWAIT TCP.IN.JMP.CLWAIT
clc Wait for SKT.CloseA from Daemon clc Wait for SKT.shutdown
rts rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.LASTACK TCP.IN.JMP.LASTACK

View File

@ -133,16 +133,16 @@ J.TCP.IN .DA TCP.IN.JMP.CLOSED
.DA TCP.IN.JMP.TIMEWT .DA TCP.IN.JMP.TIMEWT
J.SKT.Socket .DA SKT.Socket.RAW J.SKT.Socket .DA SKT.Socket.RAW
.DA SKT.Socket.DGRAM .DA SKT.Socket.DGRAM
.DA SKT.Socket.STREAM
.DA SKT.Socket.SEQPACKET .DA SKT.Socket.SEQPACKET
.DA SKT.Socket.STREAM
J.SKT.connect .DA SKT.connect.RAW J.SKT.connect .DA SKT.connect.RAW
.DA SKT.connect.DGRAM .DA SKT.connect.DGRAM
.DA SKT.connect.STREAM
.DA SKT.connect.SEQPACKET .DA SKT.connect.SEQPACKET
.DA SKT.connect.STREAM
J.SKT.send .DA SKT.send.RAW J.SKT.send .DA SKT.send.RAW
.DA SKT.send.DGRAM .DA SKT.send.DGRAM
.DA SKT.send.STREAM
.DA SKT.send.SEQPACKET .DA SKT.send.SEQPACKET
.DA SKT.send.STREAM
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD ldx RefCount LIB.LOAD ldx RefCount
@ -211,7 +211,6 @@ POLL >PUSHW L.IOCTL
jmp IP.IN jmp IP.IN
.9 lda hFrameIn .9 lda hFrameIn
beq LIB.UNLOAD.8
>SYSCALL FreeMem >SYSCALL FreeMem
.99 rts .99 rts
@ -222,11 +221,10 @@ POLL >PUSHW L.IOCTL
PULSE and #S.EVT.F.T1SEC PULSE and #S.EVT.F.T1SEC
beq .1 beq .1
* jsr ARP.EXPIRE jsr ARP.EXPIRE
* jsr DNS.EXPIRE jsr DNS.EXPIRE
.1 .1 jsr DNS.POLL
* jsr DNS.POLL
jmp FRM.RETRY jmp FRM.RETRY
*-------------------------------------- *--------------------------------------
GetDynPort inc DYNPORT.LAST GetDynPort inc DYNPORT.LAST
@ -319,9 +317,9 @@ FD.DSOCK.SIZE .EQ *-FD.DSOCK
*-------------------------------------- *--------------------------------------
FD.SSOCK .DA #S.FD.T.SSOCK FD.SSOCK .DA #S.FD.T.SSOCK
.BS 1 S.FD.HANDLER .BS 1 S.FD.HANDLER
.BS 1 S.FD.DSOCK.HSKT .BS 1 S.FD.SSOCK.HSKT
.DA #0 S.FD.DSOCK.OPEN .DA #0 S.FD.SSOCK.OPEN
.DA #0 S.FD.DSOCK.CLOSE .DA #0 S.FD.SSOCK.CLOSE
.DA #LIBTCPIP.Read .DA #LIBTCPIP.Read
.DA #LIBTCPIP.Write .DA #LIBTCPIP.Write
.DA #0 S.FD.DSOCK.STATUS .DA #0 S.FD.DSOCK.STATUS

View File

@ -55,6 +55,7 @@ CS.RUN ldy #S.PS.ARGC
>PUSHBI O.RDWR >PUSHBI O.RDWR
lda #1 lda #1
>SYSCALL ArgV get /dev/xxx >SYSCALL ArgV get /dev/xxx
>SYSCALL fopen >SYSCALL fopen
bcs .9 bcs .9

View File

@ -40,14 +40,14 @@ CS.START cld
.DA CS.QUIT .DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SA.LOCAL .DA SA.LOCAL L.SA.LOCAL .DA SA.LOCAL
L.NOD.Template .DA NOD.Template
L.NOD.Name .DA NOD.Name
L.MSG.TCPWAIT .DA MSG.TCPWAIT L.MSG.TCPWAIT .DA MSG.TCPWAIT
L.MSG.INITOK .DA MSG.INITOK L.MSG.INITOK .DA MSG.INITOK
L.MSG.TCPIPERR .DA MSG.TCPIPERR L.MSG.TCPIPERR .DA MSG.TCPIPERR
L.MSG.SKTERR .DA MSG.SKTERR L.MSG.SKTERR .DA MSG.SKTERR
L.MSG.ABORT .DA MSG.ABORT L.MSG.ABORT .DA MSG.ABORT
L.MSG.INCOMING .DA MSG.INCOMING L.MSG.INCOMING .DA MSG.INCOMING
L.NOD.Template .DA NOD.Template
L.CMD.Template .DA CMD.Template
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.LIBTCPIP CS.INIT >LDYA L.LIBTCPIP
@ -163,6 +163,8 @@ CS.RUN.CLIENT sta (pData),y
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPSktPtr >STYA ZPSktPtr
>PUSHB.G hClientSocket
ldx #3 ldx #3
ldy #S.SOCKET.REM.ADDR+3 ldy #S.SOCKET.REM.ADDR+3
@ -171,24 +173,34 @@ CS.RUN.CLIENT sta (pData),y
dex dex
bpl .3 bpl .3
>PUSHB.G hClientSocket
>PUSHBI 5 >PUSHBI 5
>LDYA L.MSG.INCOMING >LDYA L.MSG.INCOMING
>SYSCALL printf >SYSCALL printf
bcs .9
>PUSHB.G hClientSocket >PUSHB.G hClientSocket
>PUSHBI 1 >PUSHBI 1
>PUSHWI L.NOD.Template >PUSHW L.NOD.Template
>LDYAI L.NOD.Name >LEA.G NodBuf
>SYSCALL sprintf >SYSCALL sprintf
>PUSHB.G hClientSocket >PUSHB.G hClientSocket
>PUSHW 0 >PUSHW 0
>LDYAI L.NOD.Name >LEA.G NodBuf
>SYSCALL mknod >SYSCALL mknod
bcs .9
>PUSHEA.G NodBuf
>PUSHBI 2
>PUSHW L.CMD.Template
>LEA.G CmdBuf
>SYSCALL sprintf
>LEA.G CmdBuf
>SYSCALL puts
>PUSHBI S.PS.F.DUPENV
>LEA.G CmdBuf
>SYSCALL execl
.8 clc .8 clc
.9 rts .9 rts
@ -221,8 +233,7 @@ CS.QUIT ldx #CONN.MAX
dex dex
bne .1 bne .1
ldy #hSrvSocket >LDA.G hSrvSocket
lda (pData),y
beq .3 beq .3
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
@ -253,22 +264,14 @@ MSG.TCPIPERR .AZ "TELNETD:TCP/IP Not initialized properly"
MSG.SKTERR .AZ "TELNETD:Listen Error." MSG.SKTERR .AZ "TELNETD:Listen Error."
MSG.ABORT .AZ "TELNETD:User Aborted." MSG.ABORT .AZ "TELNETD:User Aborted."
MSG.INCOMING .AZ "TELNETD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n" MSG.INCOMING .AZ "TELNETD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n"
CMD.LINE .AS "${A2OSX}SBIN/GETTY " *--------------------------------------
NOD.Template .AZ "/DEV/TTY%h"
.AZ " ${A2OSX}SBIN/LOGIN" CMD.Template .AZ "${A2OSX}SBIN/GETTY %s ${A2OSX}SBIN/LOGIN"
*-------------------------------------- *--------------------------------------
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1 .BS 1
.BS 4 S.SOCKADDR.ADDR .BS 4 S.SOCKADDR.ADDR
.DA TCP.PORT.TELNET .DA TCP.PORT.TELNET
*--------------------------------------
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
*--------------------------------------
NOD.Template .AZ "/DEV/TTY%h"
NOD.Name .AZ " "
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
@ -278,7 +281,8 @@ SktIndex .BS 1
hSrvSocket .BS 1 hSrvSocket .BS 1
hClientSocket .BS 1 hClientSocket .BS 1
TimeOut .BS 1 TimeOut .BS 1
NodBuf .BS 11
CmdBuf .BS 65
DS.END DS.END
.ED .ED
*-------------------------------------- *--------------------------------------

View File

@ -45,17 +45,45 @@ IO.Open.I jsr STDIO.SetMLIPathYA
>LDYAI K.MLI.PATH+6 skip $/DEV/ >LDYAI K.MLI.PATH+6 skip $/DEV/
jsr K.GetDevByName jsr K.GetDevByName
bcs IO.OPEN.RTS bcc .7
>STYA pFD ldx #0
phx DEVID
.10 lda Nod.Table.hPath,x
beq .6
jsr K.GetMemPtr
>STYA ZPPtr1
ldy #0
.2 lda (ZPPtr1),y
iny
cmp K.MLI.PATH,y
bne .6
cmp #0 end of string ?
bne .2
txa return hFILE
clc
rts
.6 inx
cpx #K.NOD.MAX
bne .10
lda #MLI.E.NODEV
* sec
rts no OF found
.7 >STYA pFD
phx DEVID/hFILE
lda (pFD) #S.FD.T lda (pFD) #S.FD.T
tax tax
pla pla
jmp (.2,x) jmp (.8,x)
.2 .DA STDIO.IOERR REG .8 .DA STDIO.IOERR REG
.DA STDIO.IOERR DIR .DA STDIO.IOERR DIR
.DA IO.OPEN.CDEV .DA IO.OPEN.CDEV
.DA STDIO.IOERR BDEV .DA STDIO.IOERR BDEV

View File

@ -239,9 +239,8 @@ Mem.NextSlot lda ZPMemMgrSPtr
K.FreeMem.ERR >PUSHA K.FreeMem.ERR >PUSHA
>PUSHBI 1 >PUSHBI 1
>PUSHWI K.FreeMem.ERR1 >LDYAI K.FreeMem.ERR1
lda #DEVID.SYS >SYSCALL printf
>SYSCALL fprintf
sec sec
rts rts
@ -314,14 +313,13 @@ K.FreeMem tay
>PUSHYA >PUSHYA
>PUSHBI 2 >PUSHBI 2
>PUSHWI K.FreeMem.ERR2 >LDYAI K.FreeMem.ERR2
lda #DEVID.SYS >SYSCALL printf
>SYSCALL fprintf
sec sec
rts rts
*-------------------------------------- *--------------------------------------
K.FreeMem.ERR1 .AZ "FreeMem:Bad hMem:%h." K.FreeMem.ERR1 .AZ "FreeMem:Bad hMem:%h.\r\n"
K.FreeMem.ERR2 .AZ "FreeMem:hMem already freed At $%H." K.FreeMem.ERR2 .AZ "FreeMem:hMem already freed At $%H.\r\n"
*/-------------------------------------- */--------------------------------------
* # GetMemPtr * # GetMemPtr
* A = hMem * A = hMem