VSI Discovery and Configuration Protocol VDP Working Draft

  • Slides: 11
Download presentation
VSI Discovery and Configuration Protocol (VDP) (Working Draft) Proposed Resolutions to subset of comments

VSI Discovery and Configuration Protocol (VDP) (Working Draft) Proposed Resolutions to subset of comments against 802. 1 Qbg Draft-1 Chait Tumuluri (Emulex), Jeffrey Lynch (IBM), Vijoy Pandey (BNT), Rakesh Sharma (BM), Renato Recio (IBM), Srikanth Kilaru (Juniper) Version 04 c 08/10/2010

Summary of changes 1. 2. 3. 4. 5. 6. Compliance to IEEE Protocols State

Summary of changes 1. 2. 3. 4. 5. 6. Compliance to IEEE Protocols State Machines Conventions (Ref: IEEE 802. 1 AB x. xx) Changed timer expiration events to comply with IEEE state machines style. Changed state machine layout to match IEEE state machines. Misc. other style changes in state machines to make them consistent with IEEE state machines. Updated local variables and procedures names and description for additional clarification. Ensured that changes do not impact state machines operation other than style and layout.

Station State Machine (One Instance per VSI) BEGIN INIT oper. TLV = NULL sys.

Station State Machine (One Instance per VSI) BEGIN INIT oper. TLV = NULL sys. TLV = NULL r. TLV = NULL local. Change = FALSE vsi. State = UNASSOCIATED local. Change == TRUE STATION_PROCESSING Tx. TLV (sys. TLV) ACKTimer = ACK_TIMEOUT_VALUE local. Change == TRUE || Activity. Timer == 0 r. TLV != NULL && (r. TLV. mode 1 == PRE-ASSOC || r. TLV. mode 1 == PRE-ASSOCR) && r. TLV. mode 2 == SUCCESS ASSOCIATED PREASSOCIATED vsi. Status = Proc. Rx. And. Set. Cfg (r. TLV, oper. TLV, sys. TLV) If (vsi. Status == OK) vsi. State = ASSOCIATED local. Change = FALSE Activity. Timer = ACTIVITY_TIMER_MAX vsi. Status = Proc. Rx. And. Set. Cfg (r. TLV, oper. TLV, sys. TLV) If (vsi. Status == OK) vsi. State = PREASSOCIATED local. Change = FALSE Activity. Timer = ACTIVITY_TIMER_MAX (r. TLV != NULL && r. TLV. mode 1 == De-Assoc) || vsi. Status != OK local. Change == TRUE || Activity. Timer == 0 r. TLV != NULL && r. TLV. mode 1 == ASSOC && (r. TLV. mode 2 == SUCCESS || (r. TLV. mode 2 != SUCCESS && local. Change == TRUE vsi. State == ASSOCIATED)) (r. TLV != NULL && r. TLV. mode 1 == DE-ASSOC) || (ACKTimer == 0) END (r. TLV != NULL && r. TLV. mode 1 == De-Assoc) || vsi. Status != OK

VSI State Machine – Bridge (Draft) (One Instance per VSI) BEGIN INIT oper. TLV

VSI State Machine – Bridge (Draft) (One Instance per VSI) BEGIN INIT oper. TLV = NULL vsi. State = UNASSOCIATED local. Change-De. Assoc = FALSE r. TLV != NULL vsi. Status == SUCCESS && r. TLV. mode 1 == Pre-Assoc r. TLV != NULL && (r. TLV. mode 1 == Assoc || rx. TLV. mode 1 == Pre-Assoc) BRIDGE_PROCESSING vsi. Status = Proc_VTID_Def_Fetch(r. TLV, oper. TLV) Bridge. Res. Timer = MAX_BRIDGE_TIMER r. TLV != NULL && (r. TLV. mode 1 == Assoc || rx. TLV. mode 1 == Pre-Assoc) r. TLV != NULL && ((r. TLV. mode 1 == Assoc || rx. TLV. mode 1 == Pre-Assoc) && vsi. Status == FAIL) || (r. TLV. mode 1 == De-Assoc)) ASSOCIATED PREASSOCIATED vsi. State = PREASSOCIATED oper. TLV = r. TLV; oper. TLV. mode 2 = SUCCESS Tx. TLV(oper. TLV) Inactivity. Timer = MAX_INACTIVE_TIME r. TLV. mode 1 == De-Assoc (rx. TLV. mode 1 == Assoc && vsi. Status == SUCCESS) II (vsi. State == ASSOCIATED && r. TLV. mode 1 == Assoc && vsi. Status == FAIL) DEASSOCIATED vsi. State = UNASSOCIATED oper. TLV = r. TLV; oper. TLV. mode 2 = FAIL Tx. TLV (oper. TLV) vsi. State = ASSOCIATED oper. TLV = r. TLV; oper. TLV. mode 2 = SUCCESS Tx. TLV (oper. TLV) Inactivity. Timer = MAX_INACTIVE_TIME r. TLV. mode 1 == De. Assoc || Inactivity. Timer == 0 || local. Change-De. Assoc == TRUE INACTIVE Inactivity. Timer == 0 || local. Change-De. Assoc == TRUE END vsi. State = UNASSOCIATED oper. TLV. mode 1 = De-Assoc oper. TLV. mode 2 = SUCCESS Tx. TLV (oper. TLV) Inactivity. Timer == 0 || local. Change-De. Assoc

