;* ;* ;* Copyright (c) 1991 Microsoft Corporation ;* Copyright (c) 1991 Nokia Data Systems AB ;* ;* Module Name: ;* ;* llclan.fsm ;* ;* Abstract: ;* ;* This finite state machine defines ISO-HDLC ABM protocol, plus ;* 2 (REJ), 10 (modulo 128). ;* This same finite state machine has been defined in IBM ;* "Token-Ring Network: Architecture Reference". ;* The main differences from the IBM specification: ;* - XID and TEST handling have been removed, because it does ;* delong to IEEE 802.2 standard and DLC API support XID and TEST ;* frames only in the SAP level. ;* - The indications sent to the higher level have been specified ;* according to the IBM LAN Techical Refernce and IEEE 802.2 ;* standard. ;* ;* THIS DEFINITION FILE IS COMPILED BY FSMX COMPILER TO C CODE!!!! ;* ;* Author: ;* ;* Antti Saarenheimo [o-anttis] 13-MAY-1991 ;* ;* Revision History: ;* 26-MAY-1991 by o-anttis ;* - All XID and TEST stuff have been removed ;* - All IH (Inform Higher level) primitives have been changed ;* specific indications ;* [[Define]] ;* This name will be used as the prefix of all tables and states ;* produced by the FSM compiler Name = LanLlc ;-- Constants are used in action and condtion fields [Constants] ;-- First we have the action primitives IT1 = TimerStart( &pLink->T1 ) TT1 = TimerStop( &pLink->T1 ) RT1 = TimerStart( &pLink->T1 ) CIT1 = TimerStartIf( &pLink->T1 ) IT2 = TimerStart( &pLink->T2 ) TT2 = TimerStop( &pLink->T2 ) RT2 = TimerStart( &pLink->T2 ) CIT2 = TimerStartIf( &pLink->T2 ) ITi = TimerStart( &pLink->Ti ) TTi = TimerStop( &pLink->Ti ) RTi = TimerStart( &pLink->Ti ) Update_Va = UpdateVa( pLink ) Adjust_Ww = AdjustWw( pLink ) Update_Va_Chkpt = UpdateVaChkpt( pLink ) Disable Link Station = DisableLinkStation( pLink ) Enable Link Station = EnableLinkStation( pLink ) Start Send_Proc = EnableSendProcess( pLink ) Stop Send_Proc = DisableSendProcess( pLink ) Resend Packets = ResendPackets( pLink ) Ignore_LPDU = Status = DLC_STATUS_IGNORE_FRAME Dsc_I-fld = Status = DLC_STATUS_DISCARD_INFO_FIELD Rcv_BTU = Status = STATUS_SUCCESS; pLink->Vr += 2 [Queue_I_LPDU] = Status = STATUS_SUCCESS DefaultAction = Status = DLC_STATUS_NO_ACTION Logical Error = Status = DLC_STATUS_LINK_PROTOCOL_ERROR CONFIRM_CONNECT = EVENT_INDICATION( CONFIRM_CONNECT ) CONFIRM_CONNECT_FAILED = EVENT_INDICATION( CONFIRM_CONNECT_FAILED ) CONFIRM_DISCONNECT = EVENT_INDICATION( CONFIRM_DISCONNECT ) INDICATE_LINK_LOST = EVENT_INDICATION( INDICATE_LINK_LOST ) INDICATE_DM_DISC_RECEIVED = EVENT_INDICATION( INDICATE_DM_DISC_RECEIVED ) INDICATE_FRMR_RECEIVED = EVENT_INDICATION( INDICATE_FRMR_RECEIVED ) INDICATE_FRMR_SENT = EVENT_INDICATION( INDICATE_FRMR_SENT ) INDICATE_CONNECT_REQUEST = EVENT_INDICATION( INDICATE_CONNECT_REQUEST ) INDICATE_RESET = EVENT_INDICATION( INDICATE_RESET ) INDICATE_REMOTE_BUSY = EVENT_INDICATION( INDICATE_REMOTE_BUSY ) INDICATE_REMOTE_READY = EVENT_INDICATION( INDICATE_REMOTE_READY ) INDICATE_TI_TIMER_EXPIRED = EVENT_INDICATION( INDICATE_TI_TIMER_EXPIRED ) ;-- Some Actions want to sent two events or frame. Then we will ;-- queue the first one immediately and save the second one to ;-- the stack. Indicate = Indicate Send_RNR_c = SEND_RNR_CMD Send_RR_c = SEND_RR_CMD ;-- Precompiler replaces %c characters by the actual value [I_c] = DLC_I_COMMAND [REJ_r] = DLC_REJ_RESPONSE [RNR_c] = DLC_RNR_COMMAND [RNR_r] = DLC_RNR_RESPONSE [RR_c] = DLC_RR_COMMAND [RR_r] = DLC_RR_RESPONSE [DISC] = DLC_DISC [DM] = DLC_DM [FRMR] = DLC_FRMR [SABME] = DLC_SABME [UA] = DLC_UA [Send_ACK] = SEND_ACK( pLink ) ;-- Constant enumerations of some variables 01000 = 0x08 01100 = 0x0c 00010 = 0x02 00001 = 0x01 ;-- Vi LIp = LOCAL_INIT_PENDING RIp = REMOTE_INIT_PENDING LRIp = (REMOTE_INIT_PENDING | LOCAL_INIT_PENDING) Op = OPER_MODE_PENDING ISp = IS_FRAME_PENDING ;-- Vb Lb = STATE_LOCAL_BUSY Rb = STATE_REMOTE_BUSY LRb = (STATE_LOCAL_BUSY | STATE_REMOTE_BUSY) DISCp = STACKED_DISCp_CMD [Synonymes] ;-- The poll/final or the command/response bit has not been set ;-- in all inputs. We must covert all inputs to excact commands FRMR = FRMR0|FRMR1 DISC = DISC0|DISC1 DM = DM0|DM1 SABME = SABME0|SABME1 UA = UA0|UA1 I_c = IS_I_c0|IS_I_c1|OS_I_c0|OS_I_c1 I_r = IS_I_r0|IS_I_r1|OS_I_r0|OS_I_r1 I_c0 = IS_I_c0|OS_I_c0 I_c1 = IS_I_c1|OS_I_c1 I_r0 = IS_I_r0|OS_I_r0 I_r1 = IS_I_r1|OS_I_r1 IS_I = IS_I_r0|IS_I_r1|IS_I_c0|IS_I_c1 OS_I = OS_I_r0|OS_I_r1|OS_I_c0|OS_I_c1 REJ = REJ_c0|REJ_c1|REJ_r0|REJ_r1 REJ_c = REJ_c0|REJ_c1 REJ_r = REJ_r0|REJ_r1 RNR = RNR_c0|RNR_c1|RNR_r0|RNR_r1 RNR_c = RNR_c0|RNR_c1 RNR_r = RNR_r0|RNR_r1 RR = RR_c0|RR_c1|RR_r0|RR_r1 RR_c = RR_c0|RR_c1 RR_r = RR_r0|RR_r1 LPDU_INVALID_r = LPDU_INVALID_r0|LPDU_INVALID_r1 LPDU_INVALID_c = LPDU_INVALID_c0|LPDU_INVALID_c1 LPDU_INVALID = LPDU_INVALID_r0|LPDU_INVALID_r1|LPDU_INVALID_c0|\ LPDU_INVALID_c1 [StateInputs] State = LINK_CLOSED State = DISCONNECTED State = LINK_OPENING State = DISCONNECTING State = FRMR_SENT State = LINK_OPENED State = LOCAL_BUSY State = REJECTION State = CHECKPOINTING State = CHKP_LOCAL_BUSY State = CHKP_REJECT State = RESETTING State = REMOTE_BUSY State = LOCAL_REMOTE_BUSY State = REJECT_LOCAL_BUSY State = REJECT_REMOTE_BUSY State = CHKP_REJECT_LOCAL_BUSY State = CHKP_CLEARING State = CHKP_REJECT_CLEARING State = REJECT_LOCAL_REMOTE_BUSY State = FRMR_RECEIVED Input = DISC0,DISC1 Input = DM0,DM1 Input = FRMR0,FRMR1 Input = SABME0,SABME1 Input = UA0,UA1 Input = IS_I_r0,IS_I_r1,IS_I_c0,IS_I_c1 Input = OS_I_r0,OS_I_r1,OS_I_c0,OS_I_c1 Input = REJ_r0,REJ_r1,REJ_c0,REJ_c1 Input = RNR_r0,RNR_r1,RNR_c0,RNR_c1 Input = RR_r0,RR_r1,RR_c0,RR_c1 Input = LPDU_INVALID_r0,LPDU_INVALID_r1,LPDU_INVALID_c0,LPDU_INVALID_c1 Input = ACTIVATE_LS Input = DEACTIVATE_LS Input = ENTER_LCL_Busy Input = EXIT_LCL_Busy Input = SEND_I_POLL Input = SET_ABME Input = SET_ADM Input = Ti_Expired Input = T1_Expired Input = T2_Expired ;-- Only variables may be left side assign or a condition (!!!) ;-- All variables used in Action and Condition lines must be defined here [Variables] NewSt = pLink->State P_Ct = pLink->P_Ct Ia_Ct= pLink->Ia_Ct Ir_Ct= pLink->Ir_Ct Is_Ct= pLink->Is_Ct Nr = pLink->Nr ; Ns = pLink->Ns ; Nw = pLink->Nw N2 = pLink->N2 N3 = pLink->N3 Pf = pLink->Pf ; Ti = pLink->Ti ; T1 = pLink->T1 ; T2 = pLink->T2 ; TW = pLink->TW Va = pLink->Va Vb = pLink->Vb Vc = pLink->Vc Vi = pLink->Vi Vp = pLink->Vp Vr = pLink->Vr Vs = pLink->Vs Ww = pLink->Ww P = boolPollFinal VWXYZ = pLink->DlcStatus.FrmrData.Reason ;******************** LINK_CLOSED (01) *********************** [[State]] Name = LINK_CLOSED [Transition] Input = ACTIVATE_LS Predicate = Action = Enable Link Station; Vi = Vb = Vc = 0; ITi NewState = DISCONNECTED [Transition] Input = DEACTIVATE_LS|ENTER_LCL_Busy|EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID Predicate = Action = Ignore_LPDU NewState = [Transition] ; Input = SEND_BTU|SET_ABME|SET_ADM|Ti_Expired|\ Input = SET_ABME|SET_ADM|Ti_Expired|\ T1_Expired|T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC|DM|FRMR|SABME||UA|I_c|I_r|REJ|RNR|RR Predicate = Action = Ignore_LPDU NewState = ;******************** DISCONNECTED (02) *********************** [[State]] Name = DISCONNECTED [Transition] Input = ACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = DEACTIVATE_LS Predicate = Action = Disable Link Station NewState = LINK_CLOSED [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0 NewState = [Transition] Input = LPDU_INVALID Predicate = Action = Ignore_LPDU NewState = ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = Logical Error ; NewState = [Transition] Input = SET_ABME Predicate = Vi==0 Action = Vi=LIp; TTi; CIT1; P_Ct=N2; Is_Ct=N2; [SABME](1) NewState = LINK_OPENING [Transition] Input = SET_ABME Predicate = Vi==RIp Action = Vi=Op; Is_Ct=N2; Ir_Ct=N3; RTi; Va=Vs=Vr=Vp=0; [UA](Pf) NewState = LINK_OPENING [Transition] Input = SET_ADM Predicate = Vi==0 Action = CONFIRM_DISCONNECT; RTi; [DM](0) NewState = [Transition] Input = SET_ADM Predicate = Vi==RIp Action = CONFIRM_DISCONNECT; Vi=0; RTi; [DM](Pf) NewState = [Transition] Input = Ti_Expired Predicate = Action = ITi NewState = [Transition] Input = T1_Expired Predicate = P_Ct==0 Action = ; NewState = [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = [DM](P) NewState = [Transition] Input = DM|FRMR Predicate = Action = Ignore_LPDU NewState = ;* ;* THIS IS NON-IBM EXTENSION! ;* We want to indicate just one remote connect request. ;* Otherwise the client would try to create more than one ;* link station for the same link. ;* [Transition] Input = SABME ; Predicate = Predicate = Vi==0 Action = INDICATE_CONNECT_REQUEST; Vi=RIp; Pf=P; RTi NewState = [Transition] Input = UA Predicate = Action = Ignore_LPDU NewState = [Transition] Input = I_c0|I_r0 Predicate = Action = Ignore_LPDU NewState = [Transition] Input = I_c1 Predicate = Action = [DM](1) NewState = [Transition] Input = I_r1 Predicate = Action = Ignore_LPDU NewState = [Transition] Input = REJ_c0|RNR_c0|RR_c0 Predicate = Action = Ignore_LPDU NewState = [Transition] Input = REJ_c1|RNR_c1|RR_c1 Predicate = Action = [DM](1) NewState = [Transition] Input = REJ_r|RNR_r|RR_r Predicate = Action = Ignore_LPDU NewState = ;******************** LINK_OPENING (03) *********************** [[State]] Name = LINK_OPENING [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0 NewState = ; I can't allow this to happen, because the FRNR_SENT state might ; eventually end to an opened state => this indication would be wrong. ; ; [Transition] ; Input = LPDU_INVALID ; Predicate = Vi==Op, Nr!=0 ; Action = INDICATE_FRMR_SENT, RTi; WXYZ=00001; [FRMR](P); \ ; CONFIRM_CONNECT_FAILED; ; NewState = FRMR_SENT ; ; [Transition] ; Input = LPDU_INVALID ; Predicate = Vi!=Op ; Action = Ignore_LPDU ; NewState = [Transition] Input = LPDU_INVALID Predicate = Action = Ignore_LPDU NewState = [Transition] ; Input = SEND_BTU|SET_ABME Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Vi==LIp || Vi==RIp Action = CONFIRM_CONNECT_FAILED; CONFIRM_DISCONNECT; Vi=0; TT1; \ ITi; [DM](0) NewState = DISCONNECTED [Transition] Input = SET_ADM Predicate = Vi==Op Action = Vi=0; TTi; IT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING ; ; Yet another bug in the IBM state machine: We are forever stuck ; in the LINK_PENING state, if an open link station was reset ; any a remote busy state (when Vb!=0 && Vb=Lb). ; Vb==Lb must actually mean (Vb&Lb) != 0 and Vb==0 must mean ; (Vb&Lb) == 0 [Transition] Input = Ti_Expired Predicate = (Vb&Lb)==0 Action = CONFIRM_CONNECT; INDICATE_TI_TIMER_EXPIRED;\ Vi=ISp; IT1; P_Ct=N2; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = Ti_Expired Predicate = (Vb&Lb)!=0 Action = CONFIRM_CONNECT; INDICATE_TI_TIMER_EXPIRED; \ Vi=ISp; IT1; P_Ct=N2; [RNR_c](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = T1_Expired Predicate = P_Ct==0, Vi==LIp Action = CONFIRM_CONNECT_FAILED; INDICATE_LINK_LOST; Vi=0; ITi NewState = DISCONNECTED [Transition] Input = T1_Expired Predicate = P_Ct!=0, Vi==LIp Action = IT1; P_Ct--; [SABME](1) NewState = [Transition] Input = T1_Expired Predicate = Vi==LRIp, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Va=Vs=Vr=Vp=0, Vi=ISp, Vc=0; IT1; P_Ct=N2; \ Is_Ct=N2; Ir_Ct=N3; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = T1_Expired Predicate = Vi==LRIp, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Va=Vs=Vr=Vp=0; Vi=ISp; Vc=0; IT1; P_Ct=N2; \ Is_Ct=N2; Ir_Ct=N3; [RNR_c](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = CONFIRM_CONNECT_FAILED; INDICATE_DM_DISC_RECEIVED; Vi=0; \ TT1; RTi; [DM](P) NewState = DISCONNECTED [Transition] Input = DM Predicate = Action = CONFIRM_CONNECT_FAILED; INDICATE_DM_DISC_RECEIVED; \ Vi=0; TT1; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = Ignore_LPDU NewState = [Transition] Input = SABME0|SABME1 Predicate = Vi==Op Action = RTi; [UA](P) NewState = [Transition] Input = SABME0|SABME1 Predicate = Vi==LIp || Vi==LRIp Action = Vi=LRIp; [UA](P) NewState = [Transition] Input = UA1 Predicate = (Vi==LIp || Vi==LRIp), (Vb&Lb)==0 Action = CONFIRM_CONNECT; Va=Vs=Vr=Vp=0; Vi=ISp; Vc=0; RT1; P_Ct=N2; \ Is_Ct=N2; Ir_Ct=N3; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = UA1 Predicate = (Vi==LIp || Vi==LRIp), (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Va=Vs=Vr=Vp=0; Vi=ISp; Vc=0; RT1; P_Ct=N2; \ Is_Ct=N2; Ir_Ct=N3; [RNR_c](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = UA1 Predicate = (Vi==Op) Action = Ignore_LPDU NewState = [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Vi=0; Rcv_BTU; RTi; Start Send_Proc; [Send_ACK] NewState = LINK_OPENED [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vi=0; Dsc_I-fld; RTi; Start Send_Proc; \ [RNR_r](0) NewState = LOCAL_BUSY [Transition] Input = IS_I_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Vi=0; Rcv_BTU; RTi; Start Send_Proc; [RR_r](1) NewState = LINK_OPENED [Transition] Input = IS_I_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vi=0; Dsc_I-fld; RTi; Start Send_Proc;\ [RNR_r](1) NewState = LOCAL_BUSY [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Vi=0; Dsc_I-fld; RTi; Start Send_Proc;\ [REJ_r](0) NewState = REJECTION [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vi=0; Dsc_I-fld; RTi; Start Send_Proc;\ [RNR_r](0) NewState = LOCAL_BUSY [Transition] Input = OS_I_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Vi=0; Dsc_I-fld; RTi; Start Send_Proc; \ [REJ_r](1) NewState = REJECTION [Transition] Input = OS_I_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vi=0; Dsc_I-fld; RTi; Start Send_Proc; [RNR_r](1) NewState = LOCAL_BUSY [Transition] Input = RNR_c0|RNR_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; INDICATE_REMOTE_BUSY; Vb=Rb; \ Vi=0; RTi; Is_Ct=N2 NewState = REMOTE_BUSY [Transition] Input = RNR_c0|RNR_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vb=LRb; Vi=0; RTi; Is_Ct=N2 NewState = LOCAL_REMOTE_BUSY [Transition] Input = RNR_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; INDICATE_REMOTE_BUSY; Vb=Rb; \ Vi=0; RTi; Is_Ct=N2; [RR_r](1) NewState = REMOTE_BUSY [Transition] Input = RNR_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vb=LRb; Vi=0; RTi; Is_Ct=N2; [RNR_r](1) NewState = LOCAL_REMOTE_BUSY [Transition] Input = RR_c0|RR_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Vi=0; RTi; Start Send_Proc NewState = LINK_OPENED [Transition] Input = RR_c0|RR_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vi=0; RTi; Start Send_Proc NewState = LOCAL_BUSY [Transition] Input = RR_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Vi=0; RTi; Start Send_Proc; [RR_r](1) NewState = LINK_OPENED [Transition] Input = RR_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vi=0; RTi; Start Send_Proc; [RNR_r](1) NewState = LOCAL_BUSY [Transition] Input = REJ_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Vi=0; RTi; Start Send_Proc; [RR_r](1) NewState = LINK_OPENED [Transition] Input = REJ_c1 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vi=0; RTi; Start Send_Proc; [RNR_r](1) NewState = LOCAL_BUSY [Transition] Input = REJ_c0|REJ_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)==0 Action = CONFIRM_CONNECT; Vi=0; RTi; Start Send_Proc NewState = LINK_OPENED [Transition] Input = REJ_c0|REJ_r0 Predicate = Vi==Op, Nr==0, (Vb&Lb)!=0 Action = CONFIRM_CONNECT; Vi=0; RTi; Start Send_Proc NewState = LOCAL_BUSY ;******************** DISCONNECTING (04) *********************** [[State]] Name = DISCONNECTING [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0 NewState = [Transition] Input = LPDU_INVALID Predicate = Action = Ignore_LPDU NewState = [Transition] ; Input = SEND_BTU|SET_ABME|SET_ADM|Ti_Expired Input = SET_ABME|SET_ADM|Ti_Expired Predicate = Action = Logical Error NewState = [Transition] Input = T1_Expired Predicate = P_Ct==0 Action = CONFIRM_DISCONNECT; ITi NewState = DISCONNECTED [Transition] Input = T1_Expired Predicate = P_Ct!=0 Action = IT1; P_Ct--; [DISC](1) NewState = [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = [UA](P) NewState = [Transition] Input = DM0|DM1 Predicate = Action = CONFIRM_DISCONNECT; TT1; ITi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = Ignore_LPDU NewState = [Transition] Input = SABME0|SABME1 Predicate = Action = CONFIRM_DISCONNECT; TT1; ITi; [DM](P) NewState = DISCONNECTED [Transition] Input = UA1 Predicate = Action = CONFIRM_DISCONNECT; TT1; ITi NewState = DISCONNECTED [Transition] Input = I_c|I_r Predicate = Action = Ignore_LPDU NewState = [Transition] Input = REJ|RNR|RR Predicate = Action = Ignore_LPDU NewState = ;******************** FRMR_SENT (05) *********************** [[State]] Name = FRMR_SENT [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0 NewState = [Transition] Input = LPDU_INVALID Predicate = Action = Ignore_LPDU NewState = ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = Logical Error ; NewState = [Transition] Input = SET_ABME Predicate = Action = TTi; IT1; P_Ct=N2; Vi=LIp; [SABME](1) NewState = LINK_OPENING [Transition] Input = SET_ADM Predicate = Action = TTi; IT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = INDICATE_TI_TIMER_EXPIRED; ITi NewState = [Transition] Input = T1_Expired|T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; P_Ct=N2; RTi NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; RTi NewState = RESETTING [Transition] Input = UA Predicate = Action = Ignore_LPDU NewState = [Transition] Input = I_c0|I_c1 Predicate = Action = INDICATE_FRMR_SENT; RTi; [FRMR](P) NewState = [Transition] Input = I_r0|I_r1 Predicate = Action = Ignore_LPDU NewState = [Transition] Input = REJ_c0|REJ_c1|RNR_c0|RNR_c1|RR_c0|RR_c1 Predicate = Action = INDICATE_FRMR_SENT; RTi; [FRMR](P) NewState = [Transition] Input = REJ_r0|REJ_r1|RNR_r0|RNR_r1|RR_r0|RR_r1 Predicate = Action = Ignore_LPDU NewState = ;******************** LINK_OPENED (06) *********************** [[State]] Name = LINK_OPENED [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb; TT2; Ir_Ct=N3; [RNR_r](0) NewState = LOCAL_BUSY [Transition] Input = EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; TT2; RTi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; TT2; RTi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SEND_I_POLL Predicate = Action = RT1; P_Ct=N2; Vp=Vs; Ir_Ct=N3; Is_Ct-- NewState = CHECKPOINTING [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Action = TTi; RT1; P_Ct=N2; TT2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = IT1; P_Ct=N2; TT2; Ir_Ct=N3; Stop Send_Proc; Vp=Vs; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = T1_Expired Predicate = Is_Ct>0 Action = IT1; P_Ct=N2; TT2; Ir_Ct=N3; Stop Send_Proc; Vp=Vs; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = T1_Expired Predicate = Is_Ct<=0 Action = INDICATE_LINK_LOST; TT2; P_Ct=N2; IT1; [DISC](1) NewState = DISCONNECTING [Transition] Input = T2_Expired Predicate = Action = Ir_Ct=N3; [RR_r](0) NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; TT2; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; TT2 NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi; P_Ct=N2; TT2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; RTi; TT2 NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; TT2; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0|IS_I_r1 Predicate = Action = Update_Va; Rcv_BTU; [Send_ACK] NewState = [Transition] Input = IS_I_c1 Predicate = Action = Update_Va; Rcv_BTU; TT2; Ir_Ct=N3; [RR_r](1) NewState = [Transition] Input = OS_I_c0|OS_I_r0|OS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld; TT2; Ir_Ct=N3; [REJ_r](0) NewState = REJECTION [Transition] Input = OS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; TT2; Ir_Ct=N3; [REJ_r](1) NewState = REJECTION [Transition] Input = REJ_c0 | REJ_r Predicate = Nr == Vs Action = Update_Va NewState = [Transition] Input = REJ_c0 | REJ_r Predicate = Nr != Vs Action = Resend Packets, Update_Va; Is_Ct-- NewState = [Transition] Input = REJ_c1 Predicate = Nr == Vs Action = Update_Va; TT2; [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Nr != Vs Action = Resend Packets, Update_Va; TT2; Ir_Ct=N3; Is_Ct--;\ [RR_r](1) NewState = [Transition] Input = RNR_c0|RNR_r0|RNR_r1 Predicate = Action = INDICATE_REMOTE_BUSY; Update_Va; Vb=Rb, Is_Ct=N2; \ Stop Send_Proc NewState = REMOTE_BUSY [Transition] Input = RNR_c1 Predicate = Action = INDICATE_REMOTE_BUSY; Update_Va; Vb=Rb; TT2; Ir_Ct=N3; \ Is_Ct=N2; Stop Send_Proc; [RR_r](1) NewState = REMOTE_BUSY [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Action = Update_Va NewState = [Transition] Input = RR_c1 Predicate = Action = Update_Va; TT2; Ir_Ct=N3; [RR_r](1) NewState = ;******************** LOCAL_BUSY (07) *********************** [[State]] Name = LOCAL_BUSY [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS | ENTER_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0; TTi; RT1; P_Ct=N2; Vp=Vs; Stop Send_Proc; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SEND_I_POLL Predicate = Action = RT1; P_Ct=N2; Vp=Vs; Ir_Ct=N3; Is_Ct-- NewState = CHKP_LOCAL_BUSY [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Action = TTi; RT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = IT1; P_Ct=N2; Stop Send_Proc; Vp=Vs; [RNR_c](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = T1_Expired Predicate = Is_Ct>0 Action = IT1; P_Ct=N2; Stop Send_Proc; Vp=Vs; [RNR_c](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = T1_Expired Predicate = Is_Ct<=0 Action = TT2; P_Ct=N2; IT1; [DISC](1) NewState = DISCONNECTING [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; RTi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x08; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0|IS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](0) NewState = [Transition] Input = IS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = OS_I_c0|OS_I_r0|OS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](0) NewState = [Transition] Input = OS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = REJ_c0 | REJ_r Predicate = Nr == Vs Action = Update_Va NewState = [Transition] Input = REJ_c0 | REJ_r Predicate = Nr != Vs Action = Resend Packets, Update_Va; Is_Ct-- NewState = [Transition] Input = REJ_c1 Predicate = Nr == Vs Action = Update_Va; TT2; [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Nr != Vs Action = Resend Packets, Update_Va; Is_Ct--; [RNR_r](1) NewState = [Transition] Input = RNR_c0|RNR_r0|RNR_r1 Predicate = Action = Update_Va; Vb=LRb; Is_Ct=N2; Stop Send_Proc NewState = LOCAL_REMOTE_BUSY [Transition] Input = RNR_c1 Predicate = Action = Update_Va; Vb=LRb; Is_Ct=N2; Stop Send_Proc; [RNR_r](1) NewState = LOCAL_REMOTE_BUSY [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Action = Update_Va NewState = [Transition] Input = RR_c1 Predicate = Action = Update_Va; [RNR_r](1) NewState = ;******************** REJECTION (08) *********************** [[State]] Name = REJECTION [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb; [RNR_r](0) NewState = REJECT_LOCAL_BUSY [Transition] Input = EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=00001; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=00001; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SEND_I_POLL Predicate = Action = RT1; P_Ct=N2; Vp=Vs; Is_Ct-- NewState = CHKP_REJECT [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Action = TTi; RT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = IT1; P_Ct=N2; Stop Send_Proc; Vp=Vs; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = T1_Expired Predicate = Is_Ct>0 Action = IT1; P_Ct=N2; Stop Send_Proc; Vp=Vs; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = T1_Expired Predicate = P_Ct<=0 Action = P_Ct=N2; IT1; [DISC](1) NewState = DISCONNECTING [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; RTi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0|IS_I_r1 Predicate = Action = Update_Va; Rcv_BTU; [Send_ACK] NewState = LINK_OPENED [Transition] Input = IS_I_c1 Predicate = Action = Update_Va; Rcv_BTU; [RR_r](1) NewState = LINK_OPENED [Transition] Input = OS_I_c0|OS_I_r0|OS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld NewState = [Transition] Input = OS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RR_r](1) NewState = [Transition] Input = REJ_c0 | REJ_r0 | REJ_r1 Predicate = Nr == Vs Action = Update_Va NewState = [Transition] Input = REJ_c0 | REJ_r Predicate = Nr != Vs Action = Resend Packets, Update_Va; Is_Ct-- NewState = [Transition] Input = REJ_c1 Predicate = Nr == Vs Action = Update_Va; TT2; [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Nr != Vs Action = Resend Packets, Update_Va; Is_Ct--; [RR_r](1) NewState = [Transition] Input = RNR_c0|RNR_r0|RNR_r1 Predicate = Action = INDICATE_REMOTE_BUSY; Update_Va; Vb=Rb; Is_Ct=N2; Stop Send_Proc NewState = REJECT_REMOTE_BUSY [Transition] Input = RNR_c1 Predicate = Action = INDICATE_REMOTE_BUSY; Update_Va; Vb=Rb; Is_Ct=N2; \ Stop Send_Proc; [RR_r](1) NewState = REJECT_REMOTE_BUSY [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Action = Update_Va NewState = [Transition] Input = RR_c1 Predicate = Action = Update_Va; [RR_r](1) NewState = ;******************** CHECKPOINTING (09) *********************** [[State]] Name = CHECKPOINTING [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb; TT2; Ir_Ct=N3; [RNR_r](0) NewState = CHKP_LOCAL_BUSY [Transition] Input = EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; TT2; ITi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; TT2; ITi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Vc==0 Action = Vc=DISCp NewState = [Transition] Input = SET_ADM Predicate = Vc!=0 Action = Logical Error NewState = [Transition] Input = Ti_Expired Predicate = Action = Logical Error NewState = [Transition] Input = T1_Expired Predicate = P_Ct==0 Action = INDICATE_LINK_LOST; TT2; ITi NewState = DISCONNECTED [Transition] Input = T1_Expired Predicate = P_Ct!=0 Action = IT1; P_Ct--; Vp=Vs; TT2; Ir_Ct=N3; Stop Send_Proc; [RR_c](1) NewState = [Transition] Input = T2_Expired Predicate = Action = Ir_Ct=N3; [RR_r](0) NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi; TT2; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi; TT2 NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi; P_Ct=N2; TT2; Vc=0 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; ITi; TT2 NewState = RESETTING [Transition] Input = UA Predicate = Vi!=ISp Action = INDICATE_FRMR_SENT; TT1; ITi; TT2; Vc=0; [FRMR](0) NewState = FRMR_SENT [Transition] Input = UA Predicate = Vi==ISp Action = Ignore_LPDU NewState = [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va == Nr Action = Rcv_BTU; [Send_ACK] NewState = [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Rcv_BTU; Is_Ct=N2; [Send_ACK] NewState = [Transition] Input = IS_I_c1 Predicate = Va == Nr Action = Rcv_BTU; TT2; Ir_Ct=N3; [RR_r](1) NewState = [Transition] Input = IS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Rcv_BTU; Is_Ct=N2; TT2; Ir_Ct=N3; [RR_r](1) NewState = [Transition] Input = IS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Rcv_BTU; Start Send_Proc; [Send_ACK] NewState = LINK_OPENED [Transition] Input = IS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Dsc_I-fld; Vc=0; TTi; P_Ct=N2; TT2; \ [DISC](1) NewState = DISCONNECTING [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va == Nr Action = Dsc_I-fld; TT2; Ir_Ct=N3; [REJ_r](0) NewState = CHKP_REJECT [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; TT2; Ir_Ct=N3; [REJ_r](0) NewState = CHKP_REJECT [Transition] Input = OS_I_c1 Predicate = Va == Nr Action = Dsc_I-fld; TT2; Ir_Ct=N3; [REJ_r](1) NewState = CHKP_REJECT [Transition] Input = OS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; TT2; Ir_Ct=N3; [REJ_r](1) NewState = CHKP_REJECT [Transition] Input = OS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Dsc_I-fld; TT2; Ir_Ct=N3; Start Send_Proc; \ [REJ_r](0) NewState = REJECTION [Transition] Input = OS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; TT2; [DISC](1) NewState = DISCONNECTING [Transition] Input = REJ_c0 | REJ_r0 Predicate = Va != Nr Action = Is_Ct=N2; Resend Packets NewState = [Transition] Input = REJ_c1 Predicate = Va == Nr Action = TT2; [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Va != Nr Action = Is_Ct=N2; TT2; Ir_Ct=N3; Resend Packets; [RR_r](1) NewState = [Transition] Input = REJ_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Start Send_Proc NewState = LINK_OPENED [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va == Nr Action = Vb=Rb; Is_Ct=N2 NewState = [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va != Nr Action = Adjust_Ww; Vb=Rb; Is_Ct=N2 NewState = [Transition] Input = RNR_c1 Predicate = Va == Nr Action = Vb=Rb; TT2; Is_Ct=N2; Ir_Ct=N3; [RR_r](1) NewState = [Transition] Input = RNR_c1 Predicate = Va != Nr Action = Adjust_Ww; Vb=Rb; TT2; Is_Ct=N2; Ir_Ct=N3; [RR_r](1) NewState = [Transition] Input = RNR_r1 Predicate = Vc==0 Action = INDICATE_REMOTE_BUSY; Update_Va_Chkpt; Is_Ct=N2 NewState = REMOTE_BUSY [Transition] Input = RR_c0 | RR_r0 Predicate = Va == Nr Action = ; NewState = [Transition] Input = RR_c0 | RR_r0 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2 NewState = [Transition] Input = RR_c1 Predicate = Va == Nr Action = TT2; Ir_Ct=N3; [RR_r](1) NewState = [Transition] Input = RR_c1 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; TT2; Ir_Ct=N3; [RR_r](1) NewState = [Transition] Input = RR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Start Send_Proc NewState = LINK_OPENED [Transition] Input = REJ_r1|RNR_r1|RR_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING ;***************** CHECKPOINTING+LOCAL_BUSY (10) ******************** [[State]] Name = CHKP_LOCAL_BUSY [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS | ENTER_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0; [RR_r](0) NewState = CHKP_CLEARING [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Vc==0 Action = Vc=DISCp NewState = [Transition] Input = SET_ADM Predicate = Vc!=0 Action = Logical Error NewState = [Transition] Input = Ti_Expired Predicate = Action = Logical Error NewState = [Transition] Input = T1_Expired Predicate = P_Ct==0 Action = INDICATE_LINK_LOST; ITi NewState = DISCONNECTED [Transition] Input = T1_Expired Predicate = P_Ct!=0 Action = IT1; P_Ct--; Vp=Vs; Stop Send_Proc; [RNR_c](1) NewState = [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; ITi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; ITi NewState = RESETTING [Transition] Input = UA Predicate = Vi!=ISp Action = INDICATE_FRMR_SENT; TT1; ITi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = UA Predicate = Vi==ISp Action = Ignore_LPDU NewState = [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va == Nr Action = Dsc_I-fld; [RNR_r](0) NewState = [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [RNR_r](0) NewState = [Transition] Input = IS_I_c1 Predicate = Va == Nr Action = Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = IS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = IS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Dsc_I-fld; Start Send_Proc; [RNR_r](0) NewState = LOCAL_BUSY [Transition] Input = IS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va == Nr Action = Dsc_I-fld NewState = [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2 NewState = [Transition] Input = OS_I_c1 Predicate = Va == Nr Action = Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = OS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = OS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Dsc_I-fld; Start Send_Proc NewState = LOCAL_BUSY [Transition] Input = OS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = REJ_c0 | REJ_r0 Predicate = Va != Nr Action = Is_Ct=N2; Resend Packets NewState = [Transition] Input = REJ_c1 Predicate = Va == Nr Action = [RNR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Va != Nr Action = Is_Ct=N2; Resend Packets; [RNR_r](1) NewState = [Transition] Input = REJ_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Start Send_Proc NewState = LOCAL_BUSY [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va == Nr Action = Vb=LRb; Is_Ct=N2 NewState = [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va != Nr Action = Adjust_Ww; Vb=LRb; Is_Ct=N2 NewState = [Transition] Input = RNR_c1 Predicate = Va == Nr Action = Vb=LRb; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = RNR_c1 Predicate = Va != Nr Action = Adjust_Ww; Vb=LRb; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = RNR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Vb=LRb; Is_Ct=N2 NewState = LOCAL_REMOTE_BUSY [Transition] Input = RR_c0 | RR_r0 Predicate = Va == Nr Action = ; NewState = [Transition] Input = RR_c0 | RR_r0 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2 NewState = [Transition] Input = RR_c1 Predicate = Va == Nr Action = [RNR_r](1) NewState = [Transition] Input = RR_c1 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = RR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Start Send_Proc NewState = LOCAL_BUSY [Transition] Input = REJ_r1|RNR_r1|RR_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING ;******************** CHKP_REJECT (11) *********************** [[State]] Name = CHKP_REJECT [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Vc==0 Action = Vc=DISCp NewState = [Transition] Input = SET_ADM Predicate = Vc!=0 Action = Logical Error NewState = [Transition] Input = Ti_Expired Predicate = Action = Logical Error NewState = [Transition] Input = T1_Expired Predicate = P_Ct==0 Action = INDICATE_LINK_LOST; ITi NewState = DISCONNECTED [Transition] Input = T1_Expired Predicate = P_Ct!=0 Action = IT1; P_Ct--; Vp=Vs; Stop Send_Proc; [RR_c](1) NewState = [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; ITi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; ITi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va == Nr Action = Rcv_BTU; [Send_ACK] NewState = CHECKPOINTING [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Rcv_BTU; Is_Ct=N2; [Send_ACK] NewState = CHECKPOINTING [Transition] Input = IS_I_c1 Predicate = Va == Nr Action = Rcv_BTU; [RR_r](1) NewState = CHECKPOINTING [Transition] Input = IS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Rcv_BTU; Is_Ct=N2; [RR_r](1) NewState = CHECKPOINTING [Transition] Input = IS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Rcv_BTU; Start Send_Proc; [Send_ACK] NewState = LINK_OPENED [Transition] Input = IS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va == Nr Action = Dsc_I-fld NewState = [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2 NewState = [Transition] Input = OS_I_c1 Predicate = Va == Nr Action = Dsc_I-fld; [RR_r](1) NewState = [Transition] Input = OS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = OS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Dsc_I-fld; Start Send_Proc NewState = REJECTION [Transition] Input = OS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = REJ_c0 | REJ_r0 Predicate = Va != Nr Action = Is_Ct=N2; Resend Packets NewState = [Transition] Input = REJ_c1 Predicate = Va == Nr Action = [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Va != Nr Action = Is_Ct=N2; Resend Packets; [RR_r](1) NewState = [Transition] Input = REJ_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Start Send_Proc NewState = REJECTION [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va == Nr Action = Vb=Rb; Is_Ct=N2 NewState = [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va != Nr Action = Adjust_Ww; Vb=Rb; Is_Ct=N2 NewState = [Transition] Input = RNR_c1 Predicate = Va == Nr Action = Vb=Rb; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = RNR_c1 Predicate = Va != Nr Action = Adjust_Ww; Vb=Rb; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = RNR_r1 Predicate = Vc==0 Action = INDICATE_REMOTE_BUSY; Update_Va_Chkpt; Is_Ct=N2 NewState = REJECT_REMOTE_BUSY [Transition] Input = RR_c0 | RR_r0 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2 NewState = [Transition] Input = RR_c1 Predicate = Va == Nr Action = [RR_r](1) NewState = [Transition] Input = RR_c1 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = RR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Start Send_Proc NewState = REJECTION [Transition] Input = REJ_r1|RNR_r1|RR_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING ;******************** RESETTING (12) *********************** [[State]] Name = RESETTING [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0 NewState = [Transition] Input = LPDU_INVALID Predicate = Action = Ignore_LPDU NewState = ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = Logical Error ; NewState = [Transition] Input = SET_ABME Predicate = Action = Vi=Op; RTi; Va=Vs=Vr=Vp=0; Is_Ct=N2; Ir_Ct=N3; [UA](Pf) NewState = LINK_OPENING [Transition] Input = SET_ADM Predicate = Action = CONFIRM_DISCONNECT; Vi=0; RTi; [DM](Pf) NewState = DISCONNECTED [Transition] Input = Ti_Expired Predicate = Action = INDICATE_TI_TIMER_EXPIRED; ITi NewState = [Transition] Input = T1_Expired|T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; Vi=0; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; Vi=0; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; Vi=0; RTi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; RTi NewState = [Transition] Input = UA Predicate = Action = Ignore_LPDU NewState = [Transition] Input = IS_I|OS_I Predicate = Action = Ignore_LPDU NewState = [Transition] Input = REJ|RNR|RR Predicate = Action = Ignore_LPDU NewState = ;******************** REMOTE_BUSY (13) *********************** [[State]] Name = REMOTE_BUSY [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=LRb; TT2; Ir_Ct=N3; [RNR_r](0) NewState = LOCAL_REMOTE_BUSY [Transition] Input = EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; TT2; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; TT2; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Action = TTi; RT1; P_Ct=N2; TT2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = IT1; P_Ct=N2; Vp=Vs; TT2; Ir_Ct=N3; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = T1_Expired Predicate = Is_Ct>0 Action = IT1; P_Ct=N2; Vp=Vs; TT2; Ir_Ct=N3; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = T1_Expired Predicate = Is_Ct<=0 Action = TT2; P_Ct=N2; IT1; [DISC](1) NewState = DISCONNECTING [Transition] Input = T2_Expired Predicate = Action = Ir_Ct=N3; [RR_r](0) NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; TT2; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; TT2 NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi; P_Ct=N2; TT2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; RTi; TT2 NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; TT2; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Action = Update_Va; Rcv_BTU; [Send_ACK] NewState = [Transition] Input = IS_I_r1 Predicate = Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; Rcv_BTU; [Send_ACK] NewState = LINK_OPENED [Transition] Input = IS_I_c1 Predicate = Action = Update_Va; Rcv_BTU; TT2; Ir_Ct=N3; [RR_r](1) NewState = [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Action = Update_Va; Dsc_I-fld; TT2; Ir_Ct=N3; [REJ_r](0) NewState = REJECT_REMOTE_BUSY [Transition] Input = OS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; TT2; Ir_Ct=N3; [RNR_r](1) NewState = REJECT_REMOTE_BUSY [Transition] Input = OS_I_r1 Predicate = Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; Dsc_I-fld; TT2; \ [REJ_r](0) NewState = REJECTION [Transition] Input = REJ_c0 | REJ_r Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; Start Send_Proc NewState = LINK_OPENED [Transition] Input = REJ_c0 | REJ_r Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=0; Resend Packets, Update_Va;\ Is_Ct--; Start Send_Proc NewState = LINK_OPENED [Transition] Input = REJ_c1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=0; Resend Packets, Update_Va;\ TT2; Is_Ct--; Ir_Ct=N3; Start Send_Proc; [RR_r](1) NewState = LINK_OPENED [Transition] Input = REJ_c1 Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; TT2; Start Send_Proc;\ [RR_r](1) NewState = LINK_OPENED [Transition] Input = RNR_c0|RNR_r0|RNR_r1 Predicate = Action = Update_Va NewState = [Transition] Input = RNR_c1 Predicate = Action = Update_Va; TT2; Ir_Ct=N3; [RR_r](1) NewState = ; ; The orginal IBM state machine sucks!!! ; ; We must restart T1 timer, because by sending Poll we actually ; sync the send and receive state variables. Otherwise a ; pending T1 timeout will send immediately another RR-c1, that will ; actually kill this state machine (in a MP system the SendSpinLock ; keeps the link stable). UpdateVa cannot restart T1, if no new ; frames have been acknowledged (it's impossible!) ; ; [Transition] ; Input = RR_c1 ; Predicate = Nr != Vs ; Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; TT2; Ir_Ct=N3;\ ; Send_RR_c(1); [RR_r](1) ; NewState = CHECKPOINTING [Transition] Input = RR_c1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; RT1; TT2; Ir_Ct=N3;\ Send_RR_c(1); [RR_r](1) NewState = CHECKPOINTING [Transition] Input = RR_c1 Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; TT2; \ Start Send_Proc; Ir_Ct=N3; [RR_r](1) NewState = LINK_OPENED [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; RT1; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; Start Send_Proc NewState = LINK_OPENED ;******************** LOCAL_REMOTE_BUSY (14) *********************** [[State]] Name = LOCAL_REMOTE_BUSY [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS | ENTER_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=Rb; TTi; RT1; P_Ct=N2; Vp=Vs; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Action = TTi; RT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = IT1; P_Ct=N2; Vp=Vs; [RNR_c](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = T1_Expired Predicate = Action = IT1; P_Ct=N2; Vp=Vs; [RNR_c](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; RTi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0|IS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](0) NewState = [Transition] Input = IS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = OS_I_c0|OS_I_r0|OS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](0) NewState = [Transition] Input = OS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = REJ_c0 | REJ_r Predicate = Nr == Vs Action = Update_Va NewState = [Transition] Input = REJ_c0 | REJ_r Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=Lb; Start Send_Proc; \ Resend Packets, Update_Va; Is_Ct-- NewState = LOCAL_BUSY [Transition] Input = REJ_c1 Predicate = Nr == Vs Action = Update_Va; TT2; [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=Lb; Resend Packets, Update_Va; \ Start Send_Proc; Is_Ct--; [RNR_r](1) NewState = LOCAL_BUSY [Transition] Input = RNR_c0|RNR_r0|RNR_r1 Predicate = Action = Update_Va NewState = [Transition] Input = RNR_c1 Predicate = Action = Update_Va; [RNR_r](1) NewState = [Transition] Input = RR_c1 Predicate = Nr != Vs Action = Vb=Lb; RT1; Update_Va, Send_RNR_c(1); [RNR_r](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = RR_c1 Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=Lb; Update_Va; Start Send_Proc; \ [RNR_r](1) NewState = LOCAL_BUSY [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=Lb; RT1; Update_Va; [RNR_c](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=Lb; Update_Va; Start Send_Proc NewState = LOCAL_BUSY ;******************** REJECT_LOCAL_BUSY (15) *********************** [[State]] Name = REJECT_LOCAL_BUSY [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS | ENTER_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0; TTi; IT1; P_Ct=N2; Vp=Vs; Stop Send_Proc; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SEND_I_POLL Predicate = Action = RT1; P_Ct=N2; Vp=Vs; Is_Ct-- NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Action = TTi; RT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = IT1; P_Ct=N2; Stop Send_Proc; Vp=Vs; [RNR_c](1) NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = T1_Expired Predicate = Is_Ct>0 Action = IT1; P_Ct=N2; Stop Send_Proc; Vp=Vs; [RNR_c](1) NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = T1_Expired Predicate = Is_Ct<=0 Action = TT2; P_Ct=N2; IT1; [DISC](1) NewState = DISCONNECTING [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; RTi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0|IS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](0) NewState = LOCAL_BUSY [Transition] Input = IS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](1) NewState = LOCAL_BUSY [Transition] Input = OS_I_c0|OS_I_r0|OS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld NewState = [Transition] Input = OS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = REJ_c0 | REJ_r0 | REJ_r1 Predicate = Action = Resend Packets, Update_Va; NewState = [Transition] Input = REJ_c1 Predicate = Action = Resend Packets, Update_Va; [RNR_r](1) NewState = [Transition] Input = RNR_c0|RNR_r0|RNR_r1 Predicate = Action = INDICATE_REMOTE_BUSY; Update_Va; Vb=LRb; Is_Ct=N2; \ Stop Send_Proc NewState = REJECT_LOCAL_REMOTE_BUSY [Transition] Input = RNR_c1 Predicate = Action = INDICATE_REMOTE_BUSY; Update_Va; Vb=LRb; Is_Ct=N2; \ Stop Send_Proc; [RNR_r](1) NewState = REJECT_LOCAL_REMOTE_BUSY [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Action = Update_Va NewState = [Transition] Input = RR_c1 Predicate = Action = Update_Va; [RNR_r](1) NewState = ;***************** REJECTION + REMOTE_BUSY (16) ****************** [[State]] Name = REJECT_REMOTE_BUSY [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=LRb; [RNR_r](0) NewState = REJECT_LOCAL_REMOTE_BUSY [Transition] Input = EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Action = TTi; RT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = IT1; P_Ct=N2; Vp=Vs; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = T1_Expired Predicate = Is_Ct>0 Action = IT1; P_Ct=N2; Vp=Vs; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = T1_Expired Predicate = Is_Ct<=0 Action = TT2; P_Ct=N2; IT1; [DISC](1) NewState = DISCONNECTING [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; RTi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0|IS_I_r1 Predicate = Action = Update_Va; Rcv_BTU; [Send_ACK] NewState = REMOTE_BUSY [Transition] Input = IS_I_c1 Predicate = Action = Update_Va; Rcv_BTU; [RR_r](1) NewState = REMOTE_BUSY [Transition] Input = OS_I_c0|OS_I_r0|OS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld NewState = [Transition] Input = OS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RR_r](1) NewState = [Transition] Input = REJ_c0 | REJ_r Predicate = Nr == Vs Action = Update_Va NewState = [Transition] Input = REJ_c0 | REJ_r Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=0; Resend Packets, Update_Va;\ Is_Ct--; Start Send_Proc NewState = REJECTION [Transition] Input = REJ_c1 Predicate = Nr == Vs Action = Update_Va; TT2; [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=0; Resend Packets, Update_Va;\ Is_Ct--; Start Send_Proc; [RR_r](1) NewState = REJECTION [Transition] Input = RNR_c0|RNR_r0|RNR_r1 Predicate = Action = Update_Va NewState = [Transition] Input = RNR_c1 Predicate = Action = Update_Va; [RR_r](1) NewState = [Transition] Input = RR_c1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=0; RT1; Update_Va, Send_RR_c(1);\ [RR_r](1) NewState = CHKP_REJECT [Transition] Input = RR_c1 Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; Start Send_Proc; \ [RR_r](1) NewState = REJECTION [Transition] Input = RR_c0|RR_r Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; RT1; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = RR_c0|RR_r Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=0; Update_Va; Start Send_Proc NewState = REJECTION ;************* CHECKPOINTING + REJECTION LOCAL_BUSY (17) ***************** [[State]] Name = CHKP_REJECT_LOCAL_BUSY [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS | ENTER_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Vb==Lb Action = Vb=0; [RR_r](0) NewState = CHKP_REJECT_CLEARING [Transition] Input = EXIT_LCL_Busy Predicate = Vb==LRb Action = Vb=Rb; [RR_r](0) NewState = CHKP_REJECT_CLEARING [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Vc==0 Action = Vc=DISCp NewState = [Transition] Input = SET_ADM Predicate = Vc!=0 Action = Logical Error NewState = [Transition] Input = Ti_Expired Predicate = Action = Logical Error NewState = [Transition] Input = T1_Expired Predicate = P_Ct==0 Action = INDICATE_LINK_LOST; ITi NewState = DISCONNECTED [Transition] Input = T1_Expired Predicate = P_Ct!=0 Action = IT1; P_Ct--; Vp=Vs; Stop Send_Proc; [RNR_c](1) NewState = [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; ITi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; ITi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va == Nr Action = Dsc_I-fld; [RNR_r](0) NewState = CHKP_LOCAL_BUSY [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [RNR_r](0) NewState = CHKP_LOCAL_BUSY [Transition] Input = IS_I_c1 Predicate = Va == Nr Action = Dsc_I-fld; [RNR_r](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = IS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [RNR_r](1) NewState = CHKP_LOCAL_BUSY [Transition] Input = IS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Dsc_I-fld; Start Send_Proc; [RNR_r](0) NewState = LOCAL_BUSY [Transition] Input = IS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va == Nr Action = Dsc_I-fld NewState = [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2 NewState = [Transition] Input = OS_I_c1 Predicate = Va == Nr Action = Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = OS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = OS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Dsc_I-fld; Start Send_Proc NewState = REJECT_LOCAL_BUSY [Transition] Input = OS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = REJ_c0 | REJ_r0 Predicate = Va != Nr Action = Resend Packets NewState = [Transition] Input = REJ_c1 Predicate = Va == Nr Action = [RNR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Va != Nr Action = Resend Packets; [RNR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Vc == 0 Action = Update_Va_Chkpt; Vs=Nr; Start Send_Proc NewState = REJECT_LOCAL_BUSY [Transition] Input = REJ_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va == Nr Action = Vb=LRb; Is_Ct=N2 NewState = [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va != Nr Action = Adjust_Ww; Vb=LRb; Is_Ct=N2 NewState = [Transition] Input = RNR_c1 Predicate = Va == Nr Action = Vb=LRb; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = RNR_c1 Predicate = Va != Nr Action = Adjust_Ww; Vb=LRb; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = RNR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Vb=LRb; Is_Ct=N2 NewState = REJECT_LOCAL_REMOTE_BUSY [Transition] Input = RNR_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Vb=Rb; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = RR_c0 | RR_r0 Predicate = Va == Nr Action = ; NewState = [Transition] Input = RR_c0 | RR_r0 Predicate = Va != Nr Action = Adjust_Ww NewState = [Transition] Input = RR_c1 Predicate = Va == Nr Action = [RNR_r](1) NewState = [Transition] Input = RR_c1 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; [RNR_r](1) NewState = [Transition] Input = RR_r1 Predicate = Vc==0 Action = INDICATE_REMOTE_READY; Update_Va_Chkpt; Start Send_Proc NewState = REJECT_LOCAL_BUSY [Transition] Input = RR_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING ;***************** CHECKPOINTING + CLEARING(18) ****************** [[State]] Name = CHKP_CLEARING [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb; [RNR_r](0) NewState = CHKP_LOCAL_BUSY [Transition] Input = EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Vc==0 Action = Vc=DISCp NewState = [Transition] Input = SET_ADM Predicate = Vc!=0 Action = Logical Error NewState = [Transition] Input = Ti_Expired Predicate = Action = Logical Error NewState = [Transition] Input = T1_Expired Predicate = P_Ct==0 Action = INDICATE_LINK_LOST; ITi NewState = DISCONNECTED [Transition] Input = T1_Expired Predicate = P_Ct!=0 Action = IT1; P_Ct--; Vp=Vs; Stop Send_Proc; [RR_c](1) NewState = [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; ITi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; ITi NewState = RESETTING [Transition] Input = UA Predicate = Vi!=ISp Action = INDICATE_FRMR_SENT; TT1; ITi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = UA Predicate = Vi==ISp Action = Ignore_LPDU NewState = [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va == Nr Action = Rcv_BTU; [Send_ACK] NewState = CHECKPOINTING [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Rcv_BTU; Is_Ct=N2; [Send_ACK] NewState = CHECKPOINTING [Transition] Input = IS_I_c1 Predicate = Va == Nr Action = Rcv_BTU; [RR_r](1) NewState = CHECKPOINTING [Transition] Input = IS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Rcv_BTU; Is_Ct=N2; [RR_r](1) NewState = CHECKPOINTING [Transition] Input = IS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Rcv_BTU; Start Send_Proc; [Send_ACK] NewState = LINK_OPENED [Transition] Input = IS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va == Nr Action = Dsc_I-fld; [REJ_r](0) NewState = CHKP_REJECT [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [REJ_r](0) NewState = CHKP_REJECT [Transition] Input = OS_I_c1 Predicate = Va == Nr Action = Dsc_I-fld; [REJ_r](1) NewState = CHKP_REJECT [Transition] Input = OS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [REJ_r](1) NewState = CHKP_REJECT [Transition] Input = OS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Dsc_I-fld; Start Send_Proc; [REJ_r](0) NewState = REJECTION [Transition] Input = OS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, TTi, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = REJ_c0 | REJ_r0 Predicate = Va != Nr Action = Is_Ct=N2; Resend Packets NewState = [Transition] Input = REJ_c1 Predicate = Va == Nr Action = [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Va != Nr Action = Resend Packets; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = REJ_r1 Predicate = Vc==0 Action = Update_Va_Chkpt, RT1; Vp=Nr; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va == Nr Action = Vb=Rb NewState = [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; Vb=Rb NewState = [Transition] Input = RNR_c1 Predicate = Va == Nr Action = Vb=Rb; [RR_r](1) NewState = [Transition] Input = RNR_c1 Predicate = Va != Nr Action = Adjust_Ww; Vb=Rb; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = RNR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt, RT1; Vp=Vs; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = RR_c0 | RR_r0 Predicate = Va == Nr Action = ; NewState = [Transition] Input = RR_c0 | RR_r0 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2 NewState = [Transition] Input = RR_c1 Predicate = Va == Nr Action = [RR_r](1) NewState = [Transition] Input = RR_c1 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = RR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt, RT1; Vp=Vs; [RR_c](1) NewState = CHECKPOINTING [Transition] Input = REJ_r1|RNR_r1|RR_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING ;***************** CHECKPOINTING + REJECTION + CLEARING(19) ************** [[State]] Name = CHKP_REJECT_CLEARING [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb; [RNR_r](0) NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = EXIT_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Vc==0 Action = Vc=DISCp NewState = [Transition] Input = SET_ADM Predicate = Vc!=0 Action = Logical Error NewState = [Transition] Input = Ti_Expired Predicate = Action = Logical Error NewState = [Transition] Input = T1_Expired Predicate = P_Ct==0 Action = INDICATE_LINK_LOST; ITi NewState = DISCONNECTED [Transition] Input = T1_Expired Predicate = P_Ct!=0 Action = IT1; P_Ct--; Vp=Vs; Stop Send_Proc; [RR_c](1) NewState = [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; ITi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; ITi; P_Ct=N2 NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; ITi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; ITi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va == Nr Action = Rcv_BTU; [Send_ACK] NewState = CHECKPOINTING [Transition] Input = IS_I_c0|IS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Rcv_BTU; Is_Ct=N2; [Send_ACK] NewState = CHECKPOINTING [Transition] Input = IS_I_c1 Predicate = Va == Nr Action = Rcv_BTU; [RR_r](1) NewState = CHECKPOINTING [Transition] Input = IS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Rcv_BTU; Is_Ct=N2; [RR_r](1) NewState = CHECKPOINTING [Transition] Input = IS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Rcv_BTU; Start Send_Proc; [Send_ACK] NewState = LINK_OPENED [Transition] Input = IS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va == Nr Action = Dsc_I-fld NewState = CHKP_REJECT [Transition] Input = OS_I_c0|OS_I_r0 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2 NewState = CHKP_REJECT [Transition] Input = OS_I_c1 Predicate = Va == Nr Action = Dsc_I-fld; [RR_r](1) NewState = CHKP_REJECT [Transition] Input = OS_I_c1 Predicate = Va != Nr Action = Adjust_Ww; Dsc_I-fld; Is_Ct=N2; [RR_r](1) NewState = CHKP_REJECT [Transition] Input = OS_I_r1 Predicate = Vc==0 Action = Update_Va_Chkpt; Dsc_I-fld; Start Send_Proc NewState = REJECTION [Transition] Input = OS_I_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Dsc_I-fld; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = REJ_c0 | REJ_r0 Predicate = Va != Nr Action = Resend Packets; Is_Ct=N2 NewState = [Transition] Input = REJ_c1 Predicate = Va == Nr Action = [RR_r](1) NewState = [Transition] Input = REJ_c1 Predicate = Va != Nr Action = Resend Packets; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = REJ_r1 Predicate = Vc==0 Action = Update_Va_Chkpt, RT1, Vp=Nr; Is_Ct--; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va == Nr Action = Vb=Rb NewState = [Transition] Input = RNR_c0 | RNR_r0 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; Vb=Rb NewState = [Transition] Input = RNR_c1 Predicate = Va == Nr Action = Vb=Rb; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = RNR_c1 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; Vb=Rb; [RR_r](1) NewState = [Transition] Input = RNR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt, RT1, Vp=Vs; Is_Ct=N2; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = RR_c0 | RR_r0 Predicate = Va == Nr Action = ; NewState = [Transition] Input = RR_c0 | RR_r0 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2 NewState = [Transition] Input = RR_c1 Predicate = Va == Nr Action = [RR_r](1) NewState = [Transition] Input = RR_c1 Predicate = Va != Nr Action = Adjust_Ww; Is_Ct=N2; [RR_r](1) NewState = [Transition] Input = RR_r1 Predicate = Vc==0 Action = Update_Va_Chkpt, RT1, Vp=Vs; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = REJ_r1|RNR_r1|RR_r1 Predicate = Vc==DISCp Action = Update_Va_Chkpt, RT1; Vc=0; P_Ct=N2; [DISC](1) NewState = DISCONNECTING ;***************** REJECTION+LOCAL_BUSY+REMOTE_BUSY (20) ****************** [[State]] Name = REJECT_LOCAL_REMOTE_BUSY [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS | ENTER_LCL_Busy Predicate = Action = Logical Error NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=Rb; TTi; IT1; P_Ct=N2; Vp=Vs; [RR_c](1) NewState = CHKP_REJECT [Transition] Input = LPDU_INVALID_r | LPDU_INVALID_c0 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](0) NewState = FRMR_SENT [Transition] Input = LPDU_INVALID_c1 Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; VWXYZ=0x01; [FRMR](1) NewState = FRMR_SENT ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = [Queue_I_LPDU] ; NewState = [Transition] Input = SET_ABME Predicate = Action = Logical Error NewState = [Transition] Input = SET_ADM Predicate = Action = TTi; RT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = Action = IT1; P_Ct=N2; Vp=Vs; [RNR_c](1) NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = T1_Expired Predicate = Is_Ct>0 Action = IT1; P_Ct=N2; Vp=Vs; [RNR_c](1) NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = T1_Expired Predicate = Is_Ct<=0 Action = P_Ct=N2; IT1; [DISC](1) NewState = DISCONNECTING [Transition] Input = T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_DM_DISC_RECEIVED; TT1; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED; TT1; RTi NewState = FRMR_RECEIVED [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; TT1; RTi NewState = RESETTING [Transition] Input = UA Predicate = Action = INDICATE_FRMR_SENT; TT1; RTi; [FRMR](0) NewState = FRMR_SENT [Transition] Input = IS_I_c0|IS_I_r0|IS_I_r1 Predicate = Action = INDICATE_REMOTE_READY; Update_Va; Dsc_I-fld; [RNR_r](0) NewState = LOCAL_REMOTE_BUSY [Transition] Input = IS_I_c1 Predicate = Action = INDICATE_REMOTE_READY; Update_Va; Dsc_I-fld; [RNR_r](1) NewState = LOCAL_REMOTE_BUSY [Transition] Input = OS_I_c0|OS_I_r0|OS_I_r1 Predicate = Action = Update_Va; Dsc_I-fld NewState = [Transition] Input = OS_I_c1 Predicate = Action = Update_Va; Dsc_I-fld; [RNR_r](1) NewState = [Transition] Input = REJ_c0 | REJ_r0 | REJ_r1 Predicate = Action = INDICATE_REMOTE_READY; Resend Packets, Update_Va;\ Is_Ct--; Vb=Lb; Start Send_Proc NewState = REJECT_LOCAL_BUSY [Transition] Input = REJ_c1 Predicate = Action = INDICATE_REMOTE_READY; Resend Packets, Update_Va;\ Is_Ct--; Vb=Lb; Start Send_Proc; [RNR_r](1) NewState = REJECT_LOCAL_BUSY [Transition] Input = RNR_c0|RNR_r0|RNR_r1 Predicate = Action = Update_Va NewState = REJECT_LOCAL_BUSY [Transition] Input = RNR_c1 Predicate = Action = Update_Va; [RNR_r](1) NewState = REJECT_LOCAL_REMOTE_BUSY [Transition] Input = RR_c1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=Lb; RT1; Update_Va, \ Send_RNR_c(1); [RNR_r](1) NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = RR_c1 Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=Lb; Update_Va; [RNR_r](1) NewState = REJECT_LOCAL_BUSY [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Nr != Vs Action = INDICATE_REMOTE_READY; Vb=Lb; Update_Va; [RNR_c](1) NewState = CHKP_REJECT_LOCAL_BUSY [Transition] Input = RR_c0|RR_r0|RR_r1 Predicate = Nr == Vs Action = INDICATE_REMOTE_READY; Vb=Lb; Update_Va NewState = REJECT_LOCAL_BUSY ;******************** FRMR_RECEIVED (21) *********************** [[State]] Name = FRMR_RECEIVED [Transition] Input = ACTIVATE_LS | DEACTIVATE_LS Predicate = Action = Logical Error NewState = [Transition] Input = ENTER_LCL_Busy Predicate = Action = Vb=Lb NewState = [Transition] Input = EXIT_LCL_Busy Predicate = Action = Vb=0 NewState = [Transition] Input = LPDU_INVALID Predicate = Action = Ignore_LPDU NewState = ; [Transition] ; Input = SEND_BTU ; Predicate = ; Action = Logical Error ; NewState = [Transition] Input = SET_ABME Predicate = Action = Vi=LIp; TTi; IT1; P_Ct=N2; [SABME](1) NewState = LINK_OPENING [Transition] Input = SET_ADM Predicate = Action = TTi; IT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = Ti_Expired Predicate = P_Ct!=0 Action = ITi; P_Ct-- NewState = [Transition] Input = Ti_Expired Predicate = P_Ct==0 Action = INDICATE_TI_TIMER_EXPIRED; IT1; P_Ct=N2; [DISC](1) NewState = DISCONNECTING [Transition] Input = T1_Expired|T2_Expired Predicate = Action = Logical Error NewState = [Transition] Input = DISC0|DISC1 Predicate = Action = INDICATE_TI_TIMER_EXPIRED; RTi; [UA](P) NewState = DISCONNECTED [Transition] Input = DM0|DM1 Predicate = Action = INDICATE_TI_TIMER_EXPIRED; RTi NewState = DISCONNECTED [Transition] Input = FRMR Predicate = Action = INDICATE_FRMR_RECEIVED NewState = [Transition] Input = SABME Predicate = Action = INDICATE_RESET; Vi=RIp; Pf=P; RTi NewState = RESETTING [Transition] Input = I_c|I_r Predicate = Action = Ignore_LPDU NewState = [Transition] Input = REJ|RNR|RR Predicate = Action = Ignore_LPDU NewState =