From df8cd4b4badeba459aa4ca758131f8697bd1f258 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Tue, 7 May 2019 15:25:15 -0700 Subject: [PATCH 01/36] Layer 2 Forwarding Enhancements FDS The documents decribes the functional spec and high level design for Layer 2 Forwarding Enhancements. --- .DS_Store | Bin 0 -> 8196 bytes doc/.DS_Store | Bin 0 -> 6148 bytes doc/L2 Forwarding Enhancements/.DS_Store | Bin 0 -> 6148 bytes ...NiC Layer 2 Forwarding Enhancements-FDS.md | 449 ++++++++++++++++++ 4 files changed, 449 insertions(+) create mode 100644 .DS_Store create mode 100644 doc/.DS_Store create mode 100644 doc/L2 Forwarding Enhancements/.DS_Store create mode 100644 doc/L2 Forwarding Enhancements/SONiC Layer 2 Forwarding Enhancements-FDS.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..682fce01878a950eaa20d58aab23675ec964208c GIT binary patch literal 8196 zcmeHMU2GIp6u#fKz)U-|(^6?!es-}IEGf`GC?p`;AJ9S@kZoy!N;|tV!i3qGWoNbv zl#&`v3{f6c1RwOl7)9R@H1WY`O#DmyYhu7R3rEjJoVQzBocjugY z?wxbyyL0!d_pKp2795#ZaWi0RB>=~UtF{M|BLud(rGM2dB~r=al4p{~oI=vmyu90? z2cjG z)!-r5$$6drWP>KnFGi_(*Vu2+q~@s6MN_*fj?OK0UlUyweN2)Lb9raZpjL>Lwb6Q6)ucX`+!9kXC>vze zmHUp<(-o#oN{giGa=)de3`>YMD_bOWk329cA}fSd$~H+JOgotj-LxxYJEHB9`lWP) zFWjTK-rlTX)7spH&Q;OqK`w9CbwigVsWvh6ssHS26ORiH)CyqCcf2;yD6VBXXjZaj z*2Q|*2+OfCcAi~eZ?P-vD!ax$XWz0(c7xqwzq3EsU+i!84>c_!GCq4MwK8+&krfK>SM>Y*pfN@To0w>Hb`f?c!v9fVq6Vj1zcC)gw!* z<8}4xo7=XvPe1+{Py8N6-c3WFd4gI#<)$bls7^FrzG9^k>nAcACueStscoY!;+sR7 zwY%l{W;zh*zNn?%>!U|2|0T|zWnjkQ>hHtawm9<5CUdss*hfh+MelnDhgb6-fg-VF4bT5~&i(y={%0TGD`o)I+63aA+&oWus)JjU8n-tlBiy z{sf2iZ#eP=RsW`AdxAirmk33GJkt1$$DXnLR)W#`aPGT9Uys3sVN=+W$4sc%P<E{Yj!( z^Ym1!MWph-NxC&?9hgKb$)&wy{uEEg`0Zj%!9Xw&3&>cxlpli!OMEl)@ORNO^d!{~#7U|`C?sSW2m|F7`NREzv+NQ{DkVBnuI zptEk>t?*KQwtjg%p0x?>8jV7~Oa%gcatXkI`^ZHxnmtj6U+b6+nT7Ku92ggYLP&JM Iz%MZH1|?c6?*IS* literal 0 HcmV?d00001 diff --git a/doc/L2 Forwarding Enhancements/SONiC Layer 2 Forwarding Enhancements-FDS.md b/doc/L2 Forwarding Enhancements/SONiC Layer 2 Forwarding Enhancements-FDS.md new file mode 100644 index 0000000000..50ca009dd2 --- /dev/null +++ b/doc/L2 Forwarding Enhancements/SONiC Layer 2 Forwarding Enhancements-FDS.md @@ -0,0 +1,449 @@ +# Layer 2 Forwarding Enhancements +#### Rev 1.0 + +# Table of Contents + * [List of Tables](#list-of-tables) + * [Revision](#revision) + * [About This Manual](#about-this-manual) + * [Scope](#scope) + * [Definition/Abbreviation](#definitionabbreviation) + * [Requirements Overview](#requirement-overview) + * [Functional Requirements](#functional-requirements) + * [Configuration and Management Requirements](#configuration-and-management-requirements) + * [Scalability Requirements](#scalability-requirements) + * [Warm Boot Requirements](#warm-boot-requirements) + * [Functionality](#-functionality) + * [Functional Description](#functional-description) + * [Design](#design) + * [Overview](#overview) + * [DB Changes](#db-changes) + * [CONFIG DB](#config-db) + * [Switch State Service Design](#switch-state-service-design) + * [Orchestration Agent](#orchestration-agent) + * [Other Process](#other-process) + * [Syncd](#syncd) + * [SAI](#sai) + * [CLI](#cli) + * [Configuration Commands](#configuration-commands) + * [Show Commands](#show-commands) + * [Flow Diagrams](#flow-diagrams) + * [Serviceability and Debug](#serviceability-and-debug) + * [Warm Boot Support](#warm-boot-support) + * [Scalability](#scalability) + * [Unit Test](#unit-test) + + +# List of Tables +[Table 1: Abbreviations](#table-1-abbreviations) + + +# Revision +| Rev | Date | Author | Change Description | +|:---:|:-----------:|:------------------:|--------------------------------------------| +| 1.0 | 04/30/2019 | Anil Pandey | Added detailed requirements | +| | | | Added detailed Unit Test cases | +| 0.3 | 04/29/2019 | Pankaj Jain | Modified static-mac and aging commands | +| 0.2 | 04/26/2019 | Anil Pandey | Merged VLAN Range FS contents | +| 0.1 | 04/11/2019 | Anil Pandey | Initial version | + + +# About this Manual +This document provides general information about the Layer 2 Forwarding Enhancements feature implementation in SONiC. +# Scope +This document describes the high level design of Layer 2 Forwarding Enhancements feature. + + +# Definition/Abbreviation +### Table 1: Abbreviations +| **Term** | **Meaning** | +|--------------------------|-------------------------------------| +| FDB | Forwarding Database | + + +# 1 Requirement Overview +## 1.1 Functional Requirements + + 1. FDB Flush Support + - FDB entries should be flushed per Port when the operational state of the port goes down. Only dynamic entries should be flushed. + - FDB entries should be flushed per Port per VLAN when a port is removed from a VLAN. Both dynamic and static entries should be flushed. Static FDB configuration should not be removed. + - FDB entries should be flushed per Port or per Port per VLAN when triggered by Layer 2 Protocol upon topology change. Only dynamic entries should be flushed. + - FDB entry should be removed from FDB_TABLE in STATE_DB and ASIC_SB and internal orchagent FDB data structure and Hardware. + +2. Handle MAC move event generated by hardware. + - Existing FDB entry should be replaced with one having new Port in ASIC_DB and STATE_DB when a MAC move event is received. + +3. Configuration CLI for FDB aging time. + - The FDB aging time should be configurable in hardware to a desired value from CLI. + - There should be an option to disable aging by setting the aging time to 0. + - The default FDB aging time should be set to 0. User has option to set desired value in default config file. + +4. Configuration CLI for Static FDB entry. + - A Static FDB entry should be configurable in hardware from CLI. + - Static FDB entry should be set in CONFIG_DB and APP_DB even if the port is not member of VLAN. + - Static FDB entry should be added in saved FDB in Orchagent if port is not member of VLAN. + - Static FDB entry should be added in saved FDB in Orchagent after the entry is deleted from hardware due to FDB flush. + - Static FDB entry should be added in STATE_DB. + +5. Should have per Port and per VLAN FDB clear options in CLI command "sonic-clear fdb". + +6. VLAN range CLI support + - Should be able to create a range of VLANs in a single CLI command. + - Should be able to delete a range of VLANs in a single CLI command. + - Should be able to add a port to a range of VLANs in a single CLI command. + - Should be able to delete a port from a range of VLANs in a single CLI command. + + +## 1.2 Configuration and Management Requirements +- New CLI is added for configuring FDB aging time. +- New CLI is added to display current FDB aging time. +- New CLI is added for add/delete of Static FDB entry. +- Existing CLI 'sonic-clear fdb' is extended to clear FDB per port or per VLAN. +- Existing CLI tree is extended to include support for keyword 'range' in each of the VLAN create and delete and VLAN + member create and delete commands. + + +## 1.3 Scalability Requirements +- Up to 4094 VLAN will be supported. +- VLAN range commands are invalidated for VLANs that fall outside the range 1 through 4094 + (Aforementioned range should be configurable and valid). + + +## 1.4 Warm Boot Requirements +None + + +# 2 Functionality + +## 2.2 Functional Description +**1. FDB Flush suport** +- When a port operational state goes down, all dynamic FDB entries will be flushed on the port. The entries will be removed from FDB_TABLE in ASIC_DB, STATE_DB and Hardware and Orchagent data structures. +- When a port is removed from VLAN, all static and dynamic FDB entries will be flushed on the (port,VLAN). Static FDB entries will still be preserved in the FDB_TABLE in CONFIG_DB and APP_DB. When port is added back to VLAN, Orchagent will reprogram the FDB entries. +- Spanning Tree Protocol to flush dynamic FDB entries either on a VLAN, on a Port or on (Port,VLAN) when topology change occurs. API will be provided in Orchagent for L2 protocol component to flush FDB entries accordingly. + +**2. Handle MAC move events.** +- MAC move event generated by some HW (e.g. DNX) is currently not handled in SAI and SONiC. Will add support in Orchagent for moving the FDB entry to new port upon receipt of such event. + +**3. Configuration for FDB aging time.** +- CLI configuration to be added to change the FDB aging time. By default, the aging time in hardware is 0. It can be changed to a desired value if CLI is available. Currently, it can be done only by setting in APP_DB. The configuration range will be 0-500 seconds. Setting aging time to 0 will disable aging. + +**4. Configuration for static FDB entry.** +- Currently, static FDB can only be added only by setting in APP_DB. CLI configuration will be added for this. +- If a dynamic FDB already exists with the same (MAC, VLAN), it will be replaced with the static entry. +- If the port is not member of VLAN, the static entry will be present in CONFIG_DB and APP_DB. It will also be saved in the orchagent saved FDB until the port is added to the VLAN. + +**5. FDB clear options for per port and per VLAN clear.** + - Currently, "sonic-clear fdb" command has only the option "ALL" supported. Will add options for "PORT" and "VLAN" to clear FDB entries either on a port or on a VLAN. Only dynamic FDB will be cleared. + + **6. VLAN Range CLI.** +- In current SONiC release, support for VLAN commands through CLI is limited to creating and deleting a single VLAN and adding/removing a port to/from a single VLAN. Support for VLAN range will be added in CLI to enable administrator to create and delete a range of VLANs and add/remove a port to/from a range of VLANs. +- When a large number of interfaces are made members of a huge set of VLANs, deletion of VLANs takes significant time due to the reason mentioned in [Scalability](#scalability) section. +- In SONiC, VLAN operations are performed either through config_db.json file or through CLI commands. In config_db.json file, administrator is required to update the desired VLAN and/or member port in each VLAN as per the JSON file format. This process is overburdening when it is required to manually add/delete VLANs in bulk and add/delete ports to/from VLANs in bulk. Administrator can perform the same operations through CLI commands which, though, is easy, becomes extremely taxing when multiple commands need to be executed to perform bulk operations, like creating/deleting 4094 VLANs and associating/removing ports from each of these VLANs through CLI commands that provide an option to enter only one VLAN. + - Administrator's task is greatly simplified with provision for VLAN range configuration. And time taken to perform the operations is drastically reduced. + + +# 3 Design +## 3.1 Overview +Code changes are confined to the components marked in RED. + + + **Overview of components involved:** + + + + + +For FDB flush and FDB aging and Static FDB commands, the design is described in details in the SWSS section. +Overview of changes for VLAN range support is provided below. + +**VLAN Range Support:** +For each of the new commands, a loop is iterated to run though the two configured parameters, first vlan-id and last vlan-id, (as specified in commands listed in section 3.6.2) and GET and SET operations are performed on CONFIG_DB. DB operations are performed for each VLAN. As DB operations are very quick, CONFIG_DB update happens very fast. + +Range command issued takes only two VLAN identifiers as arguments. List of VLANs are not configurable. For example, 'config vlan range add 2 10' is allowed and valid, but 'config vlan range add 2 10,3 100' is not valid. + +For VLAN range creation, VLAN existence for each VLAN identifier is checked in CONFIG_DB through GET operation prior to invoking SET operation. If few VLANs are already created and 'range create' command issued involves such VLANs, a message of severity 'info' is logged and rest of the VLANs are created. + +For VLAN range deletion, GET operation is performed for each member in the VLAN on VLAN_MEMBER table and then is deleted from the table. Upon removing all the members from a VLAN, VLAN is deleted through a single SET operation on the database. If a VLAN being deleted has members, a message of severity 'warning' is logged and the VLAN is deleted. If a non-existent VLAN is part of the range command, a warning message is logged, but processing continues for the rest of the VLANs. + +For VLAN member range creation and deletion, GET and SET operations are performed on VLAN and VLAN_MEMBER tables in CONFIG_DB. + +VLAN and port identifier validation are added as part of the logic added in the functions for the new commands. + + +## 3.2 DB Changes +### 3.2.1 CONFIG DB +**FDB table for Static MAC** +FDB table will be set in CONFIG_DB to store static MAC configuration. + +**SWITCH table for Aging time configuration** +SWITCH table will be set in CONFIG_DB to store FDB aging time configuration. + +## 3.3 Switch State Service Design +### 3.3.1 Orchestration Agent + + +**Data Structure changes** + + +The internal FDB data structure will be enhanced to store port and FDB type information. Currently, FDB is stored as c++ set. It will be changed to c++ map to store (key, value), where key is (MAC, bv_id) and value is (port, type). +Port and type are needed to support FDB flush per port or per port per VLAN. + + + **FDB Data structure in Orchagent:** + + + + +In current Sonic implementation, when a FDB event is received with VLAN SAI object ID, the VLAN ID is retrieved by traversing through all the ports and VLANs in the orchagent DB and finding the one that matches the object ID. Also, the Port details are retrieved by traversing all the port and VLANs. This approach is inefficient as it may traverse through the number of VLANs configured for each FDB learn event. + + +A new unordered_map containing a mapping between SAI object ID (can be either Port object ID or Bridge Port object ID or VLAN object ID) and Name (port or VLAN alias) will be added which can be looked up in O(1) time. The Port or VLAN alias retrieved from this will be looked up in the Port data structure. + + + **Object ID to alias mapping.** + + + + + +**Changes for FDB flush.** +When a FDB flush request is received, Orchagent internal DB will be traversed and FDB entries corresponding to flush request will be delete from Orchagent data structure and STATE_DB. A delete request to ASIC_DB will also be invoked through sai_redis API. + + +When a port operational status goes down, portsorch will call fdborch API to trigger FDB flush. Only dynamic FDB will be flushed. + + +When a port is removed from VLAN, portsorch will call fdborch API to trigger FDB flush. Both static and dynamic FDB will be flushed. Also, the static FDB will be added to the temporary DB in orchagent, so that it can programmed back when port is added back to VLAN. + + +When Spanning tree state changes, protocol component within orchagent will call fdborch API to flush FDB by either per Port or per Port per VLAN. Only dynamic FDB will be flushed. + + + **FDB Flush due to Port operational state down:** + + + + + + **FDB Flush due to Port removal from VLAN:** + + + + + + **FDB Flush due to spanning tree state change:** + + + + + +**Changes for handling MAC move events.** +Hardware can generate a single MAC move event instead of generating 2 events (del-old mac and add-new mac). SAI and SONiC changes will be done to replace the existing FDB entry with the new port in internal data structure and STATE_DB. + + +**Changes for FDB aging time configuration.** +A new CLI commands to be added for configuring the FDB aging time. +FDB aging time configuration will be configured in the SWITCH table in CONFIG_DB. Vlanmgr will populate it in the APP_DB. Orchagent will get notified and handling will be SwitchOrch. SwitchOrch will call API from FdbOrch, which will in turn call sai_redis API to send request to syncd via ASIC_DB. + + + + + +**Changes for Static FDB configuration.** +New CLI to be added for configuring Static FDB entry. It will be configured in the FDB table in CONFIG_DB. Vlanmgr will handle the CONIG_DB changes, do necessary validations and then populate in APP_DB. FdbOrch already has all the necessary handling for Static FDB changes from APP_DB. +When a port is removed from VLAN, the corresponding Static FDB entries will also be flushed from all databases except APP_DB and CONFIG_DB. Flushed static FDB will be stored in the saved FDB in orchagent for retrieval and programming later when port is added back to VLAN. +If a dynamic FDB is already learnt and a static FDB is configured with same (MAC, VLAN), the existing dynamic FDB entry will be replaced with the static entry. + + + + + + + + + +### 3.3.2 Other Process +**Vlanmgr changes** +Vlanmgr will handle Aging time configuration changes from SWITCH table in CONFIG_DB. It will set the new aging time in SWITCH_TABLE in APP_DB, which will be processed by SwitchOrch. + + +Vlanmgr will handle Static FDB configuration from FDB table in CONFIG_DB. It will do validation and then set the static FDB in FDB_TABLE in APP_DB, which will be processed by FdbOrch. + + +## 3.4 SyncD +No change. + + +## 3.5 SAI +No change + + +## 3.6 CLI +### 3.6.2 Configuration Commands +**FDB Aging time configuration** +root@sonic:/# config mac aging-time +- To set the mac aging time to a value. + + +**Static MAC configuration** + + +root@sonic:/# config mac add 00:10:3a:2b:05:67 100 Ethernet2 +- To add a static mac on vlan 100 and port Ethernet2. + + +root@sonic:/# config mac del 00:10:3a:2b:05:67 100 +- To delete a static mac on vlan 100. + + +**VLAN Range configuration** + + + root@sonic:/# config vlan range add + + root@sonic:/# config vlan range del + + root@sonic:/# config vlan member range add + + root@sonic:/# config vlan member range del + + + +### 3.6.3 Show Commands + + +root@sonic:/# show mac aging-time +- To display the current configured mac aging time. + + +# 4 Flow Diagrams +Flow diagrams are provided in the [Design](#design) section. + +# 5 Serviceability and Debug +Debug counters will be added for all operations and events related to L2 forwarding like the following: +In Orchagent: +- Number of FDB learn/aged events received from ASIC_DB. +- Number of FDB add/delete request received from APP_DB. +- Number vlan add/delete received from APP_DB. +- Number of FDB entries inserted in the saved FDB database. +- Number of FDB add/delete requests sent to syncd. +- Failure counters for various failure conditions. + + +NOTICE/INFO level logs will be added for major operations and events in vlanmgr and orchagent. + + +Logic is added in the functions for range commands of VLAN create and VLAN member create to log messages with severity ‘info’ upon administrator trying to perform an operation on an existing VLAN. Log messages of type ‘warning’ are logged for non-existent VLANs when administrator tries to perform VLAN delete and VLAN member delete operations. Iteration in the loops is not intentionally broken, if an existing/non-existing VLAN is trying to be operated upon, to ensure configuration for other VLANs goes through successfully. + + +# 6 Warm Boot Support +No change. + +# 7 Scalability +VLAN delete range operation takes significantly longer (though not as much if the same operation is performed using existing ‘config vlan del’ command) if many ports are included in the entire range as internally the logic performs SET operation for removing each VLAN member before deleting the VLAN. + + +# 8 Unit Test + +**Data structure changes** + +1. Verify that FDB internal map is updated properly when a FDB entry is added/deleted in hardware or when a static FDB entry is added/deleted. + +2. Verify that SAI Object ID to port/VLAN name mapping table is updated properly when a port/port-channel or VLAN is added/removed + +**FDB flush** + +3. Verify that dynamic fdb entries are flushed in hardware, orchagent data structure and other DBs when a port operational state goes down. + +4. Verify that dynamic fdb entries are flushed in hardware, orchagent data structure and other DBs when a port operational state goes down. + +5. Verify that FDB entries are added back properly when the port comes back operationally up. + +6. Verify that both static and dynamic fdb entries are flushed in hardware, orchagent data structure, STATE_DB and ASIC_DB when a port is removed from VLAN. + +7. Verify that the flushed static FDB entries are stored in saved FDB in orchagent. + +8. Verify that FDB entries are added back properly when the port is added back to the vlan. + +9. Verify that dynamic fdb entries are flushed in hardware, orchagent data structure and other DBs when 'sonic-clear fdb all" command is issued. + +10. Verify that dynamic fdb entries on a port are flushed in hardware, orchagent data structure and other DBs when 'sonic-clear fdb port" command is issued. + +11. Verify that dynamic fdb entries on a VLAN are flushed in hardware, orchagent data structure and other DBs when 'sonic-clear fdb vlan" command is issued. + +12. Verify that mac are learnt properly again after flush due to 'sonic-clear' command. + +13. Send traffic from same MAC, VLAN to a different port and verify that mac is updated in hardware, ASIC_DB, STATE_DB and orchagent data structure. + +**FDB Aging time configuration** + +14. Set FDB aging time from CLI and verify that FDB entries age out after that interval. + +15. Verify that FDB aging time takes effect after configuration is saved and switch is rebooted. + +**Static FDB entry configuration** + +16. Verify that Static FDB entry configured from CLI is added in hardware and all other DBs. + +18. Verify that if port is not member of VLAN, Static FDB entry is added in CONFIG_DB, APP_DB and saved FDB in orchagent. + +19. Verify that Static FDB entry is effective after configuration is saved and switch is rebooted.. + +**Warm restart** + +20. Verify that Aging time and static MAC configuration are re-applied after switch, swss docker, syncd and orchagent warm reboot. + +21. Verify that FDb entries are synchronized after Orchagent unplanned reboot if the reboot happens while FDB flush is in progress. + +**Scale test** + +22. Verify 8K FDB entry learning. All entries should be added to various DBs, hardware and Orchagent data structure. + +23. Verify 8K FDB entry aging. All entries should be deleted from various DBs, hardware and Orchagent data structures. + +24. Verify 8K FDB entry flush per port, per VLAN and per port per VLAN. + +26. Learn 8K FDB entries on 4094 VLANs and verify the above cases. + +**VLAN Range:** + +27. Validate VLAN identifier in VLAN range commands. + +28. Check log messages for overlapping VLANs (logged with severity 'info' - default logging level is warning and above) provided in VLAN range commands. + +29. Check log messages for non-existent VLANs (logged with severity 'warning') provided in VLAN range commands for member port inclusion and exclusion. + +30. Validate the port data provided in VLAN member range command. + +31. Validate the traffic flow after the VLANs are created and member ports are added. + +32. Ensure the ports removed from the VLANs are excluded from the hardware by sending matching traffic flows. + +33. Ensure the deletion of range of VLANs is successful. + +34. Create a range of VLANs and save the configuration. Check for the existence of VLANs after reload operation. + +35. Remove few VLANs randomly after executing the command to create a range of VLANs. Check for the existence of the rest of the VLANs. + + +# 9 Internal Design Information +FDB Flush options: +1. Send bulk flush from Orchagent to SAI. Delete of MAC in Orchagent DB, STATE_DB and ASIC_DB to be done in the individual MAC delete callback from SAI. + - The approach causes issues with reference count in sai_redis. sai_redis maintains a MAC reference count on the bridge port. When we send a bulk flush request, this reference count is not decremented. Its decremented only when AGE event is received from SAI. So, we need to wait until response it received for all MAC before issuing a bridge port delete from portsorch. For this we need to maintain a reference count in portsorch also and prevent any other configuration on the port to go to sai_redis until reference count is 0. This can also open up other race conditions. + + +2. Send bulk flush from Orchagent to SAI. SAI responds with a bulk flush response, which is used to delete MAC from ASIC_DB, Orchagent DB and STATE_DB. + - With this approach, syncd notification thread can get stuck for significant time doing inefficient traversal and retrieval of individual entries from ASIC_DB, as the DB does not support any bulk operation. + + +3. Delete MAC one by one. + - With this approach HW MAC flush will be slower than bulk flush in Hardware. But, there are no issues with reference count and all opearations like removing port from vlan, flushign FDB and deleting bridge port happen in same thread context. + - We are going with approach in 2.0 release. + \ No newline at end of file From 84ac3762b5f1c8cd5b68e4ad7f6ab44199e4a280 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Tue, 7 May 2019 15:36:11 -0700 Subject: [PATCH 02/36] Layer 2 Forwarding Enhancements HLD --- .DS_Store | Bin 8196 -> 8196 bytes doc/.DS_Store | Bin 6148 -> 10244 bytes .../.DS_Store | Bin 6148 -> 6148 bytes ...iC Layer 2 Forwarding Enhancements HLD.md} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename doc/{L2 Forwarding Enhancements => layer2-forwarding-enhancements}/.DS_Store (80%) rename doc/{L2 Forwarding Enhancements/SONiC Layer 2 Forwarding Enhancements-FDS.md => layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md} (100%) diff --git a/.DS_Store b/.DS_Store index 682fce01878a950eaa20d58aab23675ec964208c..a6779dd51d7e6996040cbd5f9374683d0335809f 100644 GIT binary patch delta 882 zcmeIuO-R#m7{Kx8Yqj>Ll|SdU%$OUEW>nau8P3Q?FKVguqKLhKO#Lrb;iSzO9SX_b zJ4pY^OC{3VCBmBFNqf6hmq;p$4s{E!vB(bfXYSG^=-zYr@$lt$cs~8%{_w~hWeHWR z_6FA(_f+=+TSIHCBi_{%JEj}I3Zvz1O7$f4-TL83GM3V}M3Q=~}0z0l!wE%q*7 zS+=%v!zN?UG0^ER_1F~ZkyV>4T2j1pRjJ3L@~qbEvL;}*IVzHC!3vv4%~PG)YzT`9o+pMB#R$n+L{a5GL@|?(vdw>`Rv%0CQZXYK(#c9)cfJ4#bAaUS!8r##~& UlYC0oxW+6-#!>#C!lansHzCf}3IG5A delta 855 zcmeIuOGs346oB#bO?J5#C;gA(m}cWBqM~HQI57r2t}#vdBGQ5&NynUEsMH#JU~d|T zC?U9%QW3VONDTtbDF_!un+kf(#-dHQjiTCwn=Yf&E@UA_atznnPs&MTo+7a8`)7={DkG3myC?0Kz?u+!r4o5?gzGz%AKIJNcHtS=K z_f)C5Qqp6HE?)6VNSdTW4$3hZkRiD#6EZ1Dc`7d@CGTZMzQ|YkEB7_jfC04R$AG{b{n#T2%YRrWA<>A zevWg3lbqu`7i`c0+jEGLt6bwcx44sr9c6+^l04)QPk2F!>G5!0QnNBVRsTi)h)nSd DFrmg} diff --git a/doc/.DS_Store b/doc/.DS_Store index 6d9fdc84d2cad6b3803aef1f6abd781a715cea02..cf7ba6aa06aede8171f9ead960969e129639588f 100644 GIT binary patch literal 10244 zcmeHMU2IfE6h5aEm?@OrB9!8~bfK11C{hZg6cKmZ1t~v5+?Ez7l)HN`?TvTuUH0DH z1!_r6G-{&8sKkgyV|Y`;lg9XBf`9QR{>0R1V~B}wJ{jMPQRA6Aw@q8?jzU0Ac{ZC<>`9rsO(7)QfmcC<`^B63HGQ4=u0(PJv4~6%+yr z0fm4xC|%>ku3U^p^{9tsAdlU*!m4j7kG zr3wLsz_kd7ZLGEKJ1r7|7S8tLWBAo*n%4dVJ4_>l&j98V3orIfGx1+PQT9}}fRx<8Z-^WCm%Pv-UXVaqHH zXv;cX$JZ^#%m>DnVN#R+Udu7uQioe`3@_*>B`X-?j1OqF!^5rZtxd5lTU$n&V#951 z&6MA~b!3FI6%Cv2?mC%0dv5r_k@GJ|956gfplSv#7v~C!J-8{AakIH8{muzw+becT zkjtK*0QtKKkU3uz>Ds$*|A3|yJoA3j)_tpJCUxKR2DB=V(C*5(&Y`?nBxHLtu3gAF zR8yVN?M#6hn+e-aS?5fz&o|HbB6rkt^L}U0u+Jh}p&QVa3j2dO-*O%Au$lKra{l__ z<aOR6e)U1T-a-eUa*efhS>|z7o$Tg35KR}d{rY(F6(+u8Y>uJ-Lsy5!vw0*p{ zD5ooxJNQmkjZM6dRya%Z^rSiw>15i+?1UJ5zwY@5bEZSXi`ng}i$snHeZnwIgE3Yg zZKIvIn1Mn z!}u^hf{)?j_zb>?FX7Ah3SP#y@e00&@8bvfIev}b%P%aO*fIyEP@A%Nm6EwqJUmCr zPF#=T(cSm%>G)45KE7D;`j%zOSJgLeXldJ#m|Xf9t38!?0oNp%0+LOTC|L68%#|B} zM|+5i=9$^{fwoYvj*W@db+Kqv6Lgcs+Z(7@Mms_l?^qY*+C1Vr4;tUOkw>-pL~U8S zc?;)SIdNasZfmF71;lbTwsJ*n4d2P*Tx?7Y0^^Pb>I><7orSZrGWJz?4c>td;ZtJj zH*ghxgrDJ8Vre-p!5ZRd1aHGAuEj=NhwHHkTd|GUx}Er%#ND_DyNI(X?7?2_!y}kR zgBUxALwK4PTficga1wgCPttT$!|11B0>WlaP!~g#aK5)JE delta 361 zcmZn(XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50D9Q$s2aDx16fu-DBm&8ljfKmZ zl|eF63_c7-3Q82NX{7Aq_o)|5Og2F_p zvlAC5O5G%))M*kjYqNsH62`^s92|noK)(Zl05_0u1%=ke!tczJ`BgkYVaLD(2}e-S LGHj0LnZpbKf;K@a diff --git a/doc/L2 Forwarding Enhancements/.DS_Store b/doc/layer2-forwarding-enhancements/.DS_Store similarity index 80% rename from doc/L2 Forwarding Enhancements/.DS_Store rename to doc/layer2-forwarding-enhancements/.DS_Store index 3b7c4f83cbf9be995d0f59bbc74708c9cd825fbb..c454da52988b51acacbf9426c76dfbac6e513d8f 100644 GIT binary patch delta 357 zcmZoMXfc=|#>B)qu~2NHo}wr_0|Nsi1A_nqLn=dYQh9MfQcix-=825U8S6n(Yz&zU zxeSR6>B!PR@smjfIhn;J1_sv|nV4Bv+1NQaxH!0YxnhGe^2>uu5=%;pof39_j~5Ve&d)1J%*;zI0&C7pNd+p239rx0OUW;H$}i1JDFz!9 z43XjB;N;+p7m%o~HnlX>Q7|zxs?|}bHa9l_vW?AZYdJZ@RSj)D6LKr7s%vWNW&&Lc z1dKpWf&o92hEcPC3>06c6es5-0o}>SFqwz3d$K+wFHc!;QC?1dUOG@IBQR_tSvIqC b@N)nI5y<(@Jegm_k^^Ww*oMskB3qaNdQe;; delta 87 zcmZoMXfc=|#>B`mu~2NHo}wrV0|Nsi1A_nqLn=dYPP$=ma(-^X#KPr_ER(sIyEpG) o_Ga09fLWDkGdl-A2T Date: Tue, 7 May 2019 15:38:14 -0700 Subject: [PATCH 03/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .../SONiC Layer 2 Forwarding Enhancements HLD.md | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index 50ca009dd2..fb6426422a 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -425,19 +425,7 @@ VLAN delete range operation takes significantly longer (though not as much if th 35. Remove few VLANs randomly after executing the command to create a range of VLANs. Check for the existence of the rest of the VLANs. -# 9 Internal Design Information -FDB Flush options: -1. Send bulk flush from Orchagent to SAI. Delete of MAC in Orchagent DB, STATE_DB and ASIC_DB to be done in the individual MAC delete callback from SAI. - - The approach causes issues with reference count in sai_redis. sai_redis maintains a MAC reference count on the bridge port. When we send a bulk flush request, this reference count is not decremented. Its decremented only when AGE event is received from SAI. So, we need to wait until response it received for all MAC before issuing a bridge port delete from portsorch. For this we need to maintain a reference count in portsorch also and prevent any other configuration on the port to go to sai_redis until reference count is 0. This can also open up other race conditions. - -2. Send bulk flush from Orchagent to SAI. SAI responds with a bulk flush response, which is used to delete MAC from ASIC_DB, Orchagent DB and STATE_DB. - - With this approach, syncd notification thread can get stuck for significant time doing inefficient traversal and retrieval of individual entries from ASIC_DB, as the DB does not support any bulk operation. - - -3. Delete MAC one by one. - - With this approach HW MAC flush will be slower than bulk flush in Hardware. But, there are no issues with reference count and all opearations like removing port from vlan, flushign FDB and deleting bridge port happen in same thread context. - - We are going with approach in 2.0 release. \ No newline at end of file +--> From 2ba476d0a8f4dbcd9d35f7ecec6efb687c481c81 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Tue, 7 May 2019 15:43:04 -0700 Subject: [PATCH 04/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .../SONiC Layer 2 Forwarding Enhancements HLD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index fb6426422a..608e67f841 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -7,7 +7,7 @@ * [About This Manual](#about-this-manual) * [Scope](#scope) * [Definition/Abbreviation](#definitionabbreviation) - * [Requirements Overview](#requirement-overview) + * [Requirements Overview](#1-requirement-overview) * [Functional Requirements](#functional-requirements) * [Configuration and Management Requirements](#configuration-and-management-requirements) * [Scalability Requirements](#scalability-requirements) From 0e33fd7bd6e530c22e185a24ef01eb3090809c43 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Tue, 7 May 2019 15:43:29 -0700 Subject: [PATCH 05/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .../SONiC Layer 2 Forwarding Enhancements HLD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index 608e67f841..b24fb9e86a 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -8,7 +8,7 @@ * [Scope](#scope) * [Definition/Abbreviation](#definitionabbreviation) * [Requirements Overview](#1-requirement-overview) - * [Functional Requirements](#functional-requirements) + * [Functional Requirements](#1-1-functional-requirements) * [Configuration and Management Requirements](#configuration-and-management-requirements) * [Scalability Requirements](#scalability-requirements) * [Warm Boot Requirements](#warm-boot-requirements) From 3e59927df73878de1c87051aaa1e130a30f03ee8 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Tue, 7 May 2019 15:44:24 -0700 Subject: [PATCH 06/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .../SONiC Layer 2 Forwarding Enhancements HLD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index b24fb9e86a..1620c7502f 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -8,7 +8,7 @@ * [Scope](#scope) * [Definition/Abbreviation](#definitionabbreviation) * [Requirements Overview](#1-requirement-overview) - * [Functional Requirements](#1-1-functional-requirements) + * [Functional Requirements](#11-functional-requirements) * [Configuration and Management Requirements](#configuration-and-management-requirements) * [Scalability Requirements](#scalability-requirements) * [Warm Boot Requirements](#warm-boot-requirements) From dc7d77793d3b37844b96c555b011c221bf045fff Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Tue, 7 May 2019 15:48:19 -0700 Subject: [PATCH 07/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- ...NiC Layer 2 Forwarding Enhancements HLD.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index 1620c7502f..4e4c908fe7 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -9,28 +9,28 @@ * [Definition/Abbreviation](#definitionabbreviation) * [Requirements Overview](#1-requirement-overview) * [Functional Requirements](#11-functional-requirements) - * [Configuration and Management Requirements](#configuration-and-management-requirements) - * [Scalability Requirements](#scalability-requirements) - * [Warm Boot Requirements](#warm-boot-requirements) - * [Functionality](#-functionality) - * [Functional Description](#functional-description) - * [Design](#design) - * [Overview](#overview) - * [DB Changes](#db-changes) - * [CONFIG DB](#config-db) - * [Switch State Service Design](#switch-state-service-design) - * [Orchestration Agent](#orchestration-agent) - * [Other Process](#other-process) - * [Syncd](#syncd) - * [SAI](#sai) - * [CLI](#cli) - * [Configuration Commands](#configuration-commands) - * [Show Commands](#show-commands) - * [Flow Diagrams](#flow-diagrams) - * [Serviceability and Debug](#serviceability-and-debug) - * [Warm Boot Support](#warm-boot-support) - * [Scalability](#scalability) - * [Unit Test](#unit-test) + * [Configuration and Management Requirements](#12-configuration-and-management-requirements) + * [Scalability Requirements](#13-scalability-requirements) + * [Warm Boot Requirements](#14-warm-boot-requirements) + * [Functionality](#2-functionality) + * [Functional Description](#21-functional-description) + * [Design](#3-design) + * [Overview](#31-overview) + * [DB Changes](#32-db-changes) + * [CONFIG DB](#321-config-db) + * [Switch State Service Design](#33-switch-state-service-design) + * [Orchestration Agent](#331-orchestration-agent) + * [Other Process](#332-other-process) + * [Syncd](#34-syncd) + * [SAI](#35-sai) + * [CLI](#36-cli) + * [Configuration Commands](#361-configuration-commands) + * [Show Commands](#362-show-commands) + * [Flow Diagrams](#4-flow-diagrams) + * [Serviceability and Debug](#5-serviceability-and-debug) + * [Warm Boot Support](#6-warm-boot-support) + * [Scalability](#7-scalability) + * [Unit Test](#8-unit-test) # List of Tables @@ -278,7 +278,7 @@ No change ## 3.6 CLI -### 3.6.2 Configuration Commands +### 3.6.1 Configuration Commands **FDB Aging time configuration** root@sonic:/# config mac aging-time - To set the mac aging time to a value. @@ -308,7 +308,7 @@ root@sonic:/# config mac del 00:10:3a:2b:05:67 100 -### 3.6.3 Show Commands +### 3.6.2 Show Commands root@sonic:/# show mac aging-time From 2f6c89bdd472854a80a95e042f1c9d78acb0d509 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Tue, 7 May 2019 15:52:03 -0700 Subject: [PATCH 08/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- ...NiC Layer 2 Forwarding Enhancements HLD.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index 4e4c908fe7..fb218253ae 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -7,30 +7,30 @@ * [About This Manual](#about-this-manual) * [Scope](#scope) * [Definition/Abbreviation](#definitionabbreviation) - * [Requirements Overview](#1-requirement-overview) - * [Functional Requirements](#11-functional-requirements) - * [Configuration and Management Requirements](#12-configuration-and-management-requirements) - * [Scalability Requirements](#13-scalability-requirements) - * [Warm Boot Requirements](#14-warm-boot-requirements) - * [Functionality](#2-functionality) - * [Functional Description](#21-functional-description) - * [Design](#3-design) - * [Overview](#31-overview) - * [DB Changes](#32-db-changes) - * [CONFIG DB](#321-config-db) - * [Switch State Service Design](#33-switch-state-service-design) - * [Orchestration Agent](#331-orchestration-agent) - * [Other Process](#332-other-process) - * [Syncd](#34-syncd) - * [SAI](#35-sai) - * [CLI](#36-cli) - * [Configuration Commands](#361-configuration-commands) - * [Show Commands](#362-show-commands) - * [Flow Diagrams](#4-flow-diagrams) - * [Serviceability and Debug](#5-serviceability-and-debug) - * [Warm Boot Support](#6-warm-boot-support) - * [Scalability](#7-scalability) - * [Unit Test](#8-unit-test) + * [1. Requirements Overview](#1-requirement-overview) + * [1.1 Functional Requirements](#11-functional-requirements) + * [1.2 Configuration and Management Requirements](#12-configuration-and-management-requirements) + * [1.3 Scalability Requirements](#13-scalability-requirements) + * [1.4 Warm Boot Requirements](#14-warm-boot-requirements) + * [2. Functionality](#2-functionality) + * [2.1 Functional Description](#21-functional-description) + * [3. Design](#3-design) + * [3.1 Overview](#31-overview) + * [3.2 DB Changes](#32-db-changes) + * [3.2.1 CONFIG DB](#321-config-db) + * [3.3 Switch State Service Design](#33-switch-state-service-design) + * [3.3.1 Orchestration Agent](#331-orchestration-agent) + * [3.3.2 Other Process](#332-other-process) + * [3.4 Syncd](#34-syncd) + * [3.5 SAI](#35-sai) + * [3.6 CLI](#36-cli) + * [3.6.1 Configuration Commands](#361-configuration-commands) + * [3.6.2 Show Commands](#362-show-commands) + * [4. Flow Diagrams](#4-flow-diagrams) + * [5. Serviceability and Debug](#5-serviceability-and-debug) + * [6. Warm Boot Support](#6-warm-boot-support) + * [7. Scalability](#7-scalability) + * [8. Unit Test](#8-unit-test) # List of Tables From ae3a797186939a3f93f6b8b2aa5a789578183c59 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Wed, 8 May 2019 14:55:40 -0700 Subject: [PATCH 09/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .DS_Store | Bin 8196 -> 8196 bytes doc/.DS_Store | Bin 10244 -> 10244 bytes doc/layer2-forwarding-enhancements/.DS_Store | Bin 6148 -> 8196 bytes ...NiC Layer 2 Forwarding Enhancements HLD.md | 31 ++++++++++++------ .../images/Presentation2-14.jpg | Bin 0 -> 51240 bytes 5 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 doc/layer2-forwarding-enhancements/images/Presentation2-14.jpg diff --git a/.DS_Store b/.DS_Store index a6779dd51d7e6996040cbd5f9374683d0335809f..407bd0ab4da654e5825dfe39e369f9ad575e637a 100644 GIT binary patch delta 1122 zcmeIv-Aj{E90%~B&jmRewO|>iqa}4(EKn1J(iS zkTYtbrDLXZR5~1ro0T#u1`EOlE|i-Z2pB9zy{5=w4C*z3qQYX6USl>JfxUk5n6%#}hMK1DDYrDU@qNUx}LL`|Mz$;?x4trI#Ot{FW2-*DpO^t1> zK5u~i}#uv77h^h|ATfyq)@AuRIw5{XV&;U`s_WhD#` zJ=@so^LX6eE`KAdF1L$em@M%{t1HX8F|uj!Iz8?z zYhh$!iJ=TKkd11nnGR8a25F2g(Hzaw9ePAhDNL{EJ$<6j^o73CcSsP6IK(3XN~9tU z>BxZrMwnnltpio4K`rXA2Yay(O>n^jFFMePBM9L*PGA6MFoIE>!#FPE25#aOrtuI@ z@El7B;|1R013u!La5hP;SQg*;o3vw%bVMYTOVyS3N=MZ%Q^Q|OU&jBmN=iT}i zJcD^lnQ$R_s6SSxmT|WkHmpolrRD0>YEHs1t3!T)m_%{TwajReskwEWi;bkk7MYBT z=KO5rWJ#%*#&FeZX?ca15--uQ?4Mic7k~KY8Ww1Y-iZ~gfDj|{CyDf#$VMK_*ordP zunpU>13OWV2J8~uo8d$Y4zAk!a1=f0MG$>BiBmW&`VWf!W1{~A&LiUruHqW5V+wPa r$6egReLTQpJQM49E!gF1yqP^9pTuw|c2=rfjuzMy?SHg?Mq_>efzSh; delta 1190 zcmeIv%TE(g6bA6~l}Bf^;1o)W6`V@LLnKh7JQXNn1OyTlV!%hVkHJ*S!?d7+r4aEE zb%BhMsAyxqqG`Gp(Ar|NVC(!?)nzfPlC&#-m&=Eg>$$>W|_#;K$9#rhI)Fe=tpx>B#NcSy}j z91g+3FpSY+8A7$zfsZ8%yJqtzJ_Q`58ZB#k~zuP-T?S8?F(G3-R_a{Y=m$vn>~ z7)Cy1n4~O(v(9JcY!%OiaSk?^<`<|`Tqx&egExzcr8JzYoKH*RrIc9qA9Oy+?yqt$ zXo^14EEG^8LK4$US}90}8AaHHa#W%U)!2?Y?7&X!lBo8pfz5?U|% za2^-X4?nKqI&R=*90n!3yRzK~9%2-a@EFfAfp?e|3$;8x1a@ov2qN5p I%)$on6CX_t0{{R3 diff --git a/doc/.DS_Store b/doc/.DS_Store index cf7ba6aa06aede8171f9ead960969e129639588f..5e51f2ac61a0c62e466e9410dd2cba0f4c308bdc 100644 GIT binary patch literal 10244 zcmeHMUu+ab82`Sb!0z&=TZCXo+qkz?<6X*cfe9=Cf} zN-e3;M}qMWnn+BP_*Q%|(FgU#L?cmOj7^<2>?(iGN~`8%QJLwb5oMbYRQ$h-NK;aG;^^DOC1$pn}m*D1rNg-t_ z5s(Pni~w6U_27aD<6z%#e;=c|B3R&n2P1T=w@Hptod-F}=Xp7VAUhTmvaX+{cD~3K zTqg)yTffEFqKd^!mMV&-Xe+d*)1&@aIyA#l&}$ZtvQobpj%K6$fbYB4^JaF?vBxs{ z>OS8KO~z6z$;O(S^LQzyj&FHlg6Ybp{&55?|j>+c4L|g0D z&gMi{SNr6os#G_&?bvrBKYnK7*~znS2p}-pOrUZeFc%k!iaXMl&iVPmoOTz4vKy59 z1j@1TS(LBNqO5AmjNNVr8YStVRkFZSG}M8?}nwpbVF?&Z&|Uj?d^TD_5+oGqhtC^>o0un3tu$uc%y;s56YCOw(7i zDYX=ZS3lTjXafNaRyQNV4NaOh@C*@04^-j0X|rY=a?Pym>Xs_pIyyCDs4NiE_eYgm zyES8&W-(7g4yv#@s@}2FFpjgHA2);WV8QliR9C2b_U%TUky4byOxt5wG^&Q=dcgty zr47keQBvu+tA$N;xb1~ww3G_8{LaC7co8nbJ8&7^gOA~JxB_3oSMW7_2j9aF@FV;T zzryeE2Ld8$Xkazg;QjazuE!17gdMmQx8WnW9e3e=Jb+K&K^(>tn8h4gn8z}X;~AX5 z7w{FlfUn`}_!hp6m+&&aiyz=e_^B9LY<5vRHix{F#m^{ND2b!3B6j>%B#!Uez2{#d z@wMe__NrFhvwBT^!@7;FTedxVedg!Q^$m2K%Ro*$!7I+USw0Dl8`U+n@wM8$w_6#9 zh@tjrh0#o3I>W6K@dp%Qmag!k))-e+qQB5J#+wvHj|ojne6vb?*B1$0yVj`?v-QP7 z+og4@#C^R&Xt!%S6{5JlWTv*d#z^*PnhtC!s(+uWmtYz`B%Xc)SBafJ!7s$m--w$_ zv5IqZE!JT@t|NXn;YMu1hp`L0iKBg(B989CetZ(sIDmtgiFj(Ghd!RdB8E7LXK@Oj z!{_lFp2wH)W#a9t_$D!SdLC2v&1352g)%kor&7_Ord(4mr0aV==~;N2)*WxNFnVW? znR2@5xxP0--#WVs+z72KNdzPU5&?;TL_i{Nmm{!9j6cEN|99Q~|Np!EE9LMd0uq70 zLI5jL=~ORS-0n9&duvZnJVB8KW;Z1yccFxtuzLO+PX+d_$X`CFE_(Ce`ebA`B_wwz eKkiOayypMoe+Jz2h$Zj;^8P>PQTu;z|Nj$Ed#36D literal 10244 zcmeHMU2IfE6h5aEm?@OrB9!8~bfK11C{hZg6cKmZ1t~v5+?Ez7l)HN`?TvTuUH0DH z1!_r6G-{&8sKkgyV|Y`;lg9XBf`9QR{>0R1V~B}wJ{jMPQRA6Aw@q8?jzU0Ac{ZC<>`9rsO(7)QfmcC<`^B63HGQ4=u0(PJv4~6%+yr z0fm4xC|%>ku3U^p^{9tsAdlU*!m4j7kG zr3wLsz_kd7ZLGEKJ1r7|7S8tLWBAo*n%4dVJ4_>l&j98V3orIfGx1+PQT9}}fRx<8Z-^WCm%Pv-UXVaqHH zXv;cX$JZ^#%m>DnVN#R+Udu7uQioe`3@_*>B`X-?j1OqF!^5rZtxd5lTU$n&V#951 z&6MA~b!3FI6%Cv2?mC%0dv5r_k@GJ|956gfplSv#7v~C!J-8{AakIH8{muzw+becT zkjtK*0QtKKkU3uz>Ds$*|A3|yJoA3j)_tpJCUxKR2DB=V(C*5(&Y`?nBxHLtu3gAF zR8yVN?M#6hn+e-aS?5fz&o|HbB6rkt^L}U0u+Jh}p&QVa3j2dO-*O%Au$lKra{l__ z<aOR6e)U1T-a-eUa*efhS>|z7o$Tg35KR}d{rY(F6(+u8Y>uJ-Lsy5!vw0*p{ zD5ooxJNQmkjZM6dRya%Z^rSiw>15i+?1UJ5zwY@5bEZSXi`ng}i$snHeZnwIgE3Yg zZKIvIn1Mn z!}u^hf{)?j_zb>?FX7Ah3SP#y@e00&@8bvfIev}b%P%aO*fIyEP@A%Nm6EwqJUmCr zPF#=T(cSm%>G)45KE7D;`j%zOSJgLeXldJ#m|Xf9t38!?0oNp%0+LOTC|L68%#|B} zM|+5i=9$^{fwoYvj*W@db+Kqv6Lgcs+Z(7@Mms_l?^qY*+C1Vr4;tUOkw>-pL~U8S zc?;)SIdNasZfmF71;lbTwsJ*n4d2P*Tx?7Y0^^Pb>I><7orSZrGWJz?4c>td;ZtJj zH*ghxgrDJ8Vre-p!5ZRd1aHGAuEj=NhwHHkTd|GUx}Er%#ND_DyNI(X?7?2_!y}kR zgBUxALwK4PTficga1wgCPttT$!|11B0>WlaP!~g#aK5)JE diff --git a/doc/layer2-forwarding-enhancements/.DS_Store b/doc/layer2-forwarding-enhancements/.DS_Store index c454da52988b51acacbf9426c76dfbac6e513d8f..f0b7b9f48cb977a225a2a6ea1e3aef09ce5a8ce2 100644 GIT binary patch literal 8196 zcmeHMTWl0n82WoNbv z)S8+|d=aBYV*-hZ;SG@|jqqY(yu@I<#9)*d67|JLqtV1C z`jiLAm_#Vkp&V6GhSED#_JCn1hA9TBaIz5U_gIW{(d7r=-7VH*!VTZrqxWZouO$nwV88fKAs!!D!IT2 z%6_X+IwqbD8o@w5?00&ebEj|QkJwhFkI!%O+`zD1t0aSM(;}DNF55M|N~>3PO<%qz zrwp3LG}g!U;o+v1^~pr4W&KDpF`R1LydjxrZf+VGVcMb^1hP@DR^5qotEo^QtBVQiM(zIWgL zKF-U&b;xpzz#g))Mqv4Ue6CM8wHG}1V96RHOu7o5Q!ct>sVf*xp-j$J#&L4?SXtKu4%jdT|>5S=N+rlHHubUY$Ibg7cQ!wqsR3J#!S^A z8gJ0L%X#}$*$&RgF_tdVS+7YmKj4{S6qCQLF==U7rt8OqrLAO9YigQQuUf6MPM=o6 zjnFZo6Ir z(-~bqE=JyO_(8{@<xKt?js$NupM^6 zQ7C{56?hKL!}D+fF2PlJ3*Lo~;1l=^K8G*h7JLss!q4yv{0hIpA2#;;)@;So`{yrM z+OT?UQ}fo$o&BuZ!Mmv>`J)ITi8DqFxrO7{DE3^BFJ?=oV)S9+opo9hjt)o5si6`vbL}-8nKnvD(iNZ zX5xp&K|QaCXPL%vDh^J`z}Mk2T!#0}cZrnp0%wZ=U!7l6}4i+Q_2k;b@Fu*c#aTK2>CZ5A*LoU9Iui$HV zsfu~+Rm{6m&Ag(Q&4%BCwfwd3PA<*7mzn5e{;kj8z+WHAL%EXccy2$vd+b*+ernOv zWC%=C%6gIi@0|Mk|74+&E?P7ZNZLtD>;+{&uzn%cUVKx2S_kr6^O@Iz@B zHEZ%G0ng1DV)Gd{Hs~=gX6N7#WQNEIa06*qkRvu0erKM{FXISuB?HhP77)z@aVA)7 Jb3D%+W&nw-A-4bk diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index fb218253ae..439c77fa2f 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -124,7 +124,7 @@ None - MAC move event generated by some HW (e.g. DNX) is currently not handled in SAI and SONiC. Will add support in Orchagent for moving the FDB entry to new port upon receipt of such event. **3. Configuration for FDB aging time.** -- CLI configuration to be added to change the FDB aging time. By default, the aging time in hardware is 0. It can be changed to a desired value if CLI is available. Currently, it can be done only by setting in APP_DB. The configuration range will be 0-500 seconds. Setting aging time to 0 will disable aging. +- CLI configuration to be added to change the FDB aging time. By default, the aging time in hardware is 0. It can be changed to a desired value if CLI is available. Currently, it can be done only by setting in APP_DB. The configuration range will be 0-1,000,000 seconds. Setting aging time to 0 will disable aging. **4. Configuration for static FDB entry.** - Currently, static FDB can only be added only by setting in APP_DB. CLI configuration will be added for this. @@ -227,13 +227,13 @@ When Spanning tree state changes, protocol component within orchagent will call **FDB Flush due to Port removal from VLAN:** - + **FDB Flush due to spanning tree state change:** - + **Changes for handling MAC move events.** @@ -424,14 +424,25 @@ VLAN delete range operation takes significantly longer (though not as much if th 35. Remove few VLANs randomly after executing the command to create a range of VLANs. Check for the existence of the rest of the VLANs. +# 9 Internal Design Information +FDB Flush options: +1. Send bulk flush from Orchagent to SAI. Delete of MAC in Orchagent DB, STATE_DB and ASIC_DB to be done in the individual MAC delete callback from SAI. + - The approach causes issues with reference count in sai_redis. sai_redis maintains a MAC reference count on the bridge port. When we send a bulk flush request, this reference count is not decremented. Its decremented only when AGE event is received from SAI. So, we need to wait until response it received for all MAC before issuing a bridge port delete from portsorch. For this we need to maintain a reference count in portsorch also and prevent any other configuration on the port to go to sai_redis until reference count is 0. This can also open up other race conditions. + +2. Send bulk flush from Orchagent to SAI. SAI responds with a bulk flush response, which is used to delete MAC from ASIC_DB, Orchagent DB and STATE_DB. + - With this approach, syncd notification thread can get stuck for significant time doing inefficient traversal and retrieval of individual entries from ASIC_DB, as the DB does not support any bulk operation. + + +3. Delete MAC one by one. + - With this approach HW MAC flush will be slower than bulk flush in Hardware. But, there are no issues with reference count and all opearations like removing port from vlan, flushign FDB and deleting bridge port happen in same thread context. diff --git a/doc/layer2-forwarding-enhancements/images/Presentation2-14.jpg b/doc/layer2-forwarding-enhancements/images/Presentation2-14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75a02b513565847bfe6e3c7f771e9cd51eb631c9 GIT binary patch literal 51240 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

)Lw)~Oo9PpbKPAt73mNv+Z+ u3C2!Wie_T1YYoG>^%h2MvtUJmoWp0N;@{i9`{M60@b?(_*)j0x<$nN%hOwgn literal 0 HcmV?d00001 From 83a691c215477ebeb8208e59bbc14392dee1adc9 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Wed, 8 May 2019 14:57:09 -0700 Subject: [PATCH 10/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .../SONiC Layer 2 Forwarding Enhancements HLD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index 439c77fa2f..4e2dc4baba 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -233,7 +233,7 @@ When Spanning tree state changes, protocol component within orchagent will call **FDB Flush due to spanning tree state change:** - + **Changes for handling MAC move events.** From f260189174f929c1d5dc440fd3829b7fb81cad41 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Wed, 8 May 2019 15:04:06 -0700 Subject: [PATCH 11/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .DS_Store | Bin 8196 -> 8196 bytes doc/.DS_Store | Bin 10244 -> 10244 bytes doc/layer2-forwarding-enhancements/.DS_Store | Bin 8196 -> 8196 bytes .../images/agingTimeConfig.jpg | Bin 0 -> 59035 bytes .../images/fdbDataStructure.jpg | Bin 0 -> 33816 bytes .../images/oidToName.jpg | Bin 0 -> 25374 bytes .../images/overall.jpg | Bin 0 -> 70949 bytes .../images/portDownFlush.jpg | Bin 0 -> 52680 bytes .../images/portVlanRemoveFlush.jpg | Bin 0 -> 59577 bytes .../images/staticMacConfig.jpg | Bin 0 -> 60732 bytes .../{Presentation2-14.jpg => stpFlush.jpg} | Bin 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/layer2-forwarding-enhancements/images/agingTimeConfig.jpg create mode 100644 doc/layer2-forwarding-enhancements/images/fdbDataStructure.jpg create mode 100644 doc/layer2-forwarding-enhancements/images/oidToName.jpg create mode 100644 doc/layer2-forwarding-enhancements/images/overall.jpg create mode 100644 doc/layer2-forwarding-enhancements/images/portDownFlush.jpg create mode 100644 doc/layer2-forwarding-enhancements/images/portVlanRemoveFlush.jpg create mode 100644 doc/layer2-forwarding-enhancements/images/staticMacConfig.jpg rename doc/layer2-forwarding-enhancements/images/{Presentation2-14.jpg => stpFlush.jpg} (100%) diff --git a/.DS_Store b/.DS_Store index 407bd0ab4da654e5825dfe39e369f9ad575e637a..296edbdd11e405c5f220977e6ebfd07f06a81505 100644 GIT binary patch delta 869 zcmd_mO-R#m7{Kx8tJe0XnZLQ0Y@&Ztn$gR0xWX5*QBsx)l@ew_Oxt1=SxhYyQpsMZ z4(7i+DJs<^D5}}Z#e!ZzMiB*}cInU|iZ00lyELYBjP5O608iE&HiGHAq<&XDmc@B#z=MwpwopYiHPo`31{&GRzJ%XF!W>E(wkHjHIL#T(CM5gl=L%ODV3<*^ah)67 l&f*UDlA_~0;VI8}&I?}iAzJR7AZp5rrx`PL&ws4&ir?^a(rW+! delta 924 zcmeIu%S)7D6oB#bcp2xzQC}S|qn4wEhLM#sk_lO3O_?_&tq6*A%r6+K@iL~NU5tc? z5{$3Jv`s`rH!Q}CE)Wqx4dEhfQHz2I+C&Kz6m9xYX;<_IbT%)Chj(#)eV#tgfG;xK z)OxFJFy?e`TqwqxVI^!VP`$C~Jw2`x_mb?w61Op`vKTfdl#>zTlPXNBvNforPQTt& z+uGr82?V$5?LqT3rtQ14w)uCp1nT|WdV^B?gL<95*Vp0i)V;nAJ*WshN?gH_g`VXy zGn!aszPQ9I)zT>K(j)ycBo|~%#^sJYmgh1hujRdbmTCDSU*!i8#1cn52{=e6lX>Lh z!c7q#DyXEI8tT~24tCN&Gy4e8N*i7Da+G8Aaf;lt404WPE^?h4jB=BQJmm$GO!1O8 zeBdMBj5GF{%<_%p6_tO!*7f&mwO8>8Dly5PoRXTBott0aDqdA)j3f{EV)L9fb=#^< zInpyS7w0*hD#B`=S(Yv{OQiD6HFuHCsiIZ0Hd|Mg*la3F1-03qrK`SeNqJ`y|3t8uympf|heZ@n%o@t@vYrjpvWa>&v&DpM#77f*W^h|L zKsN_D#9@wef|Dk2zv(+f&M+gK=MtB>!d0#@#yEGm$9*2~gb5}?rKw>;(T?v?h9xEU KzshfwXZ!*c-Qe>8 diff --git a/doc/.DS_Store b/doc/.DS_Store index 5e51f2ac61a0c62e466e9410dd2cba0f4c308bdc..6d56ee0b2b3024c56461aea70c8fe47ef396c506 100644 GIT binary patch delta 109 zcmZn(XbIR5F2HzZa)dyGk92jluAzygiH?Gyu|=(pLbaiR1(0KIZd6;#$sw+4XzQ7f sTUk|IQ(HHO0Sp)!Av6O&l!j4rCqEQ(*qkJ|m~S(?!Y`K1|3#RY0p(yBhyVZp delta 107 zcmZn(XbIR5F2Hzda)dyGmt=Ldk)^SYf}y2xt&T#qp@D^oj)J+lQEe?Jhq$Vtt!F}R rWmR=eZQU#eFkoba&5iIYn?W-)2^YKP;P>MVXlapi37@ diff --git a/doc/layer2-forwarding-enhancements/.DS_Store b/doc/layer2-forwarding-enhancements/.DS_Store index f0b7b9f48cb977a225a2a6ea1e3aef09ce5a8ce2..9bedd3cc3da4cef498d3c108c5035d5d5b1892bd 100644 GIT binary patch delta 105 zcmZp1XmQw}F2HzZvW7r|k92jluAzyMnT~>?sZp(tLbaiRg^7-Wxw%noEhmS#s-dlC pLT+VMbxm#E90o98WQ5QR{7@Q3&E5P-K$v|qyTmt^&A&z1nE^;J7a;%u delta 103 zcmZp1XmQw}F2HzdvW7r|mt=Ldk)^SYf}y2xt&T#qp@D^oj)J+lQEe?Jhq$Vtt!F}R nWmR=eZQU#eFkoba&ReKV`X50=gUMcA1E90eA} diff --git a/doc/layer2-forwarding-enhancements/images/agingTimeConfig.jpg b/doc/layer2-forwarding-enhancements/images/agingTimeConfig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6922b9853b46c2f3bd5891768666a057b59c6c3f GIT binary patch literal 59035 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

KdnuU~*dzrIduOV2)RIr+8kmyXA9H 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 literal 0 HcmV?d00001 diff --git a/doc/layer2-forwarding-enhancements/images/fdbDataStructure.jpg b/doc/layer2-forwarding-enhancements/images/fdbDataStructure.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8bbf3da7e6ebc3c9e46ca708f1c220d7d74b0e58 GIT binary patch literal 33816 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 J23XLO{|E3mNg4nE literal 0 HcmV?d00001 diff --git a/doc/layer2-forwarding-enhancements/images/overall.jpg b/doc/layer2-forwarding-enhancements/images/overall.jpg new file mode 100644 index 0000000000000000000000000000000000000000..190118a23ee2616dce5900cc974044af78061c9e GIT binary patch literal 70949 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�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 F`3ponex3jT literal 0 HcmV?d00001 diff --git a/doc/layer2-forwarding-enhancements/images/portDownFlush.jpg b/doc/layer2-forwarding-enhancements/images/portDownFlush.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22c2ac6da85b9b83bb6a0a42e043f99599aae02a GIT binary patch literal 52680 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 F&n?&?_#_UVTZW8Lv!TDNLm*gUR` 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 literal 0 HcmV?d00001 diff --git a/doc/layer2-forwarding-enhancements/images/portVlanRemoveFlush.jpg b/doc/layer2-forwarding-enhancements/images/portVlanRemoveFlush.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e840459230ea96bad29c7034c839498da0648ae3 GIT binary patch literal 59577 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 GW$Z8Ra|v7k literal 0 HcmV?d00001 diff --git a/doc/layer2-forwarding-enhancements/images/staticMacConfig.jpg b/doc/layer2-forwarding-enhancements/images/staticMacConfig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e857a5064519d5c83a216d929a1be150ea8f48e0 GIT binary patch literal 60732 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 #l_9OIH6`y}0YLa68My-K!qRnf(uD#@ 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 BK|%lk literal 0 HcmV?d00001 diff --git a/doc/layer2-forwarding-enhancements/images/Presentation2-14.jpg b/doc/layer2-forwarding-enhancements/images/stpFlush.jpg similarity index 100% rename from doc/layer2-forwarding-enhancements/images/Presentation2-14.jpg rename to doc/layer2-forwarding-enhancements/images/stpFlush.jpg From 16b0a31649d535a21430fb49197c1bfbebbb756d Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Wed, 8 May 2019 15:06:58 -0700 Subject: [PATCH 12/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .../SONiC Layer 2 Forwarding Enhancements HLD.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index 4e2dc4baba..18776e253a 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -149,7 +149,7 @@ Code changes are confined to the components marked in RED. **Overview of components involved:** - + For FDB flush and FDB aging and Static FDB commands, the design is described in details in the SWSS section. @@ -191,7 +191,7 @@ Port and type are needed to support FDB flush per port or per port per VLAN. **FDB Data structure in Orchagent:** - + In current Sonic implementation, when a FDB event is received with VLAN SAI object ID, the VLAN ID is retrieved by traversing through all the ports and VLANs in the orchagent DB and finding the one that matches the object ID. Also, the Port details are retrieved by traversing all the port and VLANs. This approach is inefficient as it may traverse through the number of VLANs configured for each FDB learn event. @@ -202,7 +202,7 @@ A new unordered_map containing a mapping between SAI object ID (can be either P **Object ID to alias mapping.** - + **Changes for FDB flush.** @@ -221,19 +221,19 @@ When Spanning tree state changes, protocol component within orchagent will call **FDB Flush due to Port operational state down:** - + **FDB Flush due to Port removal from VLAN:** - + **FDB Flush due to spanning tree state change:** - + **Changes for handling MAC move events.** From deb1c22e9b9c85e10a134470c19ed40b8e5017d3 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Wed, 8 May 2019 15:08:45 -0700 Subject: [PATCH 13/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .../SONiC Layer 2 Forwarding Enhancements HLD.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index 18776e253a..5664241f2e 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -245,7 +245,7 @@ A new CLI commands to be added for configuring the FDB aging time. FDB aging time configuration will be configured in the SWITCH table in CONFIG_DB. Vlanmgr will populate it in the APP_DB. Orchagent will get notified and handling will be SwitchOrch. SwitchOrch will call API from FdbOrch, which will in turn call sai_redis API to send request to syncd via ASIC_DB. - + **Changes for Static FDB configuration.** @@ -256,7 +256,7 @@ If a dynamic FDB is already learnt and a static FDB is configured with same (MAC - + From ffb0333dcd6d2b2c1bc37a0ffd4bf1e12b9c5a49 Mon Sep 17 00:00:00 2001 From: anilkpandey <47642449+anilkpandey@users.noreply.github.com> Date: Wed, 8 May 2019 15:09:29 -0700 Subject: [PATCH 14/36] Update SONiC Layer 2 Forwarding Enhancements HLD.md --- .../SONiC Layer 2 Forwarding Enhancements HLD.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md index 5664241f2e..fa443ca9a0 100644 --- a/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md +++ b/doc/layer2-forwarding-enhancements/SONiC Layer 2 Forwarding Enhancements HLD.md @@ -424,19 +424,6 @@ VLAN delete range operation takes significantly longer (though not as much if th 35. Remove few VLANs randomly after executing the command to create a range of VLANs. Check for the existence of the rest of the VLANs. -# 9 Internal Design Information -FDB Flush options: -1. Send bulk flush from Orchagent to SAI. Delete of MAC in Orchagent DB, STATE_DB and ASIC_DB to be done in the individual MAC delete callback from SAI. - - The approach causes issues with reference count in sai_redis. sai_redis maintains a MAC reference count on the bridge port. When we send a bulk flush request, this reference count is not decremented. Its decremented only when AGE event is received from SAI. So, we need to wait until response it received for all MAC before issuing a bridge port delete from portsorch. For this we need to maintain a reference count in portsorch also and prevent any other configuration on the port to go to sai_redis until reference count is 0. This can also open up other race conditions. - - -2. Send bulk flush from Orchagent to SAI. SAI responds with a bulk flush response, which is used to delete MAC from ASIC_DB, Orchagent DB and STATE_DB. - - With this approach, syncd notification thread can get stuck for significant time doing inefficient traversal and retrieval of individual entries from ASIC_DB, as the DB does not support any bulk operation. - - -3. Delete MAC one by one. - - With this approach HW MAC flush will be slower than bulk flush in Hardware. But, there are no issues with reference count and all opearations like removing port from vlan, flushign FDB and deleting bridge port happen in same thread context. -