VSI State Machine Local Variables and Procedures vsi. State: 1. • Local variable for

VSI State Machine Local Variables and Procedures vsi. State: 1. • Local variable for current state. Possible states are: UNASSOCIATED, PREASSOCIATED and ASSOCIATED oper. TLV: 2. • Current local (active) TLV (configuration) of Station. sys. TLV: 3. • TLV from station management system e. g. Hypervisor. In addition local. Change variable must be set to TRUE. If local. Change is TRUE or Activity. Timer has expired, sys. TLV can not change (resource lock semantics). r. TLV: 4. • TLV received from remote (station or bridge) b. TLV: 5. • TLV received from remote (station or bridge) Tx. TLV(vsi. TLV): 6. • Transmits TLV using TLV transport (ECP) service interfaces. Includes support for aggregation of VSI TLVs. Proc_VSI_Def_Fetch (): 7. • Bridge procedure to fetch VSI definition based on Associate and/or Pre-Associate parameters based on received Remote TLV parameters. And sets vsi. Status in case of error. This function handles Pre. Associate with and without resource reservation case as well. ACKtimer: 8. • ACKtimer is ACK Timer local variable. Response (ACK or NACK) is expected before timer expires. ACK_TIMEOUT_VALUE: 9. • This local variable contains ACK timeout value for the machine.

VSI State Machine Local Variables and Procedures INACTIVITY_TIMER 1. • Bridge timer local variable

VSI State Machine Local Variables and Procedures INACTIVITY_TIMER 1. • Bridge timer local variable for inactivity timer. MAX_INACTIVE_TIME 2. • Max inactivity time on the bridge. It is set by bridge based on configured value and complies to range specified in 802. 1 Qbg. Bridge. Res. Timer 3. • Bridge resource fetch timer local timer. local. Change-De. Assoc 4. • Local variable for de-associating VSI. It is set to TRUE by bridge management when VSI to be disconnected. MAX_BRIDGE_TIMER 5. • Local variable that stores max bridge timer value. It is set by bridge based on configured value and complies to range specified in 802. 1 Qbg. vsi. Status = Proc. Rx. And. Set. Cfg(r. TLV, oper. TLV, sys. TLV) 6. 1. Validate received TLV, set configuration and return vsi. Status = Proc_VTID_Def_Fetch(r. TLV, oper. TLV) 7. 1. Validate received TLV, get VTID definition, set configuration and return vsi. Status.

Backup

Backup

VDP Objectives 1. Support VSI pre. Associate (with and without resource reservations), Associate and

VDP Objectives 1. Support VSI pre. Associate (with and without resource reservations), Associate and de. Associate. 2. ASSOCIATE, Pre. Associate and De. Associate are Idempotent i. e. can be repeated. 3. Capability to Associate skipping Pre. Associate. 4. VDP will work both for VEPA and VEB environments. 5. Timeout mechanism to ensure: a. Bridge resources are not reserved too long for inactive VSIs (lease semantics) b. Allow removing resources from inactive VSIs with the goal of 6. a. Conserve bridges resources (Number VSIs being handled by bridge can be large). b. Prevent inactive or VMs in error state to continue to hold resources. Timeout values to be negotiated on per channel between station and bridge. One timeout used for all ULPs on the channel negotiated using EVB TLV.

