Internetworking Over NBMA Cliff X. Wang Internet-Draft Colin Verrilli IBM Corporation James Luciani Bay Networks Definitions of Managed Objects for ATMARP dependent Server Cache Synchronization Protocol Using SMIv2 Status of this Memo This document is an Internet Draft. Internet Drafts are working documents of the Internet Engineering Task Force (IETF), its Areas, and its Working Groups. Note that other groups may also distribute working documents as Internet Drafts. Internet Drafts are draft documents valid for a maximum of six months. Internet Drafts may be updated, replaced, or obsoleted by other documents at any time. It is not appropriate to use Internet Drafts as reference material or to cite them other than as a "working draft" or "work in progress." To view the entire list of current Internet-Drafts, please check the "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow Directories on ftp.is.co.za (Africa), ftp.nordu.net (Europe), munnari.oz.au (Pacific Rim), ftp.ietf.org (US East Coast), or ftp.isi.edu (US West Coast). Abstract This document defines the ATMARP[2], [3] protocol dependent part Management Information Base (MIB) for supporting Server Cache Synchronization Protocol (SCSP)[1]. SCSP is used to solve the generalized cache synchronization/cache-replication problem for distributed protocol entities. In a client/server paradigm, SCSP synchronizes caches (or a portion of the caches) of a set of server entities of a particular protocol which are bound to a Server Group. The MIB module specified in this document follows the Structure of Management Information (SMI) for the Simple Network Management Protocol (SNMP) Version 2. SCSP MIB. Expires Apr. 10th, 1999 [Page 1] Internet Draft Oct. 10th, 1998 1. Introduction This memo defines an experimental portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. In particular, it describes managed objects for hosts or routers that use Server Cache Synchronization Protocol (SCSP) to synchronize caches among the distributed ATMARP servers in a server group. MIB objects are defined to enable management of the Local server (LS) and the cache synchronization/replication between LS and its associated Directly Connected Servers (DCS). 2. The SNMPV2 Network Management Framework IETF RFC 1157 [5], RFC 1213 [6], and RFC 1902 [7] form the three major components of the SNMPv2 Network Management Framework. o RFC 1902 specifies the SMI, which is the mechanisms used for describing and naming objects for the purpose of management. o RFC 1213 defines the second version of the Management Information Base (MIB-II), which is the core set of managed objects for the TCP/IP based Internets. o RFC 1157 and/or RFC 1905 [8] specifies the protocol operations for SNMPV2, with respect to the to the sending and receiving of SNMP managed information. In addition, RFC 1903 [9] defines Textual conventions for SNMPv2 and RFC 1904 [10] specifies the conformance statements for SNMPv2. The SNMPv2 Framework allows new objects to be defined for the purpose of experimentation and evaluation. 2.1 Object Definition Managed objects are accessed via a virtual information store, termed the Management Information Base or MIB. Objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) defined in the SMI. In particular, each object type is named by an OBJECT IDENTIFIER, an administratively assigned name. The object type together with an object instance serves to uniquely identify a specific instantiation of the object. For human convenience, we often use a textual string, termed the descriptor, to refer to the object type. SCSP MIB. Expires Apr. 10th, 1999 [Page 2] Internet Draft Oct. 10th, 1998 3. Overview SCSP contains three sub protocols: the "Hello" protocol, the "Cache Alignment" Protocol, and the "Cache State Update" protocol. The Hello protocol is used to monitor the status of the connections between the Local Server and its Directly Connected Servers. The "Cache Alignment" protocol is used to synchronize the cache of an initializing LS with the cache of its DCSs. The "Cache State Update" protocol is used to update the state of cache entries once the servers are synchronized. Synchronization is performed on a per Server Group / Protocol basis. That is, a separate instance of the protocol is run for each SG in the box. Therefore, the SGID/PID pair uniquely identifies an instance of SCSP. Furthermore, A separate instance of the "Hello" and "Cache Alignment" protocol are maintained for each DCS of the Server Group. State machines exist to execute the protocol independently for each DCS session. For more information, refer to [1]. SCSP is used to synchronize distributed servers running a client/server protocol. Currently SCSP support for Classic IP (RFC2225 )[11], MARS (RFC 2022)[12], and NHRP (RFC 2332)[13] has been defined in the protocol dependent part of SCSP [2], [3], [4]. This MIB provides specific information for management of SCSP when it applies to synchronize distributed ATMARP servers. This MIB MUST be used along with the protcol independent SCSP MIB. This ATMARP protocol dependent SCSP MIB carries management objects related to SCSP application to ATMARP, such as ATMARP server's IP address, server's ATM address, etc. The MIB is divided into server group table, local server table, peer server table, and HFSM table. 4. Definition of the SCSP ATMARP protocol dependent MIB SCSPATMARP-MIB DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, experimental, Integer32, IpAddress, Counter32 FROM SNMPv2-SMI TEXTUAL-CONVENTION, RowStatus FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF AtmAddr, AtmConnKind FROM ATM-TC-MIB SCSP MIB. Expires Apr. 10th, 1999 [Page 3] Internet Draft Oct. 10th, 1998 scspServerGroupID, scspServerGroupPID, scspLSID, scspDCSID, ScspHFSMStateType, SCSPVPIInteger,SCSPVCIInteger FROM SCSP-MIB ; scspAtmarpMIB MODULE-IDENTITY LAST-UPDATED "9808020000Z" -- October 10, 1998 ORGANIZATION "IETF Internetworking Over NBMA Working Group (ion)" CONTACT-INFO "Jim Luciani (jliciani@BayNetworks.com Bay Networks Cliff X. Wang (cliff_wang@vnet.ibm.com) Colin Verrilli (verrilli@vnet.ibm.com) IBM Corp." DESCRIPTION "This module defines a portion of the management information base (MIB) for managing Server Cache Synchronizatio protocol applied to ATMARP servers." ::= { experimental 2002 } -- ***************************************************** -- Top Level structure of the SCSP MIB -- ***************************************************** scspAtmarpObjects OBJECT IDENTIFIER ::= { scspAtmarpMIB 1} scspAtmarpNotifications OBJECT IDENTIFIER ::= { scspAtmarpMIB 2} scspAtmarpConformance OBJECT IDENTIFIER ::= { scspAtmarpMIB 3} -- ***************************************************** -- SCSP MIB Objects -- ***************************************************** -- ***************************************************** -- SCSP atmarp Server Group Objects -- ***************************************************** scspAtmarpServerGroupTable OBJECT-TYPE SYNTAX SEQUENCE OF ScspAtmarpServerGroupEntry MAX-ACCESS not-accessible STATUS current SCSP MIB. Expires Apr. 10th, 1999 [Page 4] Internet Draft Oct. 10th, 1998 DESCRIPTION "The objects defined in this table are used to for the management of SCSP server groups with application to IP over ATM operation (Classic IP). These objects SHOULD be used along with the protocol independent part objects to support the management of the SCSP protocol applied to synchronizing the atmarp servers in a LIS. There is one entry in this table for each server group. In the case of IP over ATM, each server group corresponds to a Logical IP Subnet." ::= { scspAtmarpObjects 1} scspAtmarpServerGroupEntry OBJECT-TYPE SYNTAX ScspAtmarpServerGroupEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Information about SCSP server group running IP over ATM operation. This table is indexed by scspServerGroupID and scspServerGroupPID. The two indeces point to a corresponding entry in the scspServerGroupTable." INDEX {scspServerGroupID, scspServerGroupPID} ::= { scspAtmarpServerGroupTable 1} ScspAtmarpServerGroupEntry ::= SEQUENCE { scspAtmarpServerGroupNetMask IpAddress, scspAtmarpServerGroupSubnetAddr IpAddress, scspAtmarpServerGroupRowStatus RowStatus } scspAtmarpServerGroupNetMask OBJECT-TYPE SYNTAX IpAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The subnet mask associated with this Server Group." ::= { scspAtmarpServerGroupEntry 1 } scspAtmarpServerGroupSubnetAddr OBJECT-TYPE SYNTAX IpAddress MAX-ACCESS read-only STATUS current DESCRIPTION SCSP MIB. Expires Apr. 10th, 1999 [Page 5] Internet Draft Oct. 10th, 1998 "The IP subnet address associated with this Server Group." ::= { scspAtmarpServerGroupEntry 2 } scspAtmarpServerGroupRowStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "This object allows Atmarp Server Group Table entries to be created and deleted from the scspAtmarpServerGroupTable. Note that scspAtmarpServerGroupTable entry creation and deletion is coupled with scspServerGroupTable entry creation and deletion. A scspAtmarpServerGroupTable entry cannot be created until its corresponding scspServerGroupTable entry is created. When a scspServerGroupTable entry is deleted, it also removes the corresponding scspAtmarpServerGroupTable entry." REFERENCE "RFC 1903, 'Textual Conventions for version 2 of the Simple Network Management Protocol (SNMPv2).'" ::= { scspAtmarpServerGroupEntry 3 } -- **************************************************** -- SCSP atmarp Local Server Objects -- **************************************************** scspAtmarpLSTable OBJECT-TYPE SYNTAX SEQUENCE OF ScspAtmarpLSEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "The objects defined in this table are used to for the management of the Atmarp Local server in a SCSP server group for IP over ATM operation. These objects SHOULD be used along with the protocol independent part objects to support the management of the SCSP protocol applied to synchronizing the IP over ATM servers." ::= { scspAtmarpObjects 2} scspAtmarpLSEntry OBJECT-TYPE SYNTAX ScspAtmarpLSEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION SCSP MIB. Expires Apr. 10th, 1999 [Page 6] Internet Draft Oct. 10th, 1998 "Information about Atmarp Local Server in a SCSP server group. This table is indexed by scspServerGroupID, scspServerGroupPID, and scspLSID. The three indeces point to a corresponding entry in the scspLSTable." INDEX {scspServerGroupID, scspServerGroupPID, scspLSID } ::= { scspAtmarpLSTable 1} ScspAtmarpLSEntry ::= SEQUENCE { scspAtmarpLSLSIPAddr IpAddress, scspAtmarpLSLSAtmAddr AtmAddr, scspAtmarpLSRowStatus RowStatus } scspAtmarpLSLSIPAddr OBJECT-TYPE SYNTAX IpAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The IP address of the Atmarp Local Server. Since an Atmarp server does not have to be assigned an IP address, this object is optional." ::= { scspAtmarpLSEntry 1 } scspAtmarpLSLSAtmAddr OBJECT-TYPE SYNTAX AtmAddr MAX-ACCESS read-only STATUS current DESCRIPTION "The ATM address of the Atmarp Local Server." ::= { scspAtmarpLSEntry 2 } scspAtmarpLSRowStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "This object allows Atmarp Local Server Table entries to be created and deleted from the scspAtmarpLSTable. Note that scspAtmarpLSTable entry creation and deletion SCSP MIB. Expires Apr. 10th, 1999 [Page 7] Internet Draft Oct. 10th, 1998 is coupled with scspLSTable entry creation and deletion. A scspAtmarpLSTable entry cannot be created until its corresponding scspLSTable entry is created. When a scspLSTable entry is deleted, it also removes the corresponding scspAtmarpLSTable entry." ::= { scspAtmarpLSEntry 3 } -- *************************************************** -- SCSP Atmarp Peer Objects -- *************************************************** scspAtmarpPeerTable OBJECT-TYPE SYNTAX SEQUENCE OF ScspAtmarpPeerEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "The objects defined in this table are used to for the management of the ATMARP sever peers." ::= { scspAtmarpObjects 3} scspAtmarpPeerEntry OBJECT-TYPE SYNTAX ScspAtmarpPeerEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Information about each peer ATMARP server participated in the scsp Server group. The table is indexed by scspServerGroupID, scspServerGroupPID, and scspAtmarpPeerIndex." INDEX { scspServerGroupID, scspServerGroupPID, scspAtmarpPeerIndex } ::= { scspAtmarpPeerTable 1} ScspAtmarpPeerEntry ::= SEQUENCE { scspAtmarpPeerIndex Integer32, scspAtmarpPeerIPAddr IpAddress, scspAtmarpPeerAtmAddr AtmAddr, scspAtmarpPeerVCType AtmConnKind, scspAtmarpPeerVPI SCSPVPIInteger, scspAtmarpPeerVCI SCSPVCIInteger, scspAtmarpPeerDCSID OCTET STRING(SIZE(0..63)), scspAtmarpPeerRowStatus RowStatus SCSP MIB. Expires Apr. 10th, 1999 [Page 8] Internet Draft Oct. 10th, 1998 } scspAtmarpPeerIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The table index of the peer Atmarp server table." ::= { scspAtmarpPeerEntry 1 } scspAtmarpPeerIPAddr OBJECT-TYPE SYNTAX IpAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The IP address of the peer Atmarp server. Since an Atmarp server does not have to be assigned an IP address, this object is optional." ::= { scspAtmarpPeerEntry 2 } scspAtmarpPeerAtmAddr OBJECT-TYPE SYNTAX AtmAddr MAX-ACCESS read-only STATUS current DESCRIPTION "The ATM address of the Peer. If SVC is used between LS and Peer, Peer's ATM address should be valid. However, if PVC is used instead SVC, the Peer's ATM address may be a Null OCTET STRING." ::= { scspAtmarpPeerEntry 3 } scspAtmarpPeerVCType OBJECT-TYPE SYNTAX AtmConnKind MAX-ACCESS read-only STATUS current DESCRIPTION "The type of the virtual circuit between LS and Peer." ::= { scspAtmarpPeerEntry 4 } scspAtmarpPeerVPI OBJECT-TYPE SCSP MIB. Expires Apr. 10th, 1999 [Page 9] Internet Draft Oct. 10th, 1998 SYNTAX SCSPVPIInteger MAX-ACCESS read-only STATUS current DESCRIPTION "The VPI value for the virtual circuit between LS and Peer." ::= { scspAtmarpPeerEntry 5 } scspAtmarpPeerVCI OBJECT-TYPE SYNTAX SCSPVCIInteger MAX-ACCESS read-only STATUS current DESCRIPTION "The VCI value for the virtual circuit between LS and Peer." ::= { scspAtmarpPeerEntry 6 } scspAtmarpPeerDCSID OBJECT-TYPE SYNTAX OCTET STRING(SIZE(0..63)) MAX-ACCESS read-only STATUS current DESCRIPTION "The DCS ID for this peer. When the peer tabel is created, DCS ID may not have been discovered. Tt is set to a Null string. It will be update when the DCS ID associated with this peer (ATM address) is discovered." ::= { scspAtmarpPeerEntry 7 } scspAtmarpPeerRowStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "This object allows Atmarp Peer table entries to be created and deleted from the scspAtmarpPeerTable. Note that scspAtmarpPeerTable entry is created when a peer is configured loaclly or when a peer not previously configured connects to LS." REFERENCE "RFC 1903, 'Textual Conventions for version 2 of the Simple Network Management Protocol (SNMPv2).'" ::= { scspAtmarpPeerEntry 8 } SCSP MIB. Expires Apr. 10th, 1999 [Page 10] Internet Draft Oct. 10th, 1998 -- **************************************************** -- SCSP atmarp HFSM Objects -- **************************************************** scspAtmarpHFSMTable OBJECT-TYPE SYNTAX SEQUENCE OF ScspAtmarpHFSMEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "The objects defined in this table are used to for the management of the HFSM between the LS and the DCS." ::= { scspAtmarpObjects 4} scspAtmarpHFSMEntry OBJECT-TYPE SYNTAX ScspAtmarpHFSMEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Information about SCSP HFSM session between the LS and its HFSMs. The table is indexed by scspServerGroupID, scspServerGroupPID, and scspAtmarpPeerIndex." INDEX { scspServerGroupID, scspServerGroupPID, scspAtmarpPeerIndex } ::= { scspAtmarpHFSMTable 1} ScspAtmarpHFSMEntry ::= SEQUENCE { scspHFSMHFSMState ScspHFSMStateType, scspHFSMHelloIn Counter32, scspHFSMHelloOut Counter32, scspHFSMHelloInvalidIn Counter32, scspHFSMHelloInterval Integer32, scspHFSMDeadFactor Integer32, scspHFSMFamilyID Integer32, scspAtmarpHFSMRowStatus RowStatus } scspHFSMHFSMState OBJECT-TYPE SYNTAX ScspHFSMStateType MAX-ACCESS read-only STATUS current SCSP MIB. Expires Apr. 10th, 1999 [Page 11] Internet Draft Oct. 10th, 1998 DESCRIPTION "The current state of the Hello Finite State Machine. The allowable states are: down(1), waiting(2), uniConn(3), biConn(4)." REFERENCE "SCSP draft, Section 2.1" ::= { scspAtmarpHFSMEntry 1 } scspHFSMHelloIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of 'Hello' messages received from this HFSM." ::= { scspAtmarpHFSMEntry 2 } scspHFSMHelloOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of 'Hello' messages sent from LS to this HFSM." ::= { scspAtmarpHFSMEntry 3 } scspHFSMHelloInvalidIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of invalid 'Hello' messages received from this HFSM. Possible message errors include: Hello message when the HFSM is in 'Down' state; Hello message is too short to contain the number of Receiver ID records specified in the header, etc. Other common errors include failed authentication if applicable, errors in the message fields, etc." ::= { scspAtmarpHFSMEntry 4 } scspHFSMHelloInterval OBJECT-TYPE SYNTAX Integer32 (0..65535) MAX-ACCESS read-create SCSP MIB. Expires Apr. 10th, 1999 [Page 12] Internet Draft Oct. 10th, 1998 STATUS current DESCRIPTION "This object contains the value for HelloInterval with the associated HFSM. It is the time (in seconds) between sending of consecutive Hello messages from the HFSM." ::= { scspAtmarpHFSMEntry 5 } scspHFSMDeadFactor OBJECT-TYPE SYNTAX Integer32 (0..65535) MAX-ACCESS read-create STATUS current DESCRIPTION "This object contains the value for DeadFactor with this associated server. The DeadFactor along with HelloInterval are contained in 'Hello' messages sent from this HFSM. If 'Hello' messages are not received from this HFSM within the time out interval 'HelloInterval*DeadFactor' (in seconds), then the HFSM MUST be considered to be stalled." ::= { scspAtmarpHFSMEntry 6 } scspHFSMFamilyID OBJECT-TYPE SYNTAX Integer32 (0..65535) MAX-ACCESS read-only STATUS current DESCRIPTION "The family ID is used to refer an aggregate of Protocol ID/SGID pairs. Only a single HFSM is run for all Protocol ID/SGID pairs assigned to a Family ID. When the HFSM is not shared by an aggregate of Protocol ID/SGID pairs, this object should be set to 0." REFERENCE "SCSP draft, Sec.2 and Sec. B.2.5" ::= { scspAtmarpHFSMEntry 7 } scspAtmarpHFSMRowStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "This object allows Atmarp HFSM table entries to be created and deleted from the scspAtmarpHFSMTable. Note that scspAtmarpHFSMTable entry creation and deletion is SCSP MIB. Expires Apr. 10th, 1999 [Page 13] Internet Draft Oct. 10th, 1998 closely coupled with scspHFSMTable entry creation. A scspAtmarpHFSMTable entry cannot be created until its corresponding scspHFSMTable entry is created. When a scspHFSMTable entry is deleted, it also removes the corresponding scspAtmarpHFSMTable entry." REFERENCE "RFC 1903, 'Textual Conventions for version 2 of the Simple Network Management Protocol (SNMPv2).'" ::= { scspAtmarpHFSMEntry 8 } -- *********************************************************** -- Notifications -- *********************************************************** scspHFSMDown NOTIFICATION-TYPE OBJECTS { scspServerGroupID, scspServerGroupPID, scspAtmarpPeerIndex } STATUS current DESCRIPTION "The Hello Finite State Machine associated with this LS/DCS pair enters 'Down' state." ::= { scspAtmarpNotifications 1 } scspHFSMWaiting NOTIFICATION-TYPE OBJECTS { scspServerGroupID, scspServerGroupPID, scspAtmarpPeerIndex } STATUS current DESCRIPTION "The Hello Finite State Machine associated with this LS/DCS pair enters 'Waiting' state." ::= { scspAtmarpNotifications 2 } scspHFSMBiConn NOTIFICATION-TYPE OBJECTS { scspServerGroupID, scspServerGroupPID, scspAtmarpPeerIndex } STATUS current DESCRIPTION SCSP MIB. Expires Apr. 10th, 1999 [Page 14] Internet Draft Oct. 10th, 1998 "The Hello Finite State Machine associated with this LS/DCS pair enters 'Bidirectional connection' state." ::= { scspAtmarpNotifications 3 } -- ********************************************************* -- Conformance Definitions -- ********************************************************* scspAtmarpCompliances OBJECT IDENTIFIER ::={scspAtmarpConformance 1} scspAtmarpGroups OBJECT IDENTIFIER ::={scspAtmarpConformance 2} --********************************************************** -- SCSP MIB Compliance Statements --********************************************************** scspAtmarpCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The compliance statement for entities that are required for the management of SCSP when applied to ATMARP servers." MODULE MANDATORY-GROUPS { scspAtmarpGroup } ::= { scspAtmarpCompliances 1 } scspAtmarpGroup OBJECT-GROUP OBJECTS { scspAtmarpServerGroupNetMask, scspAtmarpServerGroupSubnetAddr, scspAtmarpLSLSIPAddr, scspAtmarpLSLSAtmAddr, scspAtmarpPeerIndex, scspAtmarpPeerAtmAddr, scspAtmarpPeerVCType, scspAtmarpPeerVPI, scspAtmarpPeerVCI, scspAtmarpPeerDCSID, scspHFSMHFSMState, scspHFSMHelloIn, scspHFSMHelloOut, scspHFSMHelloInvalidIn, scspHFSMHelloInterval, SCSP MIB. Expires Apr. 10th, 1999 [Page 15] Internet Draft Oct. 10th, 1998 scspHFSMDeadFactor, scspHFSMFamilyID } STATUS current DESCRIPTION "This group is mandatory when Atmarp is the client/server protocol running SCSP." ::= { scspAtmarpGroups 1 } END Acknowledgments Reference Authors' Addresses Cliff X. Wang IBM, Networking Hardware Division Dept. MZDA/B664 P.O. Box 12195 Research Triangle Park, NC 27709 phone: +1-919-486-1255 email: cxwang@cxwang.ibm.com Colin B. Verrilli IBM, Networking Hardware Division Dept. M6LA/B664 P.O. Box 12195 Research Triangle Park, NC 27709 phone: +1-919-254-9936 email: verrilli@raleigh.ibm.com James V. Luciani Bay Networks, Inc. 3 Federal Street, BL3-04 Billerica, MA 01821 phone: +1-508-916-4734 email: luciani@baynetworks.com SCSP MIB. Expires Apr. 10th, 1999 [Page 16] Internet Draft Oct. 10th, 1998 SCSP MIB. Expires Apr. 10th, 1999 [Page 17]