MULTICS TECHNICAL BULLETIN MTB752-03 To: MTB Distribution From: Robert S. Coren Gary Dixon Edward C. Brunelle Jr. Date: May 19, 1987 Subject: Network Login Servers ----------------------------------- This MTB describes the design for a type of process that functions as a "login server" for a particular set of network endpoints. Such a process has ultimate control of all the connections to those endpoints, engages in all pre-access dialogue, and assigns the connections to user processes as appropriate. This relieves the Initializer process of the necessity of learning how to communicate with each network as it comes along; the functions of user validation and process creation, which must continue to be performed by the Initializer, are separated from those of communications channel management. A protocol has been developed for communication between the Initializer and the login servers, so that the servers can request the creation of processes, find out process IDs, be notified of process terminations in order to clean up all connections, etc. The login server itself will not be part of the standard Multics system in MR12; it will only be included in the DSA package marketed by Bull. Its implementation, however, requires some modifications to standard system software, and these modifications are planned for MR12. Most notable among them are extensions to are extensions to the answering service and the message coordinator; these modifications are referred to in this MTB, and described in greater detail in MTBs 750 and 751. Revision 1 documents corrections to documentation information in for connect_list_manager_, missing entrypoint information and those changes required to support network accounting. Revision 2 documents changes to the active_connection_list header. Revision 3 adds elements to the user_connection_info, | login_server_process_request, login_server_list_response, | login_server_validate_response, login_server_process_response, | and login_server_operator_response structures. It also moves the | user_connection_info substructure into the | login_server_request_header, so that it is available for all | login server requests. Finally, it documents a change to the | MTB752-03 Network Login Servers | assign_connection entry of the login_server_entries structure and | adds the documentation for the display_connection_list command. ----------------------------------- Comments should be sent to the author: via Multics Mail: GDixon at System-M. via Forum: >udd>DSA>mtgs>dsaimp.forum via telephone: (HVN) 862-3593 (602) 862-3593 _________________________________________________________________ Multics project internal documentation; not to be reproduced or distributed outside the Multics project without permission of the Director of MDC. Network Login Servers MTB752-03 CONTENTS Page 1: Statement of the Problem . . . . . . . . . . . . . . . 1 2: Overview of the Proposed Solution . . . . . . . . . . . 1 3: Implications of the Proposed Design . . . . . . . . . . 3 3.1: The CDT . . . . . . . . . . . . . . . . . . . . . . . 3 3.2: Channel Administration . . . . . . . . . . . . . . . 3 3.3: Messages From the Initializer . . . . . . . . . . . . 3 3.4: Message Coordinator Channels . . . . . . . . . . . . 4 4: Details of the Proposed Design . . . . . . . . . . . . 5 4.1: Login Server Process Environment . . . . . . . . . . 5 4.1.1: Transaction Protocol . . . . . . . . . . . . . . . 5 4.1.2: Control Points . . . . . . . . . . . . . . . . . . 5 4.1.3: Initialization . . . . . . . . . . . . . . . . . . 6 4.1.4: Establishing Connections . . . . . . . . . . . . . 7 4.1.5: Pre-access Dialogue . . . . . . . . . . . . . . . . 7 4.2: Login Channels . . . . . . . . . . . . . . . . . . . 7 4.3: Dial Qualifiers . . . . . . . . . . . . . . . . . . . 8 4.4: Message Coordinator Connections . . . . . . . . . . . 8 4.5: Password Management . . . . . . . . . . . . . . . . . 8 4.6: Active Connection Table . . . . . . . . . . . . . . . 9 4.7: Per-connection Data . . . . . . . . . . . . . . . . . 9 5: Scenarios . . . . . . . . . . . . . . . . . . . . . . . 11 5.1: Login/connect Sequence . . . . . . . . . . . . . . . 11 5.2: Dial Sequence . . . . . . . . . . . . . . . . . . . . 13 5.3: Operator Login . . . . . . . . . . . . . . . . . . . 15 5.4: Dial_out, Priv_attach, and Release . . . . . . . . . 16 5.5: Process Termination (Login Channel) . . . . . . . . . 16 5.6: Process Termination (Dialed Connections) . . . . . . 17 5.7: Disconnection Sequence . . . . . . . . . . . . . . . 17 Appendix A: Summary of Data Structures . . . . . . . . . . 19 A.1: Structures for Login Server Requests . . . . . . . . 19 A.1.1: Common Structures . . . . . . . . . . . . . . . . . 19 A.1.1.1: ls_request_header . . . . . . . . . . . . . . . . 19 A.1.1.2: user_connection_info . . . . . . . . . . . . . . 20 A.1.2: Validate Request . . . . . . . . . . . . . . . . . 22 A.1.3: Process Request . . . . . . . . . . . . . . . . . . 24* A.1.4: List Request . . . . . . . . . . . . . . . . . . . 28 A.1.5: Dial Request . . . . . . . . . . . . . . . . . . . 29 A.1.6: Disconnect Request . . . . . . . . . . . . . . . . 30* A.1.7: Logout Request . . . . . . . . . . . . . . . . . . 31 A.1.8: Operator Request . . . . . . . . . . . . . . . . . 32 MTB752-03 Network Login Servers CONTENTS (cont) Page A.2: Structures for Answering Service Responses . . . . . 33 A.2.1: Common Structures . . . . . . . . . . . . . . . . . 33 A.2.1.1: login_server_response_header . . . . . . . . . . 33 A.2.2: Validate Response . . . . . . . . . . . . . . . . . 34 A.2.3: Process Response . . . . . . . . . . . . . . . . . 37 A.2.4: List Response . . . . . . . . . . . . . . . . . . . 41 A.2.5: Dial Response . . . . . . . . . . . . . . . . . . . 42 A.2.6: Termination Response . . . . . . . . . . . . . . . 43 A.2.7: New_proc Response . . . . . . . . . . . . . . . . . 45 A.2.8: Operator Response . . . . . . . . . . . . . . . . . 46 A.3: Structures for Login Server User Message . . . . . . 47 A.3.1: ls_connection_message_common . . . . . . . . . . . 48 A.3.2: ls_connection_message . . . . . . . . . . . . . . . 48 A.4: Dial Event Message . . . . . . . . . . . . . . . . . 50 A.5: Connection List Manager . . . . . . . . . . . . . . . 52 A.5.1: active_connection_list . . . . . . . . . . . . . . 52 A.5.2: active_connection . . . . . . . . . . . . . . . . . 54 Appendix B: Module Descriptions . . . . . . . . . . . . . 57 net_info_ . . . . . . . . . . . . . . . . . . . . . . . 57 net_info_$get_field . . . . . . . . . . . . . . . . . 57 net_info_$get_service_entries . . . . . . . . . . . . 58 login_service_entries . . . . . . . . . . . . . . . . . 61 login_service_entries.listen . . . . . . . . . . . . 61 login_service_entries.stop_listen . . . . . . . . . 63 login_service_entries.assign_connection . . . . . . 64 login_service_entries.unassign_connection . . . . . 66 login_service_entries.disconnect . . . . . . . . . . 67 login_service_entries.force_disconnect . . . . . . . 68 login_service_entries.validate_user . . . . . . . . 69 connection_list_manager_ . . . . . . . . . . . . . . . . 75 connection_list_manager_$add . . . . . . . . . . . . 76 connection_list_manager_$priv_change_user . . . . . . 78 connection_list_manager_$priv_delete_name . . . . . . 80 connection_list_manager_$hpriv_delete_name . . . . . 80 connection_list_manager_$priv_delete_offset . . . . . 81 connection_list_manager_$hpriv_delete_offset . . . . 81 connection_list_manager_$priv_delete_all_for_user . . 82 connection_list_manager_$hpriv_delete_all_for_user . 82 connection_list_manager_$priv_get_name . . . . . . . 83 connection_list_manager_$hpriv_get_name . . . . . . . 85 connection_list_manager_$priv_get_next_user . . . . . 86 connection_list_manager_$hpriv_get_next_user . . . . 86 connection_list_manager_$priv_get_next_owner . . . . 87 connection_list_manager_$hpriv_get_next_owner . . . . 88 connection_list_manager_$hpriv_get_next . . . . . . . 89 connection_list_manager_$priv_remove_user . . . . . . 90 connection_list_manager_$init . . . . . . . . . . . . 91 Network Login Servers MTB752-03 CONTENTS (cont) Page priv_connection_list_ . . . . . . . . . . . . . . . . . 92 hpriv_connection_list_ . . . . . . . . . . . . . . . . . 93 display_connection_list . . . . . . . . . . . . . . . . 94| Network Login Servers MTB752-03 111::: SSSTTTAAATTTEEEMMMEEENNNTTT OOOFFF TTTHHHEEE PPPRRROOOBBBLLLEEEMMM Today, all terminal and network connections are owned by the Initializer, and the answering service code running in the Initializer process performs all pre-access dialogue by calling the ring 0 terminal management routines directly. As indicated in MTB-748, this mechanism is no longer workable in an environment where arbitrary networks, accessed through a variety of interfaces, can be used to communicate with the system; every new network would require answering service changes. The current Telnet mechanism gets around this problem by using "software tty" (STY) channels, but this adds complexity to the data path, sending every piece of input and output on an extra, otherwise unnecessary trip through ring 0. 222::: OOOVVVEEERRRVVVIIIEEEWWW OOOFFF TTTHHHEEE PPPRRROOOPPPOOOSSSEEEDDD SSSOOOLLLUUUTTTIIIOOONNN The general idea behind the proposed solution is to separate the communications aspects of the answering service's job from its user validation and process creation tasks. In particular, each system has one or more "login server" daemon processes, each of which "owns" a set of actual or potential communications channels and assigns them for use by other processes, just as the Initializer does today. Each login server process, using a set of entrypoints defined in the Network Information Table (NIT) for each endpoint, listens for incoming connections and conducts the login dialogue with the user. The login server passes name and password information to the Initializer for validation, and requests the creation of processes; the Initializer, in turn, informs the login server of process terminations, so that the latter can unassign any network connections currently assigned to the terminated process. The creation of outgoing connections (i.e., dial_out and slave attachments) is done via the tty_ I/O module, as for MCS channels. Modifications have been made to tty_ to call appropriate DSA entries for DSA connections, rather than signalling the answering service. The inner-ring DSA code makes the necessary access checks to determine if the user is allowed to establish the connection. The login server is not involved because it only listens for incoming connections. Communications between the login servers and the Initializer are carried out by means of wakeups and messages placed in ring 1 message segments. Login servers send messages to the Initializer using a mechanism similar to that used by the as_request_ subroutine, and the Initializer sends messages to the login servers using the "user_messages" mechanism described in MTB-699. The assigning and unassigning of connections to user processes is performed in cbm 1 an inner ring, since it includes enforcing AIM MTB752-03 Network Login Servers restrictions, i.e., ensuring that the user's authorization and the connection's access class are compatible. Conceptually, MCS connections are included in this design; that is, there could eventually be a login server for connections on MCS FNP channels, which engages in pre-login dialogue and assigns channels by calling the various hcs_$tty_* entries as the answering service does today. In the initial implementation, however, the mechanism described in this MTB and the present Initializer-only Answering Service will exist side by side. User validation continues to be done in the Initializer process for several reasons. For one thing, it keeps to a minimum the number of processes that require access to the PNT. More importantly, it avoids the possible locking issues that arise if multiple processes have occasion to modify the PNT (when users change their passwords, for instance). Furthermore, the creation of absentee and daemon processes does not involve the login server, and will remain the province of the Initializer, so the validation and creation of interactive processes might as well stay there too. Network Login Servers MTB752-03 333::: IIIMMMPPPLLLIIICCCAAATTTIIIOOONNNSSS OOOFFF TTTHHHEEE PPPRRROOOPPPOOOSSSEEEDDD DDDEEESSSIIIGGGNNN The following are some of the implications of the changes required to support login servers. 333...111::: TTThhheee CCCDDDTTT The CDT in its current form is used both to contain more or less static information about channel configuration, and dynamic information used and maintained by the answering service to describe the current state of each connection, such as whether it is active, what the current terminal type is, what process it is assigned to, etc. The configuration function of the CDT will be transferred to the NIT; each login server must maintain a table of dynamic information pertaining to the connections that it manages, the details of which may vary from one server to another. A system-wide table of existing connections will also be maintained, containing the process IDs of both the using process and the owning login server. This enables the Initializer to identify the server(s) that must be woken up whenever a process that has dialed "slave" terminals terminates, as explained further on. 333...222::: CCChhhaaannnnnneeelll AAAdddmmmiiinnniiissstttrrraaatttiiiooonnn The operator commands "attach" and "remove" are not meaningful for dynamically-configured channels, and cannot be used with connections not represented in the CDT. The "bump" command, if invoked with an argument that is neither a user ID nor a channel name found in the CDT, assumes that it is a network-type connection ID, and searches the answer table for an entry containing the specified name as the channel name; if it finds one, it logs the user out and wakes up the owning login server process, as described in the "process termination" scenario later in this document. The "detach" command, if given a channel name not in the CDT, behaves similarly. 333...333::: MMMeeessssssaaagggeeesss FFFrrrooommm ttthhheee IIInnniiitttiiiaaallliiizzzeeerrr Since the Initializer no longer controls communications channels, it cannot seize the user's terminal to write automatic logout notices, the output of "warn" commands, etc. Instead, it writes a "user_message" that contains appropriate information to allow the user's process to generate a message, and sends an IPS signal. This mechanism is described in greater detail in MTB-747. MTB752-03 Network Login Servers 333...444::: MMMeeessssssaaagggeee CCCoooooorrrdddiiinnnaaatttooorrr CCChhhaaannnnnneeelllsss The message coordinator has already been converted to use iox_ attachments (see MTB-694). It is therefore possible to arrange for the appropriate login server to listen on a message coordinator channel and assign it to the Initializer, thus allowing the use of the message coordinator over a network connection. The changes to the message coordinator required to identify such channels are described in MTB-750. Network Login Servers MTB752-03 444::: DDDEEETTTAAAIIILLLSSS OOOFFF TTTHHHEEE PPPRRROOOPPPOOOSSSEEEDDD DDDEEESSSIIIGGGNNN This section describes the login server design in more detail, in part by means of scenarios describing the sequences of events necessary to create processes, establish connections, etc. Appendix A outlines the data structures that are passed between the login server and the Initializer for each of the messages referred to in the scenarios. 444...111::: LLLooogggiiinnn SSSeeerrrvvveeerrr PPPrrroooccceeessssss EEEnnnvvviiirrrooonnnmmmeeennnttt The login server must be a highly trusted daemon process, since it handles user passwords. Very few login servers are required in the DSA environment, so they are created as message coordinator daemons in much the same way as other daemon processes (I/O daemons, etc.). A process overseer is provided that runs the server in an ssu_ subsystem with a very limited set of commands: "start_login_service" and "stop_login_service" with an argument naming a single generic endpoint (see below). 4.1.1: TRANSACTION PROTOCOL Some of the sequences described below include several messages to be exchanged between the login server and the Initializer; in order to maintain the identity of each sequence, a "handle" mechanism is used. The first message of each sequence in each direction provides a unique 72-bit handle that the recipient is to use in subsequent transactions of the sequence. The handle provided by the login server is the handle to which user_messages are to be sent (as described in MTB-699); the handle provided by the Initializer includes the index of the user table entry (UTE) that the Initializer uses to identify the connection. 4.1.2: CONTROL POINTS The primitive tasking mechanism currently used by the (uninstalled) network mail software is being integrated into the system for use by login servers (and any other subsystem that requires it), and is described in MTB-753. To avoid confusion with the full tasking implementation of which it was intended as a precursor, it has been renamed "control point management", and the objects that used to be called "tasks" are now called "control points". The essential elements are: MTB752-03 Network Login Servers o if a given control point calls ipc_$block, another control point in the same process may run; o each control point has its own stack; o all the control points in a given process share the same internal static storage; o when a control point is created, it may either share its parent's standard I/O switches (user_input, user_output, and error_output) or it may attach its own according to an attach description provided at the time of its creation. 4.1.3: INITIALIZATION Initialization of the login server consists primarily of establishing an ssu_ subsystem to process start_login_service and stop_login_service requests. When a start_login_service request is received, the login server creates a control point to listen on the specified endpoint. This control point (called the "listen" control point) must ascertain which entries to call to manipulate connections owned by the particular server. The types of entries available to login servers are as follows: o listen: await incoming connections; o stop_listen: stop waiting for incoming connections; o assign_connection: give the connection to a specified process; o unassign_connection: take the connection away from a process to which it had previously been assigned; o disconnect: terminate the connection; o force_disconnect: terminate the connection even if not the owning process (for use when the owning process no longer exists); o validate_user: get the user's ID and password, and request the Initializer to create a process. The actual entries depend on the endpoint (see MTB-748) that the server is accepting connections on. The server makes a call to net_info_$get_service_entries (described in Appendix B) to obtain entry variables which it saves in allocated storage for use by both the listen control point and its various subsidiary control points (see below). The main control point, meanwhile, returns Network Login Servers MTB752-03 to ssu_$listen to await further start_login_service and stop_login_service requests. 4.1.4: ESTABLISHING CONNECTIONS The main control point of the login server process calls the "listen" entry returned by net_info_$get_service_entries; this call goes blocked until a connection is established. Once the connection is set up, the listen entry returns, providing, among other things, an attach description which can be used to attach the connection through an I/O switch. The listen control point creates a new control point (called a "connection" control point) to manage the new connection, providing this attach description to control point management for use in attaching the connection control point's standard I/O switches. The listen control point then calls the listen entry again to await additional connections. 4.1.5: PRE-ACCESS DIALOGUE The remainder of this discussion assumes that the endpoint specified in the start_login_service request was a normal interactive login endpoint that expects to receive connections from user terminals. For such endpoints, the login_service_entries.validate_user entrypoint is ls_validate_user_, which engages in a login dialogue with the user corresponding to that implemented by dialup_ for CDT channels. For other types of endpoints (for example, those used for file transfer), other validate_user entries might be used, which are not discussed in this document. Because the login dialogue is conducted in a separate control point with its own standard I/O switches, it can all be done using iox_ over these standard switches. In fact, to avoid having to invent new parsing mechanisms, the pre-access dialogue is implemented as an ssu_ subsystem, internal to the subroutine ls_validate_user_ (described in Appendix B), which implements the various scenarios described later in this section. Once an appropriate user process has been created or found, the login server calls the "assign_connection" entry returned by net_info_$get_service_entries, and wakes up the process. 444...222::: LLLooogggiiinnn CCChhhaaannnnnneeelllsss Included in the dynamic information maintained for each connection by the login server is an indication of whether the connection is the user's "login channel" -- i.e., whether it is the connection on which the process was established (or, in the case of a disconnected process, reconnected). This is necessary MTB752-03 Network Login Servers so that the server knows what action to take when it is notified that the user process has terminated. 444...333::: DDDiiiaaalll QQQuuuaaallliiifffiiieeerrrsss Dial qualifiers -- the names used to register processes as dial servers, and provided as arguments to the "dial" pre-access request -- continue to be registered with the Initializer, since an incoming dial connection can come to any login server. The mechanism for registering dial qualifiers remains essentially unchanged. 444...444::: MMMeeessssssaaagggeee CCCoooooorrrdddiiinnnaaatttooorrr CCCooonnnnnneeeccctttiiiooonnnsss The concept of "virtual channels" has been incorporated into the message coordinator to facilitate the connection of message coordinator terminals whose actual connection IDs are not known at system_start_up time. The details of this mechanism are described in MTB-750. The login server's contribution is to support two new control arguments to the login request: -operator, which requests that the user be signed on as an operator and connected to the message coordinator; and -virtual_channel, which specifies the name of the virtual channel (presumably already accepted) to be associated with this physical connection. (The user must be registered with the "operator" attribute for these control arguments to be allowed.) If the user specifies -operator without -virtual_channel, or uses "dial system" as at present, the connection must be accepted by explicit operator command. 444...555::: PPPaaasssssswwwooorrrddd MMMaaannnaaagggeeemmmeeennnttt In keeping with the principle currently followed by the answering service that the clear-text password should stay in (virtual) memory for as short a time as possible, the login server encrypts all passwords on receipt and sends them to the Initializer in encrypted form. An implication of this is that the login server must perform password generation when the "-generate_password" control argument is used, since the generated password must be sent to the user in clear (obviously), but it would hardly be appropriate for the Initializer to generate it and then leave it lying around in a message segment until the login server picked it up. The login server must send an indication to the Initializer as to whether the supplied password was generated in this fashion, in case the user is administratively required to use the "-generate_password" control argument. Network Login Servers MTB752-03 444...666::: AAAccctttiiivvveee CCCooonnnnnneeeccctttiiiooonnn TTTaaabbbllleee A system-wide inner-ring table of active connections is maintained to allow the Initializer to find the owning login server (or other process) for a connection whose user process has terminated (either normally or abnormally). (Note: this applies only to connections that were dialed to the process; for the login channel, the Initializer maintains the process ID and handle of the login server in the UTE.) Additionally, a login server searches the table during initialization to find any connections whose user and owner processes have both terminated, in order to clean them out using the login_service_entries.force_disconnect entry. The entries that manage this table are accessible through the gates hpriv_connection_list_ and priv_connection_list_, which are described in Appendix B. For the most part, however the connection_list_manager_ entries are called directly by the inner-ring programs that are the targets of the various login_service calls. A connection is added to the table by the inner-ring code associated with the listen entry. The calling process is made the owner of the connection, and initially the user as well. The name of the force_disconnect and update_accounting entries are put in the table, to allow a process other than the original owner (eg, the Initializer) to destroy the connection or force updating of accounting information for the connection. When the login server eventually calls the assign_connection entry, the associated inner-ring code calls connection_list_manager_$change_user to make the newly-assigned user process show up as the user in the active connection table. The login server also provides at this time the names of event channels over which wakeups are to be sent if either the connection or the user process is terminated. 444...777::: PPPeeerrr---cccooonnnnnneeeccctttiiiooonnn DDDaaatttaaa Some connections have associated data, dependent on the top-level networking entity, that is created or obtained when the connection is established (in the login server process) but is needed by higher layers in the user's process. (A case in point is the negotiation data associated with a DSA session; this is established when the session is created, and may be needed by Terminal Management in the user process.) On the other hand, the login server is not in a position to know anything about the format of such data. Therefore, the listen entrypoint returns a pointer to, and the length of, any connection-specific data; the login server uses the user_message facility to send a message containing the data to the user process (once the latter has been created), and software running in the user process can read it MTB752-03 Network Login Servers out at its convenience. The login server also sends the process a wakeup so that it can start running or, if it is a dial server, to inform it that a new dialed connection exists. The format of the event message sent with this wakeup is compatible with that used by dial_ctl_; however, since there is no "devx" for the new connection, nor can its name be expected to fit in 6 characters, a flag has been added to the event message to indicate that further information (including the connection name) are contained in the user message. The convert_dial_message_ subroutine has been changed to recognize this flag and read the message to get the connection name. The format of the event message, now declared in the include file dial_event_message.incl.pl1, is described in Appendix A. Network Login Servers MTB752-03 555::: SSSCCCEEENNNAAARRRIIIOOOSSS The scenarios described below are not intended as formal specifications, but rather give a general idea of the sequence of events associated with each type of situation being described. The formats of the messages exchanged between the login server and the Initializer are described in Appendix A. Note that all messages from the server to the Initializer are called "requests", and all messages from the Initializer to the server are called "responses", even though some of the former do not request anything and some of the latter are not responses to anything. Any of these scenarios can be terminated prematurely in the following ways: Any of the messages from the Initializer to the server can include a "hangup" flag, indicating that the connection is to be closed. If the connection is closed or broken at any point, the server sends a message to the Initializer indicating this fact. The Initializer then discards (i.e., frees) any newly-allocated UTE, and the sequence is terminated. The same thing happens if the user enters the "hangup" or "logout" request during the login/connect or dial sequences. 555...111::: LLLooogggiiinnn///cccooonnnnnneeecccttt SSSeeeqqquuueeennnccceee This scenario describes the normal sequence followed when a user initiates an incoming connection with the intention of logging in and creating a process or manipulating one or more previously-disconnected processes. Thus it includes the use of the -connect, -new_proc, etc. control arguments to the login command, as well as the use of the corresponding requests used in the "disconnected process" dialogue. Validation of the user's name and password and the creation of the process are performed in separate transactions because the validation transaction is used in the dial sequence (below) if the -user control argument is specified; further, it is entirely possible that other (as yet undefined) applications will want the ability to validate users by password without necessarily creating processes for them. Note that this scenario is described under the assumption that the login dialogue is actually conducted by the login server, as indicated above. Some variations would be introduced in the case where the user validation information comes from elsewhere in the network, but the interactions between the login server and the Initializer remain the same. MTB752-03 Network Login Servers 1) The server receives a wakeup indicating the completion of an incoming connection, and sends the Multics greeting message. 2) The user enters the login request line. 3) The server processes any control arguments relating to the connection (-ttp, -modes, etc.) 4) The server parses the login line. If it is syntactically unacceptable, print an error message, and go to step 2. Otherwise, the server prompts for, and receives, the user's password. 5) If the user specified neither -cpw or -gpw, go to step 9. 6) If the user specified -gpw, the server calls the password-generating routine, and sends the result to the user. 7) The server prompts for, and receives, the user's new password twice. 8) If the two instances of the new password do not match, or the new password does not match the generated password, print a message, and go to step 2. 9) The server sends a "validate_request" message to the Initializer to request validation of the user's name and password, also providing project and/or authorization if supplied by the user. If the user provided any of -cpw, -gpw, -change_default_authorization, or -change_default_project, the relevant information is included in this request. 10) The Initializer assigns a UTE, looks the user up in the PNT, and sends a "validate_response" message to the server indicating the result. If the lookup succeeded, the return message includes the long form of the user's person and project IDs and his default authorization if none was supplied. 11) If the return message from the Initializer indicates failure to validate, print a message and go to step 2. 12) If the user specified "-operator", switch to the "operator login" scenario (below). 13) If the user specified "-list", the server sends a "list_request". Otherwise, go to step 16. 14) The Initializer sends a "list_response" message containing the list of processes with their associated times and Network Login Servers MTB752-03 connection-endpoints. If the user has no disconnected processes, the return message contains a nonzero status code. In either case, the server displays the appropriate information, and prompts for a request. 15) The user enters another request line; the server parses it and goes to step 13. 16) The server sends a "process_request" message to the Initializer containing the effective command (i.e., create, connect, new_proc, destroy), the process number, if supplied, information about the channel, and all other login control arguments that relate to process creation (-home_dir, -outer_module, etc.). 17) The Initializer does whatever is necessary to fulfill the user's request, e.g., call ring 0 to create a process, destroy a disconnected process, etc. If a new process was created or reconnection to an old process established, the Initializer's "process_response" message includes the process group ID, the process ID, and the process number. If the user's request is ambiguous or inappropriate in relation to the number of disconnected processes, the return "process_response" message includes the number of disconnected processes and a nonzero status code. 18) If the status code returned by the Initializer is zero, go to step 21. 19) The server outputs a message indicating that more information is needed, and the user enters a request line (e.g. "connect", "destroy 3", etc.). 20) The server parses the request line, and goes to step 13. 21) The server calls the assign_connection entry to assign the new process ID to the connection, and saves the process ID in its own table entry for the connection, which it marks as the "login channel". 22) The server sends a user_message containing the necessary information for attaching the connection in the user process. 23) The server sends the process a wakeup to cause it to start (or in the case of a suspended process, to resume). 555...222::: DDDiiiaaalll SSSeeeqqquuueeennnccceee This scenario describes the sequence that takes place if a user enters the "dial" request. MTB752-03 Network Login Servers 1) The server receives a wakeup indicating the completion of an incoming connection, and sends the Multics greeting message. 2) The user enters the dial command. 3) The server parses the command. If it is syntactically incorrect, print a message and go to step 2. 4) If the command specifies the -user control argument, go to step 6. 5) If access to the channel is restricted (i.e., it has an ACS that does not grant access to all users), or the dial qualifier is "system", print a message noting that the -user control argument is required, and go to step 2. Otherwise, go to step 11. 6) The server prompts for, and receives, the user's password. 7) The server sends the Initializer a "validate_request" message giving the user's person ID, project ID (if supplied), and password, requesting validation. 8) The Initializer assigns a UTE, looks the user up in the PNT, and sends a "validate_response" message to the server indicating the result. If the lookup succeeded, the message includes the long form of the user's person and project IDs and his default authorization if none was supplied. 9) If the "validate_response" message contains a nonzero status code, print a message and go to step 2. 10) If the dial qualifier is "system", switch to the "operator login" scenario (below). 11) The server sends a "dial_request" message to the Initializer giving the dial qualifier and the target process's user ID, if supplied. 12) The Initializer tries to find the process with the registered dial qualifier, or if the dial qualifier is not registered, a process with the specified user ID that is accepting dials; it sends the server a "dial_response" message indicating the result, and including the process group ID and the process ID of the process, as well as the name of the event channel being used for dials, if it succeeds. 13) If the "dial_response" message contains a nonzero status code, print a message and go to step 2. Network Login Servers MTB752-03 14) The server calls the assign_connection entry to assign the new process ID to the connection, and saves the process ID in its own table entry for the connection, which it marks as a "dial channel". 15) The server sends the user process a unique user_message containing the name of the connection and the I/O module through which it is to be attached, for use by convert_dial_message_. 16) The server sends the user process a user_message containing the connection attachment information as in the login sequence (above). 17) The server sends the process a wakeup on the specified event channel. NOTES This scenario can branch into the login/connect sequence any time it returns to step 2 (i.e., the user enters a new request). 555...333::: OOOpppeeerrraaatttooorrr LLLooogggiiinnn This scenario describes what happens when a user requests connection to the message coordinator. The description begins at the point after the user has been validated, whether the initial request was "login User -operator" or "dial system". 1) The server sends an "operator_request" to the Initializer, providing the virtual channel name if one was specified. 2) The Initializer passes the request to the message coordinator. If a preaccepted virtual channel is not specified, a message is sent to the Initializer terminal, and further processing of the request awaits an "accept" or "drop" command from the system operator. 3) The Initializer sends the server an "operator_response", indicating success or failure of the request. If the status code is zero, the response includes the name of an event channel over which to wake up the message coordinator. 4) If the status code is nonzero, the server prints a message and awaits further requests, as above. 5) The server calls the assign_connection entry to assign the message coordinator's process ID to the connection. MTB752-03 Network Login Servers 6) The server sends a user_message to the message coordinator containing the necessary information for attaching the connection, as above. 7) The server sends a wakeup over the specified event channel. 555...444::: DDDiiiaaalll_ooouuuttt,,, PPPrrriiivvv_aaattttttaaaccchhh,,, aaannnddd RRReeellleeeaaassseee These are handled entirely in the user's process, and follow essentially the same logic as the current dial_ctl_. Therefore, the scenario is not described in this document. 555...555::: PPPrrroooccceeessssss TTTeeerrrmmmiiinnnaaatttiiiooonnn (((LLLooogggiiinnn CCChhhaaannnnnneeelll))) This scenario describes the actions taken with respect to a user process's login channel when that process terminates, either by logging out, taking a fatal error, or via the new_proc command. The Initializer sends a "termination_response" message to the login server, giving it the process ID of the terminated process, accounting information, and indications of the control arguments supplied (-hold, -brief) and the type of termination (automatic logout, user-requested logout, fatal error, etc.). It then sends the server a wakeup over the "termination" event channel provided by the server during the login sequence. 8) The server calls the unassign_connection entry to unassign the connection. 9) If the response indicates a fatal error, print the fatal error message and additional messages as appropriate; go to step 5. 10) If the status code in the termination response is nonzero, print the corresponding error message. 11) If the "offer_help" flag is set in the termination response, print a message inviting the user to type "help". 12) If the "logout" flag is not set in the termination response, thus indicating that a new process will be created, go to step 9. 13) If the "brief" flag is not set set in the termination response, print a message containing the accounting information for the login session. 14) If the "hold" flag is set in the termination response, send the greeting message, and switch to the login/connect Network Login Servers MTB752-03 sequence (above). Otherwise, call the disconnect entry, ending the sequence. 15) The server blocks to await a "new_proc" response. 16) The Initializer creates a new process for the user, and sends the server a new_proc response, containing the process ID, authorization, and starting event channel of the new process. 17) If the new process was the result of a fatal error, the server prints the "New process created" message. 18) The server assigns the connection and sends a user_message and wakeup as in the login sequence (above). 555...666::: PPPrrroooccceeessssss TTTeeerrrmmmiiinnnaaatttiiiooonnn (((DDDiiiaaallleeeddd CCCooonnnnnneeeccctttiiiooonnnsss))) This scenario describes the sequence followed for a dialed connection when the user process to which it was assigned terminates. When terminating a process, the Initializer calls hpriv_connection_list_$get_next_user repeatedly to identify all of that process's dialed connections and their respective login servers; the sequence below is followed for each such connection. The Initializer sends a termination response and a wakeup to the login server, as above. 19) The login server prints a message indicating that the user process has terminated. 20) The server prints the greeting message, and reenters the login/connect sequence. 555...777::: DDDiiissscccooonnnnnneeeccctttiiiooonnn SSSeeeqqquuueeennnccceee This scenario describes the sequence when a connection is closed while a process has it assigned. 1) The login server receives a wakeup indicating that the connection has been closed. 2) The server calls the unassign_connection entry to unassign the connection. 3) If the connection is not the login channel, the server wakes up the process to which the connection had been assigned, in order to inform it that the connection has been closed. MTB752-03 Network Login Servers 4) The server sends a "disconnection_request" message to the Initializer to indicate that the process's login channel has been disconnected. 5) If the connection is the login channel, the Initializer decides whether the process should be suspended or logged out. In the latter case, it sends wakeups to all appropriate login servers, as in the termination sequence (above). 6) If the connection is not the login channel, the Initializer simply discards the UTE created during the dial sequence (above). Network Login Servers MTB752-03 AAAPPPPPPEEENNNDDDIIIXXX AAA::: SSSUUUMMMMMMAAARRRYYY OOOFFF DDDAAATTTAAA SSSTTTRRRUUUCCCTTTUUURRREEESSS This appendix identifies the various data structures required for the implementation of login servers. AAA...111::: SSStttrrruuuccctttuuurrreeesss fffooorrr LLLooogggiiinnn SSSeeerrrvvveeerrr RRReeeqqquuueeessstttsss The following structures describe the requests sent by a login server to the Initializer process. They are defined in login_server_messages.incl.pl1. A.1.1: COMMON STRUCTURES The following structures are included as substructures of all Login Server Request structures. A.1.1.1: ls_request_header dcl 1 ls_request_header aligned based (ls_request_ptr), 2 header_version char (8), 2 request_version char (8), 2 request_type fixed bin, 2 pad1 bit (36), 2 reply_event_channel fixed bin (71), 2 reply_handle bit (72) aligned, | 2 connection_info like user_connection_info; | Structure Elements header_version is the version of the header. It is always the value of LS_REQUEST_HEADER_VERSION_1. request_version is the version of the particular request structure. Its value depends on the type of request. MTB752-03 Network Login Servers request_type identifies the type of request. It has one of the following values: LS_VALIDATE_REQUEST (1) LS_PROCESS_REQUEST (2) LS_LIST_REQUEST (3) LS_DIAL_REQUEST (4) LS_DISCONNECT_REQUEST (5) LS_LOGOUT_REQUEST (6) LS_OPERATOR_REQUEST (7) reply_event_channel is the name of the event channel over which the Initializer is to send a wakeup in order to respond to a request. reply_handle is the handle that will be used to read the response from the Initializer. | | connection_info | is the user_connection_info substructure declared below. This | describes the MNA connection which is making the request. A.1.1.2: user_connection_info dcl 1 user_connection_info aligned based, 2 connection_name char (32), 2 access_class_range (2) bit (72), 2 terminal_type char (32), 2 terminal_id char (4), | 2 line_type fixed bin; Structure Elements connection_name is the name of the connection. access_class_range is the range of access classes within which the connection may be used. terminal_type is the terminal type currently associated with the connection. Network Login Servers MTB752-03 terminal_id is the terminal identifier currently associated with the connection. | line_type | is the line type of the connection. | MTB752-03 Network Login Servers A.1.2: VALIDATE REQUEST The "validate" request is sent to verify a user's person ID and password. dcl 1 login_server_validate_request aligned based, 2 header like ls_request_header, 2 current_password char (8), 2 authorization bit (72), 2 terminate_event_channel fixed bin (71), * 2 person_id char (22), 2 project_id char (9), 2 network_connection_type fixed bin, 2 new_password char (8), 2 flags, 3 gpw bit (1) unaligned, 3 auth_given bit (1) unaligned, 3 anonymous bit (1) unaligned, 3 anon_no_password bit (1) unaligned, 3 change_password bit (1) unaligned, 3 change_default_auth bit (1) unaligned, 3 change_default_proj bit (1) unaligned, 3 operator bit (1) unaligned, 3 pad bit (28) unaligned; Structure Elements header is as above. The request_version contains the value LS_VALIDATE_REQUEST_VERSION_1. current_password is the password supplied by the user. authorization is the authorization supplied on the login line. It is ignored if auth_given (below) is "0"b. terminate_event_channel is the event channel over which the login server is to be notified when the user process that will eventually be associated with this request terminates. person_id is the person ID as given on the login line. project_id is the project ID as given on the login line. If no project ID was specified, it is the null string. Network Login Servers MTB752-03 network_connection_type indicates the way the connection was established. It is used by the Initializer to select a process overseer and an instance tag for the created process. It may have one of the following values: NETWORK_CONNECTION_LOGIN (1) NETWORK_CONNECTION_DSA_FILE_TRANSFER (2) new_password is the user's new password. It is only valid if change_password is "1"b. gpw is "1"b if the user specified the "-generate_password" control argument. auth_given is "1"b if the user specified an authorization. anonymous is "1"b if the user specified the "enterp" request, for anonymous login with a password. anon_no_password is "1"b if the user specified the "enter" request, for anonymous login with no password. change_password is "1"b if the user's password is being changed through either the "-generate_password" or "-change_password" control arguments. change_default_auth is "1"b if the user's default authorization is being changed. change_default_proj is "1"b if the user's default project is being changed. operator is "1"b if the user requested to be signed on as an operator. MTB752-03 Network Login Servers A.1.3: PROCESS REQUEST The "process" request requests the creation of a process, or the connection or destruction of an existing process, etc. dcl 1 login_server_process_request aligned based, 2 fixed_part, 3 header like ls_request_header, 3 handle bit (72), 3 person_id char (22), 3 project_id char (9), | 3 project_pad fixed bin, 3 command_type fixed bin, 3 process_number fixed bin, 3 default_io_module char (32), 3 switch_flags, 4 warn_given bit (1) unaligned, 4 force_given bit (1) unaligned, 4 save_given bit (1) unaligned, 4 preempt_given bit (1) unaligned, 4 brief_given bit (1) unaligned, 4 pad2 bit (31) unaligned, 3 switch_values, 4 warn bit (1) unaligned, 4 force bit (1) unaligned, 4 save_on_disconnect bit (1) unaligned, 4 preempt bit (1) unaligned, 4 brief bit (1) unaligned, 4 pad3 bit (31) unaligned, 3 other_flags, 4 init_ring_given bit (1) unaligned, | 4 minimum_ring_given bit (1) unal, 4 immediate bit (1) unaligned, 4 no_start_up bit (1) unaligned, 4 pad4 bit (33) unaligned, 3 initial_ring fixed bin, | 3 minimum_ring fixed bin, 3 home_dir char (168), 3 outer_module char (32), 3 process_overseer char (168), 3 subsystem char (168), 3 n_args fixed bin, 2 login_arguments, 3 arg_string_length fixed bin (21), 3 args (ls_process_request_nargs refer (ls_process_request.n_args)), 4 start_index fixed bin (21), 4 arg_length fixed bin (21), 3 arg_string char (ls_process_request_arg_string_length refer (ls_process_request.arg_string_length)); Network Login Servers MTB752-03 Structure Elements header is as above. The request_version contains the value of LS_PROCESS_REQUEST_VERSION_1. handle is the Initializer's handle for this connection (provided initially in the "validate" response, below). person_id is the user's person ID. project_id is the user's project ID. command_type indicates what command the user gave on the login line. It may have one of the following values: LOGIN_REQ (1) ENTER_REQ (2) ENTERP_REQ (3) CREATE_REQ (4) CONNECT_REQ (5) DESTROY_REQ (6) LIST_REQ (7) process_number is the number of the process to be connected, etc., or 0 if no process number was supplied. default_io_module is the name of the I/O module through which the process's standard I/O switches are to be attached if no outer_module (below) is specified. switch_flags indicate which of the "switch-valued" control arguments were given. warn_given is "1" if the user specified "-warn" or "-no_warn". force_given is "1" if the user specified "-force" or "-no_force". save_given is "1" if the user specified "-save_on_disconnect" or "-no_save_on_disconnect". MTB752-03 Network Login Servers preempt_given is "1" if the user specified "-preempt" or "-no_preempt". brief_given is "1" if the user specified "-brief" or "-long" switch_values indicate the values given for the control arguments specified. Each of switch_values is valid only if the corresponding flag under switch_flags (above) is "1"b. warn is "1"b for -warn, "0"b for -no_warn. force is "1"b for -force, "0"b for -no_force. save_on_disconnect is "1"b for -save_on_disconnect, "0"b for -no_save_on_disconnect. preempt is "1"b for -preempt, "0"b for -no_preempt. brief is "1"b for -brief, "0"b for -long. init_ring_given is "1" if the user specified an initial ring. | | minimum_ring_given | is "1" if the MNA terminal manager must run in a ring higher | than 1. immediate is "1" if the user specified "-immediate". no_start_up is "1"b if the user specified "-no_start_up". initial_ring is the initial ring given on the login line. It is ignored if init_ring_given (above) is "0"b. | | minimum_ring | is the minimum ring in which the MNA terminal manager can run. | For DSA, this is set to ring 2. This ring number imposes a | limit on the minimum ring of the process beyond the limits | given in the SAT and PDT. Network Login Servers MTB752-03 home_dir is the home directory specified on the login line, or the null string if none was given. outer_module is the outer module specified on the login line, or the null string if none was given. process_overseer is the process overseer specified on the login line, or the null string if none was given. subsystem is the subsystem specified on the login line, or the null string if none was given. n_args is the number of arguments specified following the -arguments control argument, or 0 if no additional arguments were given. login_arguments describes the arguments following the -arguments control argument. If n_args (above) is 0, this part of the structure is ignored. arg_string_length is the total length of arg_string (below) in characters. args describes the position of each argument in arg_string. start_index is the starting index in arg_string of the current argument. arg_length is the length of the current argument in characters. arg_string contains all the arguments concatenated into a single string. MTB752-03 Network Login Servers A.1.4: LIST REQUEST The "list" request indicates that the user entered the "list" request or provided the -list control argument to the "login" request. dcl 1 login_server_list_request aligned based, 2 header like ls_request_header, 2 handle bit (72); Structure Elements header is as above. The request_version field contains the value of LS_LIST_REQUEST_VERSION_1. handle contains the Initializer's handle as returned in the validate_response. Network Login Servers MTB752-03 A.1.5: DIAL REQUEST The "dial" request reports that the "dial" preaccess command was entered, and requests the finding of an appropriate dial_server. dcl 1 login_server_dial_request aligned based, 2 header like ls_request_header, 2 initializer_handle bit (72), 2 terminate_event_channel fixed bin (71), 2 dial_qualifier char (22), * 2 person_id char (22), 2 project_id char (9), 2 user_person_id char (22), 2 user_project_id char (9); Structure Elements header is as above. The request_version field contains the value of LS_DIAL_REQUEST_VERSION_1. initializer_handle is the Initializer's handle for this connection if there was a previous "validate" request for this connection, otherwise ""b. terminate_event_channel is the event channel over which the login server is to be notified when the user process that will eventually be associated with this request terminates. dial_qualifier is the dial qualifier supplied on the request line. person_id is the person ID of the dial server, or "" if none was supplied. project_id is the project ID of the dial server, or "" if none was supplied. user_person_id is the person ID supplied with the -user control argument, or "" if -user was not specified. user_project_id is the project ID supplied with the -user control argument, or "" if none was supplied. MTB752-03 Network Login Servers A.1.6: DISCONNECT REQUEST The "disconnect" request is used to indicate that the connection has been terminated. dcl 1 login_server_disconnect_request aligned based, 2 header like ls_request_header, 2 handle bit (72), 2 process_id bit (36); * Structure Elements header is as above. The request_version field contains the value of LS_DISCONNECT_REQUEST_VERSION_1. handle is the Initializer's handle for this connection, as supplied in the "validate" response, below. process_id is the process ID of the user process to which the connection was assigned. Network Login Servers MTB752-03 A.1.7: LOGOUT REQUEST The "logout" request indicates that the user entered the logout request in order to terminate the dialogue. The Initializer is not expected to provide a response. dcl 1 login_server_logout_request aligned based (ls_request_ptr), 2 header like ls_request_header, 2 handle bit (72); * Structure Elements header is as above. The request_version field contains the value of LS_LOGOUT_REQUEST_VERSION_1. handle is the Initializer's handle for the connection, as provided in the validate_response. MTB752-03 Network Login Servers A.1.8: OPERATOR REQUEST The "operator" request requests that the user be signed on as an operator. It is sent instead of a process_request or a dial_request if the user supplied the -operator control argument or used "system" as a dial qualifier, respectively. dcl 1 login_server_operator_request aligned based (ls_request_ptr), 2 header like ls_request_header, 2 initializer_handle bit (72) aligned, 2 terminate_event_channel fixed bin (71), 2 person_id char (22), 2 project_id char (9), 2 virtual_channel char (32); * Structure Elements header is as above. The request_version field contains the value of LOGIN_SERVER_OPERATOR_REQUEST_VERSION_1. initializer_handle is the handle provided in the validate_response. terminate_event_channel is the event channel over which the login server is to be sent a wakeup if the connection is dropped by the message coordinator. person_id is the user's person ID. project_id is the user's project ID. virtual_channel is the virtual channel name provided by the user, or "" if none was supplied. Network Login Servers MTB752-03 AAA...222::: SSStttrrruuuccctttuuurrreeesss fffooorrr AAAnnnssswwweeerrriiinnnggg SSSeeerrrvvviiiccceee RRReeessspppooonnnssseeesss The following structures define the responses sent by the Initializer to the login server. They are defined in login_server_messages.incl.pl1. A.2.1: COMMON STRUCTURES All the types of Answering Service responses share a common header, with the following format: A.2.1.1: login_server_response_header dcl 1 login_server_response_header aligned based, 2 message_type fixed bin, 2 header_pad bit (36), 2 version char (8); Structure Elements message_type identifies the type of the response. It has one of the following values: LS_VALIDATE_RESPONSE (101) LS_PROCESS_RESPONSE (102) LS_LIST_RESPONSE (103) LS_DIAL_RESPONSE (104) LS_TERMINATION_RESPONSE (105) LS_NEW_PROC_RESPONSE (106) LS_OPERATOR_RESPONSE (107) version is the version of the response structure. Its value depends on the type of the response. MTB752-03 Network Login Servers A.2.2: VALIDATE RESPONSE The "validate" response indicates whether a user specified in a "validate" request was properly validated. dcl 1 login_server_validate_response aligned based, 2 header like login_server_response_header, 2 handle bit (72), 2 authorization bit (72), 2 authorization_range (2) bit (72), 2 status_code fixed bin (35), 2 person_id char (22), 2 project_id char (9), 2 n_disconnected_processes fixed bin, | 2 validate_pad fixed bin, 2 previous_login_info, 3 time fixed bin (71), 3 terminal_type char (32), 3 terminal_id char (4), 2 incorrect_passwords fixed bin, 2 last_incorrect_password, | 3 time fixed bin(71), 3 terminal_type char (32), 3 terminal_id char (4), 2 password_interval fixed bin, 2 flags, 3 disconnect bit (1) unaligned, 3 password_changed bit (1) unal, 3 default_auth_changed bit (1) unal, 3 default_proj_changed bit (1) unal, 3 password_expired bit (1) unal, 3 password_unused_too_long bit (1) unal, 3 pad bit (30) unaligned; Structure Elements header is as above. The version field has the value of LS_VALIDATE_RESPONSE_VERSION_1. handle is the Initializer's handle for this connection, to be used by the login server in subsequent requests. authorization is the default authorization of the user if none was supplied. authorization_range is the range of authorizations permitted for this user. Network Login Servers MTB752-03 status_code is a standard system status code. It is 0 if and only if the user was properly validated. All of the remaining fields, except disconnect, are invalid if it is non-zero. person_id is the primary form of the user's person ID. project_id is the primary form of the user's person ID. n_disconnected_processes is the number of disconnected processes currently belonging to the user. previous_login_info describes the user's most recent previous login, for use in the message beginning, "Last login at...". time is the time of the previous login. terminal_type is the terminal type associated with the previous login. terminal_id is the terminal ID associated with the previous login. incorrect_passwords is the number of times the user's password has been given incorrectly since the last time it was given correctly. last_incorrect_password contains information about the most recent instance of the user's password being given incorrectly, if incorrect_passwords (above) is nonzero. | time | is the time at which the last bad password was given. | terminal_type is the terminal type from which the user's password was last given incorrectly. terminal_id is the ID of the terminal from which the user's password was last given incorrectly. MTB752-03 Network Login Servers password_interval is the limit (in days) after which the user's password must be changed, or the maximum number of days it is allowed to go unused. This field is only valid if password_expired or password_unused_too_long (below) is "1"b. disconnect is "1"b if the disconnection is to be terminated immediately. This field is valid even if status_code (above) is non-zero. password_changed is "1"b if the password was changed by the validate_request. default_auth_changed is "1"b if the default authorization was changed changed by the validate_request. default_proj_changed is "1"b if the default project was changed changed by the validate_request. password_expired is "1"b if the user's password has been expired, through not having been changed for the number of days in password_interval (above). password_unused_too_long is "1"b is the user's password has not been used for more than the system time limit, given in password_interval (above). Network Login Servers MTB752-03 A.2.3: PROCESS RESPONSE The "process" response provides information about the process found or created in response to a "process" request. dcl 1 login_server_process_response aligned based, 2 header like login_server_response_header, 2 status_code fixed bin (35), 2 process_id bit (36), 2 new_handle bit (72), 2 authorization bit (72), 2 process_group_id char (32), 2 process_number fixed bin, 2 n_disconnected_processes fixed bin, 2 start_event_channel fixed bin (71), 2 login_instance fixed bin, 2 accounting_info, 3 cpu_usage fixed bin (71), 3 cost float bin, 2 flags, 3 disconnect bit (1) unaligned, 3 logout bit (1) unaligned, 3 created bit (1) unaligned, 3 connected bit (1) unaligned, 3 new_proc bit (1) unaligned, 3 destroyed bit (1) unaligned, 3 anonymous bit (1) unaligned, 3 already_logged_in bit (1) unaligned, 3 message_coordinator bit (1) unaligned, 3 brief bit (1) unaligned, | 3 pad bit (26) unaligned, | 2 initial_ring fixed bin, 2 already_logged_in_info, 3 connection_name char (32), 3 terminal_type char (32), 3 terminal_id char (4), 2 accounting_message_struc, 3 accounting_message_length fixed bin, 3 accounting_message char (ls_process_response_accounting_message_length refer (login_server_process_response. accounting_message_length)); Structure Elements header is as above. The version field contains the value of LOGIN_SERVER_PROCESS_RESPONSE_VERSION_1. MTB752-03 Network Login Servers status_code is 0 if and only if the request was fulfilled. If non-zero, it might indicate that the process number specified by the user was nonexistent, or that the user did not specify which of several processes was to be connected to, etc. process_id is the process ID of the process created or found. new_handle is the handle associated with a preexisting process, if the user requested reconnection; this handle is to be used in subsequent communications with the Initializer. If this field is 0, the handle previously returned in the validate_response should continue to be used. authorization is the authorization of the process which was created or found. process_group_id is the process group ID (person.project.tag) of the process created or found. process_number is the process number of the process created or found (as in, "Your disconnected process #N will be connected to this terminal"). n_disconnected_processes is the number of disconnected processes the user currently has. This may be valid even if status_code (above) is non-zero. start_event_channel is the event channel over which to send a wakeup to start (or restart) the process. login_instance indicates how many interactive processes the user has, disconnected or not. accounting_info if a disconnected process was destroyed, contains accounting information for that process. cpu_usage is the amount of CPU time used by the destroyed process. cost is the dollar cost of the destroyed process. Network Login Servers MTB752-03 disconnect is "1"b if the connection is to be terminated immediately. It is valid even if status_code (above) is non-zero. logout is "1"b if the current login session is to be terminated, i.e., the user must enter name and password again. It is valid even if status_code (above) is non-zero. created is "1"b if a new process was created. connected is "1"b if the user is being connected to a previously-disconnected process. new_proc is "1"b if the user has a disconnected process which is being replaced by a new process. destroyed is "1"b if the specified process has been destroyed. anonymous is "1"b if the process belongs to an anonymous user. already_logged_in is "1"b if the user cannot create a process because one is already logged in. message_coordinator is "1"b if this connection is going to be used by the message coordinator. | brief | is "1"b is the user brief attributes from the PDT. | initial_ring is the ring in which the process was created. already_logged_info contains information about the user's existing process if already_logged_in (above) is "1"b. connection_name is the name of the connection over which the process is logged in. terminal_type is the type of terminal associated with the process. MTB752-03 Network Login Servers terminal_id is the ID of the terminal associated with the process. accounting_message_struc contains an error or warning message from the Initializer concerning the user's account. It may be valid even if status_code (above) is non-zero. accounting_message_length is the length in characters of the accounting message. If there is no message, this field is 0. accounting_message is the text of the message. Network Login Servers MTB752-03 A.2.4: LIST RESPONSE The "list" response responds to the "list" request by providing information about the user's disconnected processes, if any. dcl 1 login_server_list_response aligned based, 2 header like login_server_response_header, 2 n_processes fixed bin, 2 pad_header fixed bin, | 2 process_info (login_server_list_response_n_processes refer (login_server_list_response.n_processes)), 3 creation_time fixed bin (71), 3 authorization bit (72), 3 initial_ring fixed bin, | 3 pad_process_info fixed bin, | 3 connection_info like user_connection_info; Structure Elements header is as above. The version field contains the value of LOGIN_SERVER_LIST_RESPONSE_VERSION_1. n_processes is the number of disconnected processes. If it is 0, the process_info structure is ignored. process_info describes each disconnected process. creation_time is the time at which the process was created. authorization is the authorization of the process. initial_ring | is the ring into which the process initially logged in, if | this was not the user's default ring. Otherwise, it is 0. | connection_info describes the connection that had been assigned to the process before its disconnection. MTB752-03 Network Login Servers A.2.5: DIAL RESPONSE The "dial" response identifies the process to which a connection issuing a "dial" request is to be assigned. dcl 1 login_server_dial_response aligned based, 2 header like login_server_response_header, 2 status_code fixed bin (35), 2 process_id bit (36), 2 process_group_id char (32), 2 authorization bit (72), 2 start_event_channel fixed bin (71), 2 process_ring fixed bin, 2 flags, 3 disconnect bit (1) unaligned, 3 pad bit (35) unaligned; Structure Elements header is as above. The version field contains the value of LOGIN_SERVER_DIAL_RESPONSE_VERSION_1. status_code is 0 if and only if an appropriate process was found. process_id is the process ID of the dial server. process_group_id is the process group ID (person.project.tag) of the dial server. authorization is the authorization of the dial server. start_event_channel is the event channel over which a wakeup is to be sent to the dial server to inform it that a connection has been dialed to it. process_ring is the ring in which the dial server process was created. disconnect if "1"b, indicates that the connection is to be terminated immediately. Network Login Servers MTB752-03 A.2.6: TERMINATION RESPONSE The "termination" response indicates that the user process associated with the connection has terminated, either by deliberate user action (logout or new_proc command) or because of a fatal error. dcl 1 login_server_termination_response aligned based, 2 header like login_server_response_header, 2 accounting_info, 3 cpu_usage fixed bin (71), 3 cost float bin, 3 pad bit (33) unaligned, 2 process_id bit (36), 2 process_group_id char (32), 2 status_code fixed bin (35), 2 flags, 3 logout bit (1) aligned, 3 automatic_logout bit (1) unaligned, 3 hold bit (1) unaligned, 3 brief bit (1) unaligned, 3 new_proc bit (1) unaligned, 3 fatal_error bit (1) unaligned, 3 fpe_caused_logout bit (1) unaligned, 3 fpe_loop bit (1) unaligned, 3 fpe_during_init bit (1) unaligned, 3 offer_help bit (1) unaligned, 3 pad bit (27) unaligned; Structure Elements header is as above. The version field contains the value of LOGIN_SERVER_TERMINATION_RESPONSE_VERSION_1. accounting_info is accounting information for the login session, for use in printing as part of the logout message (if the logout flag (below) is "1"b). cpu_usage is the session's virtual CPU usage, in microseconds. cost is the cost of the session. process_id is the process ID of the terminated process. MTB752-03 Network Login Servers process_group_id is the process group ID (person.project.tag) of the terminated process. status_code is non-zero if the termination is "abnormal", i.e., not the result of an explicit user command. logout is "1"b if the user is to be logged out, i.e., no new process will be created. If this flag is "0"b, it is assumed that a new process will be created, and the Initializer will subsequently send a new_proc response (see below). automatic_logout is "1" if the user was automatically logged out by the Initializer. hold is "1"b if the user specified "-hold" to the logout command. brief is "1"b if the user specified "-brief" to the logout command. new_proc is "1"b if the user entered the new_proc command. fatal_error is "1"b if the process terminated because of a fatal error. fpe_caused_logout is "1"b if a fatal error resulted in the user being logged out (with no new process being created). fpe_loop is "1"b if the user appears to be in a fatal process error loop. fpe_during_init is "1"b if a fatal error occurred during process initialization. offer_help is "1"b if the login server is supposed to print a message inviting the user to type "help". Network Login Servers MTB752-03 A.2.7: NEW_PROC RESPONSE The "new_proc" response indicates that a new process has been created for this connection. It is always preceded by a termination_response (above). dcl 1 login_server_new_proc_response aligned based, 2 header like login_server_response_header, 2 new_authorization bit (72), 2 new_start_event_channel fixed bin (71), 2 new_process_id bit (36); Structure Elements header is as above. The version field contains the value of LOGIN_SERVER_NEW_PROC_RESPONSE_VERSION_1. new_authorization is the authorization of the new process. new_start_event_channel is the event channel over which the new process should be sent a wakeup in order to start it. new_process_id is the process ID of the new process. MTB752-03 Network Login Servers A.2.8: OPERATOR RESPONSE The "operator" response indicates the success or failure of an attempt to assign a connection to the message coordinator, as a result of an operator_request (above). dcl 1 login_server_operator_response aligned based, 2 header like login_server_response_header, 2 status_code fixed bin (35), 2 process_id bit (36), | 2 process_group_id char (32), 2 event_channel fixed bin (71), 2 ring fixed bin, 2 flags, 3 disconnect bit (1) unaligned, 3 mbz bit (35) unaligned; Structure Elements header is as above. The version field contains the value of LOGIN_SERVER_OPERATOR_RESPONSE_VERSION_1. status_code is a standard system status code. If it is non-zero, the request could not be fulfilled. process_id is the process ID of the message coordinator process. | | process_group_id | is the process group ID (Person.Project.tag) of the message | coordinator process. event_channel is the name of the event channel over which to send the message coordinator a wakeup to tell it that a new connection has been assigned. ring is the ring of the message coordinator process. disconnect is as above. It is valid even if status_code (above) is non-zero. Network Login Servers MTB752-03 AAA...333::: SSStttrrruuuccctttuuurrreeesss fffooorrr LLLooogggiiinnn SSSeeerrrvvveeerrr UUUssseeerrr MMMeeessssssaaagggeee The following structure (declared in ls_connection_message.incl.pl1) defines the user_message passed by the login server to a user process when a connection is assigned to or disconnected from that process. If the connection is a "dialed" channel, two messages are sent: one that contains only the common header, for use by convert_dial_message_, and one that contains the complete message, for use when attaching the connection. For other connections, only the second, complete, message is sent. MTB752-03 Network Login Servers A.3.1: LS_CONNECTION_MESSAGE_COMMON The first declaration below describes the common portion of the message. dcl 1 ls_connection_message_common aligned based, 2 version char (8), 2 connection_name char (32), 2 io_module_name char (32); Structure Elements version is the version of the structure. Its value is LS_CONNECTION_MESSAGE_V1. connection_name is the name of the connection. io_module_name is the name of the I/O module to be used in attaching the connection. A.3.2: LS_CONNECTION_MESSAGE The following declaration describes the complete message structure. dcl 1 ls_connection_message aligned based, 2 common like ls_connection_message_common, 2 connection_handle fixed bin (35), 2 reason fixed bin, 2 connection_info_length fixed bin (18) unsigned, 2 mbz bit (36), 2 connection_info (ls_connection_message_info_length refer (ls_connection_message.connection_info_length)) bit (36); Structure Elements common is as described above. connection_handle is the unique identifier of the connection to be used in calls to the network service entries. Network Login Servers MTB752-03 reason indicates whether the reason for this message is a new connection or a disconnection. It may have one of the following values: LS_MSG_CONNECTED (1) LS_MSG_DISCONNECTED (2) connection_info_length is the the length, in words, of the connection_info (below). It is only used if reason (above) is LS_MSG_CONNECTED. connection_info is information specific to the connection, for use by the attaching I/O module. Its format depends on the type of the connection. Notes The message handle associated with the message (as sent via the user_message_ facility) takes one of two forms. For the complete message (including the connection_info) the handle has the value of USER_MESSAGE_LS_CONNECTION_INFO_HANDLE. For the message containing the common header only, the low-order 18 bits contain the value of USER_MESSAGE_LS_CONNECTION_INFO_HANDLE_LOWER_18 and the high-order 54 bits contain a unique identifier. MTB752-03 Network Login Servers AAA...444::: DDDiiiaaalll EEEvvveeennnttt MMMeeessssssaaagggeee The following structure (declared in dial_event_message.incl.pl1) defines the event message sent to a process when a channel dials to it, when a dialed channel is disconnected, or when the answering service responds to a request to act as a dial server. dcl 1 dial_event_message aligned based, 2 description char (6) unaligned, 2 flags unal, 3 devx_msg bit (1), 3 error_msg bit (1), 3 ls_msg bit (1), 3 control bit (15); Structure Elements description is an indicator of the name of the connection, or an error code, depending on the values of the flags (see below). devx_msg if "1"b, indicates that the channel is a normal MCS channel, and the first 36 bits of description (above) contain its device index ("devx"). error_msg if "1"b, indicates that an error occurred, and the first 36 bits of description contain a standard system status code. ls_msg if "1"b, indicates that the wakeup came from a login server, and description contains the unique portion of the handle to be used in reading the user_message that contains information describing the connection (see above). Network Login Servers MTB752-03 control contains one of the following values: JUST_DIALED ("77770"b3) -- the connection has been dialed to the process. JUST_HUNGUP ("77771"b3) -- the connection has been terminated. DIALS_ALLOWED ("77772"b3) -- a request to act as a dial server has been accepted. DIALS_DENIED ("77773"b3) -- a request to act as a dial server has been denied. If control is DIALS_ALLOWED, the rest of the structure is ignored. If control is DIALS_DENIED, the description may contain a status code, but will not contain a connection description. MTB752-03 Network Login Servers AAA...555::: CCCooonnnnnneeeccctttiiiooonnn LLLiiisssttt MMMaaannnaaagggeeerrr The following structure (declared in active_connection_list.incl.pl1) defines the inner-ring system-wide table of network connections that have been assigned to user processes, either by login servers or as a result of dial_out operations. This table is maintained by entries in the connection_list_manager_ subroutine, described in Appendix B. A.5.1: ACTIVE_CONNECTION_LIST dcl 1 active_connection_list aligned based, 2 header, 3 version char (8), 3 lock bit (36) aligned, 3 initializer_of_list bit (36) aligned, 3 no_of_connections fixed bin, 3 first_connection_offset bit (18), 3 last_connection_offset bit (18), 3 header_pad (7) fixed bin (35), 2 hash_table, 3 size fixed bin, 3 entries (actl_hash_table_size refer (active_connection_list.hash_table.size)) bit (18) unaligned, 2 connection_area area (connection_area_size); Structure Elements header describes the header of the table. version is the version of this structure. Its value is the named constant ACTL_VERSION_1. lock is a lock word used to prevent simultaneous updates of the table by more than one process. initializer_of_list is the lock ID of the process which initialized the active_connection_list during this bootload. It is used to allow initialization of the list only once per bootload (presuming that the Initializer process is the one doing the initialization, and that it stays active for the life of the bootload). Network Login Servers MTB752-03 no_of_connections is the number of currently-active connections. first_connection_offset is the offset in the segment of the first active connection. last_connection_offset is the offset in the segment of the last active connection. hash_table is a hash table for finding connections by name. size is the number of entries in the hash table, initialized from connection_list_manager_data_. entries are the individual hash table entries. The hash_index_ subroutine is used to convert a connection name into an index into this table. The entry either contains ""b, in which case there is no corresponding connection entry, or it contains the offset in the segment of the first in a linked list of entries whose names hash to this index. connection_area is the area in which the individual connection entries are allocated. MTB752-03 Network Login Servers A.5.2: ACTIVE_CONNECTION The following structure describes the entries for the individual connections. dcl 1 active_connection aligned based, 2 version char (8), 2 connection_name char (32), 2 service_type char (32), 2 user_process_id bit (36) aligned, | 2 user_group_id char (32), | 2 owner_process_id bit (36) aligned, | 2 owner_group_id char (32), 2 owner_terminate_event_channel fixed bin (71), 2 owner_initializer_id bit (72) aligned, 2 force_disconnect_entry char (64), 2 force_accounting_flush_entry char (64), 2 connection_handle fixed bin (35), 2 prev_connection bit (18) unaligned, 2 next_connection bit (18) unaligned, 2 prev_hash bit (18) unaligned, 2 next_hash bit (18) unaligned, 2 prev_connection_for_user bit (18) unaligned, 2 next_connection_for_user bit (18) unaligned, 2 prev_connection_for_owner bit (18) unaligned, 2 next_connection_for_owner bit (18) unaligned, 2 usage_type fixed bin, 2 flags, 3 delegated bit (1) unaligned, 3 mbz_bits bit (35) unaligned; Structure Elements version is the version of the structure. Its value is the named constant ACT_VERSION_1. connection_name is the name of the connection. service_type is the type of network service used to initiate the connection (e.g., "login_service"). user_process_id is the process ID of the user process to which the connection | is assigned. Network Login Servers MTB752-03 user_group_id | is the process group ID (person.project.tag) of the user | process. | owner_process_id | is the process ID of the process that "owns" the connection | (i.e., has the right to assign it to users). | owner_group_id | is the process group ID (person.project.tag) of the "owning" | process. | owner_terminate_event_channel is the name of the event channel on which the owner is to be sent a wakeup if the user process of the connection terminates. owner_initializer_id is the "handle" used by the owner to communicate with the Initializer about the connection. force_disconnect_entry is the name of the entry to be called to force termination of the connection. (It has to be a name rather than an entry variable because it might have to be used in a process other than the owner.) force_accounting_flush_entry is the name of the entry to be called to flush all accounting information for the connection to the network accounting table. (It has to be a name rather than an entry variable because it might have to be used in a process other than the owner.) connection_handle is the unique identifier of the connection to be used in calling the various network service entries. prev_connection is the offset of the previous entry in the list. next_connection is the offset of the next entry in the list. prev_hash is the offset of the previous entry with the same hash index. next_hash is the offset of the next entry with the same hash index. MTB752-03 Network Login Servers prev_connection_for_user is the offset of the previous entry in the list for a connection with the same user. next_connection_for_user is the offset of the next entry in the list for a connection with the same user. prev_connection_for_owner is the offset of the previous entry in the list for a connection with the same owner. next_connection_for_owner is the offset of the previous entry in the list for a connection with the same owner. usage_type indicates how the user process is using the connection. It can have any of the values declared in ls_usage_types.incl.pl1 (see the description of the login_service_entries.assign_connection entry in Appendix B). delegated indicates that the connection has been assigned to a user other than the owner. Network Login Servers MTB752-03 AAAPPPPPPEEENNNDDDIIIXXX BBB::: MMMOOODDDUUULLLEEE DDDEEESSSCCCRRRIIIPPPTTTIIIOOONNNSSS Name: net_info_ The net_info_ subroutine contains various entries to return information derived from the Networking Information Table (NIT). The only entries of interest for login servers are net_info_$get_field and net_info_$get_service_entries, described below. EEEnnntttrrryyy::: nnneeettt_iiinnnfffooo_$$$gggeeettt_fffiiieeelllddd This entry returns the field of a defined object from the Network Information Table (NIT). Usage dcl net_info_$get_field (char (*), char (*), char (*), char (*), fixed bin (35)) call net_info_$get_field (object_type, object_name, field_name, field_value, code) Arguments object_type is a character string giving the object type which is to be searched for in the NIT by it's name and from which a specified field id is to be returned. (Input) object_name is the name of the specific object from which the information is to be extracted. (Input) field_name is the identification of the field within the object which is to be returned. (Input) field_value is the value of the field. (Output) code is a standard system status code. (Output) _________ _________ net_info_ net_info_ _________ _________ EEEnnntttrrryyy::: nnneeettt_iiinnnfffooo_$$$gggeeettt_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss This entry returns a list of entries to be called to implement a specified service for a specified endpoint. The types of entries depend on the particular service, and the specific entrypoints depend on the particular endpoint. Usage dcl net_info_$get_service_entries entry (char (*), char (*), ptr, fixed bin (35)) call net_info_$get_service_entries (service, endpoint_name, entry_list_ptr, code) Arguments service is the name of the service whose entrypoints are desired. For a login server, the service name is always "login_service". (Input) endpoint_name is the name of the endpoint. (Input) entry_list_ptr is a pointer to a structure in which the entries for performing the service are returned. The format of this structure depends on the service. The structure for the "login_service" service is described under "Notes," below. (Input) code is a standard system status code. (Output) Notes The structure pointed to by entry_list_ptr for a login server is defined in login_service_entries.incl.pl1, and has the following format: _________ _________ net_info_ net_info_ _________ _________ dcl 1 login_service_entries aligned based, 2 version char (8), 2 listen variable entry (char (*), ptr, fixed bin (71), char (*), fixed bin (35), ptr, fixed bin (18) unsigned, char (*) varying, (2) bit (72) aligned, fixed bin, fixed bin (35)), 2 stop_listen variable entry (char (*), fixed bin (35)), 2 assign_connection variable entry (char (*), fixed bin (35), bit (36) aligned, char (32), bit (72) aligned, | fixed bin (71), fixed bin (71), fixed bin, fixed bin (35)), | 2 unassign_connection variable entry (char (*), fixed bin (35), bit (72) aligned, fixed bin (35)), 2 disconnect variable entry (char (*), fixed bin (35), bit (72) aligned, fixed bin (35)), 2 force_disconnect variable entry (char (*), fixed bin (35), fixed bin (35)), 2 validate_user variable entry (ptr, ptr, fixed bin (35)); Structure Elements version is the version of the structure. It should be set to the value of LS_ENTRIES_V1. listen is the entry to be called to listen for incoming connections. stop_listen is the entry to be called to stop listening for incoming connections. assign_connection is the entry to be called to assign a connection to a user process. unassign_connection is the entry to be called to take an assigned connection back from a user process. disconnect is the entry to be called to terminate a connection. force_disconnect is the entry to be called to terminate a connection even if the calling process is not the owner. _________ _________ net_info_ net_info_ _________ _________ validate_user is the entry to be called to ascertain the identity of a user and arrange for the creation of a process. _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ NNNaaammmeee::: lllooogggiiinnn_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss The set of entrypoints described below are used by login to establish, assign, and unassign connections through various networking entities. The actual entrypoints to be used for a particular top-level networking entity are found in the structure returned by net_info_$get_service_entries when called with a first argument of "login_service". EEEnnntttrrryyy::: lllooogggiiinnn_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss...llliiisssttteeennn This entry listens for an incoming connection on a set of endpoints, and returns to its caller when such a connection is established. Usage dcl login_service_entries.listen entry (char (*), ptr, fixed bin (71), char (*), fixed bin (35), ptr, fixed bin (18) unsigned, char (*) varying, (2) bit (72) aligned, fixed bin, fixed bin (35)) | call login_service_entries.listen (endpoint_name, area_ptr, disconnect_event_channel, connection_name, connection_handle, connection_info_ptr, connection_info_length, attach_description, access_class_range, minimum_ring, code) | Arguments endpoint_name is the name of the endpoint on which a connection is to be accepted. (Input) area_ptr is a pointer to an area in which the connection_info (below) is to be allocated. (Input) disconnect_event_channel is the name of the event channel over which a wakeup is to be sent to this process if the connection is disconnected. (Input) _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ connection_name is the name (channel name, etc.) of the specific connection that was actually established. (Output) connection_handle is a unique identifier for the connection, to be used in subsequent calls. (Output) connection_info_ptr is a pointer to information about the connection that is to be made available to the process to which the connection will eventually be assigned. The format of this information depends on the top-level networking entity. If there is no connection information, this argument is set to null. (Output) connection_info_length is the length, in words, of the information pointed to by connection_info_ptr. (Output) attach_description is an attach description to be used in attaching an I/O switch in order to perform input/output operations over the connection. (Output) access_class_range is the range of access classes at which the connection can be used. (Output) | minimum_ring | is the lowest ring in which the connection can run. User | control uses this value to limit the lowest ring into which | users can login over the connection. (Output) code is a standard system status code. If the listen is terminated by a "stop_listen" call, this is set to error_table_$listen_stopped. (Output) Notes The connection information addressed by connection_info_ptr is placed by the login server in a message segment by means of the user_message_ mechanism, so that it will be available to the user process. _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ EEEnnntttrrryyy::: lllooogggiiinnn_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss...ssstttoooppp_llliiisssttteeennn This entry causes an outstanding listen on the endpoint to be aborted. Usage dcl login_service_entries.stop_listen entry (char (*), fixed bin (35)) call login_service_entries.stop_listen (endpoint_name, code) Arguments endpoint_name is the name of the endpoint. (Input) code is a standard system status code. (Output) _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ EEEnnntttrrryyy::: lllooogggiiinnn_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss...aaassssssiiigggnnn_cccooonnnnnneeeccctttiiiooonnn This entry assigns the connection to a user process. Usage dcl login_service_entries.assign_connection entry (char (*), | fixed bin (35), bit (36) aligned, char (32), bit (72) | aligned, fixed bin (71), fixed bin (71), fixed bin, fixed bin (35)) call login_service_entries.assign_connection (connection_name, | connection_handle, process_id, group_id, initializer_handle, | disconnect_event_channel, terminate_event_channel, usage_type, code) Arguments connection_name is the name of the connection, as returned by the listen entrypoint, above. (Input) connection_handle is the connection_handle returned by the listen entry (above). (Input) process_id is the process ID of the process to which the connection is to | be assigned. (Input) | group_id | is the group ID of the process to which the connection is to | be assigned. (Input) initializer_handle is the handle used by the owner to communicate with the Initializer about the connection. It is used in notifying the Initializer of disconnection if the owner process is found to have been terminated. (Input) disconnect_event_channel is the name of the event channel over which the login server is to be sent a wakeup when the connection is closed. (Input) _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ terminate_event_channel is the name of the event channel over which the login server is to be sent a wakeup if the user process terminates. (Input) usage_type is an indicator of the way the connection is being used by the user process (e.g., login channel, dialed channel, etc.). The possible values are described under "Notes", below. (Input) code is a standard system status code. (Output) Notes The possible values for usage_type are listed below. They are declared in the include file ls_usage_types.incl.pl1. LS_LOGIN_USAGE (1) -- primary login connection LS_DIAL_USAGE (2) -- assigned to dial server LS_DIAL_OUT_USAGE (3) -- user did dial_out operation LS_SLAVE_ATTACH_USAGE (4) -- user did slave attachment LS_MC_USAGE (5) -- message coordinator channel _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ EEEnnntttrrryyy::: lllooogggiiinnn_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss...uuunnnaaassssssiiigggnnn_cccooonnnnnneeeccctttiiiooonnn This entry takes a connection away from a user process. Usage dcl login_service_entries.unassign_connection entry (char (*), fixed bin (35), bit (72) aligned, fixed bin (35)) call login_service_entries.unassign_connection (connection_name, connection_handle, wakeup_message, code) Arguments connection_name is the name of the connection, as above. (Input) connection_handle, is the connection handle, as above. (Input) wakeup_message is an event message which may optionally be sent to the user process. (Output) code is a standard system status code. (Output) _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ EEEnnntttrrryyy::: lllooogggiiinnn_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss...dddiiissscccooonnnnnneeecccttt This entry terminates a connection. Usage dcl login_service_entries.disconnect entry (char (*), fixed bin (35), bit (72) aligned, code) call login_service_entries.disconnect (connection_name, connection_handle, wakeup_message, code) Arguments connection_name is the name of the connection, as above. (Input) connection_handle is the connection handle, as above. (Input) wakeup_message is an event message which may optionally be sent to the user process. (Output) code is a standard system status code. (Output) _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ EEEnnntttrrryyy::: lllooogggiiinnn_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss...fffooorrrccceee_dddiiissscccooonnnnnneeecccttt This entry terminates a connection even if the calling process is not the owner. This entry is used during login server initialization if the owner process no longer exists. Usage dcl login_service_entries.force_disconnect entry (char (*), fixed bin (35), code) call login_service_entries.force_disconnect (connection_name, connection_handle, code) Arguments connection_name is the name of the connection, as above. (Input) connection_handle is the connection handle, as above. (Input) code is a standard system status code. (Output) _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ EEEnnntttrrryyy::: lllooogggiiinnn_ssseeerrrvvviiiccceee_eeennntttrrriiieeesss...vvvaaallliiidddaaattteee_uuussseeerrr This entry conducts the preaccess dialogue with the user and communicates with the Initializer process to find or create the user process to which a connection should be assigned. Usage dcl login_service_entries.validate_user entry ( ptr, ptr, ptr, * fixed bin (35)) call login_service_entries.validate_user ( ls_cp_info_ptr, * option_structure_ptr, ls_process_info_ptr, code) Arguments ls_cp_info_ptr is a pointer to a structure containing information about the connection control point (including information about the connection itself). It is described under "Notes", below. (Input) option_structure_ptr is a pointer to a structure containing options to be used by the validate_user entry. It is described under "Notes", below. (Input) ls_process_info_ptr is a pointer to a structure in which information about the process to be assigned to the connection is placed. This structure is only filled in if code (below) is 0. It is described under "Notes", below. (Input) code is a standard system status code. (Output) Notes The ls_cp_info_ptr points to a structure of the following form, declared in ls_cp_info.incl.pl1. Most of the elements in this structure are used internally by the login server software; only those fields of interest to the validate_user entry are described here. _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ dcl 1 ls_cp_info aligned based (ls_cp_info_ptr), 2 version char (8), 2 connection_desc_ptr pointer, 2 error_info_ptr pointer, 2 error_event_channel fixed bin (71), 2 connection_gone_event_channel fixed bin (71), 2 answer_table_ptr pointer, 2 installation_parms_ptr pointer, 2 flags, 3 debug_mode bit (1) unaligned, 3 fault_recursion bit (1) unaligned, 3 trace bit (1) unaligned, 3 no_io_switches bit (1) unaligned, 3 pad bit (32) unaligned; Structure Elements version is the version of the structure. It should have the value of LS_CP_INFO_V1. connection_desc_ptr is a pointer to a structure describing the connection. This structure is described below. answer_table_ptr is a pointer to the system answer table. installation_parms_ptr is a pointer to the system installation_parms structure. debug_mode if "1"b, indicates that the login server is running in a debugging environment. trace if "1"b, indicates that trace messages may be written to a log. no_io_switches if "1"b, indicates that no separate I/O switches are associated with this control point. The element ls_cp_info.connection_desc_ptr points to the following structure, declared in ls_connection_desc.incl.pl1: _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ dcl 1 ls_connection_desc aligned based, 2 version char (8), 2 name char (32), 2 endpoint_name char (32), 2 io_module char (32), 2 disconnect_event_channel fixed bin (71), 2 terminate_event_channel fixed bin (71), 2 service_entries_ptr ptr, 2 connection_info_ptr ptr, 2 connection_info_len fixed bin (18), 2 connection_handle fixed bin (35), 2 process_info_ptr ptr, 2 access_class_range (1) bit (72); Structure Elements version is the version of the structure. It should be the value of LS_CONNECTION_DESC_V1. name is the name of the connection. endpoint_name is the name of the endpoint through which the connection was made. io_module is the name of the I/O module through which the connection is attached. disconnect_event_channel is the name of the event channel over which the login server is sent a wakeup when the connection is closed. terminate_event_channel is the name of the event channel over which the login server is sent a wakeup when the user process terminates. service_entries_ptr is a pointer to the login_service_entries structure described under net_info_$get_service_entries. connection_info_ptr is a pointer to the connection-specific information, as described under the listen entry. _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ connection_info_len is the length (in words) of the connection-specific information, as described under the listen entry. connection_handle is the unique identifier of the connection. process_info_ptr is a pointer to a structure containing information about the user process, as described below. access_class_range is the range of access classes at which the connection may be used. The option_structure_ptr points to a structure of the following form, declared in ls_process_info.incl.pl1: dcl 1 ls_validate_options aligned based (ls_validate_options_ptr), 2 version char (8), 2 flags, 3 brief bit (1) unaligned, 3 not_first bit (1) unaligned, 3 mbz bit (34) unaligned; Structure Elements version is the version of the structure. It should be set to the value of LS_VALIDATE_OPTIONS_V1. brief if "1"b, indicates that the -brief control argument was supplied to the login request or the logout command. not_first if "1"b, indicates that this is not the first call to validate_user for this connection, e.g., a previous process was terminated by logout -hold. The ls_process_info_ptr (and ls_connection_desc.process_info_ptr, above) points to a structure of the following form, declared in ls_process_info.incl.pl1: _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ dcl 1 ls_process_info aligned based (ls_process_info_ptr), 2 version char (8), 2 process_group_id char (32), 2 start_event_channel fixed bin (71), 2 authorization bit (72), 2 initializer_handle bit (72), 2 server_handle bit (72), 2 process_id bit (36), 2 initial_ring fixed bin, 2 usage_type fixed bin, 2 flags, 3 fatal_error bit (1) unaligned, 3 terminal_info_set bit (1) unaligned, 3 pad bit (34) unaligned, 2 terminal_type char (32), 2 terminal_id char (4); Structure Elements version is the version of the structure. It should be set to the value of LS_PROCESS_INFO_V1. process_group_id is the process group ID (Person.Project.tag) of the user process. start_event_channel is the name of the event channel over which a wakeup is to be sent to the user process once the connection has been assigned to it. authorization is the authorization of the user process. initializer_handle is the handle used when sending request messages to the Initializer concerning this connection. server_handle is the handle used when reading response messages from the Initializer concerning this connection. process_id is the process ID of the user process. _____________________ _____________________ login_service_entries login_service_entries _____________________ _____________________ initial_ring is the initial ring of the user process. usage_type is the usage type of the connection, as described under the assign_connection entry. fatal_error if "1"b, indicates that the user process has been terminated by a fatal error. It is used during the termination sequence when awaiting a new_proc response. terminal_info_set if "1"b, indicates that the terminal_type and terminal_info fields (below) are valid. terminal_type is the terminal type associated with the connection. terminal_id is the terminal ID associated with the connection. ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ NNNaaammmeee::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_ The connection_list_manager_ module maintains the inner-ring list of active connections. The entries in this module are used to add, delete, update, and obtain information about entries in the active connection list. Most of these entries (apart from the "get_*" entries) are usually called in the inner ring by network-specific modules, but all are available through one of the gates priv_connection_list_ or hpriv_connection_list_. The gate entries and their associated target entries are listed at the end of this module description. These entries may be viewed as being divided into two classes: privileged and highly privileged. Privileged entries are available through priv_connection_list_, and can be used on connections of which the calling process is the owner. Highly privileged entries are available through hpriv_connection_list_, and allow the caller to operate on any connection entry. In general, the presence of the string "hpriv_", or "priv_" at the beginning of the name of an entry indicates the level of privilege associated with it. ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$aaadddddd This entry adds a connection to the list. The connection will be assigned to the calling process as the "owner", and to the specified user process as the "user". This entry is privileged. Usage dcl connection_list_manager_$add entry (char (*), fixed bin (35), char (*), char (*), char (*), fixed bin, bit (18), fixed bin (35)) call connection_list_manager_$add (connection_name, connection_handle, network_service_type, force_disconnect_entry, force_accounting_flush_entry, usage_type, connection_offset, code) Arguments connection_name is the name of the connection, as returned by login_service_entries.listen. (Input) connection_handle is the unique identifier of the connection, as returned by login_service_entries.listen. (Input) network_service_type is the name of the service provided by the top-level networking entity for the connection. (Input) force_disconnect_entry is the name of the force_disconnect entrypoint returned by net_info_$get_service_entries. Note that this must be a name and not an entry variable because it may have to be used by a process other than the caller. (Input) force_accounting_flush_entry is the name of the entrypoint which can be used to force accounting for the particular process to be made. Note that this must be a name and not an entry variable because it may have to be used by a process other than the caller. (Input) ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ usage_type is an indicator of the way in which the connection is going to be used, as described for login_service_entries.assign_connection (above). (Input) connection_offset is the offset in the connection list at which the specified connection has been added. This can be used by other entries to find and/or delete the specific connection with comparative efficiency. (Output) code is a standard system status code. (Output) Notes The force_disconnect_entry and force_accounting_flush_entry fields are character strings defining an entrypoint to do the assigned task. The target entrypoint is expected to be declared as Usage dcl module$entrypoint entry (char (*), fixed bin (35)) call module$entrypoint (connection_name, code) Arguments connection_name is the name of the connection to pass to the entry. (Input) code is a standard system status code. (Output) ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$ppprrriiivvv_ccchhhaaannngggeee_uuussseeerrr This entry is used to change the user process in the table entry. The calling process must be the owner. Usage dcl connection_list_manager_$priv_change_user entry (bit (18), bit (36) aligned, char (*), fixed bin, fixed bin (71), bit (72) aligned, fixed bin (35))) call connection_list_manager_$priv_change_user (connection_offset, user_process_id, user_group_id, usage_type, terminate_event_channel, initializer_handle, code) Arguments connection_offset is the offset of the connection in the list, as returned by the add entry, above. (Input) user_process_id is the process ID of the user process to which the connection is assigned. (Input) user_group_id is the process group ID (person.project.tag) of the user process to which the connection is assigned. (Input) terminate_event_channel is the name of an event channel over which a wakeup can be sent to the owner process if the user process terminates. (Input) initializer_handle is the handle used in requests from the login server to the Initializer concerning this connection. (Input) usage_type indicates the way the connection is to be used by the process, i.e., login, dial, etc. Its possible values are declared in ls_usage_types.incl.pl1; see the description of login_service_entries.assign_connection for the possible values. (Input) ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ code is a standard system status code. (Output) ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$ppprrriiivvv_dddeeellleeettteee_nnnaaammmeee This entry deletes the connection with the specified name from the active connection list. The calling process must be the owner of the connection. Usage dcl connection_list_manager_$priv_delete_name entry (char (*), fixed bin (35)) call connection_list_manager_$priv_delete_name (connection_name, code) Arguments connection_name is the name of the connection, as above. (Input) code is a standard system status code. (Output) EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$hhhppprrriiivvv_dddeeellleeettteee_nnnaaammmeee This entry deletes the connection with the specified name from the active connection list, no matter what process is the owner. The calling sequence is the same as for the priv_delete_name entry, above. ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$ppprrriiivvv_dddeeellleeettteee_oooffffffssseeettt This entry deletes the connection with the specified offset from the active connection list. The calling process must be the owner of the connection. Usage dcl connection_list_manager_$priv_delete_offset entry (bit (18), fixed bin (35)) call connection_list_manager_$priv_delete_offset (connection_offset, code) Arguments connection_offset is the connection offset as returned by the add entry, above. (Input) code is a standard system status code. (Output) EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$hhhppprrriiivvv_dddeeellleeettteee_oooffffffssseeettt This entry deletes the connection with the specified offset from the active connection list, no matter what process is the owner. The calling sequence is the same as for the priv_delete_offset entry, above. ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$ppprrriiivvv_dddeeellleeettteee_aaallllll_fffooorrr_uuussseeerrr This entry deletes all the connections for a specified user process for which the calling process is the owner. Usage dcl connection_list_manager_$priv_delete_all_for_user entry (bit (36) aligned, fixed bin (35)) call connection_list_manager_$priv_delete_all_for_user (user_process_id, code) Arguments user_process_id is the process ID of the user process whose connections are to be deleted. (Input) code is a standard system status code. (Output) EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$hhhppprrriiivvv_dddeeellleeettteee_aaallllll_fffooorrr_uuussseeerrr This entry deletes all the connections for a specified user process, no matter what process is the owner. It has the same calling sequence as priv_delete_all_for_user (above). ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$ppprrriiivvv_gggeeettt_nnnaaammmeee This entry returns information about the connection with the specified name; the calling process must be the owner of the connection. Usage dcl connection_list_manager_$priv_get_name entry (char (*), ptr, fixed bin (35)) call connection_list_manager_$priv_get_name (connection_name, connection_info_ptr, code) Arguments connection_name is the name of the connection about which information is to be returned. (Input) connection_info_ptr is a pointer to the active_connection_info structure described in "Notes", below. (Input) code is a standard system status code. (Output) Notes The connection_info_ptr points to the following structure (declared in active_connection_info.incl.pl1): ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ dcl 1 active_connection_info aligned based, 2 version char (8), 2 connection_name char (32), 2 network_service_type char (32), 2 user_process_id bit (36), 2 user_group_id char (32), 2 owner_process_id bit (36), | 2 owners_group_id char (32), 2 terminate_event_channel fixed bin (71), 2 owner_initializer_handle bit (72), 2 force_disconnect_entry char (64), 2 force_accounting_flush_entry char (64), 2 connection_handle fixed bin (35), 2 usage_type fixed bin, | 2 flags, | 3 delegated bit (1) unaligned, | 3 mbz_bits bit (35) unaligned, 2 offset bit (18); Structure Elements version is the version of the structure. It must be filled in by the caller with the value ACT_INFO_VERSION_1. connection_name is the name of the connection. network_service_type is the name of the service provided by the top-level networking entity for the connection. user_process_id is the process ID of the user process to which the connection is assigned. user_group_id is the process group ID (person.project.tag) of the user process. owner_process_id | is the process ID of the owning process. | | owner_group_id | is the process group ID (person.project.tag) of the "owning" | process. ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ terminate_event_channel is the event channel over which the owner may be sent a wakeup if the user process is terminated. owner_initializer_handle is the handle used by the owner to communicate with the Initializer about the connection. It is used to notify the Initializer if the connection is terminated and the owner process no longer exists. force_disconnect_entry is the name of the entrypoint to be called to force termination of the connection. It is used during login server initialization if neither the user process nor the owner process exists. force_accounting_flush_entry is the name of the entrypoint to be called to force all current accounting data for the connection to be added to the network accounting table. It is used during during process termination to make sure the latest accounting data is available for the connection. connection_handle is the unique identifier of the connection, as described under connection_list_manager_$add, above. usage_type specifies way in which the connection is used by the process, as described under connection_list_manager_$add, above. | | delegated | indicates that the connection has been assigned to a user | other than the owner. | offset is the offset of the connection in the list. EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$hhhppprrriiivvv_gggeeettt_nnnaaammmeee This entry returns information about the connection with the specified name, no matter what process is the owner. The calling sequence is the same as for the priv_get_name entry, above. ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$ppprrriiivvv_gggeeettt_nnneeexxxttt_uuussseeerrr This entry returns information about the next connection after the one at a specified offset assigned to the specified user process, for which the calling process is the owner. Usage dcl connection_list_manager_$priv_get_next_user entry (bit (36) aligned, bit (18), ptr, fixed bin (35)) call connection_list_manager_$priv_get_next_user (user_process_id, connection_offset, connection_info_ptr, code) Arguments user_process_id is the process ID of the user process. (Input) connection_offset is the offset in the list of the connection relative to which the next connection is to be found. If it is "0"b, information about the first connection for the specified user is returned. (Input) connection_info_ptr is a pointer to the active_connection_info structure, as above. (Input) code is a standard system status code. (Output) EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$hhhppprrriiivvv_gggeeettt_nnneeexxxttt_uuussseeerrr This entry returns information about the next connection after the one at a specified offset assigned to the specified user process, no matter what process is the owner. The calling sequence is the same as for the priv_get_next_user entry, above. ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$ppprrriiivvv_gggeeettt_nnneeexxxttt_ooowwwnnneeerrr This entry returns information about the next connection after the one at a specified offset for which the calling process is the owner. Usage dcl connection_list_manager_$priv_get_next_owner entry (bit (18), ptr, fixed bin (35)) call connection_list_manager_$priv_get_next_owner (connection_offset, connection_info_ptr, code) Arguments connection_offset is the offset in the list of the connection relative to which the next connection is to be found. If it is "0"b, information about the first connection for which the calling process is the owner is returned. (Input) connection_info_ptr is a pointer to the active_connection_info structure, as above. (Input) code is a standard system status code. (Output) ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$hhhppprrriiivvv_gggeeettt_nnneeexxxttt_ooowwwnnneeerrr This entry returns information about the next connection after the one at a specified offset for which a specified process is the owner. Usage dcl connection_list_manager_$hpriv_get_next_owner entry (bit (18), bit (36), ptr, fixed bin (35)) call connection_list_manager_$hpriv_get_next_owner (connection_offset, owner_process_id, connection_info_ptr, code) Arguments connection_offset is the offset in the list of the connection relative to which the next connection is to be found. If it is "0"b, information about the first connection for the specified owner is returned. (Input) owner_process_id is the process ID of the process for which connections are to be found. (Input) connection_info_ptr is a pointer to the active_connection_info structure, as above. (Input) code is a standard system status code. (Output) ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$hhhppprrriiivvv_gggeeettt_nnneeexxxttt This entry returns information about the next connection after the one at a specified offset. Usage dcl connection_list_manager_$hpriv_get_next entry (bit (18), ptr, fixed bin (35)) call connection_list_manager_$hpriv_get_next (connection_offset, connection_info_ptr, code) Arguments connection_offset is the offset in the list of the connection relative to which the next connection is to be found. If it is "0"b, information about the first connection in the list is returned. (Input) connection_info_ptr is a pointer to the active_connection_info structure, as above. (Input) code is a standard system status code. (Output) ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$ppprrriiivvv_rrreeemmmooovvveee_uuussseeerrr This entry is called to make the specified process cease to be the user of the specified connection. No new user process is assigned by this entry. The calling process must be the owner of the connection. Usage dcl connection_list_manager_$priv_remove_user entry (bit (18), bit (36), fixed bin (35)) call connection_list_manager_$priv_remove_user (connection_offset, user_process_id, code) Arguments connection_offset is the offset of the connection in the list. (Input) user_process_id is the process ID of the expected current user of the connection. If the user process ID in the connection entry does not match this argument, no action is taken, and a nonzero status code is returned. (Input) code is a standard system status code. (Output) ________________________ ________________________ connection_list_manager_ connection_list_manager_ ________________________ ________________________ EEEnnntttrrryyy::: cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_mmmaaannnaaagggeeerrr_$$$iiinnniiittt This entry initializes the active connection list segment. It is called once per bootload. It will create the segment if it does not already exist. Usage dcl connection_list_manager_$init entry (fixed bin (35)) call connection_list_manager_$init (code) Arguments code is a standard system status code. (Output) _____________________ _____________________ priv_connection_list_ priv_connection_list_ _____________________ _____________________ NNNaaammmeee::: ppprrriiivvv_cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_ This gate contains privileged entries to connection_list_manager_. In general, they can be used only by login server processes, and only to manipulate entries for connections of which the calling process is the owner. The entries contained in priv_connection_list_ are listed below, along with their target entries in connection_list_manager_. Gate entry Target add add change_user priv_change_user delete_name priv_delete_name delete_offset priv_delete_offset delete_all_for_user priv_delete_all_for_user get_name priv_get_name get_next_user priv_get_next_user get_next_owner priv_get_next_owner remove_user priv_remove_user ______________________ ______________________ hpriv_connection_list_ hpriv_connection_list_ ______________________ ______________________ NNNaaammmeee::: hhhppprrriiivvv_cccooonnnnnneeeccctttiiiooonnn_llliiisssttt_ This gate contains highly privileged entries to connection_list_manager_. They can be used only by highly privileged processes (such as the initializer), to manipulate any connection entry. The entries contained in hpriv_connection_list_ are listed below, along with their target entries in connection_list_manager_. Gate entry Target delete_name hpriv_delete_name delete_offset hpriv_delete_offset delete_all_for_user hpriv_delete_all_for_user get_name hpriv_get_name get_next hpriv_get_next get_next_owner hpriv_get_next_owner get_next_user hpriv_get_next_user init init _______________________ _______________________ display_connection_list display_connection_list _______________________ _______________________ | Name: display_connection_list | | | SYNTAX AS A COMMAND: | | display_connection_list {-control_arg} | | | FUNCTION: Prints the information in the connection list. Used | by network administrators to inspect the current entries in the | list. | | | CONTROL ARGUMENTS: | | -brief, -bf | prints brief information in tabular form. (Default) | | -long, -lg | prints all items of information, one item per line. The | default is -brief. | | | EXAMPLES: | | | The following are two samples of the command's output: | | ! display_connection_list | | Conn Name Service Type Usage Type Conn Handle User | dsa.MUL1.0002 DSA_NETWORK_TYPE None 3670030 DSA_DSAC.Daemon | dsa.MUL1.0003 DSA_NETWORK_TYPE None 3932175 DSA_DSAC.Daemon | dsa.MUL1.0004 DSA_NETWORK_TYPE None 4194320 DSA_DSAC.Daemon | dsa.MUL1.0005 DSA_NETWORK_TYPE None 4456465 Login_Server.Daemon | dsa.MUL1.0006 DSA_NETWORK_TYPE None 4718610 DSA_DSAC.Daemon | dsa.MUL1.0007 DSA_NETWORK_TYPE None 4980755 DSA_DSAC.Daemon | dsa.MUL1.0010 DSA_NETWORK_TYPE Login 5767188 Frink.Multics | dsa.MUL1.0011 DSA_NETWORK_TYPE Login 6029333 Martinson.SysAdmin | dsa.MUL1.0012 DSA_NETWORK_TYPE Login 6291469 Brunelle.SysMaint | dsa.MUL1.0013 DSA_NETWORK_TYPE None 6553622 Login_Server.Daemon | | display_connection_list -long | | Connection name = dsa.MUL1.0002 | Network type = DSA_NETWORK_TYPE | User process ID = 005100634062 | User group ID = DSA_DSAC.Daemon | Owner process ID = 005100634062 _______________________ _______________________ display_connection_list display_connection_list _______________________ _______________________ Owner group ID = Login_Server.Daemon | Connection handle = 3670030 | Usage type = None (0) | Terminate event channel = 0 | Owner Initializer handle = 000000000000000000000000 | Force disconnect entry = dsa_session_admin_$terminate_force | Force accounting flush entry = dsa_session_admin_$accounting_force| OFFSET = 000200 | | ... | | Connection name = dsa.MUL1.0013 | Network type = DSA_NETWORK_TYPE | User process ID = 005000634061 | User group ID = Login_Server.Daemon | Owner process ID = 005000634061 | Owner group ID = Login_Server.Daemon | Connection handle = 6553622 | Usage type = None (0) | Terminate event channel = 0 | Owner Initializer handle = 000000000000000000000000 | Force disconnect entry = dsa_session_admin_$terminate_force | Force accounting flush entry = dsa_session_admin_$accounting_force| OFFSET = 001320 |