.MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 3 1 ; 2 ; EXPANSION OF ROUTER MACROS 3 ; 4 .INCLUDE /RTRDEF.MAC/ .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 4 1 ; 2 ; ROUTING DATABASE MACROS 3 ; 4 ; DATE OF LAST UPDATE: 6/8/87 5 ; 6 ; 6/28/88- Modified Node macro to handle node names less 7 ; than 6 characters. 8 ; 9 ; 6/8/87- Modified Node macro to add save buffer for network 10 ; connect request messages. 11 ; D.J.L. 12 ; 3/4/87- Modified Node macro to add LOG parameter to support 13 ; logical node names. 14 ; D.J.L. 15 ; 2/5/87- Modified Node macro to change default access control 16 ; string to MA_ROUTER instead of . 17 ; E.D.L. 18 ; 19 ; AUTHOR: Earl Lakia 20 ; 21 ; 22 ; Main routing macro, defines all others and header 23 ; of the routing database 24 ; 25 ; 26 .MACRO RTRDEF,MXSZ,MXOT,MXRS 27 ; 28 ; RTRDEF MACRO 29 ; This macro is responsible for the following: 30 ; 1) Defining additional macros for the node and route 31 ; definitions. 32 ; 2) Defining the largest outbound message buffer size 33 ; (default is 512). 34 ; 3) Defining the number of outbound messages to 35 ; be outstanding at one time (default=4). 36 ; 4) Defining the number of response buffers for 37 ; acknowleging inbound messages (default= 38 ; MXOT*2) 39 ; 40 ; MXSZ= Largest outbound message size in bytes 41 ; MXOT= Number of outstanding outbound messages 42 ; MXRS= Number of response message buffers. 43 ; 44 .IIF DF,RT$DEF,.ERROR ;MULTIPLE CALL OF THE RTRDEF MACFRO 45 ; 46 ; SET DEFAULTS IF BLANK ARGUMENTS 47 ; 48 .IF B MXOT 49 MXOTX=4 ; DEFAULT NUMBER OUTPUT BUFFERS 50 .IFF 51 MXOTX=MXOT 52 .ENDC 53 ; 54 .IF B MXSZ 55 MXSZX=512. ; DEFAULT SIZE OF OUTPUT BUFFER 56 .IFF 57 MXSZX=MXSZ .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 4-1 58 .ENDC 59 ; 60 .IF B MXRS 61 MXRSX=MXOTX*2 ; DEFAULT NUMBER OF RESPONSE BUFFERS 62 .IFF 63 MXRSX=MXRS 64 .ENDC 65 ; 66 .MCALL CONB$$ ; CONNECT BLOCK MACRO 67 .MCALL NETDF$ ; NETWORK OFFSETS 68 .MCALL NRBDEF ; INVOKE NRB MACRO TO GET LOGICAL NAME 69 ; STATUS BIT VALUE 70 .MCALL MGHDEF,HDRDEF ; EVOKE MACROS TO GET ROUTER AND QUEUE HEADER SIZES 71 .NLIST ME 72 NETDF$ 73 MGHDEF 74 HDRDEF 75 NRBDEF 76 .LIST ME 77 ; 78 NDCNT=0 ; NUMBER OF NODES DEFINED SO FAR. 79 TIDCNT=0 ; NUMBER OF MSG ID'S DEFINED (ALL NODES) 80 MXSZX=MXSZX+MG.SIZ+H.SIZ ; ADD IN ROUTER AND QUEUE HEADER SIZES 81 RSPSIZ=44. ; SIZE OF A RESPONSE BUFFER 82 ; 83 ; HEADER OF THE WHOLE ROUTING DATABASE 84 ; 85 .PSECT ARTRHD,RW,D,OVR,REL,GBL 86 ; 87 HD.NOD: .ASCII /******/ ; OUR NODE NAME 88 HD.ID: .BLKW 1 ; WILL CONTAIN UNIQUE IDENTIFIER 89 ; SO CAN TELL IF DATABASE CHANGES 90 HD.STR: .WORD 0 ; WILL CONTAIN '1' AFTER ROUTER STARTED SO THAT 91 ; ROUTER CAN'T BE RESTARTED WITHOUT REINSTALLING 92 ; DATABASE 93 HD.NRB: .WORD NODE0 ; NRB BEGINNING THREAD 94 HD.NBL: .WORD NODE0 ; LAST SCANNED NRB, INIT TO ZERO 95 HD.NCT: .WORD 0 ; NUMBER OF NRBS (NODES) 96 HD.NRT: .WORD 0 ; NOT ROUTABLE TIMER FLAG (1= TIMER ACTIVE) 97 HD.CTM: .WORD 0 ; CONNECT TIMER FLAG (1= CONNECT TIMER ACTIVE) 98 HD.OBF: .WORD OUTBUF ; POINTER TO OUTPUT BUFFERS 99 HD.BLS: .WORD OUTBUF ; POINTER TO NEXT POSSIBLE AVAILABLE OUTPUT BUFFER 100 HD.OCT: .WORD MXOTX ; TOTAL NUMBER OF OUTPUT BUFFERS 101 HD.BFR: .WORD MXOTX ; NUMBER OF FREE OUTPUT BUFFERS 102 HD.OSZ: .WORD MXSZX ; SIZE OF OUTPUT BUFFER 103 HD.RBF: .WORD RSPBUF ; POINTER TO RESPONSE BUFFERS 104 HD.RLS: .WORD RSPBUF ; POINTER TO NEXT POSSIBLE AVAILABLE RESPONSE BUFFER 105 HD.RCT: .WORD MXRSX ; TOTAL NUMBER OF RESPONSE BUFFERS 106 HD.RFR: .WORD MXRSX ; NUMBER OF FREE RESPONSE BUFFERS 107 HD.RSZ: .WORD RSPSIZ ; SIZE OF RESPONSE BUFFER 108 ; 109 ; OUTPUT BUFFERS 110 ; 111 .PSECT OUTBUF,D,RW,REL,OVR,GBL 112 ; 113 OUTBUF: 114 I=1 .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 4-2 115 .REPT MXOTX 116 .IF EQ 117 .WORD OUTBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER 118 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER 119 .IFF 120 .WORD .+MXSZX+10 ; LINK TO NEXT BUFFER HEADER 121 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER 122 .ENDC 123 .BLKB MXSZX ; ALLOCATE THE BUFFER 124 I=I+1 125 .ENDR 126 ; 127 ; RESPONSE BUFFERS 128 ; 129 .PSECT RSPBUF,D,RW,REL,OVR,GBL 130 RSPBUF: 131 I=1 132 .REPT MXRSX 133 .IF EQ 134 .WORD RSPBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER 135 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER 136 .IFF 137 .WORD .+RSPSIZ+10 ; LINK TO NEXT BUFFER HEADER 138 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER 139 .ENDC 140 .BLKB RSPSIZ ; ALLOCATE THE RESPONSE BUFFER 141 I=I+1 142 .ENDR 143 .PAGE 144 ; 145 ; UTILITY MACROS 146 ; 147 ; MACRO TO CREATE A LABEL 148 ; 149 .MACRO LABEL,NAME 150 NODE'NAME: 151 .ENDM 152 ; 153 ; MACRO TO GENERATE A LABEL TO POINT BACK TO THE START OF A THREADED LIST 154 ; 155 .MACRO ELABEL,NAME 156 NODE'NAME = NODE0 ; ENDING LINK 157 .ENDM 158 ; 159 ; MACRO TO GENERATE A LINK TO NEXT NRB 160 ; 161 .MACRO FLINK,LNK 162 .WORD NODE'LNK ; LINK TO NEXT NRB 163 .ENDM 164 ; 165 ; MACRO TO GENERATE A INPUT BUFFER AND GENERATE LINKS 166 ; 167 .MACRO UNSBUF,NODE,SIZ 168 .WORD USBF'NODE ; LINK TO UNSOLICITED INPUT BUFFER 169 .SAVE 170 .PSECT UNSBUF,D,RW,REL,OVR,GBL 171 .EVEN .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 4-3 172 USBF'NODE: 173 .WORD SIZ ; SIZE OF THE BUFFER 174 .BLKB SIZ ; ACTUAL BUFFER 175 .RESTORE 176 .ENDM 177 178 ; 179 .PAGE 180 ; 181 ; NODE MACRO 182 ; This macro builds a Node Routing Block (NRB). 183 ; 184 ; LOG= Flag.. Primary node name is a logical node name 185 ; PRI= Primary node name (or Blank if terminating macro) 186 ; SEC= Secondary node name 187 ; ACC= Access control string (Default= TASK=MA_ROUTER> 188 ; SIZ= Largest incomming message size in bytes (Default=512 bytes) 189 ; 190 ; calling sequence: 191 ; NODE LOG,PRI=,SEC=,ACC=<>,SIZ=1024. 192 ; 193 .MACRO NODE,LOG,PRI,SEC,ACC,SIZ 194 IDCNT=0 ; NUMBER IDs FOR THIS NODE 195 .IF B PRI 196 ELABEL \NDCNT ; CREATES NULL FORWARD LINK 197 RTRDID==+ ; GLOBAL SYMBOL USED BY ROUTER PGM 198 ; TO CHECK IF IT IS USING CURRENT 199 ; ROUTING DATABASE 200 .PSECT ARTRHD 201 SAVEPC=. ; SAVE PSECT PROGRAM COUNTER 202 .=HD.ID 203 .WORD RTRDID ; REPLACE HD.ID IN HEADER TO IDENTIFY DBS 204 .=HD.NCT 205 .WORD NDCNT ; REPLACE HD.NCT IN HEADER 206 .=SAVEPC ; RESTORE PSECT PROGRAM COUNTER 207 .MEXIT 208 .ENDC 209 ; 210 ; BUILD A NRB AS WE HAVE A NODE SPECIFIED 211 ; 212 .PSECT NRBS,D,OVR,RW,REL,GBL 213 ; 214 LABEL \NDCNT ; DEFINE OURSELVES 215 LUN=NDCNT+4 216 .WORD LUN ; LOGICAL UNIT NUMBER USED TO CONNECT TO NODE 217 .IF NB LOG 218 .WORD NS.LND ; SET LOGICAL NODE NAME STATUS BIT 219 .IFF 220 .WORD 0 ; N.STS NODE STATUS 221 .ENDC 222 NDCNT=NDCNT+1 ; INCREMENT NUMBER OF NODES BEING DEFINED 223 FLINK \NDCNT ; LINK TO NEXT NRB 224 .BLKB 6 ; ACTUAL CURRENT NODE NAME (FILLED IN WHEN CONNECTED) 225 LIM=.+6 ; ONLY TAKE 6 CHARACTER NODE NAME 226 .ASCII /'PRI/ 227 .ASCII / / ; in case not 6, write blanks 228 .=LIM .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 4-4 229 LIM=.+6 ; ONLY TAKE 6 CHARACTER SEC. NODE NAME 230 .IF NB LOG 231 .ASCII / / 232 .IFF 233 .IF B SEC 234 .ASCII /'PRI/ ; IF NO SECONDARY, THEN USE PRIMARY 235 .IFF 236 .ASCII /'SEC/ 237 .ENDC 238 .ENDC 239 .ASCII / / ; in case not 6, write blanks 240 .=LIM ; Only except 6 241 .ASCII / / ; INIT ACC TO 242 .ASCII / / ; BLANKS 243 .=LIM 244 LIM=.+60. ; ONLY ALLOW 60 CHARACTER ACCESS CONTROL STRING 245 .IF B 246 .ASCII /MA_ROUTER/ ; DEFAULT ACCESS CONTROL STRING 247 .IFF 248 .ASCII /'ACC/ ; ACCESS CONTROL STRING 249 .ENDC 250 .=LIM 251 .NLIST ME 252 .IF B 253 CONB$$ ,0,1, ; BUILD DEFAULT NETWORK CONNECT BLOCK 254 .IFF 255 CONB$$ ,0,1,ACC ;BUILD NETWORK CONNECT BLOCK 256 .ENDC 257 .LIST ME 258 NIDCNT=. ; SAVE FOR REPLACEMENT BY ROUTE MACRO 259 .WORD 0 ; TOTAL ID'S THIS NODE FROM ROUTE MACRO 260 .IF B SIZ 261 SIZX=512. ; DEFAULT SIZE OF UNSOLICITED INPUT BUFFER 262 .IFF 263 SIZX=SIZ 264 .ENDC 265 SIZX=SIZX+MG.SIZ+H.SIZ ; ADD IN ROUTER AND QUEUE HEADER SIZES 266 UNSBUF \NDCNT-1,SIZX ; LINK TO UNSOLICITED INPUT BUFFER AND 267 ; ALSO ALLOCATE BUFFER 268 .WORD .+2 ; N.IBSA ADDRESS OF NETWORK RECEIVE I/O STATUS BLOCK 269 .WORD 0,0 ; N.IOSB NETWORK RECEIVE I/O STATUS BLOCK 270 .WORD .+2 ; N.ISAC ADDRESS OF CONNECT/DISCONNECT I/O STATUS BLOCK 271 .WORD 0,0 ; N.IOSC CONNECT/DISCONNECT I/O STATUS BLOCK 272 .WORD .+2 ; N.ISAU ADDRESS OF NETWORK DATA I/O STATUS BLOCK 273 .WORD 0,0 ; N.IOSU NETWORK DATA I/O STATUS BLOCK 274 .WORD 0 ; N.SEQ LINK SEQUENCE INBOUND NUMBER 275 .WORD 0 ; N.OSEQ LINK SEQUENCE OUTBOUND NUMBER 276 .WORD .+4+N.CBL+30 ; N.OIDS ADDRESS LAST SCANNED OUTBOUND NRBID 277 .WORD 0 ; N.STAM CONNECT/DISCONNECT STATUS FOR WRITE TO QUEUE 278 .BLKB N.CBL+30 ; N.MBX SAVE BUFFER FOR NETWORK CONNECT 279 ; REQUEST MESSAGE 280 .ENDM 281 .PAGE 282 ; 283 ; The following macro performs the routing function for 284 ; an outbound message id. 285 ; .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 4-5 286 ; ID= Message Id that is to be output. If less 287 ; than 16 characters are specified, it is 288 ; padded with Blanks. 289 ; 290 ; If the ID is Blank, it terminates a list of 291 ; ROUTE macros for a particular node. 292 ; 293 ; Calling sequence: 294 ; 295 ; ROUTE ID= 296 ; 297 .MACRO ROUTE,ID 298 ; 299 .PSECT NRBS,D,OVR,RW,REL,GBL 300 .IF B ID 301 .WORD 0 ; INDEX FOR QUEUE 302 .WORD 0 ; RNA 303 .WORD 0 ; MSG ID STATUS WORD 304 .ASCII / / ; END MESSAGE ID 305 SAVEPC=. 306 .=NIDCNT ; RESET PC TO NUMBER OF IDs IN NRB 307 .WORD IDCNT ; STORE NUMBER OF IDs 308 .=SAVEPC 309 TIDCNT=TIDCNT+IDCNT ; ADD TO TOTAL NUMBER OF ID'S 310 .MEXIT 311 .ENDC 312 ; 313 ; Attach the message id to the current node being defined 314 ; 315 .WORD 0 ; INDEX FOR QUEUE 316 .WORD 0 ; RNA 317 .WORD 0 ; MSG ID STATUS WORD 318 LIM=. 319 .ASCII / / ; INIT TO Blanks 320 .=LIM 321 LIM=.+16. ; DON'T LET GET BIGGER THAN 16 322 .ASCII /'ID/ 323 .=LIM 324 IDCNT=IDCNT+1 ; INCREMENT NUMBER OF MSG ID'S THIS NODE 325 .ENDM 326 .ENDM .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 5 1 .LIST MEB 2 3 ; LARGEST OUTBOUND MESSAGE = 1536 BYTES. 4 ; ALLOW ONLY 2 OUTSTANDING MESSAGES. 5 6 000000 RTRDEF MXSZ=1536.,MXOT=2 .LIST ME ; 000000 NDCNT=0 ; NUMBER OF NODES DEFINED SO FAR. 000000 TIDCNT=0 ; NUMBER OF MSG ID'S DEFINED (ALL NODES) 003070 MXSZX=MXSZX+MG.SIZ+H.SIZ ; ADD IN ROUTER AND QUEUE HEADER SIZES 000054 RSPSIZ=44. ; SIZE OF A RESPONSE BUFFER ; ; HEADER OF THE WHOLE ROUTING DATABASE ; 000000 .PSECT ARTRHD,RW,D,OVR,REL,GBL ; 000000 052 052 052 HD.NOD: .ASCII /******/ ; OUR NODE NAME 000003 052 052 052 000006 HD.ID: .BLKW 1 ; WILL CONTAIN UNIQUE IDENTIFIER ; SO CAN TELL IF DATABASE CHANGES 000010 000000 HD.STR: .WORD 0 ; WILL CONTAIN '1' AFTER ROUTER STARTED SO THAT ; ROUTER CAN'T BE RESTARTED WITHOUT REINSTALLING ; DATABASE 000012 000000' HD.NRB: .WORD NODE0 ; NRB BEGINNING THREAD 000014 000000' HD.NBL: .WORD NODE0 ; LAST SCANNED NRB, INIT TO ZERO 000016 000000 HD.NCT: .WORD 0 ; NUMBER OF NRBS (NODES) 000020 000000 HD.NRT: .WORD 0 ; NOT ROUTABLE TIMER FLAG (1= TIMER ACTIVE) 000022 000000 HD.CTM: .WORD 0 ; CONNECT TIMER FLAG (1= CONNECT TIMER ACTIVE) 000024 000000' HD.OBF: .WORD OUTBUF ; POINTER TO OUTPUT BUFFERS 000026 000000' HD.BLS: .WORD OUTBUF ; POINTER TO NEXT POSSIBLE AVAILABLE OUTPUT BUFFER 000030 000002 HD.OCT: .WORD MXOTX ; TOTAL NUMBER OF OUTPUT BUFFERS 000032 000002 HD.BFR: .WORD MXOTX ; NUMBER OF FREE OUTPUT BUFFERS 000034 003070 HD.OSZ: .WORD MXSZX ; SIZE OF OUTPUT BUFFER 000036 000000' HD.RBF: .WORD RSPBUF ; POINTER TO RESPONSE BUFFERS 000040 000000' HD.RLS: .WORD RSPBUF ; POINTER TO NEXT POSSIBLE AVAILABLE RESPONSE BUFFER 000042 000004 HD.RCT: .WORD MXRSX ; TOTAL NUMBER OF RESPONSE BUFFERS 000044 000004 HD.RFR: .WORD MXRSX ; NUMBER OF FREE RESPONSE BUFFERS 000046 000054 HD.RSZ: .WORD RSPSIZ ; SIZE OF RESPONSE BUFFER ; ; OUTPUT BUFFERS ; 000000 .PSECT OUTBUF,D,RW,REL,OVR,GBL ; 000000 OUTBUF: 000001 I=1 000002 .REPT MXOTX .IF EQ .WORD OUTBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .IFF .WORD .+MXSZX+10 ; LINK TO NEXT BUFFER HEADER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .ENDC .BLKB MXSZX ; ALLOCATE THE BUFFER I=I+1 .ENDR .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 5-1 .IF EQ .WORD OUTBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .IFF 000000 003100' .WORD .+MXSZX+10 ; LINK TO NEXT BUFFER HEADER 000002 000000 000000 000000 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .ENDC 000010 .BLKB MXSZX ; ALLOCATE THE BUFFER 000002 I=I+1 .IF EQ 003100 000000' .WORD OUTBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER 003102 000000 000000 000000 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .IFF .WORD .+MXSZX+10 ; LINK TO NEXT BUFFER HEADER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .ENDC 003110 .BLKB MXSZX ; ALLOCATE THE BUFFER 000003 I=I+1 ; ; RESPONSE BUFFERS ; 000000 .PSECT RSPBUF,D,RW,REL,OVR,GBL 000000 RSPBUF: 000001 I=1 000004 .REPT MXRSX .IF EQ .WORD RSPBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .IFF .WORD .+RSPSIZ+10 ; LINK TO NEXT BUFFER HEADER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .ENDC .BLKB RSPSIZ ; ALLOCATE THE RESPONSE BUFFER I=I+1 .ENDR .IF EQ .WORD RSPBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .IFF 000000 000064' .WORD .+RSPSIZ+10 ; LINK TO NEXT BUFFER HEADER 000002 000000 000000 000000 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .ENDC 000010 .BLKB RSPSIZ ; ALLOCATE THE RESPONSE BUFFER 000002 I=I+1 .IF EQ .WORD RSPBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .IFF 000064 000150' .WORD .+RSPSIZ+10 ; LINK TO NEXT BUFFER HEADER 000066 000000 000000 000000 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .ENDC 000074 .BLKB RSPSIZ ; ALLOCATE THE RESPONSE BUFFER 000003 I=I+1 .IF EQ .WORD RSPBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .IFF .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 5-2 000150 000234' .WORD .+RSPSIZ+10 ; LINK TO NEXT BUFFER HEADER 000152 000000 000000 000000 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .ENDC 000160 .BLKB RSPSIZ ; ALLOCATE THE RESPONSE BUFFER 000004 I=I+1 .IF EQ 000234 000000' .WORD RSPBUF ; NO MORE BUFFERS, POINT BACK TO FIRST BUFFER 000236 000000 000000 000000 .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .IFF .WORD .+RSPSIZ+10 ; LINK TO NEXT BUFFER HEADER .WORD 0,0,0 ; NRB, AND STATUS BLOCK OF NODE USING THIS BUFFER .ENDC 000244 .BLKB RSPSIZ ; ALLOCATE THE RESPONSE BUFFER 000005 I=I+1 .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 6 ; ; UTILITY MACROS ; ; MACRO TO CREATE A LABEL ; .MACRO LABEL,NAME NODE'NAME: .ENDM ; ; MACRO TO GENERATE A LABEL TO POINT BACK TO THE START OF A THREADED LIST ; .MACRO ELABEL,NAME NODE'NAME = NODE0 ; ENDING LINK .ENDM ; ; MACRO TO GENERATE A LINK TO NEXT NRB ; .MACRO FLINK,LNK .WORD NODE'LNK ; LINK TO NEXT NRB .ENDM ; ; MACRO TO GENERATE A INPUT BUFFER AND GENERATE LINKS ; .MACRO UNSBUF,NODE,SIZ .WORD USBF'NODE ; LINK TO UNSOLICITED INPUT BUFFER .SAVE .PSECT UNSBUF,D,RW,REL,OVR,GBL .EVEN USBF'NODE: .WORD SIZ ; SIZE OF THE BUFFER .BLKB SIZ ; ACTUAL BUFFER .RESTORE .ENDM ; .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 7 ; ; NODE MACRO ; This macro builds a Node Routing Block (NRB). ; ; LOG= Flag.. Primary node name is a logical node name ; PRI= Primary node name (or Blank if terminating macro) ; SEC= Secondary node name ; ACC= Access control string (Default= TASK=MA_ROUTER> ; SIZ= Largest incomming message size in bytes (Default=512 bytes) ; ; calling sequence: ; NODE LOG,PRI=,SEC=,ACC=<>,SIZ=1024. ; .MACRO NODE,LOG,PRI,SEC,ACC,SIZ IDCNT=0 ; NUMBER IDs FOR THIS NODE .IF B PRI ELABEL \NDCNT ; CREATES NULL FORWARD LINK RTRDID==+ ; GLOBAL SYMBOL USED BY ROUTER PGM ; TO CHECK IF IT IS USING CURRENT ; ROUTING DATABASE .PSECT ARTRHD SAVEPC=. ; SAVE PSECT PROGRAM COUNTER .=HD.ID .WORD RTRDID ; REPLACE HD.ID IN HEADER TO IDENTIFY DBS .=HD.NCT .WORD NDCNT ; REPLACE HD.NCT IN HEADER .=SAVEPC ; RESTORE PSECT PROGRAM COUNTER .MEXIT .ENDC ; ; BUILD A NRB AS WE HAVE A NODE SPECIFIED ; .PSECT NRBS,D,OVR,RW,REL,GBL ; LABEL \NDCNT ; DEFINE OURSELVES LUN=NDCNT+4 .WORD LUN ; LOGICAL UNIT NUMBER USED TO CONNECT TO NODE .IF NB LOG .WORD NS.LND ; SET LOGICAL NODE NAME STATUS BIT .IFF .WORD 0 ; N.STS NODE STATUS .ENDC NDCNT=NDCNT+1 ; INCREMENT NUMBER OF NODES BEING DEFINED FLINK \NDCNT ; LINK TO NEXT NRB .BLKB 6 ; ACTUAL CURRENT NODE NAME (FILLED IN WHEN CONNECTED) LIM=.+6 ; ONLY TAKE 6 CHARACTER NODE NAME .ASCII /'PRI/ .ASCII / / ; in case not 6, write blanks .=LIM LIM=.+6 ; ONLY TAKE 6 CHARACTER SEC. NODE NAME .IF NB LOG .ASCII / / .IFF .IF B SEC .ASCII /'PRI/ ; IF NO SECONDARY, THEN USE PRIMARY .IFF .ASCII /'SEC/ .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 7-1 .ENDC .ENDC .ASCII / / ; in case not 6, write blanks .=LIM ; Only except 6 .ASCII / / ; INIT ACC TO .ASCII / / ; BLANKS .=LIM LIM=.+60. ; ONLY ALLOW 60 CHARACTER ACCESS CONTROL STRING .IF B .ASCII /MA_ROUTER/ ; DEFAULT ACCESS CONTROL STRING .IFF .ASCII /'ACC/ ; ACCESS CONTROL STRING .ENDC .=LIM .NLIST ME .IF B CONB$$ ,0,1, ; BUILD DEFAULT NETWORK CONNECT BLOCK .IFF CONB$$ ,0,1,ACC ;BUILD NETWORK CONNECT BLOCK .ENDC .LIST ME NIDCNT=. ; SAVE FOR REPLACEMENT BY ROUTE MACRO .WORD 0 ; TOTAL ID'S THIS NODE FROM ROUTE MACRO .IF B SIZ SIZX=512. ; DEFAULT SIZE OF UNSOLICITED INPUT BUFFER .IFF SIZX=SIZ .ENDC SIZX=SIZX+MG.SIZ+H.SIZ ; ADD IN ROUTER AND QUEUE HEADER SIZES UNSBUF \NDCNT-1,SIZX ; LINK TO UNSOLICITED INPUT BUFFER AND ; ALSO ALLOCATE BUFFER .WORD .+2 ; N.IBSA ADDRESS OF NETWORK RECEIVE I/O STATUS BLOCK .WORD 0,0 ; N.IOSB NETWORK RECEIVE I/O STATUS BLOCK .WORD .+2 ; N.ISAC ADDRESS OF CONNECT/DISCONNECT I/O STATUS BLOCK .WORD 0,0 ; N.IOSC CONNECT/DISCONNECT I/O STATUS BLOCK .WORD .+2 ; N.ISAU ADDRESS OF NETWORK DATA I/O STATUS BLOCK .WORD 0,0 ; N.IOSU NETWORK DATA I/O STATUS BLOCK .WORD 0 ; N.SEQ LINK SEQUENCE INBOUND NUMBER .WORD 0 ; N.OSEQ LINK SEQUENCE OUTBOUND NUMBER .WORD .+4+N.CBL+30 ; N.OIDS ADDRESS LAST SCANNED OUTBOUND NRBID .WORD 0 ; N.STAM CONNECT/DISCONNECT STATUS FOR WRITE TO QUEUE .BLKB N.CBL+30 ; N.MBX SAVE BUFFER FOR NETWORK CONNECT ; REQUEST MESSAGE .ENDM .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 8 ; ; The following macro performs the routing function for ; an outbound message id. ; ; ID= Message Id that is to be output. If less ; than 16 characters are specified, it is ; padded with Blanks. ; ; If the ID is Blank, it terminates a list of ; ROUTE macros for a particular node. ; ; Calling sequence: ; ; ROUTE ID= ; .MACRO ROUTE,ID ; .PSECT NRBS,D,OVR,RW,REL,GBL .IF B ID .WORD 0 ; INDEX FOR QUEUE .WORD 0 ; RNA .WORD 0 ; MSG ID STATUS WORD .ASCII / / ; END MESSAGE ID SAVEPC=. .=NIDCNT ; RESET PC TO NUMBER OF IDs IN NRB .WORD IDCNT ; STORE NUMBER OF IDs .=SAVEPC TIDCNT=TIDCNT+IDCNT ; ADD TO TOTAL NUMBER OF ID'S .MEXIT .ENDC ; ; Attach the message id to the current node being defined ; .WORD 0 ; INDEX FOR QUEUE .WORD 0 ; RNA .WORD 0 ; MSG ID STATUS WORD LIM=. .ASCII / / ; INIT TO Blanks .=LIM LIM=.+16. ; DON'T LET GET BIGGER THAN 16 .ASCII /'ID/ .=LIM IDCNT=IDCNT+1 ; INCREMENT NUMBER OF MSG ID'S THIS NODE .ENDM 7 8 ; ROUTE ALL MESSAGES IN 'QUEUE1' TO NODE 'SYS1'. NODE 'SYS1'. 9 ; IS A VMS NODE SINCE THE ROUTING PROCESS IS 'MA_ROUTER'. 10 ; LARGEST INBOUND MESSAGE SIZE IS 512 BYTES. 11 12 000320 NODE PRI=,SIZ=512.,ACC=<> 000000 IDCNT=0 ; NUMBER IDs FOR THIS NODE .IF B ELLEN ELABEL \NDCNT ; CREATES NULL FORWARD LINK RTRDID==+ ; GLOBAL SYMBOL USED BY ROUTER PGM ; TO CHECK IF IT IS USING CURRENT ; ROUTING DATABASE .PSECT ARTRHD .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 8-1 SAVEPC=. ; SAVE PSECT PROGRAM COUNTER .=HD.ID .WORD RTRDID ; REPLACE HD.ID IN HEADER TO IDENTIFY DBS .=HD.NCT .WORD NDCNT ; REPLACE HD.NCT IN HEADER .=SAVEPC ; RESTORE PSECT PROGRAM COUNTER .MEXIT .ENDC ; ; BUILD A NRB AS WE HAVE A NODE SPECIFIED ; 000000 .PSECT NRBS,D,OVR,RW,REL,GBL ; 000000 LABEL \NDCNT ; DEFINE OURSELVES 000000 NODE0: 000004 LUN=NDCNT+4 000000 000004 .WORD LUN ; LOGICAL UNIT NUMBER USED TO CONNECT TO NODE .IF NB .WORD NS.LND ; SET LOGICAL NODE NAME STATUS BIT .IFF 000002 000000 .WORD 0 ; N.STS NODE STATUS .ENDC 000001 NDCNT=NDCNT+1 ; INCREMENT NUMBER OF NODES BEING DEFINED 000004 FLINK \NDCNT ; LINK TO NEXT NRB 000004 000540' .WORD NODE1 ; LINK TO NEXT NRB 000006 .BLKB 6 ; ACTUAL CURRENT NODE NAME (FILLED IN WHEN CONNECTED) 000022' LIM=.+6 ; ONLY TAKE 6 CHARACTER NODE NAME 000014 105 114 114 .ASCII /ELLEN / 000017 105 116 040 000022 040 040 040 .ASCII / / ; in case not 6, write blanks 000025 040 040 040 000022' .=LIM 000030' LIM=.+6 ; ONLY TAKE 6 CHARACTER SEC. NODE NAME .IF NB .ASCII / / .IFF .IF B 000022 105 114 114 .ASCII /ELLEN / ; IF NO SECONDARY, THEN USE PRIMARY 000025 105 116 040 .IFF .ASCII // .ENDC .ENDC 000030 040 040 040 .ASCII / / ; in case not 6, write blanks 000033 040 040 040 000030' .=LIM ; Only except 6 000030 040 040 040 .ASCII / / ; INIT TO 000033 040 040 040 000036 040 040 040 000041 040 040 040 000044 040 040 040 000047 040 040 040 000052 040 040 040 000055 040 040 040 000060 040 040 040 000063 040 040 040 000066 040 040 040 .ASCII / / ; BLANKS .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 8-2 000071 040 040 040 000074 040 040 040 000077 040 040 040 000102 040 040 040 000105 040 040 040 000110 040 040 040 000113 040 040 040 000116 040 040 040 000121 040 040 040 000030' .=LIM 000124' LIM=.+60. ; ONLY ALLOW 60 CHARACTER ACCESS CONTROL STRING .IF B <> .ASCII /MA_ROUTER/ ; DEFAULT ACCESS CONTROL STRING .IFF 000030 074 115 101 .ASCII // ; ACCESS CONTROL STRING 000033 137 122 117 000036 125 124 105 000041 122 076 .ENDC 000124' .=LIM 000124 040 040 040 .ASCII / / 000127 040 040 040 000132 001 .BYTE 1 000133 000 .BYTE 0 000134 000011 .WORD $$$ 000136 115 101 137 .ASCII 'MA_ROUTER' 000141 122 117 125 000144 124 105 122 .LIST ME 000234' NIDCNT=. ; SAVE FOR REPLACEMENT BY ROUTE MACRO 000234 000000 .WORD 0 ; TOTAL ID'S THIS NODE FROM ROUTE MACRO .IF B 512. SIZX=512. ; DEFAULT SIZE OF UNSOLICITED INPUT BUFFER .IFF 001000 SIZX=512. .ENDC 001070 SIZX=SIZX+MG.SIZ+H.SIZ ; ADD IN ROUTER AND QUEUE HEADER SIZES 000236 UNSBUF \NDCNT-1,SIZX ; LINK TO UNSOLICITED INPUT BUFFER AND 000236 000000' .WORD USBF0 ; LINK TO UNSOLICITED INPUT BUFFER .SAVE 000000 .PSECT UNSBUF,D,RW,REL,OVR,GBL .EVEN 000000 USBF0: 000000 001070 .WORD SIZX ; SIZE OF THE BUFFER 000002 .BLKB SIZX ; ACTUAL BUFFER 000240 .RESTORE ; ALSO ALLOCATE BUFFER 000240 000242' .WORD .+2 ; N.IBSA ADDRESS OF NETWORK RECEIVE I/O STATUS BLOCK 000242 000000 000000 .WORD 0,0 ; N.IOSB NETWORK RECEIVE I/O STATUS BLOCK 000246 000250' .WORD .+2 ; N.ISAC ADDRESS OF CONNECT/DISCONNECT I/O STATUS BLOCK 000250 000000 000000 .WORD 0,0 ; N.IOSC CONNECT/DISCONNECT I/O STATUS BLOCK 000254 000256' .WORD .+2 ; N.ISAU ADDRESS OF NETWORK DATA I/O STATUS BLOCK 000256 000000 000000 .WORD 0,0 ; N.IOSU NETWORK DATA I/O STATUS BLOCK 000262 000000 .WORD 0 ; N.SEQ LINK SEQUENCE INBOUND NUMBER 000264 000000 .WORD 0 ; N.OSEQ LINK SEQUENCE OUTBOUND NUMBER 000266 000464' .WORD .+4+N.CBL+30 ; N.OIDS ADDRESS LAST SCANNED OUTBOUND NRBID 000270 000000 .WORD 0 ; N.STAM CONNECT/DISCONNECT STATUS FOR WRITE TO QUEUE .MAIN. MACRO V05.04 Tuesday 28-Jun-88 11:35 Page 8-3 000272 .BLKB N.CBL+30 ; N.MBX SAVE BUFFER FOR NETWORK CONNECT ; REQUEST MESSAGE 13 000464 ROUTE DAYTON ; 000464 .PSECT NRBS,D,OVR,RW,REL,GBL .IF B DAYTON .WORD 0 ; INDEX FOR QUEUE .WORD 0 ; RNA .WORD 0 ; MSG DAYTON STATUS WORD .ASCII / / ; END MESSAGE DAYTON SAVEPC=. .=NIDCNT ; RESET PC TO NUMBER OF IDs IN NRB .WORD IDCNT ; STORE NUMBER OF IDs .=SAVEPC TIDCNT=TIDCNT+IDCNT ; ADD TO TOTAL NUMBER OF DAYTONS .MEXIT .ENDC ; ; Attach the message DAYTON to the current node being defined ; 000464 000000 .WORD 0 ; INDEX FOR QUEUE 000466 000000 .WORD 0 ; RNA 000470 000000 .WORD 0 ; MSG DAYTON STATUS WORD 000472' LIM=. 000472 040 040 040 .ASCII / / ; INIT TO Blanks 000475 040 040 040 000500 040 040 040 000503 040 040 040 000506 040 040 040 000511 040 000472' .=LIM 000512' LIM=.+16. ; DON'T LET GET BIGGER THAN 16 000472 104 101 131 .ASCII /DAYTON/ 000475 124 117 116 000512' .=LIM 000001 IDCNT=IDCNT+1 ; INCREMENT NUMBER OF MSG DAYTONS THIS NODE 14 000512 ROUTE ; 000512 .PSECT NRBS,D,OVR,RW,REL,GBL .IF B 000512 000000 .WORD 0 ; INDEX FOR QUEUE 000514 000000 .WORD 0 ; RNA 000516 000000 .WORD 0 ; MSG STATUS WORD 000520 040 040 040 .ASCII / / ; END MESSAGE 000523 040 040 040 000526 040 040 040