4. Circuit Priority At circuit start time, each circuit end point will provide priority information to its circuit partner. The initiator of the circuit will choose which circuit priority will be effective for the life of the circuit. If Priority is not implemented by the Data Link Switch, then "Unsupported" priority is used. 4.1 Frame format Circuit priority will be valid in the CANUREACH_cs, ICANREACH_cs, and REACH_ACK frames only. The relevant header field is shown below. The Circuit Priority value is a byte value at offset 22 in an SSP Control Message.
The following describes the format of the Circuit Priority byte. 7 6 5 4 3 2 1 0 +-------------------+-----------+ | reserved | CP | +-------------------+-----------+ CP: Circuit Priority bits 000 - Unsupported (note 1) 001 - Low Priority 010 - Medium Priority 011 - High Priority 100 - Highest Priority 101 to 111 are reserved for future use Note 1: Unsupported means that the Data Link Switch that originates the circuit does not implement priority. Actions taken on Unsupported priority are vendor specific. 4.2 Circuit Startup The sender of a CANUREACH_cs is responsible for setting the CP bits to reflect the priority it would like to use for the circuit being requested. The mechanism for choosing an appropriate value is implementation dependent. The sender of an ICANREACH_cs frame will set the CP bits to reflect the priority it would like to use for the circuit being requested, with the mechanism for choosing the appropriate value being implementation dependent. The receiver of the ICANREACH_cs will select from the priorities in the CANUREACH_cs and ICANREACH_cs frames, and will set the value in the CP field of the REACH_ACK frame that follows to the value to be used for this circuit. This priority will be used for the life of the circuit. A CANUREACH_cs or ICANREACH_cs with the circuit priority value set to Unsupported (CP=000) indicates that the sender does not support the circuit priority function.
Flow: DLSw A DLSw B CANUREACH_cs (CP=011) -----> Circuit initiator requests high Priority. <--------- ICANREACH_cs (CP=010) Circuit target requests medium priority. REACH_ACK (CP=010) --------> Circuit initiator sets the priority for this circuit to medium. The circuit initiator could choose either high or medium in this example. 5. DLSw State Machine The following state tables describe the states for a single circuit through the Data Link Switch. State information is kept for each connection. The initial state for a connection is DISCONNECTED. The steady state is either CIRCUIT_ESTABLISHED or CONNECTED. In the former state, an end-to-end circuit has been established allowing the support of Type 1 LLC between the end systems. The latter state exists when an end-to-end connection has been established for the support of Type 2 LLC services between the end systems. For SNA, LLC type 2 connection establishment is via the use of IEEE 802.2 Test or XID frames. SNA devices send these frames to the null SAP in order to determine the source route information in support of bridging. Normally SNA devices use SAP 0x04, 0x08, or 0x0C (most SNA LLC2 devices that have a single PU per MAC address use a default of 0x04). Typically the SAP would be used to determine if the Test frames should be sent to the DLSw code in the router. If both bridging and DLSw are enabled, this allows the product to ensure that SNA frames are not both bridged and switched. Note that although typically SNA uses a DSAP and SSAP of 0x04, it allows for other SAPs to be configured and supports unequal SAPs. This allows multiple PUs to share connections between two given MAC addresses (each PU to PU session uses one LLC2 connection). For NetBIOS, LLC type 2 connection establishment is via the Name Query and Name Recognized frames. These frames are used for both address resolution and source route determination. NetBIOS devices use SAP 0xF0.
5.1 Data Link Switch States The Switch-to-Switch Protocol is formally defined through the state machines described in this chapter. The following table lists the thirteen possible states for the main circuit FSM. A separate state machine instance is employed for each end-to-end circuit that is maintained by the Data Link Switch. State Name Description ---------- ----------- CIRCUIT_ESTABLISHED The end-to-end circuit has been established. At this time LLC Type 1 services are available from end-to-end. CIRCUIT_PENDING The target DLSw is awaiting a REACH_ACK response to an ICANREACH_cs message. CIRCUIT_RESTART The DLSw that originated the reset is awaiting the restart of the data link and the DL_RESTARTED response to a RESTART_DL message. CIRCUIT_START The origin DLSw is awaiting a ICANREACH_cs in response to a CANUREACH_cs message. CONNECTED The end-to-end connection has been established thereby allowing LLC Type 2 services from end-to-end in addition to LLC Type 1 services. CONNECT_PENDING The origin DLSw is awaiting the CONTACTED response to a CONTACT message. CONTACT_PENDING The target DLSw is awaiting the DLC_CONTACTED confirmation to a DLC_CONTACT signal (i.e., DLC is waiting for a UA response to an SABME command). DISCONNECTED The initial state with no circuit or connection established, the DLSw is awaiting either a CANUREACH_cs, or an ICANREACH_cs. DISCONNECT_PENDING The DLSw that originated the disconnect is awaiting the DL_HALTED
response to a HALT_DL message. HALT_PENDING The remote DLSw is awaiting the DLC_DL_HALTED indication following the DLC_HALT_DL request (i.e., DLC is waiting for a UA response to a DISC command), due to receiving a HALT_DL message. HALT_PENDING_NOACK The remote DLSw is awaiting the DLC_DL_HALTED indication following the DLC_HALT_DL request (i.e., DLC is waiting for a UA response to a DISC command), due to receiving a HALT_DL_NOACK message. RESTART_PENDING The remote DLSw is awaiting the DLC_DL_HALTED indication following the DLC_HALT_DL request (i.e., DLC is waiting for a UA response to a DISC command), and the restart of the data link. RESOLVE_PENDING The target DLSw is awaiting the DLC_DL_STARTED indication following the DLC_START_DL request (i.e., DLC is waiting for a Test response as a result of sending a Test command). The DISCONNECTED state is the initial state for a new circuit. One end station starts the connection via an XID or SABME command (i.e., DLC_XID or DLC_CONTACTED). Upon receipt, the Data Link Switches exchange a set of CANUREACH_cs, ICANREACH_cs and REACH_ACK messages. Upon completion of this three-legged exchange both Data Link Switches will be in the CIRCUIT_ESTABLISHED state. Three pending states also exist during this exchange. The CIRCUIT_START state is entered by the origin Data Link Switch after it has sent the CANUREACH_cs message. The RESOLVE_PENDING state is entered by the target Data Link Switch awaiting a Test response to a Test Command. And lastly, the CIRCUIT_PENDING state is entered by the target DLSw awaiting the REACH_ACK reply to an ICANREACH_cs message. The CIRCUIT_ESTABLISHED state allows for the exchange of LLC Type 1 frames such as the XID exchanges between SNA stations that occurs prior to the establishment of a connection. Also, datagram traffic (i.e., UI frames) may be sent and received between the end stations. These exchanges use the XIDFRAME and DGRMFRAME messages sent between
the Data Link Switches. In the CIRCUIT_ESTABLISHED state, the receipt of a SABME command (i.e., DLC_CONTACTED) causes the origin DLSw to issue a CONTACT message, to send an RNR supervisory frame (i.e., DLC_ENTER_BUSY) to the origin station, and to enter the CONNECT_PENDING state awaiting a CONTACTED message. The target DLSw, upon the receipt of a CONTACT message, will issue a SABME command (i.e., DLC_CONTACT) and enter the Contact Pending state. Once the UA response is received (i.e., DLC_CONTACTED), the target DLSw sends a CONTACTED message and enters the CONNECTED state. When received, the origin DLSw enters the CONNECTED state and sends an RR supervisory frame (i.e., DLC_EXIT_BUSY). The CONNECTED state is the steady state for normal data flow once a connection has been established. Information frames (i.e., INFOFRAME messages) are simply sent back and forth between the end points of the connection. This is the path that should be optimized for performance. The connection is terminated upon the receipt of a DISC frame or under some other error condition detected by DLC (i.e., DLC_ERROR). Upon receipt of this indication, the DLSw will halt the local data link, send a HALT_DL message to the remote DLSw, and enter the DISCONNECT_PENDING State. When the HALT_DL frame is received by the other DLSw, the local DLC is halted for this data link, a DL_HALTED message is returned, and the DISCONNECTED state is entered. Receipt of this DL_HALTED message causes the other DLSw to also enter the DISCONNECTED state. The CIRCUIT_RESTART state is entered if one of the Data Link Switches receives a SABME command (i.e., DLC_RESET) after data transfer while in the CONNECTED state. This causes a DM command to be returned to the origin station and a RESTART_DL message to be sent to the remote Data Link Switch. This causes the remote data link to be halted and then restarted. The remote DLSw will then send a DL_RESTARTED message back to the first DLSw. The receipt of the DL_RESTARTED message causes the first DLSw to issue a new CONTACT message, assuming that the local DLC has been contacted (i.e., the origin station has resent the SABME command). This is eventually responded to by a CONTACTED message. Following this exchange, both Data Link Switches will return to the CONNECTED state. If the local DLC has not been contacted, the receipt of a DL_RESTARTED command causes the Data Link Switch to enter the CIRCUIT_ESTABLISHED state awaiting the receipt of a SABME command (i.e., DLC_CONTACTED signal). The HALT_PENDING, HALT_PENDING_NOACK and RESTART_PENDING states correspond to the cases when the Data Link Switch is awaiting
responses from the local station on the adjacent LAN (e.g., a UA response to a DISC command). Also in the RESTART_PENDING state, the Data Link Switch will attempt to restart the data link prior to sending a DL_RESTARTED message. For some implementations, the start of a data link involves the exchange of a Test command/response on the adjacent LAN (i.e., DLC_START_DL). For other implementations, this additional exchange may not be required. 5.2 State Transition Tables This section provides a detailed representation of the Data Link Switch, as documented by a single state machine. Many of the transitions are dependent upon local signals between the Data Link Switch entity and one of the DLC entities. These signals and their definitions are given in the following tables. DLC Events: Event Name Description ---------- ----------- DLC_CONTACTED Contact Indication: DLC has received an SABME command or DLC has received a UA response as a result of sending an SABME command. DLC_DGRM Datagram Indication: DLC has received a UI frame. DLC_ERROR Error condition indicated by DLC: Such a condition occurs when a DISC command is received or when DLC experiences an unrecoverable error. DLC_INFO Information Indication: DLC has received an Information (I) frame. DLC_DL_HALTED Data Link Halted Indication: DLC has received a UA response to a DISC command. DLC_DL_STARTED Data Link Started Indication: DLC has received a Test response from the null SAP. DLC_RESET Reset Indication: DLC has received an SABME command during the time a connection is currently active and has responded with DM. DLC_RESOLVE_C Resolve Command Indication: DLC has received a Test command addressed to the null SAP, or an XID command addressed to the null SAP.
DLC_RESOLVED Resolve request: DLC has received a TEST response frame (or equivalent for non-LAN DLCs) but has not reserved the resources required for a circuit yet. DLC_XID XID Indication: DLC has received an XID command or response to a non-null SAP. Other Events: Event Name Description ---------- ----------- XPORT_FAILURE Failure of the transport connection used by the circuit. CS_TIMER_EXP The CIRCUIT_START timer (started when the circuit went into CIRCUIT_START state) has expired. DLC Actions: Action Name Description ----------- ----------- DLC_CONTACT Contact Station Request: DLC will send a SABME command or a UA response to an outstanding SABME command. DLC_DGRM Datagram Request: DLC will send a UI frame. DLC_ENTER_BUSY Enter Link Station Busy: DLC will send an RNR supervisory frame. DLC_EXIT_BUSY Exit Link Station Busy: DLC will send an RR supervisory frame. DLC_HALT_DL Halt Data Link Request: DLC will send a DISC command. DLC_INFO Information Request: DLC will send an I frame. DLC_RESOLVE Resolve request: DLC should issue a TEST (or appropriate equivalent for non-LAN DLCs) but need not reserve the resources required for a circuit yet. DLC_RESOLVE_R Resolve Response Request: DLC will send a Test response or XID response from the null SAP. DLC_START_DL Start Data Link Request: DLC will send a Test command to the null SAP.
DLC_XID XID Request: DLC will send an XID command or an XID response. Other Actions: Action Name Description ---------- ----------- START_CS_TIMER Start the CIRCUIT_START timer. DLC_RESOLVE_R and DLC_START_DL actions require the DLC to reserve the resources necessary for a link station as they are used only when a circuit is about to be started. The DLC_RESOLVE action is used for topology explorer traffic and does not require such resources to be reserved, though a DLC implementation may choose not to distinguish this from the DLC_START_DL action. See section 5.4 for details of the actions and events for explorer frames. The Data Link Switch is described by a state transition table as documented in the following sections. Each of the states is described below in terms of the events, actions, and next state for each transition. If a particular event is not listed for a given state, no action and no state transition should occur for that event. Any significant comments concerning the transitions within a given state are given immediately following the table representing the state. A separate state machine instance is maintained by the Data Link Switch for each end-to-end circuit. The number of circuits that may be supported by each Data Link Switch is a local implementation option. The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex are SSP messages that are not associated with a particular circuit. The processing of these messages is covered in section 5.4.
5.2.1 DISCONNECTED State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive CANUREACH_cs | DLC_START_DL | RESOLVE_PENDING | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | DLC_XID | If source route | If CANUREACH_cs was | | | bridged frame with | sent: | | | broadcast indicated:| CIRCUIT_START | | | Send CANUREACH_ex | | | | else: | | | | Send CANUREACH_cs | | | | START_CS_TIMER | | +----------------------+---------------------+----------------------+ | DLC_DGRM | If NETBIOS | | | | NAME_QUERY: | | | | Send NETBIOS_NQ_ex | | | | else: | | | | Send DATAFRAME | | +----------------------+---------------------+----------------------+ | DLC_CONTACTED | Send CANUREACH_cs | CIRCUIT_START | +----------------------+---------------------+----------------------+ It is assumed that each Data Link Switch will build a set of topology tables giving the identity of each Data Link Switch that can reach a specific MAC address or a specific NetBIOS name. This table can be built using the explorer frames, as per the Explorer FSM in section 5.4. As a consequence, the amount of search traffic can be kept to a minimum. Upon receipt of a TEST command, broadcast XID or NetBIOS NAME_QUERY, the Data Link Switch checks the topology table for the target MAC/SAP or NetBIOS name. If there is no matching entry in the table, the Data Link Switch uses the explorer FSMs in section 5.4 to locate the target MAC/SAP or NetBIOS name. When the first non-broadcast XID or SABME flows, the Data Link Switch issues a CANUREACH_cs to attempt to start a circuit. The CANUREACH_cs message is sent to only those Data Link Switches that are known to be able to reach the given MAC address. The mechanism by which a topology table entry is determined to be out-of-date and is deleted from the table is implementation specific. The DISCONNECTED state is exited upon the sending of a CANUREACH_cs by the origin DLSw or the receipt of a CANUREACH_cs message by a
prospective target Data Link Switch. In the latter case, the Data Link Switch will issue a Test command to the target station (i.e., DLC_START_DL signal is presented to DLC). 5.2.2 RESOLVE_PENDING State +-------------------+-----------------------+-----------------------+ | Event | Action(s) | Next State | +-------------------+-----------------------+-----------------------+ | Receive DATAFRAME | DLC_DGRM | | +-------------------+-----------------------+-----------------------+ | DLC_DL_STARTED | If LF value of | If LF value of | | | DLC_DL_STARTED | DLC_DL_STARTED | | | is greater than or | is greater than or | | | equal to LF Size of | equal to LF Size of | | | CANUREACH_cs or LF | CANUREACH_cs or LF | | | Size Control bit set: | Size Control bit set: | | | Send ICANREACH_cs | CIRCUIT_PENDING | | | else: | else: | | | Send DLC_HALT_DL | HALT_PENDING_NOACK | +-------------------+-----------------------+-----------------------+ | DLC_ERROR | | DISCONNECTED | +-------------------+-----------------------+-----------------------+ | DLC_DGRM | Send DATAFRAME | | +-------------------+-----------------------+-----------------------+ The RESOLVE_PENDING state is entered upon receipt of a CANUREACH_cs message by the target DLSw. A data link is started, causing a Test command to be sent by the DLC. Several CANUREACH_cs messages can be received in the RESOLVE_PENDING state. The Data Link Switch may update its topology information based upon the origin MAC address information in each CANUREACH_cs message. Upon the receipt of a DLC_DL_STARTED signal in the RESOLVE_PENDING state, the Data Link Switch may update its topology table base upon the remote MAC address information. The ICANREACH_cs message must be returned to the first partner DLSw from which a CANUREACH_cs was received for this circuit, or an implementation may optionally reply to all partners from which the CANUREACH_cs was received. The RESOLVE_PENDING state is exited once the data link has been started (i.e., a DLC_DL_STARTED signal is received as a result of a Test response received by the DLC). The target Data Link Switch then enters the CIRCUIT_PENDING state.
5.2.3 CIRCUIT_START State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive CANUREACH_cs | If origin MAC addr | If DLC_START_DL | | for circuit in | in CANUREACH_cs is | issued: | | opposite direction | greater than origin | RESOLVE_PENDING | | | MAC addr of circuit:| | | | DLC_START_DL | | | | else: | | | | no action taken | | +----------------------+---------------------+----------------------+ | Receive ICANREACH_cs | If LF Size Control | If LF Size Control | | | bit set and LF Size | bit set and LF Size | | | is not negotiable: | is not negotiable: | | | Send HALT_DL_NOACK| DISCONNECTED | | | else: | else if Connected: | | | Send REACH_ACK, | CONNECT_PENDING | | | Send appropriate | else: | | | SSP message based | CIRCUIT_ESTABLISHED| | | on the event | | | | that generated | | | | CANUREACH_cs | | | | (see Note) | | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DATAFRAME | | +----------------------+---------------------+----------------------+ | DLC_ERROR | | DISCONNECTED | +----------------------+---------------------+----------------------+ | CS_TIMER_EXP | | DISCONNECTED | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | | DISCONNECTED | +----------------------+---------------------+----------------------+ The CIRCUIT_START state is entered by the origin Data Link Switch when a DLC_XID or DLC_CONTACTED signal has been received from the DLC. The CIRCUIT_START state is exited upon receipt of an ICANREACH_cs message. A REACH_ACK message is returned to the target Data Link Switch. If the CIRCUIT_START state was entered due to a DLC_XID signal, an XIDFRAME message containing the XID is sent to the target Data Link Switch. If the CIRCUIT_START state was entered due to a DLC_CONTACTED signal, a CONTACT message is sent to the target Data Link Switch.
5.2.4 CIRCUIT_PENDING State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive CONTACT | DLC_CONTACT | CONTACT_PENDING | +----------------------+---------------------+----------------------+ | Receive HALT_DL | DLC_HALT_DL | HALT_PENDING | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ | Receive REACH_ACK | If Connected: | If Connected: | | | Send CONTACT | CONNECT_PENDING, | | | | else: | | | | CIRCUIT_ESTABLISHED | +----------------------+---------------------+----------------------+ | Receive XIDFRAME | DLC_XID | | +----------------------+---------------------+----------------------+ | Receive DGRMFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | DLC_CONTACTED | If UA is sent in | | | | response to SABME: | | | | DLC_ENTER_BUSY | | | | else: | | | | no action taken | | +----------------------+---------------------+----------------------+ | DLC_ERROR | | DISCONNECTED | +----------------------+---------------------+----------------------+ | DLC_XID | Drop or hold until | | | | REACH_ACK received | | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DATAFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ The CIRCUIT_PENDING state is entered by the target Data Link Switch following the sending of an ICANREACH_cs message. In this state it is awaiting the reception of a REACH_ACK message from the origin Data Link Switch. If the target Data Link Switch happens to receive a SABME command from the target station while in the CIRCUIT_PENDING state (i.e., a DLC_CONTACTED signal received from the DLC), the reception of the REACH_ACK message causes the target Data Link Switch to enter the CONNECT_PENDING state and to send a CONTACT message to the origin
Data Link Switch. If no such SABME is received, the receipt of the REACH_ACK causes the Data Link Switch to enter CIRCUIT_ESTABLISHED state. 5.2.5 CONNECT_PENDING State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive CONTACTED | If UA was sent in | CONNECTED | | | response to SABME: | | | | DLC_EXIT_BUSY | | | | else: | | | | DLC_CONTACT | | +----------------------+---------------------+----------------------+ | Receive HALT_DL | DLC_HALT_DL | HALT_PENDING | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ | Receive DGRMFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | Receive ICANREACH_cs | Send HALT_DL_NOACK | | +----------------------+---------------------+----------------------+ | DLC_RESET | Send RESTART_DL | CIRCUIT_RESTART | +----------------------+---------------------+----------------------+ | DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DGRMFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ The CONNECT_PENDING state is entered when a DLC_CONTACTED signal has been received from the DLC (i.e., a SABME command has been received). A CONTACT message it then issued. The state is exited upon the receipt of a CONTACTED message. If a DLC_RESET signal is received, the local data link is restarted and a RESTART_DL message is sent to the remote DLSw. An ICANREACH_cs received after the transition to CONNECT_PENDING state indicates that more than one CANUREACH_cs was sent at circuit establishment time and the target station was found by more than one Data Link Switch partner. A HALT_DL_NOACK is sent to halt the circuit started by the Data Link Switch partner that originated each such ICANREACH_cs.
Note: Some implementations will also send a Test command in order to restart the data link to the station that sent the SABME command (i.e., a DLC_START_DL will be issued). 5.2.6 CIRCUIT_ESTABLISHED State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive CONTACT | DLC_CONTACT | CONTACT_PENDING | +----------------------+---------------------+----------------------+ | Receive HALT_DL | DLC_HALT_DL | HALT_PENDING | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ | Receive XIDFRAME | DLC_XID | | +----------------------+---------------------+----------------------+ | Receive DGRMFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | Receive ICANREACH_cs | Send HALT_DL_NOACK | | +----------------------+---------------------+----------------------+ | DLC_CONTACTED | Send CONTACT | CONNECT_PENDING | | | If UA is sent in | | | | response to SABME: | | | | DLC_ENTER_BUSY | | | | else: | | | | no action taken | | +----------------------+---------------------+----------------------+ | DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DGRMFRAME | | +----------------------+---------------------+----------------------+ | DLC_XID | Send XIDFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ The CIRCUIT_ESTABLISHED state is entered by the origin Data Link Switch from the CIRCUIT_START state, and by the target Data Link Switch from the CIRCUIT_PENDING state. The state is exited when a connection is started (i.e., DLC receives a SABME command) or CONTACT is received. The next state is CONTACT_PENDING or CONNECT_PENDING. An ICANREACH_cs received after the transition to CIRCUIT_ESTABLISHED state indicates that more than one CANUREACH_cs was sent at circuit establishment time and the target station was found by more than one
Data Link Switch partner. A HALT_DL_NOACK is sent to halt the circuit started by the Data Link Switch partner that originated each such ICANREACH_cs. 5.2.7 CONTACT_PENDING State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive HALT_DL | DLC_HALT_DL | HALT_PENDING | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ | Receive RESTART_DL | DLC_HALT_DL | RESTART_PENDING | +----------------------+---------------------+----------------------+ | Receive DGRMFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | DLC_CONTACTED | Send CONTACTED | CONNECTED | +----------------------+---------------------+----------------------+ | DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DGRMFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ The CONTACT_PENDING state is entered upon the receipt of a CONTACT message, which causes the Data Link Switch to issue a DLC_CONTACT signal to the DLC (i.e., DLC sends a SABME command). This state is then exited upon the receipt of a DLC_CONTACTED signal from the DLC (i.e., a UA response received). If a RESTART_DL message is received, indicating that the remote Data Link Switch has received a DLC_RESET signal, the local Data Link Switch sends a DISC command frame on the adjacent LAN (i.e., DLC_HALT_DL signal) and enter the RESTART_PENDING state. An ICANREACH_cs received after the transition to CONTACT_PENDING state indicates that more than one CANUREACH_cs was sent at circuit establishment time and the target station was found by more than one Data Link Switch partner. A HALT_DL_NOACK is sent to halt the data link started by the Data Link Switch partner that originated this ICANREACH_cs.
5.2.8 CONNECTED State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive HALT_DL | DLC_HALT_DL | HALT_PENDING | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ | Receive RESTART_DL | DLC_HALT_DL | RESTART_PENDING | +----------------------+---------------------+----------------------+ | Receive DGRMFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | Receive INFOFRAME | DLC_INFO | | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | Receive XIDFRAME | If non-activation | | | | XID3: | | | | DLC_XID | | +----------------------+---------------------+----------------------+ | Receive ICANREACH_cs | Send HALT_DL_NOACK | | +----------------------+---------------------+----------------------+ | Receive ENTER_BUSY | DLC_ENTER_BUSY | | +----------------------+---------------------+----------------------+ | Receive EXIT_BUSY | DLC_EXIT_BUSY | | +----------------------+---------------------+----------------------+ | Rec TEST_CIRCUIT_REQ | Snd TEST_CIRCUIT_RSP| | +----------------------+---------------------+----------------------+ | DLC_RESET | Send RESTART_DL | CIRCUIT_RESTART | +----------------------+---------------------+----------------------+ | DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DGRMFRAME | | +----------------------+---------------------+----------------------+ | DLC_INFO | Send INFOFRAME | | +----------------------+---------------------+----------------------+ | DLC_XID | If non-activation | | | | XID3: | | | | Send XIDFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ The CONNECTED state is entered from the CONNECT_PENDING state upon the receipt of a CONTACTED message or from the CONTACT_PENDING state upon the receipt of a DLC_CONTACTED signal.
The CONNECTED state is exited usually under one of two conditions: a DLC_ERROR signal received from the DLC (e.g., a DISC command received by the local DLC), or a HALT_DL message received from the other Data Link Switch (e.g., a DISC command received by the remote DLC). A SABME command (i.e., a DLC_RESET signal) received by either Data Link Switch will also cause the two Data Link Switches to leave the CONNECTED state and attempt to restart the circuit. Following the receipt of a SABME, the local Data Link Switch sends a RESTART_DL message to the other Data Link Switch and enters the CIRCUIT_RESTART state. Upon the receipt of the RESTART_DL message, the remote Data Link Switch sends a DISC command (i.e., DLC_HALT_DL signal) and enters the RESTART_PENDING state. An ICANREACH_cs received after the transition to CONNECTED state indicates that more than one CANUREACH_cs was sent at circuit establishment time and the target station was found by more than one Data Link Switch partner. A HALT_DL_NOACK is sent to halt the circuit started by the Data Link Switch partner that originated each such ICANREACH_cs. Note: Some implementations will also send a Test command in order to restart the data link to the station that sent the SABME command (i.e., a DLC_START_DL will be issued). 5.2.9 CIRCUIT_RESTART State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive DL_RESTARTED | If Connected: | If Connected: | | | Send CONTACT | CONNECT_PENDING, | | | | else: | | | | CIRCUIT_ESTABLISHED | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ | Receive DGRMFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DGRMFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+
The CIRCUIT_RESTART state is entered if a DLC_RESET signal is received from the local DLC. This was caused by the receipt of a SABME command while a connection was currently active. A DM response will be issued to the SABME command and the Data Link Switch will attempt to restart the end-to-end circuit. The CIRCUIT_RESTART state is exited through one of two transitions. The next state depends upon the time the local DLC has reached the contacted state (i.e., a DLC_CONTACTED signal is presented) relative to the receipt of the DL_RESTARTED message. This signal is caused by the origin station resending the SABME command that initially caused the Data Link Switch to enter the CIRCUIT_RESTART state. The two cases are as follows: 1) DL_RESTARTED message received before the DLC_CONTACTED signal- In this case, the CIRCUIT_ESTABLISHED state is entered. 2) DL_RESTARTED message received after the DLC_CONTACTED signal- In this case, the CONNECT_PENDING state is entered. 5.2.10 DISCONNECT_PENDING State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive DL_HALTED | | DISCONNECTED | +----------------------+---------------------+----------------------+ | Receive HALT_DL | Send DL_HALTED | | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| | DISCONNECTED | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DATAFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | | DISCONNECTED | +----------------------+---------------------+----------------------+ The DISCONNECT_PENDING state is entered when a DLC_ERROR signal is received from the local DLC. Upon receipt of this signal, a HALT_DL message is sent. Once an DL_HALTED message is received, the state is exited, and the Data Link Switch enters the DISCONNECTED state.
5.2.11 RESTART_PENDING State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ | Receive DGRMFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | DLC_DL_HALTED | Send DL_RESTARTED | CIRCUIT_ESTABLISHED | +----------------------+---------------------+----------------------+ | DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DGRMFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ The RESTART_PENDING state is entered upon the receipt of a RESTART_DL message from the remote DLSw while the local Data Link Switch is in either the CONTACT_PENDING state or the CONNECTED state, which causes the local DLSw to issue a DISC command to the DLC. Upon the receipt of the UA response (DLC_DL_HALTED), the data link is restarted, a DL_RESTARTED message is returned to the remote DLSw, and the CIRCUIT_ESTABLISHED state is entered. Note: Some implementations will send a Test command in order to restart the data link to the target station (i.e., a DLC_START_DL will be issued) prior to sending the DL_RESTARTED message. 5.2.12 HALT_PENDING State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive HALT_DL_NOACK| | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | DLC_DL_HALTED | Send DL_HALTED | DISCONNECTED | +----------------------+---------------------+----------------------+ | DLC_ERROR | Send DL_HALTED | DISCONNECTED | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DATAFRAME | | +----------------------+---------------------+----------------------+ | XPORT_FAILURE | | HALT_PENDING_NOACK | +----------------------+---------------------+----------------------+
The HALT_PENDING state is entered upon the receipt of a HALT_DL message. This causes the local DLC to issue a DISC command. Upon the receipt of the UA response (DLC_DL_HALTED), a DL_HALTED message is returned to the remote DLSw and the DISCONNECTED state is entered. 5.2.13 HALT_PENDING_NOACK State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive DATAFRAME | DLC_DGRM | | +----------------------+---------------------+----------------------+ | DLC_DL_HALTED | | DISCONNECTED | +----------------------+---------------------+----------------------+ | DLC_ERROR | | DISCONNECTED | +----------------------+---------------------+----------------------+ | DLC_DGRM | Send DATAFRAME | | +----------------------+---------------------+----------------------+ The HALT_PENDING_NOACK state is entered upon the receipt of a HALT_DL_NOACK message. This causes the local DLC to issue a DISC command. Upon the receipt of the UA response (DLC_DL_HALTED), the DISCONNECTED state is entered. 5.3 NetBIOS Datagrams The NetBIOS protocols use a number of UI frames for directory services and the transmission of datagrams. Most of these frames are directed to a group MAC address (GA) with the routing information field indicating spanning tree explorer (STE) (a.k.a. Single Route Broadcast). The NB_Add_Name_Response and NB_Name_Recognized frames are directed to a specific MAC address with the routing information field indicating an all routes explorer frame (ARE) (a.k.a. All Routes Broadcast) The NB_Status_Response frame, is directed to a specific MAC address with the routing information field indicating a specifically routed frame (SRF). The handling of these frames is summarized in the following table.
+---------------------------+------------------+--------------------+ | Event | Action(s) | Comment | +---------------------------+------------------+--------------------+ | DLC_DGRM for NETBIOS | Send NETBIOS_ANQ | Transmitted to all | | group address: | | remote DLSw | | NB_Add_Name_Query | | | +---------------------------+------------------+--------------------+ | DLC_DGRM for a specific | Send NETBIOS_ANR | Transmitted to | | address: | | specific DLSw | | NB_Add_Name_Response | | | +---------------------------+------------------+--------------------+ | DLC_DGRM for a specific | Send DATAFRAME | Transmitted to all | | address: | | remote DLSw | | NB_Status_Response | | | +---------------------------+------------------+--------------------+ | DLC_DGRM for NETBIOS | Send DATAFRAME | Transmitted to all | | group address: | | remote DLSw | | NB_Name_in_Conflict | | | | NB_Add_Group_Name_Query | | | | NB_Datagram, | | | | NB_Datagram_Broadcast | | | | NB_Status_Query | | | | NB_Terminate_Trace | | | +---------------------------+------------------+--------------------+ The above actions do not apply in the following states: CIRCUIT_ESTABLISHED, CONTACT_PENDING, CONNECT_PENDING, CONNECTED, and CIRCUIT_PENDING. The handling of the remaining two UI frames used by NetBIOS systems, NB_Name_Query and NB_Name_Recognized, are documented as part of the DLSw state machine in the previous section (i.e., DISCONNECTED and RESOLVE_PENDING states). Furthermore, the handling of NetBIOS datagrams (i.e., NB_Datagram) sent to a specific MAC address is also governed by the DLSw state machine. Note: Some implementations also issue Test frames during the exchange of the NetBIOS, NB_Name_Query and NB_Name_Recognized. This exchange of protocol data units occurs during the start of a data link and is used to determine the routing information. Most other implementations of NetBIOS will use the NB_Name_Query/NB_Name_Recognized exchange to determine routes in conjunction with resolving the NetBIOS names. These differences are not reflected in the SSP protocols.
The handling of the NetBIOS specific SSP messages is given in the following table. +---------------+-------------------------+-------------------------+ | Event | Action(s) | Comment | +---------------+-------------------------+-------------------------+ | NETBIOS_ANQ | DLC_DGRM: | Routed STE | | | NB_Add_Name_Query | (NETBIOS Group Address) | +---------------+-------------------------+-------------------------+ | NETBIOS_ANR | DLC_DGRM: | Routed ARE | | | NB_Add_Name_Response | (Specific MAC Address) | +---------------+-------------------------+-------------------------+ | NETBIOS_NQ_ex | DLC_DGRM: | Routed STE | | | NB_Name_Query | (NETBIOS Group Address) | +---------------+-------------------------+-------------------------+ | NETBIOS_NQ_cs | DLC_DGRM: | Routed STE | | | NB_Name_Query | (NETBIOS Group Address) | +---------------+-------------------------+-------------------------+ | NETBIOS_NR_ex | DLC_DGRM: | Routed ARE | | | NB_Name_Recognized | (Specific MAC Address) | +---------------+-------------------------+-------------------------+ | NETBIOS_NR_cs | DLC_DGRM: | Routed ARE | | | NB_Name_Recognized | (Specific MAC Address) | +---------------+-------------------------+-------------------------+ | DATAFRAME | DLC_DGRM | If NB_Status_Response: | | | | Routed ARE | | | | (Specific MAC Address) | | | | Else: | | | | Routed STE | | | | (NETBIOS Group Address)| +---------------+-------------------------+-------------------------+ The above actions apply to all DLSw states. The handling of NetBIOS datagrams sent within DGRMFRAME messages is governed by the DLSw state machine. The DGRMFRAME message type is employed instead of the DATAFRAME message type once the end-to-end circuit has been established. At that time, the message is addressed according to the pair of Circuit IDs in the message header instead of relying upon the MAC address information in the token ring header. 5.4 Explorer Traffic The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex SSP messages explore the topology of the DLSw cloud and the networks attached to it. These explorer frames are used to determine the DLSw partners through which a MAC or NetBIOS name can be accessed. This information may optionally be cached to reduce explorer traffic in the DLSw cloud.
If a DLSw is aware from cached information that a given MAC address or NetBIOS name is accessible through a given partner DLSw, it should direct all circuit setup attempts to that partner. If the circuit setup fails, or no such data is available in the MAC or name cache database, the DLSw may fallback to issuing the setup attempt to all DLSw partners on the assumption that the cached data is now out of date. The mechanism for determining when to use such a fallback is implementation defined. DLSw implementations may also use a local MAC cache to enable responses to CANUREACH_ex requests to be issued without the need for TEST frame exchange (or equivalent) until the CANUREACH_cs is received. Again, the fallback mechanism for determining when such local cache data is out-of-date is implementation defined. The use of either cache is an optional function in DLSw. An implementation may choose to always issue explorer frames or to use either or both types of cache. The following sections describe the FSMs used for explorer frames. The DLC events and actions are a subset of those described in section 5.2 for the main circuit FSM. 5.4.1 CANUREACH/ICANREACH Explorer FSM The FSM described below is used to handle explorer frames routed by MAC address. There is one instance of this FSM for each Data Link ID (Target and Origin MAC/SAP pair) for which explorer traffic is flowing. The states in this FSM are as follows. State Name Description ---------- ----------- RESET The initial state. SENT_EX Local DLSw has issued an explorer message RECEIVED_EX Local DLSw has received an explorer message
5.4.1.1 RESET State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive CANUREACH_ex | If replying from | If DLC_RESOLVE sent, | | | cache, send | RECEIVED_EX | | | ICANREACH_ex | | | | else if allowed to | | | | test availability, | | | | issue DLC_RESOLVE. | | | | Optionally update | | | | cache. | | +----------------------+---------------------+----------------------+ | Receive ICANREACH_ex | Optionally update | RESET | | | cache | | +----------------------+---------------------+----------------------+ | DLC_RESOLVE_C | Send CANUREACH_ex | SENT_EX | +----------------------+---------------------+----------------------+ RESET is the initial state for the CANUREACH/ICANREACH explorer FSM. This state is exited when a DLC_RESOLVE_C request is received from the DLC or a CANUREACH_ex is received from a remote DLSw. A DLSw implementation may optionally reply from to CANUREACH_ex messages on the basis of cached topology information, in which case the DLC_RESOLVE exchange (i.e., TEST) is not required. If cache is not used, or no match is found, and the DLC permits the use of TEST, DLC_RESOLVE is issued to locate the target MAC and the state changes to RECEIVED_EX. If no cache entry is available and TEST is not allowed by the DLC, a received CANUREACH_ex frame is ignored. 5.4.1.2 SENT_EX State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive ICANREACH_ex | DLC_RESOLVE_R | RESET | | | Optionally update | | | | cache | | +----------------------+---------------------+----------------------+ | DLC_RESOLVE_C | | SENT_EX | +----------------------+---------------------+----------------------+ SENT_EX is entered when the DLSw has issued a CANUREACH_ex message to locate a MAC address. This state is exited when a remote DLSw returns a matching ICANREACH_ex, or after an implementation defined timeout. DLC_RESOLVE events received in this state correspond to TEST
retries by the origin DLC station and are absorbed. An implementation may choose whether to handle explorer frame crossover either by using entirely separate FSM instances and simply allowing both ends to issue TEST frames, or by detecting a reverse CANUREACH_ex frame here and issuing an ICANREACH_ex message and DLC_RESOLVE_R action. 5.4.1.3 RECEIVED_EX State +----------------------+---------------------+----------------------+ | Event | Action(s) | Next State | +----------------------+---------------------+----------------------+ | Receive CANUREACH_ex | Optionally update | RECEIVED_EX | | | cache | | +----------------------+---------------------+----------------------+ | Receive ICANREACH_ex | | RECEIVED_EX | +----------------------+---------------------+----------------------+ | DLC_RESOLVED | Send ICANREACH_ex | RESET | | | Optionally update | | | | cache | | +----------------------+---------------------+----------------------+ RECEIVED_EX is entered when the DLSw has received a CANUREACH_ex from a remote DLSw and has issued a DLC_RESOLVE to locate the MAC address. This state is exited when the DLC_RESOLVED response is received, or after an implementation defined timeout. If the target MAC is located, the DLSw must reply to the first received CANUREACH_ex that caused the move to this state. If additional CANUREACH_ex messages are received in this state from other remote DLSw partners, the DLSw may optionally reply to these messages too but it is not required to do so. An implementation may choose whether to handle explorer frame crossover either by using entirely separate FSM instances and simply allowing both ends to issue TEST frames, or by detecting such a reverse DLC_RESOLVE_C event here and issuing an ICANREACH_ex message and DLC_RESOLVE_R action.