From 01a1a461b3200563a74b8a050db120d132cb9549 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Thu, 21 Oct 2021 09:43:46 +0800 Subject: [PATCH 1/7] High level design for route flow counter --- .../route_flow_counter_architecture.png | Bin 0 -> 79665 bytes .../route_flow_counter_disabled.svg | 4 + .../route_flow_counter_enabled.svg | 4 + doc/flow_counters/route_learned.svg | 4 + doc/flow_counters/route_removed.svg | 4 + doc/flow_counters/routes_flow_counters.md | 475 ++++++++++++++++++ .../user_set_max_allowed_match.svg | 4 + doc/flow_counters/user_set_route_pattern.svg | 4 + 8 files changed, 499 insertions(+) create mode 100644 doc/flow_counters/route_flow_counter_architecture.png create mode 100644 doc/flow_counters/route_flow_counter_disabled.svg create mode 100644 doc/flow_counters/route_flow_counter_enabled.svg create mode 100644 doc/flow_counters/route_learned.svg create mode 100644 doc/flow_counters/route_removed.svg create mode 100644 doc/flow_counters/routes_flow_counters.md create mode 100644 doc/flow_counters/user_set_max_allowed_match.svg create mode 100644 doc/flow_counters/user_set_route_pattern.svg diff --git a/doc/flow_counters/route_flow_counter_architecture.png b/doc/flow_counters/route_flow_counter_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..cabae8b6b978dc7a036c8c77449412f6aa815532 GIT binary patch literal 79665 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

