" *********************************************************** " * * " * Copyright, (C) Honeywell Information Systems Inc., 1983 * " * * " *********************************************************** proc; head; defidx 1, atq, ar, aw, al, bl, cb, cfr, cm, ds, d, dw, dr, ec, eh, fel, fes, fu, gnr, gs, gt, ia, isi, i, lrs, ne, qe, r, rh, r1, sbs, sds, sew, sfd, sf, s, s1, sn, sur, ul, ur, w; defidx 1, Active, Listen, Rfc_rcvd, Abort, Rfc_sent, Open, Cls_wait, Reject_wait, Data_wait, Rfnm_wait, Cls_read, Forimp; defidx 17, Rts, Str, Cls, All, Gvb, Ret, Int, Buf; defidx 0, NOP, RTS, STR, CLS, ALL, GVB, RET, INR, INS, ECO, ERP, ERR, RST, RRP; defidx 64, FSOC, LSOC, LINKN, BSPACE, MSPACE, CODEF, ERRTX, ECODT, FSOC1, BYTE; defidx 1, netstate, netclose, netfhost, netbgend, netnotup, areasmal, notalloc, undorder, badproci, badindex; /* SOCKET STATES - 1 = active, 2 = listening, 3 = rfc-rcvd, 4 = abort, 5 = rfc-sent, 6 = open, 7 = cls-wait, 8 = reject-wait, 9 = data-wait (send) , 10 = rfnm-wait (send) , 11 = cls-read (read) , 12 = active-imp, 13 = croggled */ com_state_tbl_: tbl inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, abort6_, inv_state_, inv_state_, inv_state_, abort10_, abort11_, abort6_, inv_state_; /* abort - 1 */ tbl connect1_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_; /* connect - 2 */ tbl listen1_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_; /* listen - 3 */ tbl inv_state_, inv_state_, reject3_, reject4_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_; /* reject - 4 */ tbl inv_state_, inv_state_, accept3_, reject4_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_; /* accept - 5 */ tbl inv_state_, close2_, close3_, close4_, close5_, close6_, inv_state_, inv_state_, inv_state_, nop_, abort11_, close12_, close13_; /* close - 6 */ tbl fdeac1_, fdeac1_, fdeac1_, fdeac1_, fdeac1_, deac11_, deac11_, deac11_, deac11_, deac11_, deac11_, fdeac12_, fdeac13_; /* force-deac - 7 */ tbl inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, sendquit6_, inv_state_, inv_state_, inv_state_, nop_, nop_, inv_state_, inv_state_; /* sendquit - 8 */ tbl quitenable_, quitenable_, quitenable_, quitenable_, quitenable_, quitenable_, quitenable_, quitenable_, quitenable_, quitenable_, quitenable_, quitenable_, inv_state_; /* quitenable - 9 */ tbl quitinhib_, quitinhib_, quitinhib_, quitinhib_, quitinhib_, quitinhib_, quitinhib_, quitinhib_, quitinhib_, quitinhib_, quitinhib_, quitinhib_, inv_state_; /* quitinhibit - 10 */ tbl setbyte1_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_; /* setbytesize - 11 */ tbl forimp_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, inv_state_; /* forimp - 12 */ tbl inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, read6_, inv_state_, inv_state_, inv_state_, inv_state_, read11_, inv_state_, inv_state_; /* read - 13 */ tbl nop_, nop_, state3_, state4_, nop_, nop_, nop_, nop_, nop_, nop_, nop_, nop_, nop_; /* state - 14 */ tbl inv_state_, inv_state_, inv_state_, inv_state_, inv_state_, write6_, inv_state_, inv_state_, inv_state_, write10_, inv_state_, write6_, inv_state_; /* write - 15 */ tbl deac1_, deac1_, deac3_, deac4_, deac5_, deac6_, deac7_, deac7_, deac7_, deac7_, deac11_, fdeac12_, fdeac13_; /* deactivate - 16 */ tbl auto_reject_, rts2_, rfc3_, rfc3_, rts5_, auto_reject_, rfc7_, auto_reject_, auto_reject_, auto_reject_, auto_reject_, auto_reject_, auto_reject_; /* RTS - 17 */ tbl auto_reject_, str2_, rfc3_, rfc3_, str5_, auto_reject_, rfc7_, auto_reject_, auto_reject_, auto_reject_, auto_reject_, auto_reject_, auto_reject_; /* STR - 18 */ tbl inv_CLS_, inv_CLS_, cls3_, inv_CLS_, cls5_, cls6_, cls7_, cls8_, cls9_, inv_CLS_, inv_CLS_, inv_CLS_, inv_CLS_; /* CLS - 19 */ tbl inv_com_, inv_com_, inv_com_, inv_com_, inv_com_, all6_, nop_, inv_com_, all6_, inv_com_, inv_com_, inv_com_, inv_com_; /* ALL - 20 */ tbl inv_com_, inv_com_, inv_com_, inv_com_, inv_com_, gvb6_, nop_, inv_com_, gvb6_, inv_com_, inv_com_, inv_com_, inv_com_; /* GVB - 21 */ tbl inv_com_, inv_com_, inv_com_, inv_com_, inv_com_, nop_, nop_, inv_com_, nop_, inv_com_, inv_com_, inv_com_, inv_com_; /* RET - 22 */ tbl inv_com_, inv_com_, inv_com_, inv_com_, inv_com_, int6_, nop_, inv_com_, nop_, inv_com_, inv_com_, inv_com_, inv_com_; /* INT - 23 */ tbl error_, error_, error_, error_, error_, nop_, error_, error_, buf9_, buf10_, error_, error_, nop_; /* buf - 24 */ ctl_tbl_: tbl NOP_, RTS_, STR_, CLS_, ALL_, GVB_, RET_, INR_, INS_, ECO_, ERP_, ERR_, RST_, RRP_, unk_, buf_; inv_state_: error_code netstate; nop_: unlock_return; /* ABORT user call */ abort6_: unlock_return; /* no abort possible because of allocation synch */ abort10_: imp_abort; unlock_return; abort11_: unassign_link 0; signal 1; state_ul_return Active; /* CONNECT user call */ connect1_: insert_socket_id 0 connect1b_ connect1d_; local_read_socket connect1a_; ctl_mess STR LSOC FSOC BYTE; state_ul_return Rfc_sent; connect1a_: assign_link 0 connect1c_; ctl_mess RTS LSOC FSOC LINKN; state_ul_return Rfc_sent; connect1b_: error_code netfhost; unlock_return; connect1c_: error_code notalloc; unlock_return; connect1d_: error_code netbgend; unlock_return; /* LISTEN user call */ listen1_: state_ul_return Listen; /* REJECT user call */ reject3_: get_nxt_rfc error_; ctl_mess CLS LSOC FSOC 0; state_ul_return Reject_wait; reject4_: get_nxt_rfc error_; set_fsocr; delete_rfc; state_ns Listen; unlock_return; /* ACCEPT user call */ accept3_: get_nxt_rfc error_; insert_socket_id 1 error_ error_; local_read_socket accept3a_; assign_link 1 accept3c_; ctl_mess STR LSOC FSOC BYTE; go_to accept3b_; accept3a_: assign_link 0 accept3c_; allocate_read; ctl_mess RTS LSOC FSOC LINKN; ctl_mess ALL LINKN MSPACE BSPACE; accept3b_: delete_rfc; state_ul_return Open; accept3c_: ctl_mess CLS LSOC FSOC 0; delete_rfc; error_code notalloc; state_ul_return Listen; /* CLOSE user call */ close2_: state_ul_return Active; close3_: get_nxt_rfc error_; ctl_mess CLS LSOC FSOC 0; insert_socket_id 1 error_ error_; delete_rfc; state_ul_return Cls_wait; close4_: get_nxt_rfc error_; delete_rfc; state_ul_return Active; close5_: ctl_mess CLS LSOC FSOC 0; state_ul_return Cls_wait; close6_: local_read_socket close6a_; check_for_rfnm close6a_; set_empty_wakeup; state_ul_return Data_wait; close6a_: ctl_mess CLS LSOC FSOC 0; imp_abort; signal 1; state_ul_return Cls_wait; close12_: unassign_link 1; state_ul_return Active; close13_: unassign_link 0; state_ul_return Active; /* FORCE-DEAC user call */ fdeac1_: get_nxt_rfc fdeac13_; delete_rfc; go_to fdeac1_; fdeac13_: unassign_link 0; signal 1; deactivate; return; fdeac12_: unassign_link 1; deactivate; return; /* SENDQUIT user call */ sendquit6_: local_read_socket sendquit6a_; ctl_mess INS LINKN 0 0; unlock_return; sendquit6a_: ctl_mess INR LINKN 0 0; unlock_return; /* QUITENABLE user call */ quitenable_: quit_enable 1; signal 0; unlock_return; /* QUITINHIBIT user call */ quitinhib_: quit_enable 0; signal 1; unlock_return; /* SETBYTESIZE user call */ setbyte1_: set_byte_size; unlock_return; /* FORIMP privileged call */ forimp_: set_forimp_data; state_ul_return Forimp; /* READ user call */ read6_: local_read_socket read6a_; error_code netbgend; unlock_return; read6a_: read read6b_; unlock_return; read6b_: allocate_read; ctl_mess ALL LINKN MSPACE BSPACE; unlock_return; read11_: local_read_socket read10a_; error_code netbgend; unlock_return; read10a_: read read10b_; read10b_: check_for_rfnm abort11_; unlock_return; /* STATE user call */ state3_: get_nxt_rfc error_; set_fsocr; unlock_return; state4_: get_nxt_rfc error_; set_fsocr; delete_rfc; state_ns Listen; unlock_return; /* WRITE user call */ write6_: local_read_socket write6a_; write; unlock_return; write6a_: error_code netbgend; unlock_return; write10_: error_code netclose; unlock_return; /* DEACTIVATE user call */ deac1_: deactivate; return; deac3_: get_nxt_rfc error_; ctl_mess CLS LSOC FSOC 0; deac3a_: delete_rfc; deactivate; return; deac4_: get_nxt_rfc error_; go_to deac3a_; deac5_: set_deac_sw; go_to close5_; deac6_: set_deac_sw; go_to close6_; deac7_: set_deac_sw; unlock_return; deac11_: unassign_link 0; deactivate; return; /* CONTROL MESSAGE FAN_OUT LIST BLOCKS */ NOP_: bit_length 8; return; RTS_: bit_length 80; get_sockets 1 polarity_error; find_entry_sock_transfer Rts; ctl_mess CLS LSOC FSOC1 0; return; STR_: bit_length 80; get_sockets 2 polarity_error; find_entry_sock_transfer Str; ctl_mess CLS LSOC FSOC1 0; return; CLS_: bit_length 72; get_sockets 3 polarity_error; find_entry_sock_transfer Cls; /* A glitch - we ignore this because it could be a legal CLS for a refused RFC */ return; polarity_error: ctl_mess ERR CODEF 3 ERRTX; return; ALL_: bit_length 64; find_entry_link_transfer 1 All; /* a glitch - we ignore this because it may be legally sent on an aborted connection */ return; GVB_: bit_length 32; find_entry_link_transfer 1 Gvb; ctl_mess ERR CODEF 4 ERRTX; return; RET_: bit_length 64; find_entry_link_transfer 0 Ret; ctl_mess ERR CODEF 4 ERRTX; return; INR_: bit_length 16; find_entry_link_transfer 1 Int; ctl_mess ERR CODEF 4 ERRTX; return; INS_: bit_length 16; find_entry_link_transfer 0 Int; ctl_mess ERR CODEF 4 ERRTX; return; ECO_: bit_length 16; ctl_mess ERP ECODT 0 0; return; ERP_: bit_length 16; return; ERR_: bit_length 96; error_handler; return; RST_: bit_length 8; reset_host; ctl_mess RRP 0 0 0; return; RRP_: bit_length 8; return; unk_: ctl_mess ERR CODEF 1 ERRTX; return; buf_: find_entry_link_transfer 1 Buf; /* this is a write link */ ncp_error; return; /* CONTROL MESSAGE PROCESSOR LIST BLOCKS */ auto_reject_: ctl_mess CLS LSOC FSOC1 0; unlock_return; inv_com_: ctl_mess ERR CODEF 5 ERRTX; unlock_return; /* RTS or STR control message */ rts2_: add_to_queue rfc3_; rfc2a_: signal 0; state_ul_return Rfc_rcvd; str2_: check_bytesize auto_reject_; add_to_queue auto_reject_; go_to rfc2a_; rfc3_: ctl_mess CLS LSOC FSOC1 0; unlock_return; rts5_: fsoc_unequal auto_reject_; assign_link 1 rfc5a_; signal 0; state_ul_return Open; str5_: fsoc_unequal auto_reject_; check_bytesize rfc5a_; allocate_read; ctl_mess ALL LINKN MSPACE BSPACE; signal 0; state_ul_return Open; rfc5a_: ctl_mess CLS LSOC FSOC 0; signal 0; state_ul_return Cls_wait; rfc7_: fsoc_unequal auto_reject_; /* if sockets are equal, this is from an aborted RFC */ unlock_return; /* CLS control message */ cls3_: get_nxt_rfc error_; fsoc_unequal inv_CLS_; ctl_mess CLS LSOC FSOC 0; signal 0; state_ul_return Abort; cls5_: fsoc_unequal inv_CLS_; signal 0; ctl_mess CLS LSOC FSOC 0; local_read_socket cls5a_; state_ul_return Active; cls5a_: unassign_link 0; state_ul_return Active; cls6_: fsoc_unequal inv_CLS_; local_read_socket cls6a_; imp_abort; check_for_rfnm buf10_; set_empty_wakeup; state_ul_return Rfnm_wait; cls6a_: signal 1; ctl_mess CLS LSOC FSOC 0; check_for_rfnm cls7a_; state_ul_return Cls_read; cls7_: fsoc_unequal inv_CLS_; cls7a_: unassign_link 0; signal 1; deac_sw deac1_; state_ul_return Active; cls8_: get_nxt_rfc error_; fsoc_unequal inv_CLS_; delete_rfc; signal 0; state_ul_return Listen; cls9_: fsoc_unequal inv_CLS_; imp_abort; state_ul_return Rfnm_wait; /* ALL control message */ all6_: allocate_write; signal 0; unlock_return; /* GVB control message */ gvb6_: deallocate_write; ctl_mess RET LINKN MSPACE BSPACE; unlock_return; int6_: interrupt; unlock_return; /* buffer empty condition */ buf9_: check_for_rfnm buf9a_; unlock_return; buf9a_: ctl_mess CLS LSOC FSOC 0; state_ul_return Cls_wait; buf10_: ctl_mess CLS LSOC FSOC 0; go_to cls7a_; error_: ncp_error; inv_CLS_: unlock_return; end; */ ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group Bull including Bull HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell Bull Inc., Groupe Bull and Bull HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, Bull or Bull HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by Bull HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved */