From cf7ae635eb93660bc6282bc28a5cc648f65a0112 Mon Sep 17 00:00:00 2001 From: hasan-brcm <56742004+hasan-brcm@users.noreply.github.com> Date: Tue, 23 Jun 2020 17:31:25 -0700 Subject: [PATCH 01/12] Add files via upload --- release_documents/Command-Reference.md | 157 +++++++++++++++++++++++++ 1 file changed, 157 insertions(+) diff --git a/release_documents/Command-Reference.md b/release_documents/Command-Reference.md index f4601e8d99d5..774913d614a0 100644 --- a/release_documents/Command-Reference.md +++ b/release_documents/Command-Reference.md @@ -68,6 +68,10 @@ Table of Contents * [Configuration Commands](#bgp-error-handling-config-commands) * [Show Commands](#bgp-error-handling-show-commands) * [Clear Commands](#bgp-error-handling-clear-commands) + * [BGP VRF Configuration And Show Commands](#bgp-vrf-configuration-and-show-commands) + * [Configuration Commands](#bgp-vrf-config-commands) + * [BGP VRF Route Leak](#bgp-vrf-route-leak) + * [Show Commands](#bgp-vrf-route-leak-show-commands) * [EVPN Configuration And Show Commands](#evpn-configuration-and-show-commands) * [Enable EVPN between BGP Neighbors](#enable-evpn-between-bgp-neighbors) * [EVPN Configuration Commands](#evpn-configuration-commands) @@ -2829,6 +2833,159 @@ To retry installation of failed routes from Zebra, a clear command has been prov root@sonic:~# clear ip route not-installed ``` +# BGP VRF Configuration And Show Commands +This section provides high level config and show commands for BGP VRF +configuration and VRF route leak via BGP. + +Please refer to "VRF configuration and show commands" section for details on +how to create VRFs in SONiC. + +## Configuration Commands + +BGP VRF instance for a given VRF can be configured using IS-CLI as shown below. +Autonomous-System (AS) number for the BGP VRF instance is not mandated to same +as of default BGP VRF instance. + +Below example configures BGP instance for Vrf-red, configures a neighbor, and +redistributes connected routes into BGP VRF instance. + +``` +sonic(config)# router bgp 65535 vrf Vrf-red +sonic(config-router-bgp)# router-id 192.168.1.1 +sonic(config-router-bgp)# neighbor 10.20.30.40 +sonic(config-router-bgp-neighbor)# remote-as external +sonic(config-router-bgp-neighbor)# address-family ipv4 unicast +sonic(config-router-bgp-neighbor-af)# activate + +sonic(config-router-bgp)# address-family ipv4 unicast +sonic(config-router-bgp-af)# redistribute connected +``` + +It is recommended to configure router-id for the BGP VRF instance(s) in order +to avoid router-id reselection when IP addresses are unconfigured in the VRF. + +IPv4 unicast, IPv6 unicast, and L2VPN EVPN address-families are +supported in the BGP VRF instances. Details on using L2VPN EVPN +address-family is described in the next BGP EVPN section. + +BGP VRF instance can be created without creating default BGP VRF instance. +However, deletion of default BGP VRF instance is restricted if non-default BGP +VRF instance(s) are present. All non-default BGP VRF instances are required to +be deleted before deleting BGP default VRF instance. + + +## BGP VRF Route Leak +Routes can be leaked from one VRF to another using BGP VRF route leak feature +described in this section. + +Use the 'import' command in corresponding address-family of BGP VRF instance to +import routes from the given source VRF. In the example below, BGP Vrf-red +instance is configured to import IPv4 and IPv6 routes from BGP Vrf-blue. +``` +sonic(config)# router bgp 20 vrf Vrf-red +sonic(config-router-bgp)# address-family ipv4 unicast +sonic(config-router-bgp-af)# import vrf Vrf-blue + +sonic(config-router-bgp)# address-family ipv6 unicast +sonic(config-router-bgp-af)# import vrf Vrf-blue + +``` + +Import of routes from multiple BGP VRF instances is allowed. + +Route-map can be applied for the imported leaked routes as shown below. + +``` +sonic(config)# router bgp 20 vrf Vrf-red +sonic(config-router-bgp)# address-family ipv4 unicast +sonic(config-router-bgp-af)# import vrf route-map my-import-filter +sonic(config-router-bgp-af)# import vrf Vrf-red +sonic(config-router-bgp-af)# +``` + +Configured import route-map filters routes from all of the configured +import-VRFs. In case specific routes from specific VRF are required to be +filtered, match-vrf clause in the route-map can be used. + +Note that above BGP VRF import commands leak the prefixes, including connected +subnets, from one vrf to another. Leaking of connected subnets may incur +sub-optimal forwarding for the inter-vrf traffic through the CPU (slow) path. +It is therefore recommended to always leak the routes which have remote +next-hops instead of leaking the connected subnets. + + +## Show Commands +In order to show routes from a given VRF instance, 'vrf' option can be +specified to the regular bgp and ip route show commands. + +Below commands show BGP routes in the given BGP VRF instance: + +``` +sonic# show ip bgp vrf Vrf-red +BGP table version is 9, local router ID is 169.100.1.1, vrf id 91 +Default local pref 100, local AS 10 +Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, # not installed in hardware + i internal, r RIB-failure, S Stale, R Removed +Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self +Origin codes: i - IGP, e - EGP, ? - incomplete + + Network Next Hop Metric LocPrf Weight Path +*> 1.1.1.1/32 0.0.0.0@0< 0 32768 ? +*> 1.2.1.1/32 0.0.0.0@0< 0 32768 ? +*> 4.1.1.1/32 fe80::5054:ff:fe8d:7741@0< +*> 8.0.0.0/24 fe80::5054:ff:fe8d:7741@0< +* 10.59.128.0/20 fe80::5054:ff:fe8d:7741@0< +*> 51.52.0.0/31 0.0.0.0@0< 0 32768 ? +*> 155.100.1.0/24 0.0.0.0 0 32768 ? +*> 169.100.1.0/24 0.0.0.0 0 32768 ? +*> 200.2.1.0/24 0.0.0.0@0< 0 32768 ? + +Displayed 9 routes and 13 total paths +sonic# + +``` + +``` +sonic# show bgp vrf Vrf-red ipv6 +BGP table version is 3, local router ID is 169.100.1.1, vrf id 91 +Default local pref 100, local AS 10 +Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, # not installed in hardware + i internal, r RIB-failure, S Stale, R Removed +Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self +Origin codes: i - IGP, e - EGP, ? - incomplete + + Network Next Hop Metric LocPrf Weight Path +*> 1550:100:1::/80 :: 0 32768 ? +*> 1690:100:1::/64 :: 0 32768 ? +*> 2000:200::/64 ::@0< 0 32768 ? + +Displayed 3 routes and 3 total paths +sonic# +``` + + +Below command shows routes from the RIB for the specified VRF: +``` +sonic# show ip route vrf Vrf-red +Codes: K - kernel route, C - connected, S - static, R - RIP, + O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, + T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, + F - PBR, f - OpenFabric, + > - selected route, * - FIB route, q - queued route, r - rejected route, # - not installed in hardware +VRF Vrf-red: +B>* 1.1.1.1/32 [200/0] is directly connected, Loopback10(vrf default), 01:33:30 +B>* 1.2.1.1/32 [200/0] is directly connected, Loopback11(vrf default), 01:33:30 +B>* 4.1.1.1/32 [200/0] via fe80::5054:ff:fe8d:7741, Ethernet0(vrf default), 01:33:29 +B>* 8.0.0.0/24 [200/0] via fe80::5054:ff:fe8d:7741, Ethernet0(vrf default), 01:33:29 +B>* 10.59.128.0/20 [200/0] is directly connected, eth0(vrf default), 01:33:30 +B>* 51.52.0.0/31 [200/0] is directly connected, Vlan4090(vrf default), 01:33:30 +C>* 155.100.1.0/24 is directly connected, Vlan100, 01:33:52 +C>* 169.100.1.0/24 is directly connected, Vlan1000, 01:33:52 +B>* 200.2.1.0/24 [200/0] is directly connected, Vlan200(vrf default), 01:33:30 +sonic# + +``` + # EVPN Configuration And Show Commands The following sections provide the basic configuration needed to use EVPN as the control plane for VXLAN. From 7dfa096553000b3e7b6e49af87e2caef60d6c895 Mon Sep 17 00:00:00 2001 From: Rupesh Kumar Date: Fri, 26 Jun 2020 21:40:04 -0700 Subject: [PATCH 02/12] Counters rate/utilization and load interval support --- ..._Rate_Utilization_Load_Interval_Support.md | 359 ++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100644 system/Counters_Rate_Utilization_Load_Interval_Support.md diff --git a/system/Counters_Rate_Utilization_Load_Interval_Support.md b/system/Counters_Rate_Utilization_Load_Interval_Support.md new file mode 100644 index 000000000000..5832aed8c355 --- /dev/null +++ b/system/Counters_Rate_Utilization_Load_Interval_Support.md @@ -0,0 +1,359 @@ +# Counters Rate Utilization and Load-interval Support + +# High Level Design Document +#### Rev 0.2 + +# Table of Contents + * [List of Tables](#list-of-tables) + * [Revision](#revision) + * [About This Manual](#about-this-manual) + * [Scope](#scope) + * [Definition/Abbreviation](#definition-abbreviation) + * [1 Feature Overview](#1-feature-overview) + * [1.1 Requirements](#11-requirements) + * [1.1.1 Functional Requirements](#111-functional-requirements) + * [1.1.2 Configuration and Management Requirements](#112-configuration-and-management-requirements) + * [1.1.3 Scalability Requirements](#113-scalability-requirements) + * [1.1.4 Warm Boot Requirements](#114-warm-boot-requirements) + * [1.2 Design Overview](#12-design-overview) + * [1.2.1 Basic Approach](#121-basic-approach) + * [1.2.2 Container](#122-container) + * [1.2.3 SAI Overview](#123-sai-overview) + * [2 Functionality](#2-functionality) + * [2.1 Functional Description](#21-functional-description) + * [3 Design](#3-design) + * [3.1 Overview](#31-overview) + * [3.1.1 Orchagent](#311-orchagent) + * [3.1.2 SYNCD](#312-syncd) + * [3.1.3 Mgmt-framework](#313-mgmt-framework) + * [3.2 DB Changes](#32-db-changes) + * [3.2.1 CONFIG DB](#321-config-db) + * [3.2.2 APP DB](#322-app-db) + * [3.2.3 COUNTER DB](#323-counter-db) + * [3.3 SAI](#33-sai) + * [3.4 CLI](#34-cli) + * [3.4.1 Data Models](#341-data-models) + * [3.4.2 Configuration Commands](#342-configuration-commands) + * [3.4.3 Show Commands](#343-show-commands) + * [3.4.4 REST APIs](#344-rest-apis) + * [4 Error Handling](#5-error-handling) + * [5 Serviceability and Debug](#6-serviceability-and-debug) + * [6 Warm Boot Support](#7-warm-boot-support) + * [7 Scalability](#8-scalability) + * [8 Unit Test](#9-unit-test) + * [8.1 CLI Test Cases](#91-cli-test-cases) + * [8.2 Rest API Test Cases](#92-rest-api-test-cases) + * [8.3 Functional Test Cases](#93-functional-test-cases) + * [8.4 Scaling Test Cases](#94-scaling-test-cases) + * [8.5 Warm Boot Test Cases](#95-warm-boot-test-cases) + * [8.6 Negative Test Cases](#96-negative-test-cases) + * [9 Future support](#9-future-support) + +# List of Tables +[Table 1: Abbreviations](#table-1-abbreviations) + +# Revision +| Rev | Date | Author | Change Description | +|:---:|:-----------:|:---------------------:|-----------------------------------| +| 0.1 | 06/20/2020 | Rupesh Kumar | Initial version | + +# About this Manual +This document provides details of interface/queue counters rate/utilization/load-interval functionality in SONiC + +# Scope + +# Definition/Abbreviation +### Table 1: Abbreviations +| **Term** | **Meaning** | +|--------------------------|----------------------------------------------| +| BPS | Bytes Per Second | +| bps | bits per second | +| PPS | Packets Per Second | +| NBI | North Bound interfaces (Klish/REST/GNMMI | + +# 1 Feature Overview +## 1.1 Requirements +### 1.1.1 Functional Requirements + +1. Support for show interface utilization +2. Support for show interface BPS/PPS/bps +3. Support for show queue counters PPS/BPS. +4. Dynamic load interval for rate calculations per interface. +5. Dynamic load interval for rate calculations for all queue counters. + +### 1.1.2 Configuration and Management Requirements +1. Existing show interface counters CLI to be enhanced to display interface utilization/PPS/MBPS/Mbps +2. Existing show queue counters to be enhanced to show PPS and BPS. +3. Add config command to set load interval +4. Supports all NBI (REST/GNMI/OpenConfig/Klish) + +### 1.1.3 Scalability Requirements + +### 1.1.4 Warm Boot Requirements + +Warm boot functionality is not supported for this feature. +Following are the limitations which prevent the warm-boot support for this feature. +``` +1. Cached counters are not preserved in DB +2. PPS/BPS/bps/rate calculations need the time elapsed during warm-boot. +``` + +## 1.2 Design Overview +### 1.2.1 Basic Approach + +Rate calculations are done in backend and NBI will pick the data from counters DB. +Interface load interval and global queue load interval are supported. +The current load interval can be fetched from APP_DB. + +### 1.2.2 SAI Overview +No SAI changes. + +# 2 Functionality + +## 2.1 Functional Description + +SYNCD flex counter thread fetches the interface and queue counters from SAI. The counters do not include rate/BPS/bps/utilization data. Enhancing this functionality to generate rate/utilization data from the fetched SAI counters and save in COUNTERS DB. + +Load interval functionality allows to configure per interface rate calculations and global queue rate calculations. + +# 3 Design + +## 3.1 Overview + + +### 3.1.1 Orchagent + +Ports orchagent will be programming rate interval from SWITCH_TABLE to SYNCD. +Queue counters are fetched every 10 seconds, so the rate interval can only be multiples of 10. + +### 3.1.2 SYNCD + +SYNCD flex counter thread fetches the interface and queue counters from SAI and updates the COUNTERS DB. +When rate interval is set, then thread caches the counters and after every rate interval, will generate the interface utilization counters and update the new fields to same COUNTERS DB. + + +``` +// stats has current counters read from SAI +// cache has stats from last rate interval +// load_interval is per port load interval +// poll_interval is interval at which stats are polled from SAI +// counter overflow will be handled. + +# Interface IN counters +current = stats[SAI_PORT_STAT_IF_IN_UCAST_PKTS] + stats[SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS]; +prev = cache[SAI_PORT_STAT_IF_IN_PKTS] +PPS = (current - prev) / (load_interval * poll_interval)) +BPS = ((stats[SAI_PORT_STAT_IF_IN_OCTETS] - cache[SAI_PORT_STAT_IF_IN_OCTETS]) / (load_interval * poll_interval)) +bps = BPS << 3 +utilization = (bps/port-speed) + +# Interface OUT counters +current = stats[SAI_PORT_STAT_IF_OUT_UCAST_PKTS] + stats[SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS]; +prev = cache[SAI_PORT_STAT_IF_OUT_PKTS] +PPS = (current - prev) / (load_interval * poll_interval)) +BPS = ((stats[SAI_PORT_STAT_IF_IN_OCTETS] - cache[SAI_PORT_STAT_IF_IN_OCTETS]) / (load_interval * poll_interval)) +bps = BPS << 3 +utilization = (bps/port-speed) + +Queue Counters + +current = stats[SAI_QUEUE_STAT_PACKETS] +prev = cache[SAI_QUEUE_STAT_PACKETS] +PPS = (current - prev) / (load_interval * poll_interval)) +current = stats[SAI_QUEUE_STAT_BYTES] +prev = cache[SAI_QUEUE_STAT_BYTES] +BPS = (current - prev) / (load_interval * poll_interval)) +bps = BPS << 3 + +``` + +### 3.1.3 Mgmt-framework +To be updated by DELL +The transformer code fetches the new counters and shares it to the client. + +## 3.2 DB Changes + +### 3.2.1 CONFIG DB + +#### SWITCH_TABLE +``` +Global Switch level config to be stored in this table. + + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + +"SWITCH|switch" + "load_interval" : "30" ; Load interval for interface rate/utilization. + "queue_load_interval" : "30" ; Load interval for Queue rate/utilization +``` + +#### PORT_TABLE +``` + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + +"PORT|ifName" + "load_interval" : "30" ; Load interval for interface rate/utilization. +``` +### 3.2.2 APP DB + +#### SWITCH_TABLE +``` +Global Switch level config set by portsOrch. + + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + + +"SWITCH_TABLE|switch" + "load_interval" : "30" ; Load interval for interface rate/utilization. + "queue_load_interval" : "30" ; Load interval for Queue rate/utilization +``` + +#### PORT_TABLE +``` +Interface level load interval set by portsOrch. + + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + + +"PORT_TABLE|ifName" + "load_interval" : "30" ; Load interval for interface rate/utilization. + +``` +### 3.2.3 COUNTER DB + +Following new fields are added to existing COUNTERS Table for both port and queue Counters. + +``` +COUNTERS_DB: +{ + "COUNTERS:oid:": { + "SAI_PORT_STAT_IF_IN_PKTS_PER_SECOND": "0", + "SAI_PORT_STAT_IF_OUT_PKTS_PER_SECOND": "0", + "SAI_PORT_STAT_IF_IN_OCTETS_PER_SECOND": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS_PER_SECOND": "0", + "SAI_PORT_STAT_IF_IN_BITS_PER_SECOND": "0", + "SAI_PORT_STAT_IF_OUT_BITS_PER_SECOND": "0", + "SAI_PORT_STAT_IF_IN_UTILIZATION": "0", + "SAI_PORT_STAT_IF_OUT_UTILIZATION": "0", + }, +}, + +"COUNTERS:oid:": { + "SAI_QUEUE_STAT_PACKETS_PER_SECOND": "0", + "SAI_QUEUE_STAT_BYTES_PER_SECOND": "0", + "SAI_QUEUE_STAT_BITS_PER_SECOND": "0", + } + +``` + +## 3.3 SAI +No changes needed in SAI for this feature. + +## 3.4 CLI +### 3.4.1 Data Models + +Existing openconfig interface yang and sonic yang to be extended to support this feature. +DELL team to add more details here. + +### 3.4.2 Configuration Commands + +#### config interface load_interval Ethernet0 + +Set rate calculation interval for the interface. Supported values are 10 seconds to 600 seconds. + + + config interface load_interval Ethernet0 30 + + +### 3.4.3 Show Commands + +#### Interface Counters + +##### show interface Ethernet <> + +``` +sonic# show interface Ethernet 64 +Ethernet64 is up, line protocol is up +Hardware is Eth +Mode of IPV4 address assignment: not-set +Mode of IPV6 address assignment: not-set +Interface IPv6 oper status: Disabled +IP MTU 9100 bytes +LineSpeed 25GB, Auto-negotiation off +Last clearing of "show interface" counters: 1970-01-01 00:00:00 +30 seconds input rate 84640 bits/sec, 10236 Bytes/sec, 52 packets/sec +30 seconds output rate 176760 bits/sec, 22432 Bytes/sec, 45 packets/sec +``` + +##### show interface counters +``` + IFACE STATE RX_OK RX_MBPS RX_MbPS RX_UTIL RX_ERR RX_DRP RX_OVR TX_OK TX_BPS TX_bPS TX_UTIL TX_ERR TX_DRP TX_OVR +------------ ------- ------- -------- -------- --------- -------- -------- -------- ------- -------- -------- --------- -------- -------- -------- + Ethernet48 U 87,219 0.00 MB/s 0.00 Mb/s 0.00% 0 3 0 86,871 0.00 B/s 0.00 b/s 0.00% 0 0 0 + Ethernet49 U 5,649 0.00 MB/s 0.00 Mb/s 0.00% 0 5,649 0 5,645 0.00 B/s 0.00 b/s 0.00% 0 0 0 + +``` + +##### show queue counters +``` +--------------------------------------------------------------------------------------------------- +Port TxQ Counter/pkts Counter/bytes Rate/PPS Rate/BPS Drop/pkts Drop/bytes +--------------------------------------------------------------------------------------------------- +Ethernet0 UC0 0 0 0/s 0/s 0 0 +Ethernet0 UC1 0 0 0/s 0/s 0 0 +Ethernet0 UC2 0 0 0/s 0/s 0 0 +Ethernet0 UC3 0 0 0/s 0/s 0 0 +... +``` + +##### show queue counters interface CPU +``` +--------------------------------------------------------------------------------------------------- +TxQ Counter/pkts Counter/bytes Rate/PPS Rate/BPS Drop/pkts Drop/bytes +--------------------------------------------------------------------------------------------------- +MC0 0 0 0/s 0/s 0 0 +MC1 0 0 0/s 0/s 0 0 +MC2 0 0 0/s 0/s 0 0 +MC3 0 0 0/s 0/s 0 0 +MC4 0 0 0/s 0/s 0 0 + +``` +### 3.4.4 REST APIs + +To be filled by DELL team + +# 4 Error Handling + +# 5 Serviceability and Debug + +# 6 Warm Boot Support +Not applicable for this feature. + +# 7 Scalability + +# 8 Unit Test +** SOME sections below to be filled by DELL Team ** +## 8.1 CLI Test Cases + +## 8.2 Rest API Test Cases + +## 8.3 Functional Test Cases +1. Have different rates of traffic on port and verify that counters DB has proper rate/PPS/BPS/bps +2. Have traffic on multiple ports on ingress/egress directions and verify rates on all ports. +3. Verify that rate calculation is done as per configured load interval. +4. Verify polling interval changes and rate calculation is proper. +5. Verify rate calculations are done with default settings, when no load-interval is configured. +6. Verify cached interface counters get cleared during DPB. +7. Verify cached queue counters gets cleared during DPB. +8. Verify Stats cache elements are freed during DPB for both interface and queue counters. +9. Verify for different port speeds. + + +## 8.4 Scaling Test Cases + +## 8.5 Negative Test Cases + + +# 9 Future support + From 5766270e9d2d2fcf54dfbac4715d6e9aeb7afaab Mon Sep 17 00:00:00 2001 From: Rupesh Kumar Date: Fri, 3 Jul 2020 11:43:10 -0700 Subject: [PATCH 03/12] Addressed review comments --- ..._Rate_Utilization_Load_Interval_Support.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/system/Counters_Rate_Utilization_Load_Interval_Support.md b/system/Counters_Rate_Utilization_Load_Interval_Support.md index 5832aed8c355..a45431fc094e 100644 --- a/system/Counters_Rate_Utilization_Load_Interval_Support.md +++ b/system/Counters_Rate_Utilization_Load_Interval_Support.md @@ -75,10 +75,10 @@ This document provides details of interface/queue counters rate/utilization/load ## 1.1 Requirements ### 1.1.1 Functional Requirements -1. Support for show interface utilization -2. Support for show interface BPS/PPS/bps +1. Support for show port/port-channel utilization +2. Support for show port/port-channel BPS/PPS/bps 3. Support for show queue counters PPS/BPS. -4. Dynamic load interval for rate calculations per interface. +4. Dynamic load interval for rate calculations per port/port-channel. 5. Dynamic load interval for rate calculations for all queue counters. ### 1.1.2 Configuration and Management Requirements @@ -103,7 +103,7 @@ Following are the limitations which prevent the warm-boot support for this featu Rate calculations are done in backend and NBI will pick the data from counters DB. Interface load interval and global queue load interval are supported. -The current load interval can be fetched from APP_DB. +The load interval is fixed for this release and the current load interval can be fetched from APP_DB. ### 1.2.2 SAI Overview No SAI changes. @@ -179,8 +179,8 @@ The transformer code fetches the new counters and shares it to the client. ``` Global Switch level config to be stored in this table. - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. - queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds "SWITCH|switch" "load_interval" : "30" ; Load interval for interface rate/utilization. @@ -189,7 +189,7 @@ Global Switch level config to be stored in this table. #### PORT_TABLE ``` - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds "PORT|ifName" "load_interval" : "30" ; Load interval for interface rate/utilization. @@ -200,8 +200,8 @@ Global Switch level config to be stored in this table. ``` Global Switch level config set by portsOrch. - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. - queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds "SWITCH_TABLE|switch" @@ -213,7 +213,7 @@ Global Switch level config set by portsOrch. ``` Interface level load interval set by portsOrch. - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds "PORT_TABLE|ifName" @@ -288,10 +288,10 @@ Last clearing of "show interface" counters: 1970-01-01 00:00:00 ##### show interface counters ``` - IFACE STATE RX_OK RX_MBPS RX_MbPS RX_UTIL RX_ERR RX_DRP RX_OVR TX_OK TX_BPS TX_bPS TX_UTIL TX_ERR TX_DRP TX_OVR ------------- ------- ------- -------- -------- --------- -------- -------- -------- ------- -------- -------- --------- -------- -------- -------- - Ethernet48 U 87,219 0.00 MB/s 0.00 Mb/s 0.00% 0 3 0 86,871 0.00 B/s 0.00 b/s 0.00% 0 0 0 - Ethernet49 U 5,649 0.00 MB/s 0.00 Mb/s 0.00% 0 5,649 0 5,645 0.00 B/s 0.00 b/s 0.00% 0 0 0 + IFACE STATE RX_OK RX_MBPS RX_MbPS RX_UTIL RX_ERR RX_DRP RX_OVR TX_OK TX_MBPS TX_MbPS TX_UTIL TX_ERR TX_DRP TX_OVR +------------ ------- ------- -------- -------- --------- -------- -------- -------- ------- -------- -------- --------- -------- -------- -------- + Ethernet48 U 87,219 0.00 MB/s 0.00 Mb/s 0.00% 0 3 0 86,871 0.00 MB/s 0.00 Mb/s 0.00% 0 0 0 + Ethernet49 U 5,649 0.00 MB/s 0.00 Mb/s 0.00% 0 5,649 0 5,645 0.00 MB/s 0.00 Mb/s 0.00% 0 0 0 ``` From 8ee48686185b8f724d13eb7b282c6f3bfb22039b Mon Sep 17 00:00:00 2001 From: Rupesh Kumar Date: Fri, 3 Jul 2020 12:33:35 -0700 Subject: [PATCH 04/12] Added queue load interval --- system/Counters_Rate_Utilization_Load_Interval_Support.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/system/Counters_Rate_Utilization_Load_Interval_Support.md b/system/Counters_Rate_Utilization_Load_Interval_Support.md index a45431fc094e..0f7f5d6b2edb 100644 --- a/system/Counters_Rate_Utilization_Load_Interval_Support.md +++ b/system/Counters_Rate_Utilization_Load_Interval_Support.md @@ -305,6 +305,8 @@ Ethernet0 UC1 0 0 0/s 0/s 0 Ethernet0 UC2 0 0 0/s 0/s 0 0 Ethernet0 UC3 0 0 0/s 0/s 0 0 ... + +Queue counter load interval: 30 sec ``` ##### show queue counters interface CPU @@ -318,6 +320,7 @@ MC2 0 0 0/s 0/s 0 0 MC3 0 0 0/s 0/s 0 0 MC4 0 0 0/s 0/s 0 0 +Queue counter load interval: 30 sec ``` ### 3.4.4 REST APIs From 791ce8f96c51e1d50083276be7ca3031ccd26f37 Mon Sep 17 00:00:00 2001 From: Rupesh Kumar Date: Sat, 4 Jul 2020 10:05:23 -0700 Subject: [PATCH 05/12] Addressed review comments --- ..._Rate_Utilization_Load_Interval_Support.md | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/system/Counters_Rate_Utilization_Load_Interval_Support.md b/system/Counters_Rate_Utilization_Load_Interval_Support.md index 0f7f5d6b2edb..be8d55919eb7 100644 --- a/system/Counters_Rate_Utilization_Load_Interval_Support.md +++ b/system/Counters_Rate_Utilization_Load_Interval_Support.md @@ -194,6 +194,15 @@ Global Switch level config to be stored in this table. "PORT|ifName" "load_interval" : "30" ; Load interval for interface rate/utilization. ``` + +#### PORTCHANNEL_TABLE +``` + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + +"PORTCHANNEL|portchannelName" + "load_interval" : "30" ; Load interval for portchannel rate/utilization. +``` + ### 3.2.2 APP DB #### SWITCH_TABLE @@ -201,12 +210,12 @@ Global Switch level config to be stored in this table. Global Switch level config set by portsOrch. load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds - queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds "SWITCH_TABLE|switch" "load_interval" : "30" ; Load interval for interface rate/utilization. - "queue_load_interval" : "30" ; Load interval for Queue rate/utilization + "queue_load_interval" : "10" ; Load interval for Queue rate/utilization ``` #### PORT_TABLE @@ -220,14 +229,26 @@ Interface level load interval set by portsOrch. "load_interval" : "30" ; Load interval for interface rate/utilization. ``` +#### LAG_TABLE +``` +Portchannel level load interval. + + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + + +"LAG_TABLE:PortChannel10" + "load_interval" : "30" ; Load interval for portchannel rate/utilization. + +``` + ### 3.2.3 COUNTER DB -Following new fields are added to existing COUNTERS Table for both port and queue Counters. +Following new fields are added to existing COUNTERS Table for both port/portchannel and queue Counters. ``` COUNTERS_DB: { - "COUNTERS:oid:": { + "COUNTERS:oid:": { "SAI_PORT_STAT_IF_IN_PKTS_PER_SECOND": "0", "SAI_PORT_STAT_IF_OUT_PKTS_PER_SECOND": "0", "SAI_PORT_STAT_IF_IN_OCTETS_PER_SECOND": "0", @@ -260,11 +281,18 @@ DELL team to add more details here. #### config interface load_interval Ethernet0 -Set rate calculation interval for the interface. Supported values are 10 seconds to 600 seconds. +Set rate calculation interval for the interface(port/portchannel). Supported values are 10 seconds to 600 seconds. config interface load_interval Ethernet0 30 +#### config queue load_interval + +Set rate calculation interval for the queue. Supported values are 10 seconds to 600 seconds. + + config queue load_interval 30 + + ### 3.4.3 Show Commands From fc97441d357fcf1dc8f6ae4770b52f350775179c Mon Sep 17 00:00:00 2001 From: Rupesh Kumar Date: Wed, 8 Jul 2020 05:50:58 -0700 Subject: [PATCH 06/12] Addressed review comments --- ..._Rate_Utilization_Load_Interval_Support.md | 133 ++++++++++-------- 1 file changed, 73 insertions(+), 60 deletions(-) diff --git a/system/Counters_Rate_Utilization_Load_Interval_Support.md b/system/Counters_Rate_Utilization_Load_Interval_Support.md index be8d55919eb7..258b4038db4a 100644 --- a/system/Counters_Rate_Utilization_Load_Interval_Support.md +++ b/system/Counters_Rate_Utilization_Load_Interval_Support.md @@ -33,11 +33,11 @@ * [3.3 SAI](#33-sai) * [3.4 CLI](#34-cli) * [3.4.1 Data Models](#341-data-models) - * [3.4.2 Configuration Commands](#342-configuration-commands) - * [3.4.3 Show Commands](#343-show-commands) - * [3.4.4 REST APIs](#344-rest-apis) + * [3.4.2 Show Commands](#342-show-commands) + * [3.4.3 REST APIs](#343-rest-apis) * [4 Error Handling](#5-error-handling) * [5 Serviceability and Debug](#6-serviceability-and-debug) + * [5.1 Configuration Commands](#51-configuration-commands) * [6 Warm Boot Support](#7-warm-boot-support) * [7 Scalability](#8-scalability) * [8 Unit Test](#9-unit-test) @@ -136,22 +136,33 @@ When rate interval is set, then thread caches the counters and after every rate // stats has current counters read from SAI // cache has stats from last rate interval // load_interval is per port load interval -// poll_interval is interval at which stats are polled from SAI +// poll_interval is interval at which stats are polled from SAI. + +// Logic to set load_divisor is called when polling interval or load_interval changes +if (load_interval > poll_interval) + load_divisor = load_interval / poll_interval + +if (load_interval < poll_interval) + # log message and set to same as poll_interval. + load_interval = poll_interval + load_divisor = 1 + +// This logic is called every load interval. // counter overflow will be handled. # Interface IN counters current = stats[SAI_PORT_STAT_IF_IN_UCAST_PKTS] + stats[SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS]; prev = cache[SAI_PORT_STAT_IF_IN_PKTS] -PPS = (current - prev) / (load_interval * poll_interval)) -BPS = ((stats[SAI_PORT_STAT_IF_IN_OCTETS] - cache[SAI_PORT_STAT_IF_IN_OCTETS]) / (load_interval * poll_interval)) +PPS = (current - prev) / load_divisor) +BPS = ((stats[SAI_PORT_STAT_IF_IN_OCTETS] - cache[SAI_PORT_STAT_IF_IN_OCTETS]) / load_divisor) bps = BPS << 3 utilization = (bps/port-speed) # Interface OUT counters current = stats[SAI_PORT_STAT_IF_OUT_UCAST_PKTS] + stats[SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS]; prev = cache[SAI_PORT_STAT_IF_OUT_PKTS] -PPS = (current - prev) / (load_interval * poll_interval)) -BPS = ((stats[SAI_PORT_STAT_IF_IN_OCTETS] - cache[SAI_PORT_STAT_IF_IN_OCTETS]) / (load_interval * poll_interval)) +PPS = (current - prev) / load_divisor) +BPS = ((stats[SAI_PORT_STAT_IF_IN_OCTETS] - cache[SAI_PORT_STAT_IF_IN_OCTETS]) / load_divisor) bps = BPS << 3 utilization = (bps/port-speed) @@ -159,10 +170,10 @@ Queue Counters current = stats[SAI_QUEUE_STAT_PACKETS] prev = cache[SAI_QUEUE_STAT_PACKETS] -PPS = (current - prev) / (load_interval * poll_interval)) +PPS = (current - prev) / load_divisor) current = stats[SAI_QUEUE_STAT_BYTES] prev = cache[SAI_QUEUE_STAT_BYTES] -BPS = (current - prev) / (load_interval * poll_interval)) +BPS = (current - prev) / load_divisor) bps = BPS << 3 ``` @@ -179,28 +190,28 @@ The transformer code fetches the new counters and shares it to the client. ``` Global Switch level config to be stored in this table. - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds - queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + port_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds + queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds "SWITCH|switch" - "load_interval" : "30" ; Load interval for interface rate/utilization. - "queue_load_interval" : "30" ; Load interval for Queue rate/utilization + "port_load_interval" : "10" ; Load interval for interface rate/utilization. + "queue_load_interval" : "10" ; Load interval for Queue rate/utilization ``` #### PORT_TABLE ``` - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds "PORT|ifName" - "load_interval" : "30" ; Load interval for interface rate/utilization. + "port_load_interval" : "10" ; Load interval for interface rate/utilization. ``` #### PORTCHANNEL_TABLE ``` - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + port_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds "PORTCHANNEL|portchannelName" - "load_interval" : "30" ; Load interval for portchannel rate/utilization. + "load_interval" : "10" ; Load interval for portchannel rate/utilization. ``` ### 3.2.2 APP DB @@ -209,12 +220,12 @@ Global Switch level config to be stored in this table. ``` Global Switch level config set by portsOrch. - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + port_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds queue_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds "SWITCH_TABLE|switch" - "load_interval" : "30" ; Load interval for interface rate/utilization. + "port_load_interval" : "10" ; Load interval for interface rate/utilization. "queue_load_interval" : "10" ; Load interval for Queue rate/utilization ``` @@ -222,22 +233,22 @@ Global Switch level config set by portsOrch. ``` Interface level load interval set by portsOrch. - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + port_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds "PORT_TABLE|ifName" - "load_interval" : "30" ; Load interval for interface rate/utilization. + "port_load_interval" : "10" ; Load interval for interface rate/utilization. ``` #### LAG_TABLE ``` Portchannel level load interval. - load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 30 seconds + port_load_interval = 3DIGIT ; Value in seconds. 10-600 supported. Default is 10 seconds "LAG_TABLE:PortChannel10" - "load_interval" : "30" ; Load interval for portchannel rate/utilization. + "port_load_interval" : "10" ; Load interval for portchannel rate/utilization. ``` @@ -248,22 +259,22 @@ Following new fields are added to existing COUNTERS Table for both port/portchan ``` COUNTERS_DB: { - "COUNTERS:oid:": { - "SAI_PORT_STAT_IF_IN_PKTS_PER_SECOND": "0", - "SAI_PORT_STAT_IF_OUT_PKTS_PER_SECOND": "0", - "SAI_PORT_STAT_IF_IN_OCTETS_PER_SECOND": "0", - "SAI_PORT_STAT_IF_OUT_OCTETS_PER_SECOND": "0", - "SAI_PORT_STAT_IF_IN_BITS_PER_SECOND": "0", - "SAI_PORT_STAT_IF_OUT_BITS_PER_SECOND": "0", - "SAI_PORT_STAT_IF_IN_UTILIZATION": "0", - "SAI_PORT_STAT_IF_OUT_UTILIZATION": "0", + "COUNTERS:oid:": { + "PORT_STAT_IF_IN_PKTS_PER_SECOND": "0", + "PORT_STAT_IF_OUT_PKTS_PER_SECOND": "0", + "PORT_STAT_IF_IN_OCTETS_PER_SECOND": "0", + "PORT_STAT_IF_OUT_OCTETS_PER_SECOND": "0", + "PORT_STAT_IF_IN_BITS_PER_SECOND": "0", + "PORT_STAT_IF_OUT_BITS_PER_SECOND": "0", + "PORT_STAT_IF_IN_UTILIZATION": "0", + "PORT_STAT_IF_OUT_UTILIZATION": "0", }, }, -"COUNTERS:oid:": { - "SAI_QUEUE_STAT_PACKETS_PER_SECOND": "0", - "SAI_QUEUE_STAT_BYTES_PER_SECOND": "0", - "SAI_QUEUE_STAT_BITS_PER_SECOND": "0", +"COUNTERS:oid:": { + "QUEUE_STAT_PACKETS_PER_SECOND": "0", + "QUEUE_STAT_BYTES_PER_SECOND": "0", + "QUEUE_STAT_BITS_PER_SECOND": "0", } ``` @@ -277,24 +288,7 @@ No changes needed in SAI for this feature. Existing openconfig interface yang and sonic yang to be extended to support this feature. DELL team to add more details here. -### 3.4.2 Configuration Commands - -#### config interface load_interval Ethernet0 - -Set rate calculation interval for the interface(port/portchannel). Supported values are 10 seconds to 600 seconds. - - - config interface load_interval Ethernet0 30 - -#### config queue load_interval - -Set rate calculation interval for the queue. Supported values are 10 seconds to 600 seconds. - - config queue load_interval 30 - - - -### 3.4.3 Show Commands +### 3.4.2 Show Commands #### Interface Counters @@ -310,8 +304,8 @@ Interface IPv6 oper status: Disabled IP MTU 9100 bytes LineSpeed 25GB, Auto-negotiation off Last clearing of "show interface" counters: 1970-01-01 00:00:00 -30 seconds input rate 84640 bits/sec, 10236 Bytes/sec, 52 packets/sec -30 seconds output rate 176760 bits/sec, 22432 Bytes/sec, 45 packets/sec +10 seconds input rate 84640 bits/sec, 10236 Bytes/sec, 52 packets/sec +10 seconds output rate 176760 bits/sec, 22432 Bytes/sec, 45 packets/sec ``` ##### show interface counters @@ -334,7 +328,7 @@ Ethernet0 UC2 0 0 0/s 0/s 0 Ethernet0 UC3 0 0 0/s 0/s 0 0 ... -Queue counter load interval: 30 sec +Queue counter load interval: 10 sec ``` ##### show queue counters interface CPU @@ -348,9 +342,9 @@ MC2 0 0 0/s 0/s 0 0 MC3 0 0 0/s 0/s 0 0 MC4 0 0 0/s 0/s 0 0 -Queue counter load interval: 30 sec +Queue counter load interval: 10 sec ``` -### 3.4.4 REST APIs +### 3.4.3 REST APIs To be filled by DELL team @@ -358,6 +352,25 @@ To be filled by DELL team # 5 Serviceability and Debug +Below config commands are added in CLICK to help during debugging. +This release supports only fixed load interval. +These config commands help during debugging if the user wishes to change the load interval. + +### 5.1 Configuration Commands + +#### config interface load_interval Ethernet0 + +Set rate calculation interval for the interface(port/portchannel). Supported values are 10 seconds to 600 seconds. + + + config interface load_interval Ethernet0 30 + +#### config queue load_interval + +Set rate calculation interval for the queue. Supported values are 10 seconds to 600 seconds. + + config queue load_interval 30 + # 6 Warm Boot Support Not applicable for this feature. From 060daba91384dcd2e06a5f5be8e70cd20263b7f6 Mon Sep 17 00:00:00 2001 From: Rupesh Kumar Date: Wed, 8 Jul 2020 05:53:46 -0700 Subject: [PATCH 07/12] Misc edits --- .../Counters_Rate_Utilization_Load_Interval_Support.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/system/Counters_Rate_Utilization_Load_Interval_Support.md b/system/Counters_Rate_Utilization_Load_Interval_Support.md index 258b4038db4a..eb7518b75fb7 100644 --- a/system/Counters_Rate_Utilization_Load_Interval_Support.md +++ b/system/Counters_Rate_Utilization_Load_Interval_Support.md @@ -123,19 +123,19 @@ Load interval functionality allows to configure per interface rate calculations ### 3.1.1 Orchagent -Ports orchagent will be programming rate interval from SWITCH_TABLE to SYNCD. -Queue counters are fetched every 10 seconds, so the rate interval can only be multiples of 10. +Ports orchagent will be programming load interval from SWITCH_TABLE to SYNCD. +Queue counters are fetched every 10 seconds, so the load interval can only be multiples of 10. ### 3.1.2 SYNCD SYNCD flex counter thread fetches the interface and queue counters from SAI and updates the COUNTERS DB. -When rate interval is set, then thread caches the counters and after every rate interval, will generate the interface utilization counters and update the new fields to same COUNTERS DB. +When load interval is set, then thread caches the counters and after every load interval, will generate the interface utilization counters and update the new fields to same COUNTERS DB. ``` // stats has current counters read from SAI -// cache has stats from last rate interval -// load_interval is per port load interval +// cache has stats from last load interval +// load_interval is per port/queue load interval // poll_interval is interval at which stats are polled from SAI. // Logic to set load_divisor is called when polling interval or load_interval changes From 99d849aee8a824f5886ce7027997140dbea06d36 Mon Sep 17 00:00:00 2001 From: Rupesh Kumar Date: Wed, 8 Jul 2020 06:18:21 -0700 Subject: [PATCH 08/12] Misc edits --- system/Counters_Rate_Utilization_Load_Interval_Support.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/Counters_Rate_Utilization_Load_Interval_Support.md b/system/Counters_Rate_Utilization_Load_Interval_Support.md index eb7518b75fb7..ba56587bf04d 100644 --- a/system/Counters_Rate_Utilization_Load_Interval_Support.md +++ b/system/Counters_Rate_Utilization_Load_Interval_Support.md @@ -138,8 +138,8 @@ When load interval is set, then thread caches the counters and after every load // load_interval is per port/queue load interval // poll_interval is interval at which stats are polled from SAI. -// Logic to set load_divisor is called when polling interval or load_interval changes -if (load_interval > poll_interval) +// Logic to set load_divisor is called when poll_interval or load_interval changes +if (load_interval >= poll_interval) load_divisor = load_interval / poll_interval if (load_interval < poll_interval) From c938c0de79f22cd02ca8bf3d50ac857c6cc40072 Mon Sep 17 00:00:00 2001 From: Madhukar Kamarapu <53220820+madhukar-kamarapu@users.noreply.github.com> Date: Mon, 12 Oct 2020 11:58:44 +0530 Subject: [PATCH 09/12] adding graceful shutdown commands at a portchannel level (#60) --- L2/PortChannel/Portchannel_Enhancements.md | 71 +++++++++++++++++----- 1 file changed, 57 insertions(+), 14 deletions(-) diff --git a/L2/PortChannel/Portchannel_Enhancements.md b/L2/PortChannel/Portchannel_Enhancements.md index 23446d8c3e9e..b164c0e92d49 100644 --- a/L2/PortChannel/Portchannel_Enhancements.md +++ b/L2/PortChannel/Portchannel_Enhancements.md @@ -2,7 +2,7 @@ ### Portchannel Enhancements in SONiC # High Level Design Document -#### Rev 0.1 +#### Rev 0.2 # Table of Contents * [List of Tables](#list-of-tables) @@ -62,6 +62,7 @@ | Rev | Date | Author | Change Description | |:---:|:-----------:|:------------------:|-----------------------------------| | 0.1 | 04/22/2020 | Madhukar K | Initial version | +| 0.2 | 07/25/2020 | Madhukar K | Adding portchannel level commands | # About this Manual This document provides details on Port Channel enhancements in SONiC. @@ -84,7 +85,7 @@ This document describes the high level design of Port Channel enhancements in SO - Upon enabling PortChannel graceful shutdown mode, all the portchannels in the system should be operationally down and stop traffic transmission and reception. ### 1.1.2 Configuration and Management Requirements -Provide configuration to enable/disable Port Channel graceful shutdown mode with the KLISH and click CLI. +Provide configuration to enable/disable Port Channel graceful shutdown mode globally and at portchannel level with the KLISH and click CLI. ### 1.1.3 Scalability Requirements All the supported portchannels in the device should enable/disable graceful shutdown mode upon user trigger. @@ -108,13 +109,14 @@ In MCLAG topologies, one of the two MCLAG nodes is put into graceful shutdown mo ## 2.2 Functional Description In MCLAG topologies, the Port Channel graceful shutdown mode allows users to upgrade the switch software by forwarding the data through the peer MCLAG switch. The goal is to maintain the data connectivity while the software is being upgraded on one of the MCLAG nodes. In order to achieve this, all the portchannels in that MCLAG node are brought down operationally when the device enters the Port Channel graceful shutdown mode. -In the Port Channel graceful shutdown mode +In the Port Channel graceful shutdown mode: - any newly created portchannel will be operationally down - existing portchannel memberships(of the ports) can be changed by the user - existing portchannels can be deleted by the user -The Port Channel graceful shutdown mode cannot be enabled/disabled for individual portchannels; it applies to all the portchannels present in the system. +The Port Channel graceful shutdown mode can be enabled/disabled for individual portchannels; portchannel level configuration is applicable only if Port Channel graceful shutdown is enabled globally. +Note: User should disable the Port Channel graceful shutdown at the portchannel level before enabling globally, if a given portchannel is desired to be operationally up. # 3 Design @@ -126,12 +128,22 @@ On SONiC device, when user wants to upgrade the firmware or resolve any issue on - since the LACP state machine for all the member ports is stopped, the portchannels that are operationally up become down - LACPDUs received on the member ports of the portchannels are silently discarded - If user triggers a config save followed with a reload (config-reload or cold-reboot) - after reload, the device will come up with all the configured portchannels in graceful shutdown mode. The portchannels will be operationally down. + - the portchannels that have portchannel level graceful shutdown disabled are not altered; they continue to be in the same operational status Upon exiting the Port Channel graceful shutdown mode: - LACP state machine is started afresh for all the portchannel member ports that are link up - LACPDUs are transmitted and received on the all the portchannel member ports that are link up - Portchannels will be operationally up if the LACP convergence succeeds +If the graceful-shutdown is enabled globally: + - If there is no configuration at the portchannel level - all the portchannels in the system are brought DOWN + - If graceful-shutdown is disabled on a given portchannel(say PortChannel5) - all the portchannels except PortChannel5 are brought DOWN + - enable graceful-shutdown on the portchannel which had graceful-shutdown disabled - PortChannel5 is brought DOWN + +If the graceful-shutdown is disabled globally: + - If graceful-shutdown is enabled at a portchannel level - this is a NO-OP; the portchannel continues to be UP + - If graceful-shutdown is disabled at a portchannel level - this is a NO-OP; the portchannel continues to be UP + ### 3.1.1 Teamd configuration The user will be able to enable/disable the Port Channel graceful shutdown mode. @@ -143,8 +155,12 @@ Team Manager listens to the enable/disable modes of the Port Channel graceful sh ## 3.2 DB Changes ### 3.2.1 CONFIG DB A new table PORTCHANNEL_GLOBAL is introduced. In the PORTCHANNEL_GLOBAL table: - - the "graceful_shutdown_mode" field is set to "enable" if user enables the Port Channel graceful shutdown mode - - the "graceful_shutdown_mode" field is set to "disable" if user disables the Port Channel graceful shutdown mode + - the "graceful_shutdown_mode" field is set to "enable" if user enables the Port Channel graceful shutdown mode globally + - the "graceful_shutdown_mode" field is set to "disable" if user disables the Port Channel graceful shutdown mode globally + +In the PORTCHANNEL table: +- the "graceful_shutdown_mode" field is set to "enable" if user enables the Port Channel graceful shutdown mode at the portchannel level +- the "graceful_shutdown_mode" field is set to "disable" if user disables the Port Channel graceful shutdown mode at the portchannel level ### 3.2.2 APP DB No new tables are needed. @@ -182,23 +198,40 @@ Not applicable. Click CLI -Enable/disable the Port Channel graceful shutdown mode. +Enable/disable the Port Channel graceful shutdown mode globally: ``` root@sonic:/home/admin# config portchannel graceful-shutdown ``` +Enable/disable the Port Channel graceful shutdown mode for a given portchannel: +``` +root@sonic:/home/admin# config portchannel graceful-shutdown +``` + KLISH CLI -Enable PortChannel graceful shutdown mode: +Enable PortChannel graceful shutdown mode globally: ``` sonic(config)# portchannel graceful-shutdown ``` -Disable PortChannel graceful shutdown mode: +Enable PortChannel graceful shutdown mode for a given portchannel: +``` +sonic(config)# interface PortChannel 6 +sonic(conf-if-po6)# graceful-shutdown +``` + +Disable PortChannel graceful shutdown mode globally: ``` sonic(config)# no portchannel graceful-shutdown ``` +Disable PortChannel graceful shutdown mode for a given portchannel: +``` +sonic(config)# interface PortChannel 6 +sonic(conf-if-po6)# no graceful-shutdown +``` + ### 3.6.4 Show Commands KLISH CLI @@ -206,7 +239,7 @@ The output of show interface portchannel is modified to display: 1. Portchannel graceful shutdown mode 2. LACP Fallback operational status, if fallback is enabled. -Graceful shutdown is disabled. Fallback config is enabled; it is non-operational. +Graceful shutdown is disabled. Fallback config is enabled; it is non-operational: ``` sonic# show interface PortChannel PortChannel5 is up, line protocol is down, mode LACP @@ -232,7 +265,7 @@ sonic# ``` -Graceful shutdown is disabled. Fallback config is enabled; it is operational. +Graceful shutdown is disabled. Fallback config is enabled; it is operational: ``` sonic# show interface PortChannel PortChannel5 is up, line protocol is up, mode LACP @@ -258,7 +291,7 @@ sonic# ``` -Graceful shutdown is enabled. Fallback is disabled. +Graceful shutdown is enabled. Fallback is disabled: ``` sonic# show interface PortChannel PortChannel5 is up, line protocol is down, mode LACP @@ -289,18 +322,28 @@ No new debug commands are added. ### 3.6.6 Rest API Support PATCH -Enable graceful shutdown mode: +Enable graceful shutdown mode globally: ``` /openconfig-aggregate-ext:aggregate/config/graceful-shutdown-mode ``` +Enable graceful shutdown mode for a given portchannel: +``` +/openconfig-interfaces:interfaces/interface={name}/openconfig-if-aggregate:aggregation/config/openconfig-interfaces-ext:graceful-shutdown-mode +``` + GET -Get graceful shutdown mode: +Get global graceful shutdown mode: ``` /openconfig-aggregate-ext:aggregate/config/graceful-shutdown-mode ``` +Get graceful shutdown mode for a given portchannel: +``` +/openconfig-interfaces:interfaces/interface={name}/openconfig-if-aggregate:aggregation/config/openconfig-interfaces-ext:graceful-shutdown-mode +``` + Get LACP fallback operational status: ``` /openconfig-interfaces:interfaces/interface={name}/openconfig-if-aggregate:aggregation/state/openconfig-interfaces-ext:fallback From d0442d083c1e0c2b9572ede6cf7485b3e6b28ed6 Mon Sep 17 00:00:00 2001 From: Kalimuthu Velappan Date: Mon, 12 Oct 2020 10:47:23 -0700 Subject: [PATCH 10/12] Hardware watchdog timer support --- system/watchdog.md | 109 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 99 insertions(+), 10 deletions(-) diff --git a/system/watchdog.md b/system/watchdog.md index b2cef9433f0b..2088a6028fbf 100644 --- a/system/watchdog.md +++ b/system/watchdog.md @@ -229,6 +229,21 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and ## 2.0 Platform driver interface - SONiC defines Platform APIs, and SONIC 2.0 APIs include support for Watchdog APIs. The HW watchdog feature shall make use of the platform 2.0 API implementation if supported by platforms. - For platforms which do not support 2.0 APIs, a generic API implementation shall be provided to use iTCO driver if supported. No other implementation shall be supported. +- The 2.0 platform driver interface supports the following watchdog APIs: + 1. arm() + This API enables the Hardware watchdog timer and trigger the watchdog timer to start the count down. + + 2. disarm() + Stops the count down and disable the watchdog function. + + 3. is_armed() + Returns the current state the WD function whether it is armed or disarmed. + + 4. timeout() + This API returns the currently configured WD timeout value which is specific to the hardware platform. + + The default value(180s) will be defined in the base class and it can be overridden by the per platform derived class. + ## Kdump with watchdog - When the kernel is crashed with panic, the watchdog timer shall be extended long enough to take the kernel kdump data. If the system is stuck in panic data collection, the watchdog automatically reboot the system. @@ -245,13 +260,11 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and ## Supported Platforms: - The hardware watchdog feature is implemented and tested on the following platforms for the current release. ACCTON: - x86_64-accton_as7326_56x-r0 - x86_64-accton_as7816_64x-r0 - x86_64-accton_as7726_32x-r0 - x86_64-accton_as7712_32x-r0 - x86_64-accton_as9716_32D-r0 - x86_64-accton_as4630_54pe-r0 - x86_64-accton_as5712-54x-r0 + AS7816_64x (Supported only on -OG and -R variant) + AS7712_32x + AS9716_32D + AS4630_54pe + AS5712-54x QUANTA: QUANTA_BWDE @@ -265,14 +278,63 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and 5232 5248 + +BIOS Upgrade: +- The watchdog functionality is disabled in some platform because of missing functionaly in BIOS. +- In order to support the for watchdog functionality, the following platforms BIOS image should be upgrade with latest version. + + :----------------|:--------------------- + | PLATFORM | BIOS VERSION | + :----------------| :-------------------- + | AS7326_56X |AS7326 V31 20180201 | + | AS7816_64X |AS7816 V31 20170803 | + | AS7712_32X |AS7712 V36 20170630 | + | AS9716_32D |AS9716 V36 20190325 | + | AS7726_32X |AS7726 V36 10180806 | + | AS5712_54X |AS5712 V36 20180212 | + | QUANTA_IX4 |IX4 V5.11 20170929 | + | QUANTA_IX7 |IX7 V5.11 20200212 | + | QUANTA_IX8 |IX8 V5.6 20180312 | + | QUANTA_IX9 |IX7 V5.6 20180312 | + :----------------|:------------------------- + + + - AS7816-64X-R: (BIOS is for AS7816-64X-R platform.) + https://support.edge-core.com/hc/en-us/articles/900000070403-AS7816-64X-R-BIOS-v36-01-00-01-latest- + + - AS7712-32X: + https://support.edge-core.com/hc/en-us/articles/900000087626-AS7712-32X-BIOS-v36-20190624-latest- + + - AS5712-54X + https://support.edge-core.com/hc/en-us/articles/900000070583-AS5712-54X-BIOS-v36-20190719-latest- + +- Use the below procedure to upgrade the BIOS + - Use AMI tool as below link for BIOS upgrade and the tool version is v5.12.03.2074. + - URL: https://ami.com/en/download-license-agreement/?DownloadFile=Aptio_V_AMI_Firmware_Update_Utility.zip + +- BIOS upgrade steps: + 1. Load the AMI tool and BIOS image into a USB drive. + 2. Select the EFI shell as boot option from BIOS boot menu. + 3. On the EFI shell, run the following command to upgrade the BIOS. + shell> AfuEfix64.efi /P /B /K /ME + + Example: + shell> AfuEfix64.efi AS7712_BIOS_V36_20190624.bin /P /B /K /ME + + ## Unsupported Hardware Platforms: - Some ODM platforms do not support the Watchdog functionality. In such cases, the HW watchdog application service should remain dormant. +- The watchdog feature is not supported on the following platform. + x86_64-accton_as7326_56x-r0 (Not supported) + x86_64-accton_as7726_32x-r0 (Not supported) + x86_64-accton_as7816_64x-r0 (Not supported other than -OG and -R variant) + # Serviceability - When the system gets rebooted because of watchdog timeout, the following string gets stored in the reboot cause file. - # cat /host/reboot-cause/previous-reboot-cause.txt - Hardware Watchdog Reset + - # cat /host/reboot-cause/previous-reboot-cause.txt + Hardware Watchdog Reset - The reboot cause file is collected as part of tech-support collection. @@ -284,7 +346,34 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and Example: # show reboot-cause - Hardware Watchdog Reset + Hardware Watchdog Reset + + Show reboot cause is shown only if supported. + AS4630_54PE + AS5835_54X + + + +# Watchdog support platform matrix + +- The following are the platform matrix with watchdog timer support + + :----------------|:--------------------|:------------------------ + | PLATFORM | Watchdog supported | Reboot Reason Supported | + :----------------|:--------------------|:------------------------ + | AS7326_56X | No | No | + | AS7816_64X | Yes(O variant) | No | + | AS7712_32X | Yes | No | + | AS9716_32D | Yes | No | + | AS7726_32X | No | No | + | AS5712_54X | Yes | No | + | AS4630_54PE | Yes | Yes | + | AS5835_54X | Yes | Yes | + | QUANTA_IX4 | Yes | No | + | QUANTA_IX7 | Yes | No | + | QUANTA_IX8 | Yes | No | + | QUANTA_IX9 | Yes | No | + :----------------|:--------------------|:------------------------- # Unit Test From a188c816fa76f09fa974e4c9a725d70efdc385bd Mon Sep 17 00:00:00 2001 From: Kalimuthu Velappan Date: Mon, 12 Oct 2020 10:47:23 -0700 Subject: [PATCH 11/12] Hardware watchdog timer support --- system/watchdog.md | 79 +++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 26 deletions(-) diff --git a/system/watchdog.md b/system/watchdog.md index 2088a6028fbf..71df55043297 100644 --- a/system/watchdog.md +++ b/system/watchdog.md @@ -71,37 +71,53 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and - If the system reset is because of watchdog timeout, it should report the proper reboot cause and should get reflected in the 'show reboot-cause' CLI. - It should support both SONiC 2.0 platform framework and its prior version of API interfaces. - It should be enabled by default in all the SONiC hardware platforms. -- A Watchdog daemon along with systemd service shall be added for refreshing the watchdog timer interval periodically. -- During the kernel panic, it should disable the hardware reset by extending the watchdog timer for collecting the kdump data. -- It should support a command to disable/enable the watchdog functionality and to view the watchdog current counter value and its status. +- It should provide a watchdog refresh framework to refresh the watchdog timer interval periodically and view its status. +- During the kernel panic, it should have API/util interface to disable the hardware reset by extending the watchdog timer for collecting the kdump data. +- It should have API/util interface to view the watchdog current counter value and its status. - Watchdog timer shall be supported for all the variants of intel iTCO PCH/ICH chipset boards. - +- It should show the watchdog reboot reason if platform supports reboot reason because of watchdog timeout. ## Configuration and Management Requirements ### Config commands -- The Watchdog support is enabled by default. This is a mandatory feature, it should not be disabled at any cause. +- The Watchdog support is enabled by default if platform support the this feature. This is a mandatory feature, it should not be disabled at any cause. +- There is No CLICK/KLISH cli required to enable this feature. ### Show commands - The 'show reboot-cause' CLI command should reflect the reboot cause if the device is rebooted because of hardware watchdog timeout. +- The 'show reboot-cause' command reflects the 'Hardware watchdog reset' as reboot reason if platform supports 'watchdog' reboot reason. + +### Util commands +- Linux command utils is provided to list the following: + 1. Shows the status of the watchdog feature. + 2. Shows the configured per platform timeout value. + 3. Option to enable/disable the watchdog feature, which should be used only for debugging purpose. ## Reboot Requirements -- coldboot - during the cold reboot, watchdog timer should not be stopped. The watchdog timeout value should be tuned, so that the timer would be running till BIOS resets it. -- fast-reboot/warm-reboot - the timeout value shall be configured long enough to retain the timer countdown until kernel reinitialises device after reboot. +- coldboot + - During the cold reboot, watchdog timer should not be stopped. The watchdog timeout value should be tuned, so that the timer would be running till BIOS resets it. + - The watchdog timer should timeout and reset the system if it is stuck in the middle of reboot. +- fast-reboot/warm-reboot + - During the warm/fast reboot, watchdog timer should not be stopped. + - The timeout value shall be configured long enough to retain the timer countdown until kernel reinitialises device after warm/fast reboot. + - The watchdog timer should timeout and reset the system if it is stuck in the middle of warm/fast reboot. +- Kernel crash + - It should disable/extend the watchdog timer during kdump collection. # Functional Description ## Design Overview -- The hardware watchdog designed to use the intel iTCO watchdog driver. This driver is supported on most of the ODM hardware platforms. The watchdog framework consists of following components: +- The hardware watchdog designed to use the intel iTCO watchdog driver. This driver is supported on most of the ODM hardware platforms. +- The watchdog framework consists of following components: - Systemd service - Watchdog application daemon and utility tools - Watchdog kernel drivers -- These files are preinstalled during the image build itself. When kernel boots up, the iTCO watchdog driver check for previous reboot reason by reading the watchdog status register and update the status according and initialize the watchdog hardware. During the system bootup, it starts the watchdog service as the first service and that starts the watchdog application daemon for watchdog time out refresh. +- These files are preinstalled during the image build itself. When kernel boots up, the iTCO watchdog driver check for previous reboot reason by reading the watchdog status register and update the status according and initialize the watchdog hardware. During the system bootup, it starts the watchdog service as the first service and that starts the watchdog application daemon for watchdog timeout refresh. @@ -151,7 +167,9 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and V Hardware CPU reset -- The Watchdog daemon application access the driver through watchdog device file. When the watchdog driver gets initialized in the kernel, it creates the device file '/dev/watchdogX' in /dev path. The watchdog daemon also creates the socket interface for the request from watchdogutil application. This is required because the watchdog device file can be opended only once and it can't be opened from multiple application. So the watchdog daemon open this for the timer keepalive update and also provides the socket interface for watchdog-util. The watchdog-util sends the request to daemon, the daemon processes the request and sends back the results to watchdog-util through local unix socket. The request and response would be in JSON format. +- The Watchdog daemon application access the driver through generic platform APIs. For earch platform, these API implement the platform level support for accesing the hardware watchdog. For the iTCO based platforms, it accesss the hardware watchdog through device file and ioctl calls. When the iTCO watchdog driver gets initialized in the kernel, it creates the device file '/dev/watchdogX' in /dev path. + +- The watchdog daemon also creates the socket interface for the request from watchdogutil application. This is required because the watchdog device file can be opended only once and it can't be opened from multiple application. So the watchdog daemon open this for the timer keepalive update and also provides the socket interface for watchdog-util. The watchdog-util sends the request to daemon, the daemon processes the request and sends back the results to watchdog-util through local unix socket. The request and response would be in JSON format. ## Kernel Config @@ -193,12 +211,6 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and - On some boards, the driver may fail to reset the chipset's NO_REBOOT flag which prevents the watchdog from rebooting the machine. If this is the case you will get a kernel message like "failed to reset NO_REBOOT flag, reboot disabled by hardware". -## Systemd watchdog service - -- The watchdog daemon opens the device and provides the necessary refresh to keep the system from resetting. It can test process table space, memory usage, file accessibility, work overload, file table overflow, IP address ping, network interface traffic, temperature, running processes and more. If the tests fail, then watchdog causes a shutdown. - -- Usually a userspace daemon will notify the kernel watchdog driver via the /dev/watchdog special device file that userspace is still alive, at regular intervals. When such a notification occurs, the driver will usually tell the hardware watchdog that everything is in order, and that the watchdog should wait for yet another little while to reset the system. If userspace fails (RAM error, kernel bug, whatever), the notifications cease to occur, and the hardware watchdog will reset the system (causing a reboot) after the timeout occurs. - ## ACPI watchdog migration - Starting from Intel Skylake the iTCO watchdog timer registers were moved to reside in the same register space with SMBus host controller. Not all needed registers are available and we need to unhide P2SB (Primary to Sideband) device briefly to be able to read status of required NO_REBOOT bit. The i2c-i801.c SMBus driver used to handle this and creation of the iTCO watchdog platform device. @@ -210,12 +222,14 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and ## Reboot reason: -- The iTCO driver is patched to enable access to reboot status from the user space. This enables the driver to provide uniform interface to the application for reading the reboot status. +- The iTCO driver is patched to enable access to reboot status from the user space. This enables the driver to provide uniform interface to the application for reading the reboot status. +- As part of platform API implementation, the get_reboot_reasion() API in the chassis module uses this kernel interface to read the reboot reason from watchdo driver. - The following command is used for reading the last reboot reason from hardware. # sysctl kernel.reboot_reason +- For non iTCO based platforms, respective platform API should be implemented to update reboot reason. ## BMC implementation @@ -227,8 +241,8 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and ## 2.0 Platform driver interface -- SONiC defines Platform APIs, and SONIC 2.0 APIs include support for Watchdog APIs. The HW watchdog feature shall make use of the platform 2.0 API implementation if supported by platforms. -- For platforms which do not support 2.0 APIs, a generic API implementation shall be provided to use iTCO driver if supported. No other implementation shall be supported. + +- SONiC defines Platform APIs, and SONIC 2.0 APIs include support for Watchdog APIs. The HW watchdog feature shall make use of the platform 2.0 API and implements the per platform watchdog feature if supported by platform. - The 2.0 platform driver interface supports the following watchdog APIs: 1. arm() This API enables the Hardware watchdog timer and trigger the watchdog timer to start the count down. @@ -244,9 +258,16 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and The default value(180s) will be defined in the base class and it can be overridden by the per platform derived class. +## Non 2.0 Platform driver interface +- For the platforms which do not support 2.0 APIs, a generic API implementation shall be provided to use iTCO driver if supported. + +## Non iTCO based hardware +- For the non iTCO based hardware, respective driver will implement the watchdog functionality. ## Kdump with watchdog -- When the kernel is crashed with panic, the watchdog timer shall be extended long enough to take the kernel kdump data. If the system is stuck in panic data collection, the watchdog automatically reboot the system. + +- When the kernel is crashed with panic, the watchdog timer shall be disabled/extended long enough to take the kernel kdump data. +- If the system is stuck in panic data collection, the watchdog automatically reboot the system. ## System Reboot @@ -258,7 +279,9 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and - fast-reboot/warm-reboot - the timeout value shall be configured long enough to retain the timer countdown until the kernel reinitialises value after reboot. ## Supported Platforms: -- The hardware watchdog feature is implemented and tested on the following platforms for the current release. +- The hardware watchdog feature is targeted for the following platforms for the current release. + +- Platforms with iTCO based watchdog driver support: ACCTON: AS7816_64x (Supported only on -OG and -R variant) AS7712_32x @@ -272,6 +295,7 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and QuantaIX8 QuantaIX9 +- Platforms with FPGA(non-iTCO)based watchdog driver support: DELL: 9264 9332 @@ -280,8 +304,9 @@ The Watchdog timer can detect a fault on an unattended SONiC hardware device and BIOS Upgrade: -- The watchdog functionality is disabled in some platform because of missing functionaly in BIOS. -- In order to support the for watchdog functionality, the following platforms BIOS image should be upgrade with latest version. +- The watchdog functionality might be disabled in some platform because of missing functionaly in BIOS. +- In order to support the for watchdog functionality, the platform BIOS image should be upgraded with latest version. +- Following are the BIOS versoin for respective platform :----------------|:--------------------- | PLATFORM | BIOS VERSION | @@ -323,6 +348,7 @@ BIOS Upgrade: ## Unsupported Hardware Platforms: + - Some ODM platforms do not support the Watchdog functionality. In such cases, the HW watchdog application service should remain dormant. - The watchdog feature is not supported on the following platform. x86_64-accton_as7326_56x-r0 (Not supported) @@ -333,8 +359,8 @@ BIOS Upgrade: # Serviceability - When the system gets rebooted because of watchdog timeout, the following string gets stored in the reboot cause file. - - # cat /host/reboot-cause/previous-reboot-cause.txt - Hardware Watchdog Reset + - cat /host/reboot-cause/previous-reboot-cause.txt + Hardware Watchdog Reset - The reboot cause file is collected as part of tech-support collection. @@ -356,7 +382,7 @@ BIOS Upgrade: # Watchdog support platform matrix -- The following are the platform matrix with watchdog timer support +- The following are the platform matrix with iTCO watchdog timer support :----------------|:--------------------|:------------------------ | PLATFORM | Watchdog supported | Reboot Reason Supported | @@ -386,5 +412,6 @@ BIOS Upgrade: 4 | Verify the watchdog disable during kdump collection. 5 | Verify the watchdog reading of watchdog timeout value. 6 | Verify the 2.0 API interface. + 7 | Verify the non 2.0 API interface. From af516a138b9f351813c50514d214a606b80609c2 Mon Sep 17 00:00:00 2001 From: Sathishs Date: Wed, 21 Oct 2020 11:36:33 -0700 Subject: [PATCH 12/12] Create IP ECMP loadshare --- L3/IP ECMP loadshare | 1 + 1 file changed, 1 insertion(+) create mode 100644 L3/IP ECMP loadshare diff --git a/L3/IP ECMP loadshare b/L3/IP ECMP loadshare new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/L3/IP ECMP loadshare @@ -0,0 +1 @@ +