From b696cbc863efaf6492517895ca3d7c15cc3862d0 Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Thu, 27 Oct 2022 14:32:58 +0800 Subject: [PATCH] [macsec]: Update MACsec HLD with PFC in gearbox platform (#898) --- doc/macsec/MACsec_hld.md | 160 +++++++++++++++++++++++-- doc/macsec/images/gearbox_pfc.png | Bin 0 -> 13744 bytes doc/macsec/images/pfc_bypass_mode.png | Bin 0 -> 20872 bytes doc/macsec/images/pfc_encrypt_mode.png | Bin 0 -> 14854 bytes doc/macsec/images/pfc_strict_mode.png | Bin 0 -> 16934 bytes 5 files changed, 153 insertions(+), 7 deletions(-) create mode 100644 doc/macsec/images/gearbox_pfc.png create mode 100644 doc/macsec/images/pfc_bypass_mode.png create mode 100644 doc/macsec/images/pfc_encrypt_mode.png create mode 100644 doc/macsec/images/pfc_strict_mode.png diff --git a/doc/macsec/MACsec_hld.md b/doc/macsec/MACsec_hld.md index 8b06bfa9a1..31c63966d1 100644 --- a/doc/macsec/MACsec_hld.md +++ b/doc/macsec/MACsec_hld.md @@ -3,9 +3,10 @@ ***Revision*** -| Rev | Date | Author | Change Description | -| :---: | :---: | :----: | ------------------ | -| 0.1 | | Ze Gan | Initial version | +| Rev | Date | Author | Change Description | +| :---: | :---: | :----: | ----------------------- | +| 0.1 | | Ze Gan | Initial version | +| 0.2 | | Ze Gan | MACsec with PFC and CLI | ## Table of Contents @@ -17,6 +18,7 @@ - [Phase I](#phase-i) - [Phase II](#phase-ii) - [Phase III](#phase-iii) + - [Phase IV](#phase-iv) - [2 Architecture Design](#2-architecture-design) - [3 Modules Design](#3-modules-design) - [3.1 Config DB](#31-config-db) @@ -58,6 +60,12 @@ - [Egress Flow](#egress-flow) - [State Change Actions](#state-change-actions) - [MACsec Actions](#macsec-actions) + - [3.5 Function Modules](#35-function-modules) + - [3.5.1 PFC with MACsec](#351-pfc-with-macsec) + - [3.5.1.1 ACL entry configuration](#3511-acl-entry-configuration) + - [3.5.1.2 PFC mode](#3512-pfc-mode) + - [3.5.1.3 PFC counter](#3513-pfc-counter) + - [3.5.1.4 PFC test](#3514-pfc-test) - [4 Flow](#4-flow) - [4.1 Init Port](#41-init-port) - [4.2 MACsec Init](#42-macsec-init) @@ -69,6 +77,7 @@ - [4.8 Remove Ingress/Egress SC](#48-remove-ingressegress-sc) - [4.9 MACsec Deinit](#49-macsec-deinit) - [4.10 Deinit Port](#410-deinit-port) +- [5 CLI](#5-cli) ## About this Manual @@ -109,16 +118,21 @@ At a high level the following should be supported: #### Phase II +**ETA: 202112** - MACsec can support Extension packet number(XPN), which means to support Cipher Suites: GCM-AES-XPN-128 and GCM-AES-XPN-256 - SAK can be refreshed proactively. -- Primary and Fallback secure Connectivity Association Key can be supported simultaneously. - Enable or disable the XPN feature by the wpa_cli -- Parameters of wpa_supplicant, send_sci, replay_protect, replay_window_size and rekey_period, can be updated on the fly +- CLI commands to configure MACsec - CLI command `show macsec` to monitor mka session and statistics of MACsec +- MACsec with PFC. PFC frames can be controlled to encrypted or clear. #### Phase III -- CLI commands to configure MACsec +- Primary and Fallback secure Connectivity Association Key can be supported simultaneously. + +#### Phase IV + +- Parameters of wpa_supplicant, send_sci, replay_protect, replay_window_size and rekey_period, can be updated on the fly ## 2 Architecture Design @@ -215,6 +229,13 @@ key = PORT:name ; Interface name ; field = value macsec = profile ; MACsec profile name. if this filed is empty or isn't existed, ; the MACsec function is disable. +pfc_encryption_mode = "bypass" / "encrypt" / "strict_encrypt" + ; The behavior to PFC frames. + ; "bypass": react clear and encrypted PFC frames, send clear PFC frames. + ; "encrypt": react clear and encrypted PFC frames, send encrypted PFC frames. + ; "strict_encrypt": only react encrypted PFC frames, send encrypted PFC frames. + ; If the specified mode cannot be supported by the platform, record an error in the log file. + ; Default "bypass". ``` ### 3.2 App DB @@ -701,7 +722,6 @@ MACsec SECY Table "InPktsUnknownSCI":{{InPktsUnknownSCI}} # the number of the received frame with unknown SCI "InPktsNoSCI":{{InPktsNoSCI}} # the number of the received frame without SCI (those frames will be passed to uncontrolled port) "InPktsOverrun":{{InPktsOverrun}} # the number of the received frame that was discarded because the validation capabilities of the Cipher Suite cannot support current rate - ``` ###### 3.4.4.2.2 Interval @@ -790,6 +810,128 @@ All boxes with black edge are components of virtual SAI and all boxes with purpl ***MACsec egress sc will be automatically created/delete when the MACsec port is created/deleted*** +### 3.5 Function Modules + +#### 3.5.1 PFC with MACsec + +*Due to the link delay should be considered as the PFC configuration, the extra delay of data frames **MUST NOT** be more than **1 microsecond**. (Will confirm with vendors).* + +- To leverage the capability of ACL to bypass or drop the PFC frames like what EAPOL did and all ACL entries for PFC are kept into the same ACL table of EAPOL. ***The EAPOL design is [here](https://github.com/opencomputeproject/SAI/blob/master/doc/macsec-gearbox/SAI_MACsec_API_Proposal-v1.4.docx).*** + +- The ACL table is processed at the beginning of the MACsec stage. So, the configuration of ACL entry to PFC mentioned in [3.5.1.1 ACL entry configuration](#3511-acl-entry-configuration) will be executed before the frame into the MACsec secy. + +``` c++ +sai_attribute_t attr; +std::vector attrs; +// To egress MACsec port +attr.id = SAI_ACL_TABLE_ATTR_ACL_STAGE; +attr.value.s32 = SAI_ACL_STAGE_EGRESS_MACSEC; +attrs.push_back(attr); +// To ingress MACsec port +// attr.id = SAI_ACL_TABLE_ATTR_ACL_STAGE; +// attr.value.s32 = SAI_ACL_STAGE_INGRESS_MACSEC; +// attrs.push_back(attr); +attr.id = SAI_ACL_TABLE_ATTR_FIELD_ETHER_TYPE; +attr.value.booldata = true; +attrs.push_back(attr); +... +sai_acl_api->create_acl_table(table_id, switch_id, static_cast(attrs.size()), attrs.data()); +``` + +- In the Gearbox mode, the ACL table lives in the gearbox. Meanwhile, the gearbox will not react PFC and frames but forward the frame to the client side (To ingress, the client side is the system side. To egress, the client side is the line side). + +![gearbox_pfc](images/gearbox_pfc.png) + +``` c++ +sai_attribute_t attr; +// Enable Forward pause frame +attr.id = SAI_PORT_ATTR_GLOBAL_FLOW_CONTROL_FORWARD; +attr.value.booldata = true; +sai_port_api->set_port_attribute(port_id, &attr); // port_id is the id of lineside port in gearbox +// Enable Forward PFC frame +attr.id = SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_FORWARD; +attr.value.booldata = true; +sai_port_api->set_port_attribute(port_id, &attr); // port_id is the id of lineside port in gearbox +``` + +##### 3.5.1.1 ACL entry configuration + +The following configuration to ACL entry can be used to identify PFC frame and do the expected action to the frame. + +- Identify the PFC frames + +``` c++ +PAUSE_ETHER_TYPE = 0x8808 +attr.id = SAI_ACL_ENTRY_ATTR_FIELD_ETHER_TYPE; +attr.value.aclfield.data.u16 = PAUSE_ETHER_TYPE; +attr.value.aclfield.mask.u16 = 0xFFFF; +attr.value.aclfield.enable = true; +``` + +- Bypass frames + +``` c++ +attr.id = SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION; +attr.value.aclaction.parameter.s32 = SAI_PACKET_ACTION_FORWARD; +attr.value.aclaction.enable = true; +``` + +- Drop frames + +``` c++ +attr.id = SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION; +attr.value.aclaction.parameter.s32 = SAI_PACKET_ACTION_DROP; +attr.value.aclaction.enable = true; +``` + +- **React encrypted ingress PFC frame**: The default behavior of MACsec engine should decrypt encrypted frames and forward it to the upper layer. So, there is no extra configuration to encrypted ingress PFC frame. +- **React clear ingress PFC frame**: We don't want to assume an implicit default behavior to clear PFC frames in different MACsec engines. So, the ACL entry should has explicit configuration of **identify PFC frames** and **bypass frames** if we want to accept clear ingress PFC frames. +- **Deny clear ingress PFC**: Due to the same reason with **Send clear ingress PFC frame**, the ACl entry should has explicit configuration of **identify PFC frames** and **Drop frames** if we want to deny clear ingress PFC frames. +- **Send encrypted egress PFC frame**: The default behavior of MACsec engine should encrypt all frames and forward it to the peer side. So, there is no extra configuration to egress PFC frame. +- **Send clear egress PFC frame**: If the switch want to send clear egress PFC frames, the PFC frames should bypass the MACsec engine. The ACL entry should **identify PFC Frames** first and **bypass frames**. + +##### 3.5.1.2 PFC mode + +- **Bypass mode**: The switch should react clear and encrypted ingress PFC frames and should send clear egress PFC frames. + +![pfc_bypass_mode](images/pfc_bypass_mode.png) + +- **Encrypt mode**: The switch should react clear and encrypted PFC frames, send encrypted PFC frames. + +![pfc_encrypt_mode](images/pfc_encrypt_mode.png) + +- **Strict Encrypt mode**: The switch should only react encrypted PFC frames, send encrypted PFC frames. + +![pfc_strict_encrypt_mode](images/pfc_strict_mode.png) + +***Why encrypt mode? If the peer switch can only send clear PFC but react both, Encrypt mode is safer than Bypass mode.*** + +##### 3.5.1.3 PFC counter + +In the strict encrypt mode, to count the dropped ingress clear PFC frames per port and the counter will be added into the PFC ACL entry mentioned above. + +``` c++ +sai_attribute_t attr; +vector counter_attrs; + +attr.id = SAI_ACL_COUNTER_ATTR_TABLE_ID; +attr.value.oid = acl_table_oid; +counter_attrs.push_back(attr); + +attr.id = SAI_ACL_COUNTER_ATTR_ENABLE_PACKET_COUNT; +attr.value.booldata = true; +counter_attrs.push_back(attr); + +// If in Gearbox mode, the switch_id is the gearbox id, otherwise it's the asic switch id +sai_acl_api->create_acl_counter(&counter_id, switch_id, (uint32_t)counter_attrs.size(), counter_attrs.data()); +``` + +***Per queue counter of PFC needs to be discussed with vendors further.*** + +##### 3.5.1.4 PFC test + +Please see the [MACsec test plan](https://github.com/Pterosaur/sonic-mgmt/blob/macsec_platform/docs/testplan/MACsec-test-plan.md#verify-pfc-in-macsec) in sonic-mgmt. + ## 4 Flow ### 4.1 Init Port @@ -833,3 +975,7 @@ All boxes with black edge are components of virtual SAI and all boxes with purpl ### 4.10 Deinit Port ![deinit port](images/deinit_port.png) + +## 5 CLI + +MACsec cli refer: https://github.com/sonic-net/sonic-utilities/blob/master/doc/Command-Reference.md#macsec-commands diff --git a/doc/macsec/images/gearbox_pfc.png b/doc/macsec/images/gearbox_pfc.png new file mode 100644 index 0000000000000000000000000000000000000000..70df4771fb0a46f5484141c3db6585a8c69cfa22 GIT binary patch literal 13744 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 literal 0 HcmV?d00001 diff --git a/doc/macsec/images/pfc_bypass_mode.png b/doc/macsec/images/pfc_bypass_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae48b1bb22afa440fd8828e85a248de11ec302a GIT binary patch literal 20872 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 literal 0 HcmV?d00001 diff --git a/doc/macsec/images/pfc_encrypt_mode.png b/doc/macsec/images/pfc_encrypt_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..77b264b64c18baa74b4f94122582911cc48afc71 GIT binary patch literal 14854 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 D9(S1V literal 0 HcmV?d00001 diff --git a/doc/macsec/images/pfc_strict_mode.png b/doc/macsec/images/pfc_strict_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..41d7048f2ee9c3d9561823a7162fbcf2186f885f GIT binary patch literal 16934 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 literal 0 HcmV?d00001