LUMBX_`G5zKJx>i&NrDOyli3neWo!~NO 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 + + +
Counter disabled
Counter disabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Unbind existing counters
Unbind existing coun...
Clear both cache
Clear both cache
yes
yes
no
no
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_flow_counter_enabled.svg b/doc/flow_counters/route_flow_counter_enabled.svg new file mode 100644 index 00000000000..0a91e19da48 --- /dev/null +++ b/doc/flow_counters/route_flow_counter_enabled.svg @@ -0,0 +1,4 @@ + + + +
Counter enabled
Counter enabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Find matching route?
Find matching route?
Update unbound cache
Update unbound cache
Reach max allowed?
Reach max allowed?
Bind to counter
Bind to counter
Update bound cache
Update bound cache
yes
yes
no
no
no
no
no
no
yes
yes
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_learned.svg b/doc/flow_counters/route_learned.svg new file mode 100644 index 00000000000..b91032870c7 --- /dev/null +++ b/doc/flow_counters/route_learned.svg @@ -0,0 +1,4 @@ + + + +
Route learned
Route learned
Route pattern configured?
Route pattern configure...
Finish
Finish
yes
yes
no
no
Bind to counter
Bind to counter
Match pattern?
Match pattern?
yes
yes
Reach max allowed?
Reach max allowed?
no
no
no
no
yes
yes
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
no
no
yes
yes
Update unbound cache
Update unbound cache
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_removed.svg b/doc/flow_counters/route_removed.svg new file mode 100644 index 00000000000..232c92520b0 --- /dev/null +++ b/doc/flow_counters/route_removed.svg @@ -0,0 +1,4 @@ + + + +
Route removed
Route removed
Route pattern configured?
Route pattern configure...
Finish
Finish
no
no
Match pattern?
Match pattern?
yes
yes
no
no
yes
yes
no
no
In bound cache?
In bound cache?
yes
yes
no
no
Unbind counter
Unbind counter
Counter enabled?
Counter enabled?
Update unbound cache
Update unbound cache
yes
yes
no
no
Unbound cache empty?
Unbound cache empty?
Update bound cache
Update bound cache
Fetch one unbound route and bind counter
Fetch one unbound ro...
Update both cache
Update both cache
Finish
Finish
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/routes_flow_counters.md b/doc/flow_counters/routes_flow_counters.md new file mode 100644 index 00000000000..19dc8e1c3c5 --- /dev/null +++ b/doc/flow_counters/routes_flow_counters.md @@ -0,0 +1,475 @@ +# SONiC Route Flow Counter Design # + +## Table of Content + +### Revision + + | Rev | Date | Author | Change Description | + |:---:|:-----------:|:------------------:|-----------------------------------| + | 0.1 | | Junchao Chen | Initial version | + +### Scope + +This document is the design document for route flow counter feature on SONiC. + +### Definitions/Abbreviations + +N/A + +### Overview + +Flow counters are usually used for debugging, troubleshooting and performance enhancement processes. Flow counters could cover cases like: + +- Routes matching the configured prefix pattern (number of hits and number of bytes) +- Host interface traps (number of received traps per Trap ID) +- FDB entries matching the configured VXLAN tunnel or using the VLAN ID as pattern +- Next-Hop/Next-Hop Group/Next-Hop Group Member + +This document focus on route counter. + +### Requirements + +- Generic Counters shall be used as Flow Counters introduced by the feature +- CLI shall be used for configuration, showing and clearing of statistics +- Flow Counters for routes shall be configured using prefix patterns. The flow counter shall be bound to all routes matching the configured pattern (prefix:vrf) +- In Phase 1 the number of configured route patterns shall be limited to 1 (enforcement shall be done during configuration via CLI) +- In Phase 1 the number of matching routes shall be limited to the pre-configured value (default value - 30), after reboot it is not ensured that the same set of matching routes will be used for counting +- Flow Counters shall be bound the matching routes regardless how these routes are added - manually (static) or via FRR +- Statistics shall be configured (enabled/disabled) and cleared using the CLI commands +- Statistics shall be provided as a number of hit/use of a specific resource and number of bytes in packets sent via configured routes +- When a prefix pattern is removed, Flow Counters on all routes matching the configured pattern shall be removed + +### Architecture Design + +Flow counter shall utilize the following existing infrastructure: + +- Generic Counters API - defined in https://github.com/opencomputeproject/SAI/blob/master/doc/SAI-Proposal-Generic-Counters.md and already supported by the SAI layer. This feature shall support binding/unbinding of these Generic counters to/from relevant SONIC objects +- Flex Counters framework - used for background polling and pushing the statistic information to COUNTER DB for later use (e.g. by CLI). A introduction to flex counter can be found at: https://github.com/Azure/SONiC/pull/858. + +![architecture](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_flow_counter_architecture.png). + +### High-Level Design + +Changes shall be made to sonic-utilities, sonic-swss sub-modules to support this feature. sonic-sairedis needs not change because trap flow counter feature has already implemented all logic for flow counters. + +> Note: Code present in this design document is only for demonstrating the design idea, it is not production code. + +#### sonic-swss + +##### Flex Counter Orch + +A new flex counter group shall be added to this class: ROUTE_FLOW_COUNTER. Flex counter orch shall call Route orch to generate/clear flex counter if user enable/disable ROUTE_FLOW_COUNTER, this flow will be described in chapter [Route Orch](#route-orch) + +##### FlexCounterManager + +FlexCounterManager updates/clears data to FLEX_COUNTER_TABLE so that syncd knows how to query the stats. + +A new Counter Type shall be added to FlexCounterManager: + +```cpp +enum class CounterType +{ + ... + ROUTE_MATCH, +} +``` + +A new entry shall be added to counter_id_field_lookup: + +```cpp +const unordered_map FlexCounterManager::counter_id_field_lookup = +{ + ... + { CounterType::ROUTE_MATCH, FLOW_COUNTER_ID_LIST }, +} +``` + +##### Route Pattern Orch: + +A new class Route pattern orch shall be added to orchagent to handle route patterns change in CONFIG_DB. Route pattern orch shall call route orch if router pattern/max allowed match count is configured by user. + +##### Route Orch + +Two new cache shall be added to Route Orch as data members: + +- Cache for those routes which match the prefix pattern and are bound to counters (Bound Cache). +- Cache for those routes which match the prefix pattern and are not bound to counters (UnBound Cache). + +Route Orch shall be extended to handle following cases: + +1. Route flow counter enabled + +![route-flow-counter-enabled](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_flow_counter_enabled.svg). + +2. Route flow counter disabled + +![route-flow-counter-disabled](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_flow_counter_disabled.svg). + +3. Route pattern created or updated. + +![user-set-route-pattern](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/user_set_route_pattern.svg). + +4. Route pattern removed. Route orch shall unbind previous matched routes from counters and clear cache. + +5. New route entry in ROUTE_TABLE. + +![route-learned](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_learned.svg). + +6. Route entry removed from ROUTE_TABLE. + +![route-removed](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_removed.svg). + +7. Max allowed match count updated. + +![user-set-max-allowed-match](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/user_set_max_allowed_match.svg). + +For binding route entry to a counter: + +1. Request Flow Counter Handler to create a generic counter +2. Bind the counter to the route +3. Request FlexCounterManager to set the counter Id list to FLEX_COUNTER_TABLE so that syncd knows how to query the stats +4. Save a new entry {:} and {:} to COUNTERS DB so that CLI knows how to display the statistic. + +For unbinding route entry from a counter: + +1. Request FlexCounterManager to remove the counter Id list from FLEX_COUNTER_TABLE +2. Unbind the route and counter +3. Request Flow Counter Handler to remove the generic counter +4. Remove the entry from COUNTERS DB + +#### Counters DB Enhancements + +A new table COUNTERS_ROUTE_NAME_MAP shall be added to COUNTERS DB. + + ; Defines information for COUNTERS_ROUTE_NAME_MAP + key = COUNTERS_ROUTE_NAME_MAP ; route string to generic counter OID mapping + ; field = value + ... + = STRING ; field name is string of route, value is counter OID + +Example: + +``` +COUNTERS_ROUTE_NAME_MAP: { +"1.1.1.0/24:Vrf_default":"oid:0x1500000000034e" +"1.1.7.7/32:Vrf_default":"oid:0x1500000000035e" +} +``` + +A new table COUNTERS_ROUTE_TO_PATTERN_MAP shall be added to COUNTERS DB. + + ; Defines information for COUNTERS_ROUTE_TO_PATTERN_MAP + key = COUNTERS_ROUTE_TO_PATTERN_MAP ; route string to route pattern mapping + ; field = value + ... + = STRING ; field name is string of route, value is route pattern + +Example: + +``` +COUNTERS_ROUTE_TO_PATTERN_MAP: { +"1.1.1.0/24:Vrf_default":"1.1.0.0/16:Vrf_default" +"1.1.7.7/32:Vrf_default":"1.1.0.0/16:Vrf_default" +} +``` + +### SAI API + +No new SAI API is required for this feature. + +SAI APIs shall be used in this feature: + + |API |Function | + |:------------------:|-----------------------------------| + |sai_counter_api_t |create_counter | + | |remove_counter | + | |get_counter_stats_ext | + |sai_route_api_t |set_route_entries_attribute | + +SAI attributes shall be used in this feature: + + |Struct |Attribute | + |:--------------------:|-----------------------------------| + |sai_counter_stat_t | SAI_COUNTER_STAT_PACKETS | + | | SAI_COUNTER_STAT_BYTES | + |sai_route_entry_attr_t| SAI_ROUTE_ENTRY_ATTR_COUNTER_ID | + +### Configuration and management + +#### CLI/YANG model Enhancements + +##### CLI + +Enable/disable configuration: + +``` +counterpoll flowcnt-route +Example: +admin@sonic:~$ counterpoll flowcnt-route enable +``` + +Polling interval configuration: + +``` +counterpoll flowcnt-route interval // default - 1000ms +Example: +admin@sonic:~$ counterpoll flowcnt-route interval 2000 +``` + +Show configuration: + +``` +counterpoll show +Example: +admin@sonic:~$ counterpoll show +Type Interval (in ms) Status +-------------------------- ------------------ -------- +FLOW_CNT_ROUTE_STAT default(1000) disable +``` + +Config route pattern: + +``` +config flowcnt-route pattern [--vrf ] [--max ] // configure route pattern +Example: +admin@sonic:~$ config flowcnt-route pattern add --vrf Vrf_management --max 50 2.2.0.0/16 +Route Pattern Flow Counter configuration is successful + +admin@sonic:~$ config flowcnt-route pattern remove --vrf Vrf_management 2.2.0.0/16 +Route Pattern Flow Counter configuration is successful +``` + +Show configuration: + +``` +show flowcnt-route config +Example: +admin@sonic:~$ show flowcnt-route config +Route pattern VRF Max +----------------------------------------------- +3.3.0.0/16 Vrf_default 50 +``` + +Show counters value: + +``` +show flowcnt-route stats // show statistics of all route flow counters +Example: +admin@sonic:~$ show flowcnt-route stats +Route pattern VRF Matched routes Packets Bytes +-------------------------------------------------------------------------------------- +3.3.0.0/16 Vrf_default 3.3.1.0/24 100 4543 + 3.3.2.3/32 3443 929229 + 3.3.0.0/16 0 0 + + +show flowcnt-route stats pattern [ [ --vrf ] ] // show statistics of all routes matching the configured route pattern +Example: +admin@sonic:~$ show flowcnt-route stats pattern 3.3.0.0/16 +Route pattern VRF Matched routes Packets Bytes +-------------------------------------------------------------------------------------- +3.3.0.0/16 Vrf_default 3.3.1.0/24 100 4543 + 3.3.2.3/32 3443 929229 + 3.3.0.0/16 0 0 + +show flowcnt-route stats route [ [ --vrf ] ] // show statistics of the specific route matching the configured route pattern +Example: +admin@sonic:~$ show flowcnt-route stats route 3.3.3.2/32 --vrf Vrf_management +Route VRF Route Pattern Packets Bytes +----------------------------------------------------------------------------------------- +3.3.3.2/32 Vrf_management 3.3.0.0/16 100 4543 +``` + +Clear counters: + +``` +sonic-clear flowcnt-route // clear all route flow counters +Example: +admin@sonic:~$ sonic-clear flowcnt-route +Route Flow Counters were successfully cleared + +sonic-clear flowcnt-route pattern [ [ --vrf ] ] // clear flow counters of all routes matching the configured route pattern +Example: +admin@sonic:~$ sonic-clear flowcnt-route pattern 3.3.0.0/16 --vrf Vrf_management +Flow Counters of all routes matching the configured route pattern were successfully cleared + +sonic-clear flowcnt-route route [ [ --vrf ] ] // clear flow counters of the specific route matching the configured prefix +Example: +admin@sonic:~$ sonic-clear flowcnt-route route 3.3.3.2/32 --vrf Vrf_management +Flow Counters of the specified route were successfully cleared +``` + +##### YANG model + +A new container shall be added to sonic-flex_counter.yang: + +```yang +... +container FLOW_CNT_ROUTE { + /* ROUTE_FLEX_COUNTER_GROUP */ + leaf FLEX_COUNTER_STATUS { + type flex_status; + } +} +... +``` + +#### Config DB Enhancements + +A new table FLOW_COUNTER_ROUTE_PATTERN_TABLE shall be added to CONFIG DB. + + ; Defines schema for route flow counter table + key = "FLOW_COUNTER_ROUTE_PATTERN_TABLE|prefix:vrf" ; Route pattern (prefix + vrf) + ; field = value + ... + max_match_count = Integer ; Max allowed match count for this pattern, default 30, value range [1, 50] + +Example: + +``` +127.0.0.1:6379[4]> hgetall FLOW_COUNTER_ROUTE_PATTERN_TABLE|3.3.1.0/24:Vrf_management +1) "max_match_count" +2) "30" +``` + +A new key shall be added to FLEX_COUNTER_TABLE. + +Example: + +``` +127.0.0.1:6379[4]> hgetall FLEX_COUNTER_TABLE|FLOW_CNT_ROUTE +1) "FLEX_COUNTER_STATUS" +2) "enable" +3) "POLL_INTERVAL" +4) "2000" +``` + +### Warmboot and Fastboot Design Impact +As this is a debugging feature, basically, user should not enable this counter during warmboot or fastboot. + +However, if user did it by mistake, there is already a mechanism that delays flex counter, nothing needs to be done here. See PR https://github.com/Azure/sonic-swss/pull/1877. + +### Restrictions/Limitations +N/A + +### Testing Requirements/Design + +#### Unit Test cases + +##### sonic-utilities + +There is a unit test framework in sonic-utilities. Each new CLI command shall be covered by unit test cases either by adding new test cases or extend existing test cases: + +1. TestCounterpoll::test_update_route_counter_status (Add new case for `counterpoll flowcnt-route `) + - Verify command run successfully with valid parameter enable/disable + - Verify CONFIG DB is correctly updated + +2. TestCounterpoll::test_update_route_counter_interval (Add new case for `counterpoll flowcnt-route interval `) + - Verify command run successfully with valid parameter (interval value in allowed range) + - Verify CONFIG DB is correctly updated + - Verify command abort with invalid parameter + +3. TestCounterpoll::test_show (Extend existing case for `counterpoll show`) + - Verify new counter group is in the output + +4. TestCounterpoll::test_update_counter_config_db_status (Extend existing case for `counterpoll config-db`) + - Verify new counter group is supported by this command + +5. TestRouteStat::show_pattern (Add new case for `show flowcnt-route stats pattern`) + - Verify command output with normal format + - Verify command output with JSON format + - Verify output on multi ASIC + +6. TestRouteStat::show_route (Add new case for `show flowcnt-route stats route`) + - Verify command output with normal format + - Verify command output with JSON format + - Verify output on multi ASIC + +7. TestRouteStat::show_config (Add new case for `show flowcnt-route config`) + - Verify command output with normal format + - Verify command output with JSON format + +8. TestRouteStat::clear_pattern (Add new case for `sonic-clear flowcnt-route pattern`) + - Verify stats value can be cleared + - Verify on multi ASIC + +9. TestRouteStat::clear_route (Add new case for `sonic-clear flowcnt-route route`) + - Verify stats value can be cleared + - Verify on multi ASIC + +10. TestRouteStat::config (Add new case for `config flowcnt-route`) + - Verify the pattern in DB + - Verify max allowed match count in DB + +##### sonic-swss + +Changes in sonic-swss shall be covered by VS test cases: + +1. TestFlexCounters::test_flex_counters (Extend existing case) + - Add new route to ROUTE_TABLE and set route pattern + - Enable route counter group + - Verify new entry in FLEX_COUNTER_TABLE and name map + - Set route counter group interval + - Verify interval value in FLEX_COUNTER_GROUP_TABLE + - Disable trap counter group + - Verify the counter group is disabled and all data in DB are cleared + +2. TestFlexCounters::test_update_route_pattern + - Add route a and b + - Enable route counter group + - Set route pattern to match route a only + - Verify counter is bind to a + - Set route pattern to match route b only + - Verify counter is bind to b + - Remove route pattern + - Verify counter is cleared + +3. TestFlexCounters::test_add_remove_counter + - Enable route counter group and set route pattern + - Add a route matches the pattern + - Verify counter automatically bind + - Remove the route + - Verify counter is automatically unbind + +4. TestFlexCounters::test_router_flow_counter_max_match_count + - Enable route counter group and set route pattern + - Set max allowed to 1 + - Add 2 route matches the pattern + - Verify there is 1 counter + - Set max allowed to 2 + - Verify there are 2 counters + - Set max allowed to 1 + - Verify there is 1 counter + - Remove the current bound route + - Verify there is 1 counter + +#### System Test cases + +System test cases shall be implemented in sonic-mgmt. A few new test cases shall be added: + +1. TestRouteCounter::test_add_remove_route + - Configure route pattern + - Advertise route to DUT + - Send traffic that matches the route + - Verify the counter + - Withdraw route + - Verify the counter no longer exist + +2. TestRouteCounter::test_update_route_pattern + - Advertise route a and b to DUT + - Configure route pattern that matches a + - Send traffic that matches both a and b + - Verify the counter only count packets count for a + - Configure route pattern that matches b + - Send traffic that matches both a and b + - Verify the counter only count packets count for b + +3. TestRouteCounter::test_max_match_count + - Advertise 3 routes to DUT + - Configure route pattern that matches the 3 routes + - Configure max match count to 2 + - Verify that only 2 counters are created + - Withdraw 1 matched route + - Verify that 2 counters are created + - Configure max match count to 1 + - Verify that 1 counter is created diff --git a/doc/flow_counters/user_set_max_allowed_match.svg b/doc/flow_counters/user_set_max_allowed_match.svg new file mode 100644 index 00000000000..b303cf11fb4 --- /dev/null +++ b/doc/flow_counters/user_set_max_allowed_match.svg @@ -0,0 +1,4 @@ + + + +
Max allowed change
Max allowed change
Update current value
Update current value
Counter enabled
Counter enabled
Finish
Finish
no
no
Greater than old?
Greater than old?
Unbound cache empty?
Unbound cache empty?
yes
yes
yes
yes
Fetch (current-old) unbound routes and bind to counter
Fetch (current-old)...
Update both cache
Update both cache
no
no
Bound cache size greater than current?
Bound cache size greate...
Finish
Finish
no
no
yes
yes
Fetch (size - current) bound routes and unbind
Fetch (size - curren...
yes
yes
no
no
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/user_set_route_pattern.svg b/doc/flow_counters/user_set_route_pattern.svg new file mode 100644 index 00000000000..004797a0802 --- /dev/null +++ b/doc/flow_counters/user_set_route_pattern.svg @@ -0,0 +1,4 @@ + + + +
Route pattern set
Route pattern set
Route pattern exists?
Route pattern exists?
Unbind existing matching routes and clear cache
Unbind existing matc...
yes
yes
no
no
Bind to counter
Bind to counter
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
yes
yes
Finish
Finish
no
no
Reach max allowed?
Reach max allowed?
no
no
Update unbound cache
Update unbound cache
yes
yes
Find matching route?
Find matching route?
no
no
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file From 1c9267874f4663f1b859d016872a598a9be57558 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Thu, 9 Dec 2021 14:54:12 +0800 Subject: [PATCH 2/7] Fix comments --- doc/flow_counters/route_flow_counter_disabled.svg | 2 +- doc/flow_counters/route_flow_counter_enabled.svg | 2 +- doc/flow_counters/route_learned.svg | 2 +- doc/flow_counters/route_removed.svg | 2 +- doc/flow_counters/routes_flow_counters.md | 9 +++++---- doc/flow_counters/user_set_max_allowed_match.svg | 4 ---- doc/flow_counters/user_set_route_pattern.svg | 2 +- 7 files changed, 10 insertions(+), 13 deletions(-) delete mode 100644 doc/flow_counters/user_set_max_allowed_match.svg diff --git a/doc/flow_counters/route_flow_counter_disabled.svg b/doc/flow_counters/route_flow_counter_disabled.svg index 66eec38fb3b..a6cffa1c144 100644 --- a/doc/flow_counters/route_flow_counter_disabled.svg +++ b/doc/flow_counters/route_flow_counter_disabled.svg @@ -1,4 +1,4 @@ -
Counter disabled
Counter disabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Unbind existing counters
Unbind existing coun...
Clear both cache
Clear both cache
yes
yes
no
no
Viewer does not support full SVG 1.1
\ No newline at end of file +
Counter disabled
Counter disabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Unbind existing counters
Unbind existing coun...
Clear cache
Clear cache
yes
yes
no
no
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_flow_counter_enabled.svg b/doc/flow_counters/route_flow_counter_enabled.svg index 0a91e19da48..81c7317c6ba 100644 --- a/doc/flow_counters/route_flow_counter_enabled.svg +++ b/doc/flow_counters/route_flow_counter_enabled.svg @@ -1,4 +1,4 @@ -
Counter enabled
Counter enabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Find matching route?
Find matching route?
Update unbound cache
Update unbound cache
Reach max allowed?
Reach max allowed?
Bind to counter
Bind to counter
Update bound cache
Update bound cache
yes
yes
no
no
no
no
no
no
yes
yes
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file +
Counter enabled
Counter enabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Find matching route?
Find matching route?
Reach max allowed?
Reach max allowed?
Bind to counter
Bind to counter
Update bound cache
Update bound cache
yes
yes
no
no
no
no
no
no
yes
yes
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_learned.svg b/doc/flow_counters/route_learned.svg index b91032870c7..10f28a0dc71 100644 --- a/doc/flow_counters/route_learned.svg +++ b/doc/flow_counters/route_learned.svg @@ -1,4 +1,4 @@ -
Route learned
Route learned
Route pattern configured?
Route pattern configure...
Finish
Finish
yes
yes
no
no
Bind to counter
Bind to counter
Match pattern?
Match pattern?
yes
yes
Reach max allowed?
Reach max allowed?
no
no
no
no
yes
yes
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
no
no
yes
yes
Update unbound cache
Update unbound cache
Viewer does not support full SVG 1.1
\ No newline at end of file +
Route learned
Route learned
Route pattern configured?
Route pattern configure...
Finish
Finish
yes
yes
no
no
Bind to counter
Bind to counter
Match pattern?
Match pattern?
yes
yes
Reach max allowed?
Reach max allowed?
no
no
no
no
yes
yes
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
no
no
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_removed.svg b/doc/flow_counters/route_removed.svg index 232c92520b0..37227c8a757 100644 --- a/doc/flow_counters/route_removed.svg +++ b/doc/flow_counters/route_removed.svg @@ -1,4 +1,4 @@ -
Route removed
Route removed
Route pattern configured?
Route pattern configure...
Finish
Finish
no
no
Match pattern?
Match pattern?
yes
yes
no
no
yes
yes
no
no
In bound cache?
In bound cache?
yes
yes
no
no
Unbind counter
Unbind counter
Counter enabled?
Counter enabled?
Update unbound cache
Update unbound cache
yes
yes
no
no
Unbound cache empty?
Unbound cache empty?
Update bound cache
Update bound cache
Fetch one unbound route and bind counter
Fetch one unbound ro...
Update both cache
Update both cache
Finish
Finish
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file +
Route removed
Route removed
Route pattern configured?
Route pattern configure...
Finish
Finish
no
no
Match pattern?
Match pattern?
yes
yes
no
no
yes
yes
no
no
In bound cache?
In bound cache?
yes
yes
Unbind counter
Unbind counter
Counter enabled?
Counter enabled?
yes
yes
no
no
Update bound cache
Update bound cache
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/routes_flow_counters.md b/doc/flow_counters/routes_flow_counters.md index 19dc8e1c3c5..18e2f3309f7 100644 --- a/doc/flow_counters/routes_flow_counters.md +++ b/doc/flow_counters/routes_flow_counters.md @@ -38,6 +38,11 @@ This document focus on route counter. - Statistics shall be configured (enabled/disabled) and cleared using the CLI commands - Statistics shall be provided as a number of hit/use of a specific resource and number of bytes in packets sent via configured routes - When a prefix pattern is removed, Flow Counters on all routes matching the configured pattern shall be removed +- Adding route entry shall be automatically bound to counter if counter is enabled and pattern matches +- Removing route entry shall be automatically unbound if the entry is previously bound +- Removing route entry shall not trigger route pattern search +- Decreasing max allowed match count shall not trigger removing of existing bound counters +- Increasing max allowed match count shall not trigger route pattern search ### Architecture Design @@ -119,10 +124,6 @@ Route Orch shall be extended to handle following cases: ![route-removed](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_removed.svg). -7. Max allowed match count updated. - -![user-set-max-allowed-match](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/user_set_max_allowed_match.svg). - For binding route entry to a counter: 1. Request Flow Counter Handler to create a generic counter diff --git a/doc/flow_counters/user_set_max_allowed_match.svg b/doc/flow_counters/user_set_max_allowed_match.svg deleted file mode 100644 index b303cf11fb4..00000000000 --- a/doc/flow_counters/user_set_max_allowed_match.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
Max allowed change
Max allowed change
Update current value
Update current value
Counter enabled
Counter enabled
Finish
Finish
no
no
Greater than old?
Greater than old?
Unbound cache empty?
Unbound cache empty?
yes
yes
yes
yes
Fetch (current-old) unbound routes and bind to counter
Fetch (current-old)...
Update both cache
Update both cache
no
no
Bound cache size greater than current?
Bound cache size greate...
Finish
Finish
no
no
yes
yes
Fetch (size - current) bound routes and unbind
Fetch (size - curren...
yes
yes
no
no
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/user_set_route_pattern.svg b/doc/flow_counters/user_set_route_pattern.svg index 004797a0802..4b25f2bb37d 100644 --- a/doc/flow_counters/user_set_route_pattern.svg +++ b/doc/flow_counters/user_set_route_pattern.svg @@ -1,4 +1,4 @@ -
Route pattern set
Route pattern set
Route pattern exists?
Route pattern exists?
Unbind existing matching routes and clear cache
Unbind existing matc...
yes
yes
no
no
Bind to counter
Bind to counter
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
yes
yes
Finish
Finish
no
no
Reach max allowed?
Reach max allowed?
no
no
Update unbound cache
Update unbound cache
yes
yes
Find matching route?
Find matching route?
no
no
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file +
Route pattern set
Route pattern set
Route pattern exists?
Route pattern exists?
Unbind existing matching routes and clear cache
Unbind existing matc...
yes
yes
no
no
Bind to counter
Bind to counter
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
yes
yes
Finish
Finish
no
no
Reach max allowed?
Reach max allowed?
no
no
Find matching route?
Find matching route?
no
no
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file From b1e2e5c05a16b42a2ba083377f06b45c68b622e7 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Tue, 14 Dec 2021 18:14:37 +0800 Subject: [PATCH 3/7] Remove unbound cache --- doc/flow_counters/routes_flow_counters.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/flow_counters/routes_flow_counters.md b/doc/flow_counters/routes_flow_counters.md index 18e2f3309f7..bf85806e2f5 100644 --- a/doc/flow_counters/routes_flow_counters.md +++ b/doc/flow_counters/routes_flow_counters.md @@ -95,10 +95,9 @@ A new class Route pattern orch shall be added to orchagent to handle route patte ##### Route Orch -Two new cache shall be added to Route Orch as data members: +A ew cache shall be added to Route Orch as data members: - Cache for those routes which match the prefix pattern and are bound to counters (Bound Cache). -- Cache for those routes which match the prefix pattern and are not bound to counters (UnBound Cache). Route Orch shall be extended to handle following cases: From 89e17276469a03996294f55e533a45d14b556b04 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Thu, 16 Dec 2021 10:51:35 +0800 Subject: [PATCH 4/7] Fix review comment --- .../route_flow_counter_disabled.svg | 2 +- .../route_flow_counter_enabled.svg | 2 +- doc/flow_counters/route_learned.svg | 2 +- doc/flow_counters/route_removed.svg | 2 +- doc/flow_counters/routes_flow_counters.md | 111 +++++++++++++----- .../user_set_max_allowed_match.svg | 4 + doc/flow_counters/user_set_route_pattern.svg | 2 +- 7 files changed, 88 insertions(+), 37 deletions(-) create mode 100644 doc/flow_counters/user_set_max_allowed_match.svg diff --git a/doc/flow_counters/route_flow_counter_disabled.svg b/doc/flow_counters/route_flow_counter_disabled.svg index a6cffa1c144..66eec38fb3b 100644 --- a/doc/flow_counters/route_flow_counter_disabled.svg +++ b/doc/flow_counters/route_flow_counter_disabled.svg @@ -1,4 +1,4 @@ -
Counter disabled
Counter disabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Unbind existing counters
Unbind existing coun...
Clear cache
Clear cache
yes
yes
no
no
Viewer does not support full SVG 1.1
\ No newline at end of file +
Counter disabled
Counter disabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Unbind existing counters
Unbind existing coun...
Clear both cache
Clear both cache
yes
yes
no
no
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_flow_counter_enabled.svg b/doc/flow_counters/route_flow_counter_enabled.svg index 81c7317c6ba..0a91e19da48 100644 --- a/doc/flow_counters/route_flow_counter_enabled.svg +++ b/doc/flow_counters/route_flow_counter_enabled.svg @@ -1,4 +1,4 @@ -
Counter enabled
Counter enabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Find matching route?
Find matching route?
Reach max allowed?
Reach max allowed?
Bind to counter
Bind to counter
Update bound cache
Update bound cache
yes
yes
no
no
no
no
no
no
yes
yes
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file +
Counter enabled
Counter enabled
Route pattern configured?
Route pattern configure...
Finish
Finish
Find matching route?
Find matching route?
Update unbound cache
Update unbound cache
Reach max allowed?
Reach max allowed?
Bind to counter
Bind to counter
Update bound cache
Update bound cache
yes
yes
no
no
no
no
no
no
yes
yes
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_learned.svg b/doc/flow_counters/route_learned.svg index 10f28a0dc71..b91032870c7 100644 --- a/doc/flow_counters/route_learned.svg +++ b/doc/flow_counters/route_learned.svg @@ -1,4 +1,4 @@ -
Route learned
Route learned
Route pattern configured?
Route pattern configure...
Finish
Finish
yes
yes
no
no
Bind to counter
Bind to counter
Match pattern?
Match pattern?
yes
yes
Reach max allowed?
Reach max allowed?
no
no
no
no
yes
yes
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
no
no
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file +
Route learned
Route learned
Route pattern configured?
Route pattern configure...
Finish
Finish
yes
yes
no
no
Bind to counter
Bind to counter
Match pattern?
Match pattern?
yes
yes
Reach max allowed?
Reach max allowed?
no
no
no
no
yes
yes
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
no
no
yes
yes
Update unbound cache
Update unbound cache
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/route_removed.svg b/doc/flow_counters/route_removed.svg index 37227c8a757..232c92520b0 100644 --- a/doc/flow_counters/route_removed.svg +++ b/doc/flow_counters/route_removed.svg @@ -1,4 +1,4 @@ -
Route removed
Route removed
Route pattern configured?
Route pattern configure...
Finish
Finish
no
no
Match pattern?
Match pattern?
yes
yes
no
no
yes
yes
no
no
In bound cache?
In bound cache?
yes
yes
Unbind counter
Unbind counter
Counter enabled?
Counter enabled?
yes
yes
no
no
Update bound cache
Update bound cache
Viewer does not support full SVG 1.1
\ No newline at end of file +
Route removed
Route removed
Route pattern configured?
Route pattern configure...
Finish
Finish
no
no
Match pattern?
Match pattern?
yes
yes
no
no
yes
yes
no
no
In bound cache?
In bound cache?
yes
yes
no
no
Unbind counter
Unbind counter
Counter enabled?
Counter enabled?
Update unbound cache
Update unbound cache
yes
yes
no
no
Unbound cache empty?
Unbound cache empty?
Update bound cache
Update bound cache
Fetch one unbound route and bind counter
Fetch one unbound ro...
Update both cache
Update both cache
Finish
Finish
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/routes_flow_counters.md b/doc/flow_counters/routes_flow_counters.md index bf85806e2f5..efd90db4d38 100644 --- a/doc/flow_counters/routes_flow_counters.md +++ b/doc/flow_counters/routes_flow_counters.md @@ -31,18 +31,15 @@ This document focus on route counter. - Generic Counters shall be used as Flow Counters introduced by the feature - CLI shall be used for configuration, showing and clearing of statistics -- Flow Counters for routes shall be configured using prefix patterns. The flow counter shall be bound to all routes matching the configured pattern (prefix:vrf) -- In Phase 1 the number of configured route patterns shall be limited to 1 (enforcement shall be done during configuration via CLI) +- Flow Counters for routes shall be configured using prefix patterns. The flow counter shall be bound to all routes matching the configured pattern (vrf:prefix). The VRF term can be skipped if it is default VRF. +- In Phase 1 the number of configured route patterns shall be limited to 2 (IPv4/IPv6 pattern) (enforcement shall be done during configuration via CLI) - In Phase 1 the number of matching routes shall be limited to the pre-configured value (default value - 30), after reboot it is not ensured that the same set of matching routes will be used for counting - Flow Counters shall be bound the matching routes regardless how these routes are added - manually (static) or via FRR - Statistics shall be configured (enabled/disabled) and cleared using the CLI commands - Statistics shall be provided as a number of hit/use of a specific resource and number of bytes in packets sent via configured routes -- When a prefix pattern is removed, Flow Counters on all routes matching the configured pattern shall be removed - Adding route entry shall be automatically bound to counter if counter is enabled and pattern matches - Removing route entry shall be automatically unbound if the entry is previously bound -- Removing route entry shall not trigger route pattern search -- Decreasing max allowed match count shall not trigger removing of existing bound counters -- Increasing max allowed match count shall not trigger route pattern search +- To support default route, pattern "0.0.0.0" and "::" shall be treated as exact match instead of pattern match ### Architecture Design @@ -51,7 +48,7 @@ Flow counter shall utilize the following existing infrastructure: - Generic Counters API - defined in https://github.com/opencomputeproject/SAI/blob/master/doc/SAI-Proposal-Generic-Counters.md and already supported by the SAI layer. This feature shall support binding/unbinding of these Generic counters to/from relevant SONIC objects - Flex Counters framework - used for background polling and pushing the statistic information to COUNTER DB for later use (e.g. by CLI). A introduction to flex counter can be found at: https://github.com/Azure/SONiC/pull/858. -![architecture](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_flow_counter_architecture.png). +![architecture](/doc/flow_counters/route_flow_counter_architecture.png). ### High-Level Design @@ -61,6 +58,10 @@ Changes shall be made to sonic-utilities, sonic-swss sub-modules to support this #### sonic-swss +##### SAI Capability Query + +orchagent shall query the SAI capability and save it to STATE DB so that CLI consumes the capability and tell user whether this feature is enabled on current platform. + ##### Flex Counter Orch A new flex counter group shall be added to this class: ROUTE_FLOW_COUNTER. Flex counter orch shall call Route orch to generate/clear flex counter if user enable/disable ROUTE_FLOW_COUNTER, this flow will be described in chapter [Route Orch](#route-orch) @@ -95,33 +96,38 @@ A new class Route pattern orch shall be added to orchagent to handle route patte ##### Route Orch -A ew cache shall be added to Route Orch as data members: +Two new caches shall be added to Route Orch as data members: - Cache for those routes which match the prefix pattern and are bound to counters (Bound Cache). +- Cache for those routes which match the prefix pattern and are not bound to counters (Unbound Cache). Route Orch shall be extended to handle following cases: 1. Route flow counter enabled -![route-flow-counter-enabled](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_flow_counter_enabled.svg). +![route-flow-counter-enabled](/doc/flow_counters/route_flow_counter_enabled.svg). 2. Route flow counter disabled -![route-flow-counter-disabled](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_flow_counter_disabled.svg). +![route-flow-counter-disabled](/doc/flow_counters/route_flow_counter_disabled.svg). 3. Route pattern created or updated. -![user-set-route-pattern](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/user_set_route_pattern.svg). +![user-set-route-pattern](/doc/flow_counters/user_set_route_pattern.svg). 4. Route pattern removed. Route orch shall unbind previous matched routes from counters and clear cache. 5. New route entry in ROUTE_TABLE. -![route-learned](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_learned.svg). +![route-learned](/doc/flow_counters/route_learned.svg). 6. Route entry removed from ROUTE_TABLE. -![route-removed](https://github.com/Junchao-Mellanox/SONiC/blob/route-flow-counter/doc/flow_counters/route_removed.svg). +![route-removed](/doc/flow_counters/route_removed.svg). + +7. Max allowed match count updated + +![max_allowed_updated](/doc/user_set_max_allowed_match.svg). For binding route entry to a counter: @@ -151,8 +157,8 @@ Example: ``` COUNTERS_ROUTE_NAME_MAP: { -"1.1.1.0/24:Vrf_default":"oid:0x1500000000034e" -"1.1.7.7/32:Vrf_default":"oid:0x1500000000035e" +"1.1.1.0/24":"oid:0x1500000000034e" +"Vrf_1:1.1.7.7/32":"oid:0x1500000000035e" } ``` @@ -168,8 +174,8 @@ Example: ``` COUNTERS_ROUTE_TO_PATTERN_MAP: { -"1.1.1.0/24:Vrf_default":"1.1.0.0/16:Vrf_default" -"1.1.7.7/32:Vrf_default":"1.1.0.0/16:Vrf_default" +"1.1.1.0/24":"1.1.0.0/16" +"Vrf_1:1.1.7.7/32":"Vrf_1:1.1.0.0/16" } ``` @@ -224,7 +230,7 @@ Example: admin@sonic:~$ counterpoll show Type Interval (in ms) Status -------------------------- ------------------ -------- -FLOW_CNT_ROUTE_STAT default(1000) disable +FLOW_CNT_ROUTE_STAT default(10000) disable ``` Config route pattern: @@ -232,10 +238,10 @@ Config route pattern: ``` config flowcnt-route pattern [--vrf ] [--max ] // configure route pattern Example: -admin@sonic:~$ config flowcnt-route pattern add --vrf Vrf_management --max 50 2.2.0.0/16 +admin@sonic:~$ config flowcnt-route pattern add --vrf Vrf_1 --max 50 2.2.0.0/16 Route Pattern Flow Counter configuration is successful -admin@sonic:~$ config flowcnt-route pattern remove --vrf Vrf_management 2.2.0.0/16 +admin@sonic:~$ config flowcnt-route pattern remove --vrf Vrf_1 2.2.0.0/16 Route Pattern Flow Counter configuration is successful ``` @@ -247,7 +253,7 @@ Example: admin@sonic:~$ show flowcnt-route config Route pattern VRF Max ----------------------------------------------- -3.3.0.0/16 Vrf_default 50 +3.3.0.0/16 default 50 ``` Show counters value: @@ -258,7 +264,7 @@ Example: admin@sonic:~$ show flowcnt-route stats Route pattern VRF Matched routes Packets Bytes -------------------------------------------------------------------------------------- -3.3.0.0/16 Vrf_default 3.3.1.0/24 100 4543 +3.3.0.0/16 default 3.3.1.0/24 100 4543 3.3.2.3/32 3443 929229 3.3.0.0/16 0 0 @@ -268,16 +274,16 @@ Example: admin@sonic:~$ show flowcnt-route stats pattern 3.3.0.0/16 Route pattern VRF Matched routes Packets Bytes -------------------------------------------------------------------------------------- -3.3.0.0/16 Vrf_default 3.3.1.0/24 100 4543 +3.3.0.0/16 default 3.3.1.0/24 100 4543 3.3.2.3/32 3443 929229 3.3.0.0/16 0 0 show flowcnt-route stats route [ [ --vrf ] ] // show statistics of the specific route matching the configured route pattern Example: -admin@sonic:~$ show flowcnt-route stats route 3.3.3.2/32 --vrf Vrf_management +admin@sonic:~$ show flowcnt-route stats route 3.3.3.2/32 --vrf Vrf_1 Route VRF Route Pattern Packets Bytes ----------------------------------------------------------------------------------------- -3.3.3.2/32 Vrf_management 3.3.0.0/16 100 4543 +3.3.3.2/32 Vrf_1 3.3.0.0/16 100 4543 ``` Clear counters: @@ -290,18 +296,18 @@ Route Flow Counters were successfully cleared sonic-clear flowcnt-route pattern [ [ --vrf ] ] // clear flow counters of all routes matching the configured route pattern Example: -admin@sonic:~$ sonic-clear flowcnt-route pattern 3.3.0.0/16 --vrf Vrf_management +admin@sonic:~$ sonic-clear flowcnt-route pattern 3.3.0.0/16 --vrf Vrf_1 Flow Counters of all routes matching the configured route pattern were successfully cleared sonic-clear flowcnt-route route [ [ --vrf ] ] // clear flow counters of the specific route matching the configured prefix Example: -admin@sonic:~$ sonic-clear flowcnt-route route 3.3.3.2/32 --vrf Vrf_management +admin@sonic:~$ sonic-clear flowcnt-route route 3.3.3.2/32 --vrf Vrf_1 Flow Counters of the specified route were successfully cleared ``` ##### YANG model -A new container shall be added to sonic-flex_counter.yang: +A new container of FLEX_COUNTER_TABLE shall be added to sonic-flex_counter.yang: ```yang ... @@ -310,6 +316,38 @@ container FLOW_CNT_ROUTE { leaf FLEX_COUNTER_STATUS { type flex_status; } + leaf FLEX_COUNTER_DELAY_STATUS { + type flex_delay_status; + } + leaf POLL_INTERVAL { + type poll_interval; + } +} +... +``` + +A new container FLOW_COUNTER_ROUTE_PATTERN_TABLE shall be added to sonic-flex_counter.yang: + +```yang +... +container FLOW_COUNTER_ROUTE_PATTERN_TABLE { + description "Flow counter route pattern of config_db.json"; + + list PATTERN_LIST { + + key "pattern"; + + leaf pattern { + type sonic-route-pattern; + } + + leaf max_match_count { + type uint32 { + range 1..50; + } + } + + } } ... ``` @@ -319,7 +357,7 @@ container FLOW_CNT_ROUTE { A new table FLOW_COUNTER_ROUTE_PATTERN_TABLE shall be added to CONFIG DB. ; Defines schema for route flow counter table - key = "FLOW_COUNTER_ROUTE_PATTERN_TABLE|prefix:vrf" ; Route pattern (prefix + vrf) + key = "FLOW_COUNTER_ROUTE_PATTERN_TABLE|vrf|prefix" ; Route pattern (vrf + prefix) ; field = value ... max_match_count = Integer ; Max allowed match count for this pattern, default 30, value range [1, 50] @@ -327,7 +365,11 @@ A new table FLOW_COUNTER_ROUTE_PATTERN_TABLE shall be added to CONFIG DB. Example: ``` -127.0.0.1:6379[4]> hgetall FLOW_COUNTER_ROUTE_PATTERN_TABLE|3.3.1.0/24:Vrf_management +127.0.0.1:6379[4]> hgetall FLOW_COUNTER_ROUTE_PATTERN_TABLE|Vrf_1|3.3.1.0/24 +1) "max_match_count" +2) "30" + +127.0.0.1:6379[4]> hgetall FLOW_COUNTER_ROUTE_PATTERN_TABLE|3.3.1.0/24 1) "max_match_count" 2) "30" ``` @@ -347,10 +389,15 @@ Example: ### Warmboot and Fastboot Design Impact As this is a debugging feature, basically, user should not enable this counter during warmboot or fastboot. -However, if user did it by mistake, there is already a mechanism that delays flex counter, nothing needs to be done here. See PR https://github.com/Azure/sonic-swss/pull/1877. +However, if user did it by mistake: + +- For fastboot, there is already a mechanism that delays flex counter, nothing needs to be done here. See PR https://github.com/Azure/sonic-swss/pull/1877. +- For warmboot, routeorch does not handle any DB change except the "resync" during warmboot, it means that route flow counter will not be enabled until warmboot finish. No change is required in this feature. + +Based on the above, this feature shall not introduce any delay in fastboot or warmboot, and this shall be verified by test. ### Restrictions/Limitations -N/A +SONiC supports a few different route types such as normal route, overlay route, srv6 route, but a vendor might not support all of them. So, whether a route can be bound to generic counter depends on vendor SAI implementation. If vendor SAI does not support a specific route type, the bound SAI call shall return an error, swss shall clear the resource associated to the generic counter. ### Testing Requirements/Design diff --git a/doc/flow_counters/user_set_max_allowed_match.svg b/doc/flow_counters/user_set_max_allowed_match.svg new file mode 100644 index 00000000000..b303cf11fb4 --- /dev/null +++ b/doc/flow_counters/user_set_max_allowed_match.svg @@ -0,0 +1,4 @@ + + + +
Max allowed change
Max allowed change
Update current value
Update current value
Counter enabled
Counter enabled
Finish
Finish
no
no
Greater than old?
Greater than old?
Unbound cache empty?
Unbound cache empty?
yes
yes
yes
yes
Fetch (current-old) unbound routes and bind to counter
Fetch (current-old)...
Update both cache
Update both cache
no
no
Bound cache size greater than current?
Bound cache size greate...
Finish
Finish
no
no
yes
yes
Fetch (size - current) bound routes and unbind
Fetch (size - curren...
yes
yes
no
no
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/flow_counters/user_set_route_pattern.svg b/doc/flow_counters/user_set_route_pattern.svg index 4b25f2bb37d..004797a0802 100644 --- a/doc/flow_counters/user_set_route_pattern.svg +++ b/doc/flow_counters/user_set_route_pattern.svg @@ -1,4 +1,4 @@ -
Route pattern set
Route pattern set
Route pattern exists?
Route pattern exists?
Unbind existing matching routes and clear cache
Unbind existing matc...
yes
yes
no
no
Bind to counter
Bind to counter
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
yes
yes
Finish
Finish
no
no
Reach max allowed?
Reach max allowed?
no
no
Find matching route?
Find matching route?
no
no
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file +
Route pattern set
Route pattern set
Route pattern exists?
Route pattern exists?
Unbind existing matching routes and clear cache
Unbind existing matc...
yes
yes
no
no
Bind to counter
Bind to counter
Update bound cache
Update bound cache
Counter enabled?
Counter enabled?
yes
yes
Finish
Finish
no
no
Reach max allowed?
Reach max allowed?
no
no
Update unbound cache
Update unbound cache
yes
yes
Find matching route?
Find matching route?
no
no
yes
yes
Viewer does not support full SVG 1.1
\ No newline at end of file From 9aaab5674d7045f18cdc3420b3ea1539e9b610f9 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Mon, 20 Dec 2021 10:35:43 +0800 Subject: [PATCH 5/7] Fix review comment --- .../route_flow_counter_architecture.png | Bin 79665 -> 103472 bytes doc/flow_counters/routes_flow_counters.md | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/flow_counters/route_flow_counter_architecture.png b/doc/flow_counters/route_flow_counter_architecture.png index cabae8b6b978dc7a036c8c77449412f6aa815532..8b0a74c1bc71d381f5b1973fe9699f2f991e3c91 100644 GIT binary patch literal 103472 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 VxRdPk25ArFhCS)>&^h$_{{T5q(og^Z literal 79665 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

LUMBX_`G5zKJx>i&NrDOyli3neWo!~NO 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:} and {:} to COUNTERS DB so that CLI knows how to display the statistic. +4. Save a new entry {|} and {|} to COUNTERS DB so that CLI knows how to display the statistic. For unbinding route entry from a counter: @@ -158,7 +158,7 @@ Example: ``` COUNTERS_ROUTE_NAME_MAP: { "1.1.1.0/24":"oid:0x1500000000034e" -"Vrf_1:1.1.7.7/32":"oid:0x1500000000035e" +"Vrf_1|1.1.7.7/32":"oid:0x1500000000035e" } ``` @@ -175,7 +175,7 @@ Example: ``` COUNTERS_ROUTE_TO_PATTERN_MAP: { "1.1.1.0/24":"1.1.0.0/16" -"Vrf_1:1.1.7.7/32":"Vrf_1:1.1.0.0/16" +"Vrf_1|1.1.7.7/32":"Vrf_1|1.1.0.0/16" } ``` From 71103176bff88f3e6d5ca82e899e25a40a365323 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Tue, 28 Dec 2021 13:48:54 +0800 Subject: [PATCH 6/7] Fix picture URL issue --- doc/flow_counters/routes_flow_counters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/flow_counters/routes_flow_counters.md b/doc/flow_counters/routes_flow_counters.md index f0c9645dda5..2a3e73c0088 100644 --- a/doc/flow_counters/routes_flow_counters.md +++ b/doc/flow_counters/routes_flow_counters.md @@ -127,7 +127,7 @@ Route Orch shall be extended to handle following cases: 7. Max allowed match count updated -![max_allowed_updated](/doc/user_set_max_allowed_match.svg). +![max_allowed_updated](/doc/flow_counters/user_set_max_allowed_match.svg). For binding route entry to a counter: From c81ec202a130fb19d5e4ba362df12687877796dd Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Fri, 14 Jan 2022 17:35:04 +0800 Subject: [PATCH 7/7] 1. add description about VNET; 2. adjust YANG model --- doc/flow_counters/routes_flow_counters.md | 44 ++++++++++++++++------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/doc/flow_counters/routes_flow_counters.md b/doc/flow_counters/routes_flow_counters.md index 2a3e73c0088..e52fd1e821c 100644 --- a/doc/flow_counters/routes_flow_counters.md +++ b/doc/flow_counters/routes_flow_counters.md @@ -31,7 +31,7 @@ This document focus on route counter. - Generic Counters shall be used as Flow Counters introduced by the feature - CLI shall be used for configuration, showing and clearing of statistics -- Flow Counters for routes shall be configured using prefix patterns. The flow counter shall be bound to all routes matching the configured pattern (vrf|prefix). The VRF term can be skipped if it is default VRF. +- Flow Counters for routes shall be configured using prefix patterns. The flow counter shall be bound to all routes matching the configured pattern (vrf|prefix). For VNET, the pattern shall be (vnet|prefix). The VRF term can be skipped if it is default VRF. - In Phase 1 the number of configured route patterns shall be limited to 2 (IPv4/IPv6 pattern) (enforcement shall be done during configuration via CLI) - In Phase 1 the number of matching routes for each pattern shall be limited to the pre-configured value (default value - 30, max value - 50)after reboot it is not ensured that the same set of matching routes will be used for counting - Flow Counters shall be bound the matching routes regardless how these routes are added - manually (static) or via FRR @@ -129,6 +129,10 @@ Route Orch shall be extended to handle following cases: ![max_allowed_updated](/doc/flow_counters/user_set_max_allowed_match.svg). +8. VRF/VNET create. Route orch shall search existing route pattern and create route flow counters if it matches the newly created VRF/VNET name. + +9. VRF/VNET remove. Route orch shall remove all the route flow counters and caches related to the removed VRF/VNET + For binding route entry to a counter: 1. Request Flow Counter Handler to create a generic counter @@ -206,6 +210,10 @@ SAI attributes shall be used in this feature: ##### CLI +``` +Note: for below CLI commands which has a "vrf" option, the vrf option can accept either a VRF name or a VNET name. +``` + Enable/disable configuration: ``` @@ -335,10 +343,19 @@ container FLOW_COUNTER_ROUTE_PATTERN_TABLE { list PATTERN_LIST { - key "pattern"; + key "vrf_name ip_prefix"; - leaf pattern { - type sonic-route-pattern; + leaf vrf_name { + type string { + length 0..16; + } + } + + leaf ip_prefix { + type union { + type stypes:sonic-ip4-prefix; + type stypes:sonic-ip6-prefix; + } } leaf max_match_count { @@ -349,6 +366,7 @@ container FLOW_COUNTER_ROUTE_PATTERN_TABLE { } } +/* end of container FLOW_COUNTER_ROUTE_PATTERN_TABLE */ ... ``` @@ -357,7 +375,7 @@ container FLOW_COUNTER_ROUTE_PATTERN_TABLE { A new table FLOW_COUNTER_ROUTE_PATTERN_TABLE shall be added to CONFIG DB. ; Defines schema for route flow counter table - key = "FLOW_COUNTER_ROUTE_PATTERN_TABLE|vrf|prefix" ; Route pattern (vrf + prefix) + key = "FLOW_COUNTER_ROUTE_PATTERN_TABLE|vrf|prefix" ; Route pattern (vrf/vnet + prefix) ; field = value ... max_match_count = Integer ; Max allowed match count for this pattern, default 30, value range [1, 50] @@ -392,7 +410,7 @@ As this is a debugging feature, basically, user should not enable this counter d However, if user did it by mistake: - For fastboot, there is already a mechanism that delays flex counter, nothing needs to be done here. See PR https://github.com/Azure/sonic-swss/pull/1877. -- For warmboot, routeorch does not handle any DB change except the "resync" during warmboot, it means that route flow counter will not be enabled until warmboot finish. No change is required in this feature. +- For warmboot, routeorch does not handle any DB change except the "resync" during warmboot, it means that route flow counter will not be enabled until warmboot finish. So, no change is required in this feature. Based on the above, this feature shall not introduce any delay in fastboot or warmboot, and this shall be verified by test. @@ -497,19 +515,16 @@ System test cases shall be implemented in sonic-mgmt. A few new test cases shall 1. TestRouteCounter::test_add_remove_route - Configure route pattern - Advertise route to DUT - - Send traffic that matches the route - - Verify the counter + - Verify the counter is created - Withdraw route - Verify the counter no longer exist 2. TestRouteCounter::test_update_route_pattern - Advertise route a and b to DUT - Configure route pattern that matches a - - Send traffic that matches both a and b - - Verify the counter only count packets count for a + - Verify the counter for a is created - Configure route pattern that matches b - - Send traffic that matches both a and b - - Verify the counter only count packets count for b + - Verify the counter for a is removed, verify the counter for b is created 3. TestRouteCounter::test_max_match_count - Advertise 3 routes to DUT @@ -520,3 +535,8 @@ System test cases shall be implemented in sonic-mgmt. A few new test cases shall - Verify that 2 counters are created - Configure max match count to 1 - Verify that 1 counter is created + +4. Extend existing test case to verify route flow counter for different route type: + - For bgp route, extend test_bgp_speaker_announce_routes and test_bgp_speaker_announce_routes_v6 + - For VNET route, extend test_vnet_vxlan + - For static route, extend test_static_route, test_static_route_v6, test_static_route_ecmp, test_static_route_ecmp_v6