2017-12-22 22:24:30 +01:00
|
|
|
|
NEW
|
2019-05-05 19:15:37 +02:00
|
|
|
|
AUTO 3,1
|
2016-01-16 23:04:22 +01:00
|
|
|
|
*--------------------------------------
|
2019-07-07 22:48:57 +02:00
|
|
|
|
IP.IN ldy #S.IP.PROTOCOL
|
2017-01-31 17:40:37 +01:00
|
|
|
|
lda (ZPFrameInPtr),y
|
2016-01-16 23:04:22 +01:00
|
|
|
|
cmp #S.IP.PROTOCOL.ICMP
|
|
|
|
|
bne .2
|
2019-07-07 22:48:57 +02:00
|
|
|
|
|
2016-01-16 23:04:22 +01:00
|
|
|
|
jmp ICMP.IN
|
2020-06-07 15:47:00 +02:00
|
|
|
|
|
2016-01-16 23:04:22 +01:00
|
|
|
|
.2 cmp #S.IP.PROTOCOL.UDP
|
|
|
|
|
bne .3
|
2019-06-17 17:40:26 +02:00
|
|
|
|
|
2019-07-07 22:48:57 +02:00
|
|
|
|
jsr FRM.GetTargetSKT.TCPUDP
|
2020-10-30 10:51:37 +01:00
|
|
|
|
|
2019-06-17 17:40:26 +02:00
|
|
|
|
jsr SKT.FindMatchingLocRem
|
|
|
|
|
bcs .9
|
|
|
|
|
|
|
|
|
|
lda hFrameIn
|
|
|
|
|
jsr SKT.AddToQueueA
|
|
|
|
|
bcs .9 Q full, discard...
|
2019-11-17 15:39:55 +01:00
|
|
|
|
|
2019-06-17 17:40:26 +02:00
|
|
|
|
rts
|
2019-11-17 15:39:55 +01:00
|
|
|
|
|
2016-01-16 23:04:22 +01:00
|
|
|
|
.3 cmp #S.IP.PROTOCOL.TCP
|
|
|
|
|
bne .9
|
2019-11-17 15:39:55 +01:00
|
|
|
|
|
2019-07-07 22:48:57 +02:00
|
|
|
|
jsr TCP.IN TCP may NOT discard FrameIn
|
2019-11-17 15:39:55 +01:00
|
|
|
|
|
|
|
|
|
.9 jmp FRM.DiscardIn
|
2016-01-16 23:04:22 +01:00
|
|
|
|
*--------------------------------------
|
2018-09-21 17:28:46 +02:00
|
|
|
|
IP.ComputeICMPChecksum
|
|
|
|
|
stz IP.CHECKSUM
|
|
|
|
|
stz IP.CHECKSUM+1
|
|
|
|
|
|
|
|
|
|
lda ZPFrameOutLen
|
|
|
|
|
sec
|
2018-09-25 08:25:32 +02:00
|
|
|
|
sbc #S.IP
|
2018-09-21 17:28:46 +02:00
|
|
|
|
eor #$ff
|
|
|
|
|
tax
|
|
|
|
|
lda ZPFrameOutLen+1
|
2018-09-25 08:25:32 +02:00
|
|
|
|
sbc /S.IP
|
2018-09-21 17:28:46 +02:00
|
|
|
|
eor #$ff
|
|
|
|
|
ldy #S.ICMP.CHECKSUM
|
2018-09-25 08:25:32 +02:00
|
|
|
|
clc
|
2018-09-21 17:28:46 +02:00
|
|
|
|
jmp IP.ComputeChecksum
|
2016-01-16 23:04:22 +01:00
|
|
|
|
*--------------------------------------
|
2018-09-25 08:25:32 +02:00
|
|
|
|
IP.ComputeUDPChecksum
|
2016-01-16 23:04:22 +01:00
|
|
|
|
clc
|
|
|
|
|
|
2018-09-25 08:25:32 +02:00
|
|
|
|
ldy #S.UDP.LENGTH+1
|
2018-09-21 17:28:46 +02:00
|
|
|
|
lda (ZPFrameOutPtr),y
|
|
|
|
|
adc #S.IP.PROTOCOL.UDP
|
|
|
|
|
sta IP.CHECKSUM+1
|
2018-09-25 08:25:32 +02:00
|
|
|
|
|
|
|
|
|
dey
|
|
|
|
|
lda (ZPFrameOutPtr),y
|
|
|
|
|
adc /S.IP.PROTOCOL.UDP (all zero)
|
|
|
|
|
sta IP.CHECKSUM
|
2018-09-21 17:28:46 +02:00
|
|
|
|
jsr IP.AddSrcDstIPToChecksum
|
|
|
|
|
|
2018-09-25 08:25:32 +02:00
|
|
|
|
ldy #S.UDP.LENGTH+1
|
|
|
|
|
lda (ZPFrameOutPtr),y
|
2018-09-21 17:28:46 +02:00
|
|
|
|
eor #$ff
|
|
|
|
|
tax
|
2018-09-25 08:25:32 +02:00
|
|
|
|
|
|
|
|
|
dey
|
|
|
|
|
lda (ZPFrameOutPtr),y
|
2018-09-21 17:28:46 +02:00
|
|
|
|
eor #$ff
|
|
|
|
|
ldy #S.UDP.CHECKSUM
|
|
|
|
|
bra IP.ComputeChecksum
|
|
|
|
|
*--------------------------------------
|
2019-10-03 08:25:27 +02:00
|
|
|
|
IP.ComputeTCPChecksum
|
2018-09-21 17:28:46 +02:00
|
|
|
|
lda ZPFrameOutLen
|
|
|
|
|
sec
|
|
|
|
|
sbc #S.IP
|
2019-06-10 10:19:13 +02:00
|
|
|
|
sta IP.CHECKSUM.TMP
|
2018-09-21 17:28:46 +02:00
|
|
|
|
lda ZPFrameOutLen+1
|
|
|
|
|
sbc /S.IP
|
2019-06-10 10:19:13 +02:00
|
|
|
|
sta IP.CHECKSUM.TMP+1
|
2016-01-16 23:04:22 +01:00
|
|
|
|
clc
|
2019-06-10 10:19:13 +02:00
|
|
|
|
* lda IP.CHECKSUM.TMP+1
|
2018-09-21 17:28:46 +02:00
|
|
|
|
* adc /S.IP.PROTOCOL.TCP (all zero)
|
|
|
|
|
sta IP.CHECKSUM
|
2016-01-16 23:04:22 +01:00
|
|
|
|
|
2019-06-10 10:19:13 +02:00
|
|
|
|
lda IP.CHECKSUM.TMP
|
2018-09-21 17:28:46 +02:00
|
|
|
|
adc #S.IP.PROTOCOL.TCP
|
|
|
|
|
sta IP.CHECKSUM+1
|
|
|
|
|
jsr IP.AddSrcDstIPToChecksum
|
2019-06-10 10:19:13 +02:00
|
|
|
|
lda IP.CHECKSUM.TMP
|
2018-09-21 17:28:46 +02:00
|
|
|
|
eor #$ff
|
|
|
|
|
tax
|
2019-06-10 10:19:13 +02:00
|
|
|
|
lda IP.CHECKSUM.TMP+1
|
2018-09-21 17:28:46 +02:00
|
|
|
|
eor #$ff
|
|
|
|
|
ldy #S.TCP.CHECKSUM
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* X,A = !ByteCount, Y = Offset in Frame
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
IP.ComputeChecksum
|
|
|
|
|
phy Save Offset
|
|
|
|
|
pha Save !ByteCount.HI
|
|
|
|
|
|
|
|
|
|
lda #0 Reset Checksum
|
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-13 23:09:00 +01:00
|
|
|
|
iny
|
2018-09-21 17:28:46 +02:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
|
|
|
|
|
|
|
|
|
>LDYA ZPFrameOutPtr
|
|
|
|
|
>STYA ZPTmpPtr1
|
|
|
|
|
|
|
|
|
|
ldy #S.IP
|
2019-10-03 08:25:27 +02:00
|
|
|
|
|
2018-09-21 17:28:46 +02:00
|
|
|
|
.1 inx
|
|
|
|
|
bne .11
|
|
|
|
|
pla
|
|
|
|
|
inc
|
|
|
|
|
beq .8
|
|
|
|
|
pha
|
|
|
|
|
.11 lda (ZPTmpPtr1),y
|
2016-01-16 23:04:22 +01:00
|
|
|
|
adc IP.CHECKSUM
|
|
|
|
|
sta IP.CHECKSUM
|
2018-09-21 17:28:46 +02:00
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
bne .20
|
|
|
|
|
inc ZPTmpPtr1+1
|
|
|
|
|
.20 inx
|
|
|
|
|
bne .2
|
|
|
|
|
pla
|
|
|
|
|
inc
|
|
|
|
|
beq .7
|
|
|
|
|
pha
|
|
|
|
|
|
|
|
|
|
.2 lda (ZPTmpPtr1),y
|
|
|
|
|
|
2016-01-16 23:04:22 +01:00
|
|
|
|
adc IP.CHECKSUM+1
|
|
|
|
|
sta IP.CHECKSUM+1
|
2018-09-21 17:28:46 +02:00
|
|
|
|
iny
|
2016-01-16 23:04:22 +01:00
|
|
|
|
bne .1
|
2018-09-21 17:28:46 +02:00
|
|
|
|
inc ZPTmpPtr1+1
|
|
|
|
|
bra .1
|
|
|
|
|
.7 adc IP.CHECKSUM+1 A=0 from beq .7
|
|
|
|
|
sta IP.CHECKSUM+1
|
|
|
|
|
.8 ply
|
2016-01-16 23:04:22 +01:00
|
|
|
|
lda IP.CHECKSUM
|
2018-09-21 17:28:46 +02:00
|
|
|
|
adc #0 Don't forget to add last carry!!!
|
2016-01-16 23:04:22 +01:00
|
|
|
|
eor #$FF
|
2018-09-21 17:28:46 +02:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
|
|
|
|
iny
|
2016-01-16 23:04:22 +01:00
|
|
|
|
lda IP.CHECKSUM+1
|
2018-09-21 17:28:46 +02:00
|
|
|
|
adc #0 Don't forget to add last carry!!!
|
2016-01-16 23:04:22 +01:00
|
|
|
|
eor #$FF
|
2018-09-21 17:28:46 +02:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
IP.AddSrcDstIPToChecksum
|
|
|
|
|
ldy #S.IP.SRC
|
|
|
|
|
ldx #4 4 words for SRC & DST IP
|
|
|
|
|
.1 lda (ZPFrameOutPtr),y
|
|
|
|
|
adc IP.CHECKSUM
|
|
|
|
|
sta IP.CHECKSUM
|
|
|
|
|
iny
|
|
|
|
|
lda (ZPFrameOutPtr),y
|
|
|
|
|
adc IP.CHECKSUM+1
|
|
|
|
|
sta IP.CHECKSUM+1
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
2016-01-16 23:04:22 +01:00
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2016-03-20 23:16:01 +01:00
|
|
|
|
IP.SetDestMAC ldy #S.IP.DST
|
2017-01-31 17:40:37 +01:00
|
|
|
|
lda (ZPFrameOutPtr),y
|
2016-03-20 23:16:01 +01:00
|
|
|
|
iny
|
2017-01-31 17:40:37 +01:00
|
|
|
|
.1 and (ZPFrameOutPtr),y
|
2016-03-20 23:16:01 +01:00
|
|
|
|
iny
|
|
|
|
|
cpy #S.IP.DST+4
|
|
|
|
|
bne .1
|
|
|
|
|
cmp #$FF
|
|
|
|
|
bne .3 not a broadcast....
|
|
|
|
|
ldy #S.ETH.DSTMAC
|
2017-01-31 17:40:37 +01:00
|
|
|
|
.2 sta (ZPFrameOutPtr),y
|
2016-03-20 23:16:01 +01:00
|
|
|
|
iny
|
|
|
|
|
cpy #S.ETH.DSTMAC+6
|
|
|
|
|
bne .2
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
.3 ldy #S.IP.DST+3
|
|
|
|
|
ldx #3
|
2017-01-31 17:40:37 +01:00
|
|
|
|
.4 lda (ZPFrameOutPtr),y
|
2016-03-20 23:16:01 +01:00
|
|
|
|
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
|
2017-01-31 17:40:37 +01:00
|
|
|
|
.5 lda (ZPFrameOutPtr),y
|
2016-03-20 23:16:01 +01:00
|
|
|
|
sta ARP.TmpCache+S.ARPCACHE.IP,x
|
|
|
|
|
dey
|
|
|
|
|
dex
|
|
|
|
|
bpl .5
|
|
|
|
|
bra .8
|
2021-05-19 14:44:47 +02:00
|
|
|
|
|
2016-03-20 23:16:01 +01:00
|
|
|
|
.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
|
2019-10-06 14:50:43 +02:00
|
|
|
|
|
2016-03-20 23:16:01 +01:00
|
|
|
|
.8 jsr ARP.QUERY.I
|
|
|
|
|
bcs .99
|
2019-10-06 14:50:43 +02:00
|
|
|
|
|
2016-03-20 23:16:01 +01:00
|
|
|
|
ldx #5
|
|
|
|
|
ldy #S.ETH.DSTMAC+5
|
|
|
|
|
.11 lda ARP.TmpCache+S.ARPCACHE.MAC,x
|
2017-01-31 17:40:37 +01:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-20 23:16:01 +01:00
|
|
|
|
dey
|
|
|
|
|
dex
|
|
|
|
|
bpl .11
|
|
|
|
|
clc
|
|
|
|
|
.99 rts
|
|
|
|
|
*--------------------------------------
|
2016-01-16 23:04:22 +01:00
|
|
|
|
MAN
|
2020-06-07 10:06:51 +02:00
|
|
|
|
SAVE usr/src/lib/libtcpip.s.ip
|
|
|
|
|
LOAD usr/src/lib/libtcpip.s
|
2016-01-16 23:04:22 +01:00
|
|
|
|
ASM
|