mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-27 04:49:20 +00:00
377 lines
8.6 KiB
Plaintext
377 lines
8.6 KiB
Plaintext
NEW
|
||
PREFIX /A2OSX.BUILD
|
||
AUTO 4,1
|
||
.LIST OFF
|
||
.OP 65C02
|
||
.OR $2000
|
||
.TF LIB/LIBTCPIP.O
|
||
*--------------------------------------
|
||
.INB INC/MACROS.I
|
||
.INB INC/A2OSX.I
|
||
.INB INC/MLI.ERR.I
|
||
.INB INC/NIC.I
|
||
.INB INC/ETH.I
|
||
.INB INC/LIBTCPIP.I
|
||
*--------------------------------------
|
||
ZPFrameInPtr .EQ ZPLIB
|
||
ZPFrameInLen .EQ ZPLIB+2
|
||
|
||
ZPDataInPtr .EQ ZPLIB+4
|
||
ZPDataInLen .EQ ZPLIB+6
|
||
|
||
ZPFrameOutPtr .EQ ZPLIB+8
|
||
ZPFrameOutLen .EQ ZPLIB+10
|
||
|
||
ZPDataOutPtr .EQ ZPLIB+12
|
||
ZPDataOutLen .EQ ZPLIB+14
|
||
|
||
ZPPtrIP .EQ ZPLIB+16
|
||
ZPPtrMAC .EQ ZPLIB+18
|
||
ZPPtrDNS .EQ ZPLIB+20
|
||
ZPPtrSKT .EQ ZPLIB+22
|
||
|
||
ZPCachePtr .EQ ZPLIB+24
|
||
ZPTmpPtr1 .EQ ZPLIB+26
|
||
ZPTmpPtr2 .EQ ZPLIB+28
|
||
ZPTmpPtr3 .EQ ZPLIB+30
|
||
*--------------------------------------
|
||
* File Header (16 Bytes)
|
||
*--------------------------------------
|
||
CS.START cld
|
||
jmp (.1,x)
|
||
.DA #$61 6502,Level 1 (65c02)
|
||
.DA #1 BIN Layout Version 1
|
||
.DA 0
|
||
.DA CS.END-CS.START
|
||
.DA 0
|
||
.DA 0
|
||
.DA 0
|
||
*--------------------------------------
|
||
* Relocation Table
|
||
*--------------------------------------
|
||
.1 .DA LIB.LOAD
|
||
.DA LIB.UNLOAD
|
||
|
||
.DA SET.IPCFG
|
||
.DA GET.IPCFG
|
||
|
||
.DA POLL
|
||
.DA PULSE
|
||
|
||
.DA ARP.CLEAR
|
||
.DA ARP.QUERY
|
||
.DA ARP.ADD
|
||
.DA ARP.GetCACHE
|
||
|
||
.DA DNS.CLEAR
|
||
.DA DNS.QUERY
|
||
.DA DNS.ADD
|
||
.DA DNS.GetCACHE
|
||
|
||
.DA HST.GETBYNAME
|
||
.DA HST.GETBYADDR
|
||
|
||
.DA SKT.New
|
||
.DA SKT.Close
|
||
.DA SKT.GetTable
|
||
.DA SKT.Get
|
||
|
||
.DA SKT.Accept
|
||
.DA SKT.MkNod
|
||
|
||
.DA SKT.Write
|
||
.DA SKT.Read
|
||
.DA SKT.ReadFrame
|
||
*--------------------------------------
|
||
L.DEVNAME .DA DEVNAME
|
||
L.MSG.DEV.KO .DA MSG.DEV.KO
|
||
L.MSG.DEV.OK .DA MSG.DEV.OK
|
||
L.MSG.CFG .DA MSG.CFG
|
||
L.MSG.CFG.KO .DA MSG.CFG.KO
|
||
L.MSG.CFG.OK .DA MSG.CFG.OK
|
||
L.MSG.DNS.ADD .DA MSG.DNS.ADD
|
||
L.MSG.DNS.ERR .DA MSG.DNS.ERR
|
||
L.HOSTNAME .DA HOSTNAME
|
||
L.TCPIP.CONF .DA TCPIP.CONF
|
||
L.HOSTS .DA HOSTS
|
||
L.IPCFG .DA IPCFG
|
||
L.CFG.IP .DA CFG.IP
|
||
L.CFG.HOSTNAME .DA CFG.HOSTNAME
|
||
L.CFG.ALIAS .DA CFG.ALIAS
|
||
L.CFG.HOSTS.SScanF .DA CFG.HOSTS.SScanF
|
||
L.CFG.Keywords .DA CFG.Keywords
|
||
J.CFG.Keywords .DA CFG.Read.address
|
||
.DA CFG.Read.netmask
|
||
.DA CFG.Read.gateway
|
||
.DA CFG.Read.nameserver
|
||
.DA CFG.Read.dnsdomain
|
||
L.ARP.REQ .DA ARP.REQ
|
||
L.ARP.REP .DA ARP.REP
|
||
L.DNS.SOCKET .DA DNS.SOCKET
|
||
L.DNS.MSG .DA DNS.MSG
|
||
L.ARP.CACHE .DA ARP.CACHE
|
||
L.DNS.CACHE .DA DNS.CACHE
|
||
L.SKT.Template .DA SKT.Template
|
||
L.HST.SScanF .DA HST.SScanF
|
||
L.TmpByte .DA TmpByte
|
||
L.IOCTL .DA IOCTL
|
||
L.DCB.NIC .DA DCB.NIC
|
||
L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED
|
||
.DA TCP.IN.JMP.LISTEN
|
||
.DA TCP.IN.JMP.SYNSENT
|
||
.DA TCP.IN.JMP.SYNRCVD
|
||
.DA TCP.IN.JMP.ESTBLSH
|
||
.DA TCP.IN.JMP.CLWAIT
|
||
.DA TCP.IN.JMP.LASTACK
|
||
.DA TCP.IN.JMP.FINWT1
|
||
.DA TCP.IN.JMP.FINWT2
|
||
.DA TCP.IN.JMP.CLOSING
|
||
.DA TCP.IN.JMP.TIMEWT
|
||
.DA 0
|
||
*--------------------------------------
|
||
LIB.LOAD ldx RefCount
|
||
bne .8
|
||
|
||
sta FD.SSOCK+S.FD.HANDLER
|
||
|
||
jsr ARP.CLEAR
|
||
|
||
jsr DNS.CLEAR
|
||
|
||
>LDYAI K.SKTTABLE.SIZE*S.SOCKET
|
||
>SYSCALL getmem0
|
||
bcs .9
|
||
|
||
stx hSocketTable
|
||
|
||
jsr CFG.Init
|
||
bcs .9
|
||
|
||
.8 inc RefCount
|
||
|
||
clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
LIB.UNLOAD dec RefCount
|
||
bne LIB.UNLOAD.8
|
||
|
||
lda IPCFG+S.IPCFG.hFD
|
||
beq .1
|
||
|
||
>PUSHWI 0
|
||
>PUSHBI IOCTL.CLOSE
|
||
lda IPCFG+S.IPCFG.hFD
|
||
>SYSCALL IOCTL
|
||
|
||
.1 lda hSocketTable
|
||
beq LIB.UNLOAD.8
|
||
|
||
>SYSCALL FreeMem
|
||
|
||
LIB.UNLOAD.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
POLL >PUSHW L.IOCTL
|
||
>PUSHBI IOCTL.READ
|
||
lda IPCFG+S.IPCFG.hFD
|
||
>SYSCALL IOCTL
|
||
bcs .99 No Frame
|
||
|
||
sta hFrameIn
|
||
ldx #3
|
||
|
||
.10 lda IOCTL+S.IOCTL.BUFPTR,x Get Frame Ptr & Len
|
||
sta ZPFrameInPtr,x
|
||
dex
|
||
bpl .10
|
||
|
||
ldy #S.ETH.ETHERTYPE
|
||
lda (ZPFrameInPtr),y
|
||
tax
|
||
iny
|
||
lda (ZPFrameInPtr),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 lda hFrameIn
|
||
beq LIB.UNLOAD.8
|
||
>SYSCALL FreeMem
|
||
|
||
.99 rts
|
||
*--------------------------------------
|
||
* Expire = every sec
|
||
* Retry = every 100 msec
|
||
*--------------------------------------
|
||
PULSE and #S.EVT.F.T1SEC
|
||
beq .1
|
||
|
||
* jsr ARP.EXPIRE
|
||
jsr DNS.EXPIRE
|
||
|
||
.1 jsr DNS.POLL
|
||
jmp FRM.RETRY
|
||
*--------------------------------------
|
||
GetDynPort inc DYNPORT.LAST
|
||
bne .1
|
||
inc DYNPORT.LAST+1
|
||
|
||
lda DYNPORT.LAST
|
||
cmp #K.DYNPORT.END
|
||
lda DYNPORT.LAST+1
|
||
sbc /K.DYNPORT.END
|
||
|
||
bcs .1
|
||
|
||
lda #K.DYNPORT.START
|
||
ldx /K.DYNPORT.START
|
||
sta DYNPORT.LAST
|
||
stx DYNPORT.LAST+1
|
||
rts CC
|
||
|
||
.1 lda DYNPORT.LAST
|
||
ldx DYNPORT.LAST+1
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.ARP
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.CFG
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.DNS
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.FRM
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.HST
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.ICMP
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.IP
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.SKT
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.TCP
|
||
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.UDP
|
||
*--------------------------------------
|
||
CS.END
|
||
*--------------------------------------
|
||
DEVNAME .AZ "/DEV/ETH1"
|
||
MSG.DEV.KO .AZ "TCPIPD:No Device Found, exiting.\r\n"
|
||
MSG.DEV.OK .AZ "TCPIPD:Bound To Device : %s\r\n"
|
||
MSG.CFG .AZ "TCPIPD:Reading %s..."
|
||
MSG.CFG.KO .AZ "Failed!!! [%h]\r\n"
|
||
MSG.CFG.OK .AZ "OK.\r\n"
|
||
MSG.DNS.ADD .AZ "Added static host %d.%d.%d.%d %s\r\n"
|
||
MSG.DNS.ERR .AZ "***ERROR adding static host %d.%d.%d.%d %s\r\n"
|
||
*--------------------------------------
|
||
HOSTNAME .AZ "${A2OSX}ETC/HOSTNAME"
|
||
TCPIP.CONF .AZ "${A2OSX}ETC/TCPIP.CONF"
|
||
HOSTS .AZ "${A2OSX}ETC/HOSTS"
|
||
*--------------------------------------
|
||
CFG.DefaultHost .AZ "a2osx-XXXX"
|
||
CFG.Keywords >PSTR "address"
|
||
>PSTR "netmask"
|
||
>PSTR "gateway"
|
||
>PSTR "nameserver"
|
||
>PSTR "dnsdomain"
|
||
.DA #0
|
||
CFG.hBuf .BS 1
|
||
CFG.hCfgPath .BS 1
|
||
CFG.hCfgFile .BS 1
|
||
CFG.IP .BS 4
|
||
CFG.HostName .BS K.DNS.MAXLEN+1
|
||
CFG.Alias .BS K.DNS.MAXLEN+1
|
||
CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s"
|
||
*--------------------------------------
|
||
FD.SSOCK .BS 1 S.FD.HANDLER
|
||
.DA #S.FD.T.SSOCK
|
||
.BS 1 S.FD.SSOCK.HSKT
|
||
.DA #0 S.FD.SSOCK.OPEN
|
||
.DA #0 S.FD.SSOCK.CLOSE
|
||
.DA #0
|
||
.DA #0
|
||
.DA #0 S.FD.SSOCK.STATUS
|
||
*--------------------------------------
|
||
IOCTL .BS S.IOCTL
|
||
DCB.NIC .BS S.DCB.NIC
|
||
IPCFG .BS S.IPCFG
|
||
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
|
||
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
||
*--------------------------------------
|
||
ARP.REQ .EQ *
|
||
ARP.REQ.DSTMAC .HS FFFFFFFFFFFF
|
||
ARP.REQ.SRCMAC .BS 6
|
||
ARP.REQ.ETYPE .DA /S.ETH.ETHERTYPE.ARP
|
||
.DA #S.ETH.ETHERTYPE.ARP
|
||
.HS 0001.0800.06.04
|
||
ARP.REQ.OP .DA /S.ARP.OPERATION.REQ
|
||
.DA #S.ARP.OPERATION.REQ
|
||
ARP.REQ.SHA .BS 6
|
||
ARP.REQ.SPA .BS 4
|
||
ARP.REQ.THA .BS 6
|
||
ARP.REQ.TPA .BS 4
|
||
*--------------------------------------
|
||
ARP.REP .EQ *
|
||
ARP.REP.DSTMAC .BS 6
|
||
ARP.REP.SRCMAC .BS 6
|
||
ARP.REP.ETYPE .DA /S.ETH.ETHERTYPE.ARP
|
||
.DA #S.ETH.ETHERTYPE.ARP
|
||
.HS 0001.0800.06.04
|
||
ARP.REP.OP .DA /S.ARP.OPERATION.REP
|
||
.DA #S.ARP.OPERATION.REP
|
||
ARP.REP.SHA .BS 6
|
||
ARP.REP.SPA .BS 4
|
||
ARP.REP.THA .BS 6
|
||
ARP.REP.TPA .BS 4
|
||
*--------------------------------------
|
||
DNS.SOCKET .DA #S.SOCKET.SOCK.DGRAM
|
||
.BS 3
|
||
DNS.SOCKET.SA .BS 4
|
||
DNS.SOCKET.SP .DA 0 Dynamic
|
||
DNS.SOCKET.DA .BS 4
|
||
DNS.SOCKET.DP .DA UDP.PORT.DNS
|
||
*--------------------------------------
|
||
DNS.MSG.LEN .BS 2
|
||
DNS.MSG
|
||
DNS.MSG.ID .BS 2
|
||
.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
|
||
*--------------------------------------
|
||
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
|
||
FRM.QUEUE.LenL .BS K.FRMQUEUE.SIZE
|
||
FRM.QUEUE.LenH .BS K.FRMQUEUE.SIZE
|
||
*--------------------------------------
|
||
RefCount .DA #0
|
||
hSocketTable .BS 1
|
||
DYNPORT.LAST .DA K.DYNPORT.START
|
||
hDNSSocket1 .BS 1
|
||
hDNSSocket2 .BS 1
|
||
DNS.HostName .BS K.DNS.MAXLEN+1
|
||
DNS.TmpCache .BS S.DNSCACHE
|
||
ARP.TmpCache .BS S.ARP
|
||
SKT.Template .BS S.SOCKET
|
||
SKT.TCBCache .BS S.TCB
|
||
TmpByte .BS 1
|
||
TmpDWord .BS 4
|
||
TmpOffset .BS 2
|
||
hFrameIn .BS 1
|
||
hFrameOut .BS 1
|
||
bTextMode .BS 1
|
||
HST.SScanF .AZ "%d.%d.%d.%d"
|
||
IP.ID .BS 2
|
||
IP.CHECKSUM .BS 4
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE /A2OSX.SRC/LIB/LIBTCPIP.S
|
||
ASM
|