/* diag.h : ipx/spx diagnostics header file */ /* Copyright (C) 1992 Indian Institute of Technology, Bombay Written by V. Srinivas and Vishwas Joglekar, Dept of Computer Science and Engineering. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #define MAX_NODE_INFO 100 #define MAX_DIAG_NETWORKS 50 #define MAX_SPX_PKT_SIZE 512 /* diagnostic request types */ #define RETURN_IPX_SPX_VERSION 0 #define RETURN_IPX_STATISTICS 1 #define RETURN_SPX_STATISTICS 2 #define RETURN_CONN_ID_TABLE 3 #define RETURN_SERVER_NAME_TABLE 4 #define RETURN_PRIMARY_SERVER_INFO 5 #define RETURN_SHELL_VERSION 6 #define RETURN_SHELL_DRIVER_CONFIG 0 #define RETURN_SHELL_DRIVER_DIAG_STAT 1 /* shell/router/server components */ #define IPX__SPX 0 #define BRIDGE_DRIVER 1 #define SHELL_DRIVER 2 #define NWSHELL 3 #define VAP_SHELL 4 #define EXTERNAL_ROUTER 5 #define INTERNAL_ROUTER 6 #define NON_DEDICATED_FS 7 #define STAR_68000 8 /*************** */ #define DIAG_TX_INTERVAL 20 #define DIAG_RETRIES 5 /* status of nodes */ #define INACTIVE 0 #define ACTIVE 1 #define UNKNOWN 2 /* for diagnostic component types */ #define DIAG_ROUTER 1 #define DIAG_NODE 2 #define DIAG_FILE_SERVER 3 /* IPX/SPX Configuration request packet */ typedef struct{ IPX_HEADER header; BYTE exclusion_addr_cnt; BYTE exclusion_addr[80][6]; }CONFIG_REQ_PKT; /* IPX/SPX Configuration response packet */ typedef struct{ IPX_HEADER header; BYTE major_version; /* major version of the diagnostics */ BYTE minor_version; /* minor version of the diagnostics */ BYTE SPX_Diagnostic_sock[2]; BYTE component_cnt; /* number of components in the packet */ BYTE components[9]; }CONFIG_RESP_PKT; /* SPX header */ typedef struct{ IPX_HEADER header; BYTE conn_control; BYTE data_stream_type; BYTE src_conn_id[2]; BYTE des_conn_id[2]; BYTE seq_no[2]; BYTE ack_no[2]; BYTE alloc_no[2]; /* Credit */ }SPX_HEADER; /* IPX/SPX version, response pkt */ typedef struct{ SPX_HEADER header; BYTE completion_code; /* 0 successful, ffh failure */ BYTE interval_marker[4]; /* lo-hi , clock ticks */ BYTE ipx_ver[2]; /* major, minor */ BYTE spx_ver[2]; /* major, minor */ }IPX_SPX_VERSION; /* diagnostic request pkt for ipx/spx component calls */ typedef struct{ SPX_HEADER header; BYTE component_pos; BYTE diag_req_type; }DIAG_REQ_PKT; typedef struct{ SPX_HEADER header; BYTE data[MAX_SPX_PKT_SIZE]; }SPX_PKT; /* shell driver diagnostics packet */ typedef struct{ SPX_HEADER header; BYTE completion_code; BYTE interval_marker[4]; BYTE reserved; BYTE statistics_ver[2]; BYTE total_tx_pkts[4]; /* total pkts transmitted */ BYTE total_rx_pkts[4]; /* total pkts received */ BYTE no_ecb_avail_cnt[2]; BYTE pkt_tx_big_cnt[4]; /* pkt too big to be transmitted */ BYTE pkt_tx_small_cnt[4]; /* pkt too small to be transmitted */ BYTE pkt_rx_overflow_cnt[2]; /* pkt recv buffer overflow cnt */ BYTE pkt_rx_big_cnt[2]; /* too big pkts received */ BYTE pkt_rx_small_cnt[2]; /* too small pkts received */ BYTE pkt_tx_err_cnt[2]; /* pkt transmission error cnt */ BYTE pkt_rx_err_cnt[2]; /* pkt recv error cnt */ BYTE retry_tx_cnt[2]; /* no of retries during transmission */ BYTE checksum_errs[2]; /* no of checksum errors */ BYTE no_of_custom_vars[2]; BYTE custom_vars[8]; BYTE text[50]; }SHELL_DRIVER_DIAG_STAT_PKT; /* server information */ typedef struct{ BYTE server_used; BYTE order_no; BYTE net_id[4]; BYTE node_id[6]; BYTE sock[2]; BYTE recv_timeout[2]; BYTE router_id[6]; BYTE seq_no; BYTE conn_id; BYTE conn_ok; BYTE max_timeout[2]; BYTE reserved[5]; }SERVER_INFO; /* connection information for all attached servers */ typedef struct{ SPX_HEADER header; BYTE completion_code; BYTE interval_marker[4]; SERVER_INFO server[8]; }CONN_ID_TABLE_PKT; /* os version of the node */ typedef struct{ SPX_HEADER header; BYTE completion_code; BYTE interval_marker[4]; BYTE machine_id; BYTE os_info[40]; }OS_VERSION_PKT; /* primary server information pkt */ typedef struct{ SPX_HEADER header; BYTE completion_code; BYTE interval_marker[4]; BYTE server_pos_no; /* index into the server name table */ }PRIMARY_SERVER_INFO_PKT; /* server name table */ typedef struct{ SPX_HEADER header; BYTE completion_code; BYTE interval_marker[4]; BYTE server_name_tbl[8][48]; }SERVER_NAME_TBL_PKT; /* shell driver configuration packet */ typedef struct{ SPX_HEADER header; BYTE completion_code; BYTE interval_marker[4]; BYTE reserved1[4]; BYTE node_id[6]; BYTE reserved2; BYTE nodeid_type; BYTE max_data_size[2]; BYTE reserved3[2]; BYTE lan_hw_id; BYTE transport_time[2]; BYTE reserved4; BYTE ether_type[2]; /* ethernet type, blue book or 802.3 */ BYTE major_ver; BYTE minor_ver; BYTE misc_flags; BYTE select_config; BYTE lan_desc[80]; BYTE io_addr1[2]; BYTE decode_range1[2]; BYTE io_addr2[2]; BYTE decode_range2[2]; BYTE mem_addr1[3]; BYTE mdecode_range1[2]; BYTE mem_addr2[3]; BYTE mdecode_range2[2]; BYTE irq_use1; BYTE irq1; BYTE irq_use2; BYTE irq2; BYTE dma_use1; BYTE dma1; BYTE dma_use2; BYTE dma2; BYTE micro_channel_flags; BYTE reserved5; BYTE text_desc[80]; }SHELL_DRIVER_CONFIG_PKT; /* node information */ struct node_information{ WORD diag_pkts_recvd; /* no of diag configuration response pkts recvd */ WORD clock_ticks; /* if this is zero then the node is down */ struct time down_time; /* time when the node went down */ WORD status; /* whether node is up or down */ INTERNET_ADDRESS node_addr; BYTE name[13]; /* name of the node */ BYTE interval_marker[2]; BYTE spx_socket[2]; BYTE ipx_spx_ver[2]; BYTE component_cnt; BYTE components[9]; BYTE diag_ver[2]; BYTE statistics_ver[2]; struct node_information *next, *prev; struct manage_info *man; }; /* Network management information about a node */ struct manage_info{ BYTE primary_server[48]; INTERNET_ADDRESS serv_addr; /* primary server address */ BYTE user_info[48]; BYTE machine_id; BYTE conn_id; BYTE serv_timeout; BYTE seq_no; BYTE conn_ok; BYTE router_id; /* intermediate rout_id */ /* Driver info */ BYTE transport_time[2]; /* no of ticks */ BYTE ETHER_TYPE[2]; BYTE ether_ver[2]; BYTE misc_flags; BYTE lan_desc[80]; BYTE text_desc[80]; BYTE max_data_size; BYTE total_tx_pkts[4]; BYTE total_rx_pkts[4]; BYTE no_ecb_avail_cnt[2]; BYTE pkt_rx_overflow_int[2]; BYTE pkt_rx_too_small_int[2]; BYTE retries_tx_pkt[2]; BYTE check_sum_errs_int[2]; BYTE pkt_tx_errs[2]; BYTE pkt_rx_errs[2]; }; typedef struct node_information NODE_INFO; struct node_info_ptr{ NODE_INFO *head, *tail; /* head and tail of the bucket */ }; /* information about all the nodes on a given network */ struct nodes_on_net{ WORD node_count; /* no of nodes on the network */ struct node_info_ptr node_info_table[MAX_PRIME]; }; /* network information table contains ptrs to the node information table for all the nodes in that network */ struct network_info{ BYTE net_id[4]; BYTE name[9]; struct network_info *next,*prev; struct nodes_on_net node_info; }; extern struct network_info *network_info_table[MAX_PRIME]; #define NULLNWPTR (struct network_info *) 0 #define NULLNPTR (struct node_information *) 0