mirror of
https://github.com/PDP-10/its.git
synced 2026-01-11 23:53:12 +00:00
Implement Chaosnet broadcast sending in ITS.
This commit is contained in:
parent
e5ee34480e
commit
cfa4505c90
@ -773,7 +773,7 @@ CHPKO: PUSHJ P,CHAIOS ;SET UP I, E
|
||||
%COMNT::JRST IOCER3
|
||||
%COEOF::JRST CHOEOF
|
||||
%COUNC::JRST CHOUNC
|
||||
%COBRD::JRST IOCER9 ;UNTIL I IMPLEMENT IT
|
||||
%COBRD::JRST CHOBRD
|
||||
%COMAX::OFFSET 0
|
||||
|
||||
;LOSSET ROUTINE TO RETURN BUFFER A POINTS TO.
|
||||
@ -797,6 +797,25 @@ CHORFC: PUSHJ P,CHORF1 ;RE-INITIALIZE CONNECTION
|
||||
MOVEI E,%CSRFS ;PUT INTO RFC-SENT STATE
|
||||
JRST CHOOP1 ;GO SEND
|
||||
|
||||
;Sending broadcast
|
||||
CHOBRD: CAIE E,%CSBRS ;Don't reinitialize if we already sent a BRD
|
||||
PUSHJ P,CHORF1 ;RE-INITIALIZE CONNECTION
|
||||
SETZB B,%CPKD(A) ;Clear dest host and index
|
||||
MOVEM B,CHSFRN(I)
|
||||
;; Check bitmap settings.
|
||||
LDB T,[$CPKAN(A)] ;NUMBER OF BITMAP BYTES
|
||||
SKIPN T ;Must be some
|
||||
JRST IOCR10
|
||||
LDB TT,[$CPKNB(A)] ;NUMBER OF TOTAL DATA BYES (INCLUDES BITMAP)
|
||||
CAIG T,32. ;ACK NUMBER NO GREATER THAN 32.
|
||||
TRNE T,3 ; MUST BE MULTIPLE OF 4
|
||||
JRST IOCR10 ; ERROR, NO GOOD
|
||||
CAMG TT,T ;MUST BE SOME TEXTUAL RFC DATA AS WELL
|
||||
JRST IOCR10 ; IF NOT, ERROR
|
||||
;; All OK, go ahead
|
||||
MOVEI E,%CSBRS ;PUT INTO BROADCAST-SENT STATE
|
||||
JRST CHOOP1 ;GO SEND
|
||||
|
||||
;RE-INITIALIZE CONNECTION WHEN USER OUTPUTS RFC OR LSN
|
||||
;FLUSHES ANY OLD PACKET BUFFERS, CHANGES UNIQUIZER IN INDEX#
|
||||
CHORF1: JUMPN E,IOCR10 .SEE %CSCLS ;CONNECTION MUST BE CLOSED
|
||||
@ -831,7 +850,7 @@ CHOOPN: CAIE E,%CSRFC ;CONNECTION MUST BE RFC-RECEIVED
|
||||
HLRZ B,CHSWIN(I) ;INCLUDE WINDOW SIZE
|
||||
DPB B,[042000,,%CPKDT(A)]
|
||||
MOVEI E,%CSOPN ;MAKE IT OPEN
|
||||
;HERE TO SEND A RETRANSMITTABLE CONTROL PACKET (RFC OR OPN), NEW STATE IN E
|
||||
;HERE TO SEND A RETRANSMITTABLE CONTROL PACKET (RFC, BRD OR OPN), NEW STATE IN E
|
||||
;THIS PACKET WILL GET TAKEN OFF THE CHSOBF LIST BY RECEIPT IN THE NORMAL WAY
|
||||
;THIS CODE COPIED FROM CHODAT WITH SOME MODIFICATIONS
|
||||
CHOOP1: MOVE T,TIME ;UPDATE CHSITM SO WON'T THINK HOST IS DOWN
|
||||
@ -846,7 +865,9 @@ CHOOP1: MOVE T,TIME ;UPDATE CHSITM SO WON'T THINK HOST IS DOWN
|
||||
DPB B,[$CPKPN(A)]
|
||||
HLRZ B,CHSPKN(I) ;GET PACKET NUMBER TO ACKNOWLEDGE
|
||||
HRLM B,CHSACK(I) ;REMEMBER IT HAS BEEN
|
||||
DPB B,[$CPKAN(A)] ;PIGGY-BACK THIS ACKNOWLEDGE
|
||||
LDB T,[$CPKOP(A)]
|
||||
CAIE T,%COBRD ;unless we're sending a BRD
|
||||
DPB B,[$CPKAN(A)] ;PIGGY-BACK THIS ACKNOWLEDGE
|
||||
MOVE B,[<.BM $CPKOP>+<.BM $CPKNB>]
|
||||
ANDM B,(A) ;CLEAR FORWARDING COUNT AND UNUSED FIELD
|
||||
MOVE B,CHSLCL(I) ;SET UP SOURCE
|
||||
@ -859,7 +880,8 @@ CHOOP1: MOVE T,TIME ;UPDATE CHSITM SO WON'T THINK HOST IS DOWN
|
||||
;VIOLATION OF PROTOCOL, BUT SHOULDN'T CRASH I.T.S. BECAUSE THE
|
||||
;PACKET ABOUT TO BE GIVEN TO CHAXMT HAS BEEN FREED ALREADY.
|
||||
MOVEI Q,CHSOBF(I) ;PUT ON END OF SEND LIST
|
||||
PUSHJ P,CHAQPL
|
||||
CAIE T,%COBRD ;Unless if it is a BRD packet, where retrans is manual
|
||||
PUSHJ P,CHAQPL
|
||||
JRST CHAXM0 ;GO TRANSMIT
|
||||
|
||||
;SENDING CLOSE
|
||||
@ -1355,6 +1377,8 @@ CHISNS: MOVEI E,%CSOPN
|
||||
;INTERRUPT LEVEL PROCESSING OF RECEIVED FWD OR ANS
|
||||
CHIANS: PUSHJ P,CHFNDX ;FIND CONNECTION
|
||||
JRST CHABRT ;NOBODY AT OTHER END TO RECEIVE A LOS ANYWAY
|
||||
CAIN E,%CSBRS ;If in broadcast-sent state,
|
||||
JRST CHIANB ;don't close, and don't stop BRD transmission.
|
||||
CAIE E,%CSRFS
|
||||
JRST CHABRT ;NOT IN RFC-SENT STATE, LOSS
|
||||
; JRST CHICL1 ;CLOSE THE CONNECTION BUT GIVE TO USER AS INPUT
|
||||
@ -1363,6 +1387,8 @@ CHIANS: PUSHJ P,CHFNDX ;FIND CONNECTION
|
||||
;INTERRUPT LEVEL PROCESSING OF RECEIVED CLS PACKET
|
||||
CHICLS: PUSHJ P,CHFNDX ;FIND CONNECTION BEING CLOSED
|
||||
JRST CHALOS ;NONE, LOSS
|
||||
CAIN E,%CSBRS ;BRD should ignore CLS (cf MIT AIM 628 sec 4.5)
|
||||
POPJ P,
|
||||
CHICL1: MOVEI W,%CSCLS ;CLOSE THE CONNECTION
|
||||
CHICL2: PUSHJ P,CHINT ;SET TO STATE IN W, INTERRUPT
|
||||
PUSH P,A
|
||||
@ -1377,6 +1403,21 @@ CHIC2A: MOVEI Q,CHSOBF(I) ;DISCARD TRANSMIT PACKETS, E.G. RFC WHICH RECEIVED
|
||||
|
||||
CHIC2B: POP P,A
|
||||
JRST CHIDT1 ;GIVE PACKET TO USER AS DATA
|
||||
|
||||
;; For BRD connections, do the beginning of CHIDT1 to give the packet
|
||||
;; to user (and interrupt them) since next ANS will be unrelated, so
|
||||
;; just put them all on the receive list.
|
||||
;; Note: only ANS packets are delivered to the user, who
|
||||
;; as specified in MIT AIM 628 sec 4.5 must do retransmissions
|
||||
;; of the BRD manually. This saves a lot of traffic, and turns
|
||||
;; out not to be very awkward.
|
||||
CHIANB: SKIPN CHSIBF(I)
|
||||
PUSHJ P,CHINTI ;THERE WAS NO INPUT, BUT THERE IS NOW, COME AND GET IT
|
||||
CHIAB1: AOS CHSNBF(I)
|
||||
MOVEI Q,CHSIBF(I)
|
||||
PUSHJ P,CHAQPL ;PUT ON END OF RECEIVE LIST
|
||||
POPJ P,
|
||||
|
||||
;INTERRUPT LEVEL PROCESSING OF RFC PACKET
|
||||
CHIRFC: MOVE T,%CPKDT(A) ;CHECK FOR STATUS REQUEST
|
||||
CAMN T,[.BYTE 8 ? "S ? "T ? "A ? "T]
|
||||
@ -1567,6 +1608,8 @@ CHFNDX: MOVEI B,[ASCIZ/Connection does not exist at this end/]
|
||||
HRRZ E,CHSSTA(I)
|
||||
MOVE TT,%CPKD(A)
|
||||
MOVE T,%CPKS(A)
|
||||
CAIN E,%CSBRS ;In broadcast-sent state,
|
||||
SETZ T, ; neither host nor index need match
|
||||
CAIN E,%CSRFS ;IF IN RFC-SENT STATE, ONLY
|
||||
AND T,[.BYTE 16. ? -1 ? 0] ;THE SOURCE HOST HAS TO MATCH
|
||||
CAMN TT,CHSLCL(I) ;COMPARE LOCAL ADDRESS
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user