MULTICS TECHNICAL BULLETIN MTB746-03 To: MTB Distribution From: Edward C. Brunelle Date: April 3, 1987 Subject: Network accounting software ----------------------------------- This MTB describes new software and Answering Service changes to support charging processes for DSA usage. Central to these changes is a new subroutine network_accounting_ and a table >sc1>network_accounting_table, managed via vfile_, that records current process use of DSA channels. This revision replaces the $charge_bytes and $charge_packets entrypoints with a general purpose $charge_channel_use entrypoint which also has a different calling sequence. It also deletes the entrypoints $dump_table and $close_process_entries. In addition, it restructures the network accounting record. There are no change bars in this revision since it is a major rewrite. ----------------------------------- Comments should be sent to the author: via Multics Forum: >udd>DSA>meetings>dsaimp.forum via Multics Mail: Brunelle -at System-M via Telephone: (HVN) 862-3595, or (602) 862-3595 _________________________________________________________________ Multics project internal documentation; not to be reproduced or distributed outside the Multics project without permission of the Director of MDC. MTB746-03 Network accounting CONTENTS Page 1: Introduction . . . . . . . . . . . . . . . . . . . . . 1 2: Network accounting table . . . . . . . . . . . . . . . 2 2.1: Network Accounting Table record format . . . . . . . 3 2.2: Session Control access of NAT . . . . . . . . . . . . 5 2.3: Answering Service access of NAT . . . . . . . . . . . 6 3: Scenarios for NAT usage . . . . . . . . . . . . . . . . 7 3.1: Definitions . . . . . . . . . . . . . . . . . . . . . 7 3.2: Starting conditions . . . . . . . . . . . . . . . . . 7 3.3: Scenario - Logging in . . . . . . . . . . . . . . . . 8 3.4: Scenario - Process Termination . . . . . . . . . . . 10 Appendix A: Documentation . . . . . . . . . . . . . . . . 13 network_accounting_ . . . . . . . . . . . . . . . . . . 14 network_accounting_$charge_channel_use . . . . . . . 14 network_accounting_$clear_table . . . . . . . . . . . 16 network_accounting_$dump_table . . . . . . . . . . . 17 network_accounting_$get_path . . . . . . . . . . . . 19 network_accounting_$get_process_total . . . . . . . . 20 network_accounting_$read_and_reset_table . . . . . . 21 network_accounting_$test . . . . . . . . . . . . . . 22 network_accounting_gate_ . . . . . . . . . . . . . . . . 23 display_net_acct_table . . . . . . . . . . . . . . . . . 24 Network accounting MTB746-03 1: INTRODUCTION Network channels are managed resources that cost money to operate. This MTB describes how processes will be charged for their use of network channels (specifically DSA channels): bytes sent, packets sent, and connect time. Rates for these charges are handled the same way as rates for tape and disk device use. The charge per thousand bytes, per thousand packets, and per connect hour are stored as device rates for each rate structure in installation_parms. The new devices defined for this purpose are dsa_kbyt, dsa_kpkt, and dsa_hour. Use of DSA resources by processes is recorded in a system-wide Network Accounting Table (NAT) managed in an inner ring by entry points in the subroutine network_accounting_ called directly in user processes by inner ring Session Control, and via the network_accounting_gate_ by the Answering Service. Specifically, Session Control calls an entrypoint to post usage figures to the table and the Answering Service calls other entry points to charge processes for their accumulated usage. This mechanism is for use only by non-MCS channels. For Tymnet and other ring 0 connections, MCS already manages its own tables that the Answering Service accesses via existing metering gates. MTB746-03 Network accounting 2: NETWORK ACCOUNTING TABLE The NAT is named network_accounting_table and resides by default in the directory specified by sys_info$system_control_dir. This directory can be changed for test purposes by calling network_accounting_gate_$test. The NAT is managed as a keyed vfile_ with fixed-length records. Each record corresponds to one DSA connection. The key is the process ID, session handle and network type. There may be one or more consecutive connections on a DSA session during the time the session is in existence. It is expected that only active processes will occupy the table. When Session Control closes a connection, network_accounting_ will turn on a flag that marks the NAT record for later deletion. Each process opens the NAT once and keeps it open for the duration of the process. The NAT is opened using the "-share" and "-stationary" options of vfile_. NAT records are updated using the following steps: (1) Do a "record_status" control order, asking to lock the record. (2) Update the record in place using the record_ptr from step (1). This works because the record is locked and the record itself remains constant in size during it's existence. (3) Do a second "record_status", asking to unlock the record. Each NAT record belongs to only one process. Therefore, at most one process will be updating the record while the Answering Service is reading it. The above locking strategy prevents contention between the owning process and the Answering Service. Network accounting MTB746-03 2.1: Network Accounting Table record format The format of a NAT record is declared in network_account_record.incl.pl1. It is defined as follows: dcl 1 network_account_record aligned based, 2 version char (8), 2 key, 3 process_id bit (36) aligned, 3 session_handle fixed bin (35), 3 network_id fixed bin unaligned, 2 switches unaligned, 3 delete_switch bit (1) unaligned, 3 unassigned_switch bit (1) unaligned, 3 mbz bit (16) unaligned, 2 connected_time fixed bin (71), 2 update_time fixed bin (71), 2 byte_count fixed bin (35), 2 packet_count fixed bin (35). Structure Elements version is the version number of the structure and should be set to NET_ACCT_RECORD_VERSION_1. key is an internal copy of the key which uniquely identifies a NAT record. key.process_id identifies the process using the network connection. key.session_handle identifies the network session for this connection. key.network_id identifies the network type for the connection. Valid identifiers are found in network_ids.incl.pl1. For DSA, this value would be DSA_NET. delete_switch if "1"b, shows the connection is no longer valid and the record may be deleted after the data is extracted. Set to "0"b when the record is created. MTB746-03 Network accounting unassigned_switch identifies if the owner of the record still has the channel assigned to it. It is initially set to "0"b. It is used to determine which of the following two time fields is to be used to determine the cumulative connect time for charging. If "0"b, shows the connection is currently active and belongs to the owner of this record. The update_time field is to be subtracted from the current time to determine the connect time. If "1"b, shows connection currently reassigned to another user. The connected_time field contains the cumulative microseconds to be charged to the owner of this record while it was still assigned to the owner. The update_time field shows the time the connection was reassigned. connected_time is the amount of connect time in microseconds to be charged to the owner of the record when it was assigned to the owner. It is initially set to 0. It only has meaning when the unassigned_switch is set to "1"b. update_time is the file system clock value for either the time the record was created or the last time the accounting update ran, whichever is later. It only has meaning when the unassigned_switch is set to "0"b. byte_count is the number of bytes sent over the connection since either the record was created or the last time accounting update ran. packet_count is the number of packets sent over the connection since either the record was created or the last time accounting update ran. Network accounting MTB746-03 2.2: Session Control access of NAT The module dsa_sc_sm_ in bound_dsa_sc_ accesses the NAT directly through calls to network_accounting_$charge_channel_use in order to add usage figures to the sessions's byte_count and packet_count for the current process using the session. It will do this in four circumstances: o When the session is initially created in order to start the connect time clock running; o When the session's usage figures for packets or bytes processed exceeds predefined limits; These limits are currently 100 packets and 4096 bytes. o When requested to by the process owning the session via calls to the login server entries "assign_connection" and "unassign_connection". o When the connection is terminated. MTB746-03 Network accounting 2.3: Answering Service access of NAT The Answering Service accesses the NAT indirectly through network_accounting_gate_. It does this at three separate times: o When the system is booted via $clear_table entry to start with a clean NAT. o Every 15 minutes (or as often as specified by update_time in installation_parms) as part of the Accounting Update performed by act_ctl_$update. It will access the NAT via the $read_and_reset_table entry. o When destroying a process, to get the last remaining network charges that were entered in the NAT since the last Accounting Update. This will be done through the $get_process_total entry. The job of the Answering Service is to read usage information from the NAT, calculate dollar charges by looking at the rate structure for the network devices, and post the dollar amounts to the process' PDT entry. It does this using code similar to that used by device_acct_$update (another program called by act_ctl_$update) to post tape and disk charges. The amount of connect time that Answering Service will charge for a session is the time since the most recent of: the first call to $charge_channel_use for that session. the latest call to $read_and_reset_table that returns information for that session. Each of these operations updates the NAT record's update_time field to the current clock time. Network accounting MTB746-03 3: SCENARIOS FOR NAT USAGE The following scenarios for a typical DSA session attempt to illustrate when and why network_accounting_ is called and the state of the NAT record as a result of the calls. This discussion will deal only with a direct connection through a DSA line, creation of a session and creation of one or more user processes on the session. It is assumed that the user is familiar with MTB751 - "Multics Networking Architecture Answering Service Changes" and MTB752 - "Network Login Servers". 3.1: Definitions SC - Session control. AS - Answering Service. That code which runs in the Initializer process and controls the Identification and Authentication (I&A) of users accessing the system. It also includes the software which incorporates the accounting for system usage. LS - Login Server. The process which listens for requests for communications channel access to Multics over specified Endpoints. Endpoints are defined for various services, such as "login" or "file transfer" and are network specific. The login server performs the initial dialogue with the user. NA - Network Accounting. The software which runs in both the user and Initializer processes to account for network usage of the system. 3.2: Starting conditions Our starting state o SC listening to the DN8 waiting for a session connection request. o A LS blocked and "listening" on a particular SC endpoint, in this case dsa.MUL1.LOGIN. It does this through the "start_login_service" command of the login server. Part of data passed to SC when the LS started listening is the processid of the login server. In addition, it sets the user processid to "0"b. o The following variables are of significance. They are remembered by Session Control and their current contents are passed to Network Accounting whenever $charge_channel_use is called. MTB746-03 Network accounting a) Owner_PID - process ID of the login server since it "owns" the session b) User_PID - process ID of the user when login occurs. Prior to login of the user, this value will be "0"b. c) Session_ID - the unique ID assigned by SC to the session. d) Session_state - what is happening to the session at this time. 3.3: Scenario - Logging in 1) DSA receives a request from outside to connect to the Multics system. SC - sets the session_id to a unique value which will be used to identify the session until it is destroyed. It sets session_state to CREATE_SESSION, Owner_PID to the LS process ID (since it is running in the Login_Server Daemon), and calls NA at the $charge_channel_use entry. It will then return the Session_ID to the LS. NA - will create a NAT record to capture the beginning of the session. It will use the the session_id, Owner_PID and network_id as the key for the NAT record since the session_state is CREATE_SESSION. In addition, it will set update_time to the current time and set the unassigned_switch to "0"b and connected_time to zero. 2) LS starts the login dialogue with the user. SC - If enough dialogue occurs with the user to cause SC to exceed it's packet/byte thresholds, it will call $charge_channel_use with session_state set to UPDATE_CONNECTION. If the session terminates, SC will call $charge_channel_use with final figures and session_state equal DESTROY_SESSION to show this session has terminated. NA - If Network Accounting was called due to either of the above circumstances, the NAT record being updated will be that of the Owner_PID since the User_PID is still "0"b. If the session_state is DESTROY_SESSION, the delete_switch will be turned on in the record. 3) The user logs in. This occurs through LS having a dialogue with the user and passing that information to AS for I&A. Network accounting MTB746-03 LS - Just prior to turning the session over to the user, LS will call SC through the assign_connection entrypoint passing it the processid for the user which will be using the session from this point on. SC - Will store the new processid as User_PID and will set session_state to ASSIGN_CONNECTION. It will then call NA with the current byte and packet counts. NA - The session_state being ASSIGN_CONNECTION causes NA to take two actions: a) "suspend" the record for Owner_PID. It will set the unassigned_switch to "1"b and connected_time to current time - update_time. It will then set update_time to the current time. It will add the byte and packet count figures passed in the call to those in the Owner_PID record. b) create a new record for the User_PID. It will set update_time to the current time and set the unassigned_switch to "0"b and connected_time to zero. In addition, the byte and packet counts for the new record will be set to zero. 4) The user is running and the LS process is blocked waiting for the user to terminate the connection.. SC - will be keeping track of the packets and bytes being transmitted. When it goes over internal threshold values, SC will set session_state to UPDATE_CONNECTION and call NA. NA - Since the User_PID is non-zero, the usage information will be charged to the user connection. 5) It is possible that at any time during the above sequence, the Initializer may make an accounting update to gather all accounting data for all users on the system. The Initializer will call NA at the $read_and_reset_table entrypoint. From the data returned, it will update all network usage in the PDT entries of currently running users. MTB746-03 Network accounting NA - will allocate an array of records large enough to contain all of the records in the NAT. To copy the data from the NAT record to the array record, NA will use the following algorithm: array.byte_count = record.byte_count array.packet_count = record.packet_count record.byte_count, record.packet = 0 if record.unassigned_switch = "0" then array.connect_time = (clock () - record.update_time) + record.connected_time record.update_time = clock () record.connected_time = 0 else array.connect_time = record.connected_time record.connected_time = 0 3.4: Scenario - Process Termination Process termination may be any one of the following: logout, new_proc or fatal process error. 1) The user types one of the process termination requests. AS - The Initializer process receives the termination request from the user. The Initializer will call dpg_$dpg_ to start process destruction. This in turn will call dial_ctl_$dial_broom which will call uc_cleanup_network_dials_ to get information about any connections dialed to the process. It does this by calling hpriv_connection_list_$get_next_user to get all connections dialed in to the process being destroyed. For each active connection the Initializer, it will call the entrypoint referenced in the force_accounting_update_entry of the connection list to cause the current accounting data to be flushed to the NAT for that connection. In addition, a "termination_response" message will also be sent to the login server for the dialed in connection to cause the connection to removed by the login server. SC - when called through the force_accounting_update entry, will call NA with the current usage figures and a SESSION_STATE of UPDATE_CONNECTION for each dialed connection. 2) The Initializer will then complete the destruction of the current process and charge for the network usage by calling Network accounting MTB746-03 act_ctl_$dp for the process. act_ctl_$dp will in turn call hpriv_connection_list_$get_next_user with the process ID of the current process and call the force_network_account_update entry so accounting is current. act_ctl_$dp then calls NA at the $get_process_total entrypoint and add the totals to the user's PDT entry. NA - will go through the NAT accumulating network usage data for all records matching the given process ID. It will return an array of structures with each structure corresponding to a unique network_id. It will also delete any records with the delete_switch on. 3) The Initializer sends a "termination_response" message to the login server for the current process. LS - will call SC through the unassign_connection entrypoint. SC - will call $charge_channel_use with the final usage charges for the connection and session_state set to UNASSIGN_CONNECTION. When NA returns, SC will set it's copy of User_PID to "0"b. Because of the call to the force_accounting_update_entry made in steps 1 and/or 2 above, the byte and packet count figures being charged should be zeros. NA - The session_state being UNASSIGN_CONNECTION causes NA to take two actions: a) add byte and packet charges to the record for the User_PID and turn the delete switch on in the record. In addition, compute the connected_time = clock () - update_time, update_time = clock (), and set unassigned_switch to "1"b. b) "unsuspend" the record for Owner_PID. It will set the unassigned_switch to "0"b and update_time to clock (). 4) If the process termination is of the type causing the session to be ended (logout, logout -bf or a fatal process error which exceeds the fatal process error count), the following actions will occur. LS - call SC through the $unassign_connection entrypoint to tell session control that the session is being destroyed. When SC returns, the login server will then kill the control point for the session. MTB746-03 Network accounting SC - will call $charge_channel_use using the Owner_PID and session_state equal to DESTROY_SESSION to show that session all over. NA - will update the record for Owner_PID and turn the delete_switch on for the record. In addition, compute the connected_time = clock () - update_time, update_time = clock (), and set unassigned_switch to "1"b. 5) If the process termination is a new_proc, LS will go blocked awaiting a "new_proc" response from the Initializer and basically restart at Step 3 of the login scenario with the new processid for the new process. 6) if the process termination is a logout -hd, the login server will basically restart at Step 2 of the login scenario. Network accounting MTB746-03 APPENDIX A: DOCUMENTATION The following pages document the entrypoints defined to access and process entries in the network accounting table. They are primarily for use by the Initializer process. ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ Name: network_accounting_ Entry points in the inner ring module network_accounting_ manage the Network Accounting Table (NAT) that records active processes' usage of network connections. This table is a inner ring vfile_ named network_accounting_table, residing by default in the directory specified by sys_info$system_control_dir. Only one entrypoint (charge_channel_usage) is meant to be called directly. All other entrypoints are called through network_accounting_gate_. Entry: network_accounting_$charge_channel_use This entry point, intended to be called directly by Session Control in the inner ring, increments the bytes and packets fields of the NAT record for a specific network connection and user process combination. Byte and packet counts recorded in the NAT are eventually posted as dollar charges to the user's account. The NAT record for the connection will be created if none exists. When the connection is terminated, the record's delete_switch is turned on causing it to be deleted after it is next read by the Answering Service. Usage dcl network_accounting_$charge_channel_use entry (ptr, fixed bin (35)); call network_accounting_$charge_channel_use (network_channel_use_ptr, code); Arguments network_channel_use_ptr points to the network_channel_use structure defining user and usage info for the channel. (Input) code is a standard system status code. (Output) ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ Notes The following is the definition of the network_channel_use structure which is passed to network_accounting_$charge_channel_use. It is defined in network_channel_use.incl.pl1 dcl 1 network_channel_use aligned based, 2 version char!(8), 2 network_id fixed!bin, 2 session_handle fixed!bin!(35), 2 owner_pid bit!(36) aligned, 2 user_pid bit!(36) aligned, 2 session_state fixed bin, 2 packet_count fixed!bin!(17), 2 byte_count fixed!bin!(17); Structure Elements version is the version of the structure. Must be set to CHANNEL_USE_INFO_VERSION_1. network_id is the identification of the network type of the session. Valid identifiers are found in net_event_message.incl.pl1. For DSA, this value would be DSA_NETWORK_TYPE. session_handle is the unique ID assigned to the current session by DSA session control. owner_pid is the process ID of the owner of the channel (normally Login_Server.Daemon). user_pid is the process ID of the user of the channel. If there is no current user for the channel, this will be set to "0"b; ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ session_state is the state of the current session. Applicable values and their meanings are CREATE_SESSION (1) !!!!!- creating the session ASSIGN_CONNECTION (2) !!- assigning the session to new user UPDATE_CONNECTION (3) !!- update data to current user UNASSIGN_CONNECTION (4) - unassigning the session from this user DESTROY_SESSION (5) !!!!- terminating the session packet_count is the number of packets to be added to those currently charged to the session. byte_count is the number of bytes to be added to those currently charged to the session. Entry: network_accounting_$clear_table This entry point initializes the NAT for a new bootload of Multics. It deletes all NAT entries even if charges are outstanding. It is used to clean up any entries left by a crash or software failure. If the NAT doesn't exist, it will create it in the inner ring, set access so all users can write to it and create a dummy record to initialize the file. Usage dcl network_accounting_$clear_table entry (char (*), fixed bin (35)); call network_accounting_$clear_table (error_message, code); Arguments error_message is text describing the error when the code argument is nonzero. A string of 128 characters should be sufficient to contain any message which would be returned. (Output) code is a standard system error status code. (Output) ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ Entry: network_accounting_$dump_table This entry point returns an allocated array containing the information in the NAT. It is intended for administrative use. Usage dcl network_accounting_$dump_table entry (ptr, ptr, char (*), fixed bin (35)); call network_accounting_$dump_table (area_ptr, network_account_array_ptr, error_message, code); Arguments area_ptr points to an area in which to allocate the array. (Input) network_account_array_ptr points to the allocated structure network_account_array, declared in the include file network_account_array.incl.pl1. (Output) error_message is text describing the error when the code argument is nonzero. A string of 128 characters should be sufficient to contain any message which would be returned. (Output) code is a standard system status code. (Output) Notes The following defines the array of structures returned to the $dump_table and $read_and_reset_table entrypoints of network_accounting_. dcl 1 network_account_array aligned based (network_account_array_ptr), 2 count fixed!bin, 2 record (network_account_array_bound refer (network_account_array.count)) aligned like network_account_data; ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ Structure Elements count is the number of records in the array. record is a record containing the data found in the NAT for each connection currently active. The following defines the structure containing the data for each connection returned by the $dump_table and $read_and_reset_table entrypoints of network_accounting_. dcl 1 network_account_data aligned based (network_account_data_ptr), 2 version char!(8), 2 key, 3 process_id bit!(36) aligned, 3 session_handle fixed!bin!(35), 3 network_id fixed!bin unaligned, 2 switches unaligned, 3 delete_sw bit!(1) unaligned, 3 unassigned_sw bit!(1) unaligned, 3 mbz bit!(16) unaligned, 2 connect_time fixed!bin!(35), 2 byte_count fixed!bin!(35), 2 packet_count fixed!bin!(35); Structure Elements version is the version of the structure. Must be set to NET_ACCT_DATA_VERSION_1. key uniquely identifies a NAT record. key.process_id identifies the process using the DSA connection. key.session_handle identifies the DSA session for this connection. ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ key.network_id identifies the network type for the connection. Valid identifiers are found in net_event_message.incl.pl1. For DSA, this value would be DSA_NETWORK_TYPE. delete_sw defines whether the record is for a connection which has been completed and the record can be deleted. unassigned_sw defines whether the record is for a user which has assigned the connection to another user. connect_time is the incremental number of chargable seconds which has passed since the last time $read_and_reset_table was called. This is the amount of connect time which would be charged to the user if act_ctl_$update was called now. byte_count is the incremental number of bytes processed on the connection since the last time $read_and_reset_table was called. This is the number of bytes which would be charged to the user if act_ctl_$update was called now. packet_count is the incremental number of packets processed on the connection since the last time $read_and_reset_table was called. This is the number of packets which would be charged to the user if act_ctl_$update was called now. Entry: network_accounting_$get_path This entry point returns the current (internal static) pathname of the directory in which the NAT resides. This directory can be changed by calling network_accounting_$test. The initial value for the directory is sys_info$system_control_dir. Usage dcl network_accounting_$get_path entry returns (char (168)); directory_path = network_accounting_$get_path (); ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ Arguments directory_path is the pathname of the NAT's parent directory. (Output) Entry: network_accounting_$get_process_total This entry point returns the total bytes, total packets, and connect time used by all of a process' network connections since the last time $read_and_reset_table was called. It is used by Answering Service to get final charges for a process before destroying it. Before returning, it will delete any records used to generate the return data which have their delete switch on. Usage dcl network_accounting_$get_process_total entry (bit (36) aligned, ptr, ptr, char (*), fixed bin (35)); call network_accounting_$get_process_total (process_id, area_ptr, network_account_array_ptr, error_message, code); Arguments process_id identifies the user process for which data will be returned. (Input) area_ptr points to an area in which to allocate the array. (Input) network_account_array_ptr points to the allocated structure network_account_array, declared in the include file network_account_array.incl.pl1. See the $dump_table entrypoint for the description of the returned structure. (Output) error_message is text describing the error when the code argument is nonzero. A string of 128 characters should be sufficient to contain any message which would be returned. (Output) ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ code is a standard system status code. (Output) Notes All data in the NAT for the given process ID will be accumulated with the array being made up of individual structures defined for each network ID found. Entry: network_accounting_$read_and_reset_table This entry point returns an allocated array containing the information in the NAT. Before returning, it zeroes each NAT record's byte count and packet count and sets the update_time field to the current clock time to begin a new period of connect time. Usage dcl network_accounting_$read_and_reset_table entry (ptr, ptr, char (*), fixed bin (35)); call network_accounting_$read_and_reset_table (area_ptr, network_account_array_ptr, error_message, code); Arguments area_ptr points to an area in which to allocate the array. (Input) network_account_array_ptr points to the allocated structure network_account_array, declared in the include file network_account_array.incl.pl1. See the $dump_table entrypoint for the description of the returned structure. (Output) error_message is text describing the error when the code argument is nonzero. (Output) code is a standard system status code. (Output) ___________________ ___________________ network_accounting_ network_accounting_ ___________________ ___________________ Entry: network_accounting_$test Called by test versions of the Answering Service and other test programs, this entry point changes (in internal static) the parent directory of the NAT. It allows a test system to use a different NAT. The NAT's name is always "network_accounting_table". Usage dcl network_accounting_$test entry (char (*)); call network_accounting_$test (directory_path); Arguments directory_path is the pathname of the NAT's parent directory. (Input) ________________________ ________________________ network_accounting_gate_ network_accounting_gate_ ________________________ ________________________ Name: network_accounting_gate_ This privileged gate allows the Answering Service and administrators, running in ring 4, to access inner ring network accounting information. It is merely a transfer vector to the entrypoint in network_accounting_ with the same name. Gate entry Target read_and_reset_table read_and_reset_table dump_table dump_table clear_table clear_table get_process_total get_process_total test test get_path get_path ______________________ ______________________ display_net_acct_table display_net_acct_table ______________________ ______________________ Name: display_net_acct_table SYNTAX AS A COMMAND: display_net_acct_table {-control_arg} FUNCTION: Prints the information in the Network Account Table. Used by DSA administrators to check on the behavior of network accounting. 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_net_acct_table Displaying Network Account Table Pathname: >system_control_dir>network_accounting_table Total number of entries = 8 NETWORK CONNECT CHANNEL NAME TYPE BYTES PACKETS SECS USER dsa.MUL1.0001 2 4130 0 100 Nelson.SysLib dsa.MUL1.0010 2 0 409 99 Nelson.SysLib X dsa.MUL1.0100 2 0 0 800 D006.DSAtest dsa.MUL1.0014 2 0 0 800 D032.DSAtest X dsa.MUL1.0011 2 2270 0 10 Cribb.Multics D dsa.MUL1.0247 2 620 85 800 Login_Server.Daemon dsa.MUL1.0002 2 1550 21 27 Barker.Multics dsa.MUL1.0997 2 0 368 247 Barker.AS_Test display_net_acct_table -long Dumping Network Account Table Pathname: >system_control_dir>network_accounting_table Total number of entries = 8 ______________________ ______________________ display_net_acct_table display_net_acct_table ______________________ ______________________ Process id: 131672024772 Connection handle: 65003782 Connection Name: dsa.MUL1.0247 Network type: DSA (2) User: Login_Server.Daemon Bytes since last zeroed: 620 Packets since last zeroed: 85 Connect secs since last zeroed: 800 Delete switch: off Unassigned switch: on Process id: 131647023436 Connection handle: 65003920 Connection Name: dsa.MUL1.0011 Network type: DSA (2) User: Cribb.Multics Bytes since last zeroed: 2270 Packets since last zeroed: 0 Connect secs since last zeroed: 10 Delete switch: on Unassigned switch: off ... The X prefix in the short listing denotes an entry whose delete switch is on, ie. one that belongs to a session that has been closed. This entry will disappear after the next time the Answering Service reads and uses the information it contains. The D prefix in the short listing denotes an entry in which the connection has been reassigned to another user.