VDP Objectives (continued) Manageability and Robustness 7. a. Ensure VSI state and configuration between

VDP Objectives (continued) Manageability and Robustness 7. a. Ensure VSI state and configuration between the Station and the Bridge remains consistent. b. Hard errors at the Bridge or the Hypervisor that can impact individual VSI or Hypervisor/Bridge as a whole. All VSI configuration goes away in this situation. c. Bridge and Station Errors are detected through one or more of the following mechanisms. a. VSI KEEP-ALIVE (periodic transmission of VSI TLV from station and response from Bridge) b. ACK Timer c. Transport (ECP and LLDP) status indications. d. Bridge and Hypervisor administrative capability to force VSI de. Associate. ASSOCIATED VSI remains associated with existing configuration if a new associate is not successfully completed. f. Statistics and logging support (need specific proposal).

VSI State Machine – Station Local VSI-START (One Instance per VSI) INIT vsi. Local.

VSI State Machine – Station Local VSI-START (One Instance per VSI) INIT vsi. Local. TLV = NULL vsi. State = UNASSOCIATED (Assoc_NAK_Rx && Vsi. State == !Assoc) II ACKTimeout || De. Assoc. Ack Rx EXIT ACKTimeout || De. Assoc Rx local. Change-Pre. Assoc local. Change-Assoc Pre. Assoc_NAK_Rx II ACKTimeout || De. Assoc. Ack Rx PREASSOC_PROCESSING Tx. TLV(Pre. ASSOC) Start. ACKTimer() local. Change-Pre. Assoc || ACIIVITY_TIMER_Event DEASSOC_PROCESSING Tx. TLV(De. ASSOC) Start. ACKTimer() Pre. Assoc_ACK_Rx vsi. Error || local. Change-De. Assoc PREASSOCIATED vsi. Error = Proc. Rx. And. Set. Cfg(vsi. Remote. TLV, vsi. Local. TLV, vsi. St ate); If (!vsi. Error) vsi. State = PREASSOCIATED ASSOC_PROCESSING Tx. TLV(ASSOC) Start. ACKTimer() Assoc_ACK_Rx || (Assoc_NAK_Rx && Vsi. State == Assoc) local. Change - Assoc || ACIIVITY_TIMER_Event ASSOCIATED local. Change - Assoc vsi. Error || local. Change-De. Assoc vsi. Error = Proc. Rx. And. Set. Cfg(vsi. Remote. TLV, vsi. Local. TLV, vsi. State); If (!vsi. Error) vsi. State = ASSOCIATED local. Change - Pre. Assoc vsi. Error || De. Assoc. Ack Rx

New-VSI-Instance ID TLV Rx VSI State Machine – Bridge (Draft) (One Instance per VSI)

New-VSI-Instance ID TLV Rx VSI State Machine – Bridge (Draft) (One Instance per VSI) EXIT vsi. Error local. Change-De. Assoc rx. TLV == De. Assoc || INACTIVE INIT DEASSOC Tx. TLV(De. Assoc-ACK) vsi. Local. TLV = NULL vsi. State = UNASSOCIATED rx. TLV == Assoc (rx. TLV == De. Assoc) || INACTIVE rx. TLV == Pre. Assoc rx. TLV == Assoc PREASSOC_PROCESSING vsi. Error=Proc. Rxand. Set. Cfg(local. TLV, remote. TLV, vsi. State) If (vsi. Error) tx. TLV(Pre. Assoc NACK) Else tx. TLV(Pre. Assoc-ACK) vsi. Error && Vsi. State == !Assoc rx. TLV == Pre. Assoc !vsi. Error (rx. TLV == De. Assoc) || INACTIVE PREASSOCIATED vsi. Error=Proc. Rxand. Set. Cfg(local. TLV, remote. TLV, vsi. State) If (vsi. Error) tx. TLV(Assoc NACK) Else tx. TLV(Assoc-ACK) !vsi. Error || (vsi. Error && Vsi. State == Assoc) ASSOCIATED vsi. State = PREASSOCIATED rx. TLV == Pre. Assoc rx. TLV == Assoc Vsi. State = ASSOCIATED