From 04c06ffe0120270bcbde60b277c759c5af6dd238 Mon Sep 17 00:00:00 2001 From: Michael Miele Date: Tue, 20 Sep 2022 15:53:10 -0700 Subject: [PATCH] documentation-folder-reorg (#230) * sync-with-azure-dash (#8) * dash-holistic-view (#104) * draft document * Updated content and images * added image and updated content * fixed image * Update dash-architecture.md * Fixed image and caption * Update dash-architecture.md * added/reorganized images * Update dash-architecture.md * fixed image and content * Update dash-architecture.md * Update dash-hld-ecosystem.svg * Renamed file. * Update dash-hld-ecosystem.svg * Update dash-hld-ecosystem.svg * Update dash-architecture-view.md * Update dash-hld-ecosystem.svg * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * reorganized content * Update dash-architecture-view.md * Update dash-architecture-view.md * Fixed images and content based on feedback * move images, added captions, fixed content * Update dash-hld-project-ecosystem.svg * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md Fixed the "SONiC integration" section and linked to Prince's doc "dash-sonic-hld.md". * Update dash-architecture-view.md * fixed card opacity * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * Fixed image * fixed image * fixed image and related content * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md (#3) Merged in the PR: https://github.com/mmiele/DASH/pull/2. * Renamed article and added content. * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * renamed file * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * fixed formating * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * Fixed images * Fixed TOC * Update documentation/general/design/dash-holistic-view.md Co-authored-by: KrisNey-MSFT * Update documentation/general/design/dash-holistic-view.md Co-authored-by: KrisNey-MSFT * Apply suggestions from code review Co-authored-by: KrisNey-MSFT * Apply suggestions from code review Co-authored-by: KrisNey-MSFT * Updated content and added note * Fixed content * fixed metadata * Created .gitignore and removed bkp files * Fixed content based on feedback. * Fixed content based on feedback. Added links and special notes. Fixed image. * Fixed diagrams: using gNMI container instead of DASH container. * Fixed title and typos * Added reference links * Update documentation/general/design/dash-holistic-view.md Change committed. Co-authored-by: KrisNey-MSFT * Update dash-high-level-smart-switch.svg Changed "DASH container" name to "gNMI container". * Fixed image and moved `.gitignore` to the main folder. * Apply suggestions from code review Committed Kristina's suggestions. Co-authored-by: KrisNey-MSFT * Update dash-holistic-view.md Renamed the section API to "SAI headers and behavioral model". Added links to the related README files. * Removed old dash-high-level-design.md deleted dash-high-level-design.md renamed dash-holistic-view.md to dash-high-level-design.md * Added the list of words to generate the "word cloud". * Update README.md Reversed the link order and fixed descriptions. Co-authored-by: KrisNey-MSFT * Update dash-high-level-design.md * Update dash-high-level-design.md * Update dash-hld-project-ecosystem.svg * Update dash-high-level-design.md Co-authored-by: KrisNey-MSFT * Create sdn-packet-transforms-vm-to-vm.svg Edited Fast Path and Slow Path images * Reorganized dataplane folder. * Fixed links * Reorganized gnmi folder. * Reorganized encrypt-gw-service and express-route-service folders * Reorganized general folder * Fixed link * Reorganized high-avail folder. * Reorganized load-bal-service folder * Reorganized sai folder. * Reorganized stpl-service folder. * Reorganized vnet-peering-service folder. * Reorganized vnet-to-vnet-service folder. * Fixed reference links. * Fixed links to point to the reorganized folders. * Update vnet-to-vnet-service.md Updated metadata * Squashed commit of the following: commit 97001523a6cd34ab362899a8a09a1a11995ccbf2 Merge: 32332b5 d003f4e Author: Michael Miele Date: Sat Sep 17 16:43:45 2022 -0700 Merge branch 'Azure:main' into main commit d003f4e95fcf6438224782d3f1ee9e3aa53d17d5 Author: Chris Sommers <31145757+chrispsommers@users.noreply.github.com> Date: Fri Sep 16 22:43:03 2022 -0700 Upgrade to ixia-c 0.0.1-3383 (#226) * Upgrade to ixia-c 0.0.1-3383 which fixes hairpin mode and adds option to disable IPv6 at launch. Remove ./disable_veth_ipv6.sh from makefile after deploy-ixiac sincve it's not needed. (Keep it as prerequisite to running test-cases since we still need to prevent linux ICMP6 packets during tests.) * Update ixia-c traffic engine to match controller. * Update snappi version to match ixia-c-components. Co-authored-by: Chris Sommers commit 543df5c6076e73b2f3dcdff5b77738a6924627e3 Author: Ze Gan Date: Fri Sep 16 01:36:01 2022 +0800 [doc]: Fix the typo of TCP UDP protocol number (#223) According to: https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml, the ptotocol number of TCP should be 6, and the UDP's should be 17. commit 94b0168dfc6fb95cb74ac78c66d08ae146844cd8 Author: Chris Sommers <31145757+chrispsommers@users.noreply.github.com> Date: Wed Sep 14 10:27:22 2022 -0700 Slide deck for today's SAI Challenger presentation commit 10056d720075a3f47821ddb2eb1532291da53658 Author: KrisNey-MSFT Date: Mon Sep 12 16:33:36 2022 -0700 Update .wordlist.txt commit f1c5245cbfdadbdb464f439e21ac8da2ce86597b Author: KrisNey-MSFT Date: Mon Sep 12 16:31:16 2022 -0700 Fix Spelling (#221) * Update AMD-Pensando_HA_Proposal.md Explicitly add 'parallel' to state synchronization stages (per @lguohan ) * Update AMD-Pensando_HA_Proposal.md (#210) * SAI apigen support for tables with no action parameters and a single action (#207) * Update .wordlist.txt * Update AMD-Pensando_HA_Proposal.md * Doc dash as submodule (#203) * Document third-party workflows using DASH as a Git submodule. * Add URL to sample project. * Incorporate review feedback (typo; missing file). * Spellcheck fixes. * Spellcheck * Add .wordlist.txt to CI triggers. * Spellcheck wordlist. Co-authored-by: Chris Sommers * Split SAI API (#201) Make APIs compatible with SONiC bulk infra Signed-off-by: Marian Pritsak * Add APP_DB to SAI mapping (#102) * Add APP_DB to SAI mapping * Update .wordlist.txt Updating w/Chris Signed-off-by: Marian Pritsak Co-authored-by: Mukesh Moopath Velayudhan Co-authored-by: Chris Sommers <31145757+chrispsommers@users.noreply.github.com> Co-authored-by: Chris Sommers Co-authored-by: Marian Pritsak Signed-off-by: Marian Pritsak Co-authored-by: Mukesh Moopath Velayudhan Co-authored-by: Chris Sommers <31145757+chrispsommers@users.noreply.github.com> Co-authored-by: Chris Sommers Co-authored-by: Marian Pritsak commit 8694184e66357a7913e408c885d79f270a09459c Author: KrisNey-MSFT Date: Mon Sep 12 16:25:46 2022 -0700 Update program-scale-testing-requirements-draft.md Update Scale #'s per Keysight/MSFT call; document is a version which needs an update. commit 2ce121e36dd2eac5102659fc2b61a4a65d283a26 Author: Chris Sommers <31145757+chrispsommers@users.noreply.github.com> Date: Sun Sep 11 13:37:40 2022 -0700 Fix ipv6 packet noise (#211) * Ensure ipv6 disabled on veth's prior to PTF tests, fix https://github.com/Azure/DASH/issues/205. * CHange docker registrey for ixia-c to Google cloud (was Dockerhub). No functional change but new b uilds will pull new image into workspaces. * Move ipv6 disable code to a separate shell script. Call it after deploy-ixiac target. Co-authored-by: Chris Sommers commit e31982c903ed9919749636cf3f8e2f5872a25675 Author: Chris Sommers <31145757+chrispsommers@users.noreply.github.com> Date: Sun Sep 11 13:36:47 2022 -0700 Fix docker & Makefile perms (#202) * Incremental work on docker permissions fixes. * More progress on docker and make permissions issues. * Trial remove -u root from CI file. * Makefile and CI file perms * Fix CI docker flags * Final purge of obs sudo commands to fix perms. * Test for veth's before deleting. Co-authored-by: Chris Sommers commit 32332b5fc9529f46d3cfc82ff9f701e28318e564 Merge: 9f62724 6d1c50a Author: Michael Miele Date: Wed Sep 7 17:46:27 2022 -0700 Merge branch 'Azure:main' into main commit 9f62724a085ed3689ba10b0ed50567f2ffa4e8ac Merge: 9b51bb7 e5e461a Author: Michael Miele Date: Thu Aug 25 09:11:30 2022 -0700 Merge branch 'Azure:main' into main commit 9b51bb71fd07419aa1262b3f70ba70a2b64856c5 Merge: 54eca5a 3c15d95 Author: Michael Miele Date: Mon Jul 18 18:40:31 2022 -0700 Merge branch 'Azure:main' into main commit 54eca5afd335db682f4b7bf48bf92604ef591419 Merge: 30c65ab 7b5ce5e Author: Michael Miele Date: Tue Jun 28 12:10:45 2022 -0700 Merge branch 'Azure:main' into main commit 30c65abc597b74a5794f9cc8f287f0febebc820c Merge: 48ae39c c9612ff Author: Michael Miele Date: Mon Jun 20 10:27:44 2022 -0700 Merge branch 'Azure:main' into main commit 48ae39c02938448db833dfbe1eab882f39598a84 Merge: e4b3b64 49d9f2c Author: Michael Miele Date: Fri Jun 17 10:53:03 2022 -0700 Merge branch 'Azure:main' into main commit e4b3b64201bf6a9f720335928633624bbce89506 Merge: 4120634 231212b Author: Michael Miele Date: Tue Jun 14 13:39:40 2022 -0700 Merge branch 'Azure:main' into main commit 4120634dd88eb3f54e981d9214b162962fe0b9e8 Merge: b5c1700 a9ec96a Author: Michael Miele Date: Mon Jun 13 09:41:12 2022 -0700 Merge branch 'Azure:main' into main commit b5c1700d1ae4db498a897998a9f3b530ece65de7 Merge: f541d44 2e28aef Author: Michael Miele Date: Mon Jun 13 09:31:01 2022 -0700 Merge branch 'Azure:main' into main commit f541d444196cec0f33b1d778f417783a5ed04c78 Merge: 1927911 8433203 Author: Michael Miele Date: Wed Jun 8 13:40:39 2022 -0700 Merge branch 'Azure:main' into main commit 1927911b97780dca2751130a749785cdf750c005 Merge: 569c32a d0807c8 Author: Michael Miele Date: Tue May 31 13:49:13 2022 -0700 Merge branch 'Azure:main' into main commit 569c32a0c3e7d9673ae006c768806ac34aeb8263 Merge: d956391 e420737 Author: Michael Miele Date: Fri May 20 16:25:33 2022 -0700 Merge branch 'Azure:main' into main commit d956391410a0b2c738bd745a89eb4ebb133e4dc4 Author: KrisNey-MSFT Date: Tue May 10 16:34:33 2022 -0700 Create sdn-packet-transforms-vm-to-vm.svg Edited Fast Path and Slow Path images commit 18f88a4e535ba02c4d63d85889584b7efaca2dd9 Merge: b2c18a7 221c401 Author: Michael Miele Date: Mon May 9 08:48:29 2022 -0700 Merge branch 'Azure:main' into main commit b2c18a7981bb0ac9b2dcb62b07d898a3641d5d17 Author: Michael Miele Date: Mon May 9 08:47:53 2022 -0700 sync-with-azure-dash (#8) * dash-holistic-view (#104) * draft document * Updated content and images * added image and updated content * fixed image * Update dash-architecture.md * Fixed image and caption * Update dash-architecture.md * added/reorganized images * Update dash-architecture.md * fixed image and content * Update dash-architecture.md * Update dash-hld-ecosystem.svg * Renamed file. * Update dash-hld-ecosystem.svg * Update dash-hld-ecosystem.svg * Update dash-architecture-view.md * Update dash-hld-ecosystem.svg * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * reorganized content * Update dash-architecture-view.md * Update dash-architecture-view.md * Fixed images and content based on feedback * move images, added captions, fixed content * Update dash-hld-project-ecosystem.svg * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md Fixed the "SONiC integration" section and linked to Prince's doc "dash-sonic-hld.md". * Update dash-architecture-view.md * fixed card opacity * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * Fixed image * fixed image * fixed image and related content * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md (#3) Merged in the PR: https://github.com/mmiele/DASH/pull/2. * Renamed article and added content. * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * Update dash-architecture-view.md * renamed file * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * fixed formating * Update dash-holistic-view.md * Update dash-holistic-view.md * Update dash-holistic-view.md * Fixed images * Fixed TOC * Update documentation/general/design/dash-holistic-view.md Co-authored-by: KrisNey-MSFT * Update documentation/general/design/dash-holistic-view.md Co-authored-by: KrisNey-MSFT * Apply suggestions from code review Co-authored-by: KrisNey-MSFT * Apply suggestions from code review Co-authored-by: KrisNey-MSFT * Updated content and added note * Fixed content * fixed metadata * Created .gitignore and removed bkp files * Fixed content based on feedback. * Fixed content based on feedback. Added links and special notes. Fixed image. * Fixed diagrams: using gNMI container instead of DASH container. * Fixed title and typos * Added reference links * Update documentation/general/design/dash-holistic-view.md Change committed. Co-authored-by: KrisNey-MSFT * Update dash-high-level-smart-switch.svg Changed "DASH container" name to "gNMI container". * Fixed image and moved `.gitignore` to the main folder. * Apply suggestions from code review Committed Kristina's suggestions. Co-authored-by: KrisNey-MSFT * Update dash-holistic-view.md Renamed the section API to "SAI headers and behavioral model". Added links to the related README files. * Removed old dash-high-level-design.md deleted dash-high-level-design.md renamed dash-holistic-view.md to dash-high-level-design.md * Added the list of words to generate the "word cloud". * Update README.md Reversed the link order and fixed descriptions. Co-authored-by: KrisNey-MSFT * Update dash-high-level-design.md * Update dash-high-level-design.md * Update dash-hld-project-ecosystem.svg * Update dash-high-level-design.md Co-authored-by: KrisNey-MSFT * Update vnet-to-vnet-service.md Updated metadata. * Update vnet-to-vnet-service.md Update date * Update vnet-to-vnet-service.md Changed date * Update vnet-to-vnet-service.md Fixed date * Update vnet-to-vnet-service.md Updated * Update vnet-to-vnet-service.md Fixed date * Create dash-sonic-hld.md Sync with main * Create program-scale-testing-requirements-draft.md Sync with main * Create AMD-Pensando_HA_Proposal.md Sync with main * Update vnet-to-vnet-service.md Update * Delete dash-sonic-hld.md Reorganized general folder. * Delete program-scale-testing-requirements-draft.md Reorganized general folder. * Update README.md Removed the section "Organization of Design & Requirements Documents" because it is obsolete. * Delete AMD-Pensando_HA_Proposal.md Removed design folder. * Fixed broken links * Fixed links and removed obsolete one. * Removed obsolete links. * Update README.md Removed obsolete link. * Update README.md Removed obsolete links. * Removed obsolete links Co-authored-by: KrisNey-MSFT --- documentation/README.md | 58 +- documentation/dataplane/README.md | 20 +- .../{design => }/dash-config-schema-json.md | 0 .../{design => }/dash-update-timing.md | 0 documentation/dataplane/design/README.md | 13 - .../dataplane/requirements/README.md | 12 - documentation/encrypt-gw-service/README.md | 16 +- .../encrypt-gw-service/design/README.md | 10 - .../encrypt-gw-service/requirements/README.md | 10 - documentation/express-route-service/README.md | 16 +- .../express-route-service/design/README.md | 10 - .../requirements/README.md | 10 - documentation/general/README.md | 27 +- .../dash-general-compliance-requirements.md | 11 +- .../dash-handling-fragmented-packets.md | 0 .../{design => }/dash-high-level-design.md | 111 +- .../general/{design => }/dash-sonic-hld.md | 2 +- documentation/general/design/README.md | 18 - .../images/dash-hld-eni-objects.svg | 0 ...hld-inbound-packet-processing-pipeline.svg | 0 ...ld-outbound-packet-processing-pipeline.svg | 0 .../images/dash-hld-outbound-vni.svg | 0 .../images/dash-hld-vnet-objects.svg | 0 ...simplified-physical-deployment-example.svg | 0 .../{design => }/images/dash-words-cloud.png | Bin .../hld/dash-appliance-architecture.svg | 0 .../images/hld/dash-high-level-appliance.svg | 0 .../hld/dash-high-level-design-schema.svg | 0 .../images/hld/dash-high-level-design.svg | 0 .../hld/dash-high-level-smart-switch.svg | 0 .../images/hld/dash-hld-project-ecosystem.svg | 0 .../images/hld/dash-hld-software-stack.svg | 0 .../hld/dash-single-dpu-architecture.svg | 0 .../hld/dash-smart-switch-architecture.svg | 0 .../images/in_slow_path_no_flow_match.png | Bin .../images/inb_fast_path_flow_match.png | Bin .../{design => }/images/inbound_frm_ilb.png | Bin .../images/out_fast_path_flow_match.png | Bin .../out_slow_path_pol_eval_no_flow_match.png | Bin .../{design => }/images/outbound_nat_l4.png | Bin .../images/packet-flow-in-flow-match.svg | 0 .../{design => }/images/private_link.png | Bin .../images/private_link_service.png | Bin ...v-4m-stream-4-fin-ack-tx-cps-100sec-02.png | Bin ...v-4m-stream-6-ack-fin-rx-cps-100sec-01.png | Bin ...v-4m-stream-6-ack-fin-rx-cps-100sec-02.png | Bin .../images => images/req}/cps-streams.png | Bin .../req}/learning-streams.png | Bin .../req}/msft-8v-1m-rx-bw-port1-100sec-01.png | Bin .../req}/msft-8v-1m-rx-bw-port1-100sec-02.png | Bin ...msft-8v-1m-rx-pps-64pkt-flow-100sec-01.png | Bin ...msft-8v-1m-rx-pps-64pkt-flow-100sec-02.png | Bin .../req}/msft-8v-1m-rx-pps-learning-01.png | Bin .../req}/msft-8v-1m-rx-pps-learning-02.png | Bin .../req}/msft-8v-1m-tx-bw-port1-100sec-01.png | Bin .../req}/msft-8v-1m-tx-bw-port1-100sec-02.png | Bin ...msft-8v-1m-tx-pps-64pkt-flow-100sec-01.png | Bin ...msft-8v-1m-tx-pps-64pkt-flow-100sec-02.png | Bin .../req}/msft-8v-1m-tx-pps-learning-01.png | Bin .../req}/msft-8v-1m-tx-pps-learning-02.png | Bin ...ft-8v-4m-stream-1-syn-tx-cps-100sec-01.png | Bin ...ft-8v-4m-stream-1-syn-tx-cps-100sec-02.png | Bin ...v-4m-stream-2-syn-ack-rx-cps-100sec-01.png | Bin ...v-4m-stream-2-syn-ack-rx-cps-100sec-02.png | Bin ...ft-8v-4m-stream-3-ack-tx-cps-100sec-01.png | Bin ...ft-8v-4m-stream-3-ack-tx-cps-100sec-02.png | Bin ...v-4m-stream-4-fin-ack-rx-cps-100sec-01.png | Bin ...v-4m-stream-4-fin-ack-rx-cps-100sec-02.png | Bin ...v-4m-stream-4-fin-ack-tx-cps-100sec-01.png | Bin ...v-4m-stream-4-fin-ack-tx-cps-100sec-02.png | Bin ...v-4m-stream-6-ack-fin-rx-cps-100sec-02.png | Bin .../req}/msft-lab-ixia-config-01.png | Bin .../req}/msft-lab-ixia-config-02.png | Bin .../{design => }/images/sdn-appliance.svg | 0 .../{design => }/images/sdn-high-cps.svg | 0 .../images/sdn/eni-match-flow-direction.svg | 0 .../images/sdn/inbound-fast-path-flow.svg | 0 .../images/sdn/inbound-slow-path-flow.svg | 0 .../images/sdn/outbound-fast-path-flow.svg | 0 .../images/sdn/outbound-slow-path-flow.svg | 0 .../sdn-packet-transforms-inbound-from-lb.svg | 0 .../sdn-packet-transforms-outbound-nat-l4.svg | 0 ...packet-transforms-private-link-service.svg | 0 .../sdn-packet-transforms-private-link.svg | 0 ...dn-packet-transforms-service-tunneling.svg | 0 ...t-transforms-vm-internal-load-balancer.svg | 0 .../sdn/sdn-packet-transforms-vm-to-vm.svg | 0 .../images/sdn/sdn-virtual-port.svg | 0 .../{design => }/images/service_tunneling.png | Bin .../images/tcp-connection-abort.svg | 0 .../images/tcp-connection-create.svg | 0 .../images/tcp-connection-delete.svg | 0 .../general/{design => }/images/vm_to_ilb.png | Bin .../general/{design => }/images/vm_to_vm.png | Bin .../general/{design => }/images/vport.png | Bin ...rogram-scale-testing-requirements-draft.md | 62 +- documentation/general/requirements/README.md | 14 - .../sdn-features-packet-transforms.md | 61 +- .../sdn-pipeline-basic-elements.md | 5 +- documentation/gnmi/README.md | 18 +- .../dash-reference-config-example.md | 0 documentation/gnmi/design/README.md | 13 - documentation/gnmi/requirements/README.md | 13 - .../{design => }/AMD-Pensando_HA_Proposal.md | 1446 ++++++++--------- .../{design => }/AMD_Pensando_HA_Overview.pdf | Bin documentation/high-avail/README.md | 19 +- documentation/high-avail/design/README.md | 15 - .../high-availability-and-scale.md | 0 .../{design => }/images/channels.003.png | Bin .../{design => }/images/dash-ha-appliance.svg | 0 .../images/dash-ha-smart-switch.svg | 0 .../images/dp_repl_packet.005.png | Bin .../{design => }/images/dpreplication.004.png | Bin .../images/ha-functional-diag.svg | 0 .../images/ha-state-sync-packet-format.svg | 0 .../images/ha-sync-operations.svg | 0 .../{design => }/images/ha_sm.006.png | Bin .../{design => }/images/node_pairing.007.png | Bin .../images/planned_switchover.009.jpeg | Bin .../{design => }/images/terminology.001.png | Bin .../{design => }/images/topology.002.jpeg | Bin .../traffic-flow-has-scale-appliance.png | Bin .../images/unplanned_switchover.008.png | Bin .../high-avail/requirements/README.md | 13 - documentation/high-avail/slides/README.md | 4 - .../xsight-labs-ha-proposal-new-ideas.md | 0 .../xsight-labs-ha-proposal-v1.md | 4 +- documentation/images/README.md | 4 +- documentation/load-bal-service/README.md | 17 +- .../load-bal-service/design/README.md | 11 - .../{design => }/images/ICMP-redirect.png | Bin .../{design => }/images/TCP-handshake.png | Bin .../images/after-ICMP-redirect.png | Bin .../images/load-balancer-architecture.png | Bin .../{design => }/images/packet-transform.png | Bin .../{design => }/load-balancer-v3.md | 0 .../load-bal-service/requirements/README.md | 10 - .../{design => }/DASH-apis-rough-draft.xlsx | Bin documentation/sai/README.md | 16 +- documentation/sai/design/README.md | 13 - documentation/sai/requirements/README.md | 12 - documentation/stpl-service/README.md | 16 +- documentation/stpl-service/design/README.md | 10 - .../stpl-service/requirements/README.md | 10 - documentation/vnet-peering-service/README.md | 16 +- .../vnet-peering-service/design/README.md | 10 - .../requirements/README.md | 10 - documentation/vnet2vnet-service/README.md | 17 +- .../vnet2vnet-service/design/README.md | 13 - ...et-pipeline-processing-per-eni-inbound.svg | 0 ...t-pipeline-processing-per-eni-outbound.svg | 0 .../packet-processing-pipeline-example.png | Bin ...ket-processing-pipeline-tables-example.svg | 0 ...ansforms-vm-to-vm-in-vnet-without-dash.svg | 0 .../images/routing-packet-10.1.0.1.svg | 0 .../images/routing-packet-10.1.1.1.svg | 0 .../images/routing-packet-10.2.5.1.svg | 0 .../images/routing-packet-30.0.0.1.svg | 0 .../images/vm-to-vm-communication-vnet.svg | 0 .../vnet2vnet-service/requirements/README.md | 12 - .../{design => }/vnet-to-vnet-service.md | 16 +- 161 files changed, 989 insertions(+), 1255 deletions(-) rename documentation/dataplane/{design => }/dash-config-schema-json.md (100%) rename documentation/dataplane/{design => }/dash-update-timing.md (100%) delete mode 100644 documentation/dataplane/design/README.md delete mode 100644 documentation/dataplane/requirements/README.md delete mode 100644 documentation/encrypt-gw-service/design/README.md delete mode 100644 documentation/encrypt-gw-service/requirements/README.md delete mode 100644 documentation/express-route-service/design/README.md delete mode 100644 documentation/express-route-service/requirements/README.md rename documentation/general/{requirements => }/dash-general-compliance-requirements.md (86%) rename documentation/general/{design => }/dash-handling-fragmented-packets.md (100%) rename documentation/general/{design => }/dash-high-level-design.md (88%) rename documentation/general/{design => }/dash-sonic-hld.md (99%) delete mode 100644 documentation/general/design/README.md rename documentation/general/{design => }/images/dash-hld-eni-objects.svg (100%) rename documentation/general/{design => }/images/dash-hld-inbound-packet-processing-pipeline.svg (100%) rename documentation/general/{design => }/images/dash-hld-outbound-packet-processing-pipeline.svg (100%) rename documentation/general/{design => }/images/dash-hld-outbound-vni.svg (100%) rename documentation/general/{design => }/images/dash-hld-vnet-objects.svg (100%) rename documentation/general/{design => }/images/dash-simplified-physical-deployment-example.svg (100%) rename documentation/general/{design => }/images/dash-words-cloud.png (100%) rename documentation/general/{design => }/images/hld/dash-appliance-architecture.svg (100%) rename documentation/general/{design => }/images/hld/dash-high-level-appliance.svg (100%) rename documentation/general/{design => }/images/hld/dash-high-level-design-schema.svg (100%) rename documentation/general/{design => }/images/hld/dash-high-level-design.svg (100%) rename documentation/general/{design => }/images/hld/dash-high-level-smart-switch.svg (100%) rename documentation/general/{design => }/images/hld/dash-hld-project-ecosystem.svg (100%) rename documentation/general/{design => }/images/hld/dash-hld-software-stack.svg (100%) rename documentation/general/{design => }/images/hld/dash-single-dpu-architecture.svg (100%) rename documentation/general/{design => }/images/hld/dash-smart-switch-architecture.svg (100%) rename documentation/general/{design => }/images/in_slow_path_no_flow_match.png (100%) rename documentation/general/{design => }/images/inb_fast_path_flow_match.png (100%) rename documentation/general/{design => }/images/inbound_frm_ilb.png (100%) rename documentation/general/{design => }/images/out_fast_path_flow_match.png (100%) rename documentation/general/{design => }/images/out_slow_path_pol_eval_no_flow_match.png (100%) rename documentation/general/{design => }/images/outbound_nat_l4.png (100%) rename documentation/general/{design => }/images/packet-flow-in-flow-match.svg (100%) rename documentation/general/{design => }/images/private_link.png (100%) rename documentation/general/{design => }/images/private_link_service.png (100%) rename documentation/general/{requirements/images => images/req}/[msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/cps-streams.png (100%) rename documentation/general/{requirements/images => images/req}/learning-streams.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-rx-bw-port1-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-rx-bw-port1-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-rx-pps-64pkt-flow-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-rx-pps-64pkt-flow-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-rx-pps-learning-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-rx-pps-learning-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-tx-bw-port1-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-tx-bw-port1-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-tx-pps-64pkt-flow-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-tx-pps-64pkt-flow-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-tx-pps-learning-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-1m-tx-pps-learning-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-1-syn-tx-cps-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-1-syn-tx-cps-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-3-ack-tx-cps-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-3-ack-tx-cps-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png (100%) rename documentation/general/{requirements/images => images/req}/msft-lab-ixia-config-01.png (100%) rename documentation/general/{requirements/images => images/req}/msft-lab-ixia-config-02.png (100%) rename documentation/general/{design => }/images/sdn-appliance.svg (100%) rename documentation/general/{design => }/images/sdn-high-cps.svg (100%) rename documentation/general/{design => }/images/sdn/eni-match-flow-direction.svg (100%) rename documentation/general/{design => }/images/sdn/inbound-fast-path-flow.svg (100%) rename documentation/general/{design => }/images/sdn/inbound-slow-path-flow.svg (100%) rename documentation/general/{design => }/images/sdn/outbound-fast-path-flow.svg (100%) rename documentation/general/{design => }/images/sdn/outbound-slow-path-flow.svg (100%) rename documentation/general/{design => }/images/sdn/sdn-packet-transforms-inbound-from-lb.svg (100%) rename documentation/general/{design => }/images/sdn/sdn-packet-transforms-outbound-nat-l4.svg (100%) rename documentation/general/{design => }/images/sdn/sdn-packet-transforms-private-link-service.svg (100%) rename documentation/general/{design => }/images/sdn/sdn-packet-transforms-private-link.svg (100%) rename documentation/general/{design => }/images/sdn/sdn-packet-transforms-service-tunneling.svg (100%) rename documentation/general/{design => }/images/sdn/sdn-packet-transforms-vm-internal-load-balancer.svg (100%) rename documentation/general/{design => }/images/sdn/sdn-packet-transforms-vm-to-vm.svg (100%) rename documentation/general/{design => }/images/sdn/sdn-virtual-port.svg (100%) rename documentation/general/{design => }/images/service_tunneling.png (100%) rename documentation/general/{design => }/images/tcp-connection-abort.svg (100%) rename documentation/general/{design => }/images/tcp-connection-create.svg (100%) rename documentation/general/{design => }/images/tcp-connection-delete.svg (100%) rename documentation/general/{design => }/images/vm_to_ilb.png (100%) rename documentation/general/{design => }/images/vm_to_vm.png (100%) rename documentation/general/{design => }/images/vport.png (100%) rename documentation/general/{requirements => }/program-scale-testing-requirements-draft.md (88%) delete mode 100644 documentation/general/requirements/README.md rename documentation/general/{design => }/sdn-features-packet-transforms.md (93%) rename documentation/general/{design => }/sdn-pipeline-basic-elements.md (99%) rename documentation/gnmi/{design => }/dash-reference-config-example.md (100%) delete mode 100644 documentation/gnmi/design/README.md delete mode 100644 documentation/gnmi/requirements/README.md rename documentation/high-avail/{design => }/AMD-Pensando_HA_Proposal.md (97%) rename documentation/high-avail/{design => }/AMD_Pensando_HA_Overview.pdf (100%) delete mode 100644 documentation/high-avail/design/README.md rename documentation/high-avail/{design => }/high-availability-and-scale.md (100%) rename documentation/high-avail/{design => }/images/channels.003.png (100%) rename documentation/high-avail/{design => }/images/dash-ha-appliance.svg (100%) rename documentation/high-avail/{design => }/images/dash-ha-smart-switch.svg (100%) rename documentation/high-avail/{design => }/images/dp_repl_packet.005.png (100%) rename documentation/high-avail/{design => }/images/dpreplication.004.png (100%) rename documentation/high-avail/{design => }/images/ha-functional-diag.svg (100%) rename documentation/high-avail/{design => }/images/ha-state-sync-packet-format.svg (100%) rename documentation/high-avail/{design => }/images/ha-sync-operations.svg (100%) rename documentation/high-avail/{design => }/images/ha_sm.006.png (100%) rename documentation/high-avail/{design => }/images/node_pairing.007.png (100%) rename documentation/high-avail/{design => }/images/planned_switchover.009.jpeg (100%) rename documentation/high-avail/{design => }/images/terminology.001.png (100%) rename documentation/high-avail/{design => }/images/topology.002.jpeg (100%) rename documentation/high-avail/{design => }/images/traffic-flow-has-scale-appliance.png (100%) rename documentation/high-avail/{design => }/images/unplanned_switchover.008.png (100%) delete mode 100644 documentation/high-avail/requirements/README.md rename documentation/high-avail/{design => }/xsight-labs-ha-proposal-new-ideas.md (100%) rename documentation/high-avail/{design => }/xsight-labs-ha-proposal-v1.md (98%) delete mode 100644 documentation/load-bal-service/design/README.md rename documentation/load-bal-service/{design => }/images/ICMP-redirect.png (100%) rename documentation/load-bal-service/{design => }/images/TCP-handshake.png (100%) rename documentation/load-bal-service/{design => }/images/after-ICMP-redirect.png (100%) rename documentation/load-bal-service/{design => }/images/load-balancer-architecture.png (100%) rename documentation/load-bal-service/{design => }/images/packet-transform.png (100%) rename documentation/load-bal-service/{design => }/load-balancer-v3.md (100%) delete mode 100644 documentation/load-bal-service/requirements/README.md rename documentation/sai/{design => }/DASH-apis-rough-draft.xlsx (100%) delete mode 100644 documentation/sai/design/README.md delete mode 100644 documentation/sai/requirements/README.md delete mode 100644 documentation/stpl-service/design/README.md delete mode 100644 documentation/stpl-service/requirements/README.md delete mode 100644 documentation/vnet-peering-service/design/README.md delete mode 100644 documentation/vnet-peering-service/requirements/README.md delete mode 100644 documentation/vnet2vnet-service/design/README.md rename documentation/vnet2vnet-service/{design => }/images/packet-pipeline-processing-per-eni-inbound.svg (100%) rename documentation/vnet2vnet-service/{design => }/images/packet-pipeline-processing-per-eni-outbound.svg (100%) rename documentation/vnet2vnet-service/{design => }/images/packet-processing-pipeline-example.png (100%) rename documentation/vnet2vnet-service/{design => }/images/packet-processing-pipeline-tables-example.svg (100%) rename documentation/vnet2vnet-service/{design => }/images/packet-transforms-vm-to-vm-in-vnet-without-dash.svg (100%) rename documentation/vnet2vnet-service/{design => }/images/routing-packet-10.1.0.1.svg (100%) rename documentation/vnet2vnet-service/{design => }/images/routing-packet-10.1.1.1.svg (100%) rename documentation/vnet2vnet-service/{design => }/images/routing-packet-10.2.5.1.svg (100%) rename documentation/vnet2vnet-service/{design => }/images/routing-packet-30.0.0.1.svg (100%) rename documentation/vnet2vnet-service/{design => }/images/vm-to-vm-communication-vnet.svg (100%) delete mode 100644 documentation/vnet2vnet-service/requirements/README.md rename documentation/vnet2vnet-service/{design => }/vnet-to-vnet-service.md (95%) diff --git a/documentation/README.md b/documentation/README.md index 2053ff22a..0101ed62a 100644 --- a/documentation/README.md +++ b/documentation/README.md @@ -1,4 +1,3 @@ -[[ << Back to DASH top-level README ](../README.md)] # DASH Documentation Documentation comprises system descriptions, High-level design (HLD) documents and detailed compliance requirements. These are contained in the [DASH/documentation](./) directory and subdirectories. @@ -8,50 +7,33 @@ The testing framework, methodology, documentation and testing artifacts are stor See also DASH [FAQ](https://github.com/Azure/DASH/wiki/FAQ) and [Glossary](https://github.com/Azure/DASH/wiki/Glossary). # Contents + ## Baseline Specifications and Requirements + All DASH devices shall conform to the following design specifications and compliance requirements: -| Topic | Links to Folders | -| ------- | ---------| -| General Architecture and Requirements| [Parent Folder](general/README.md) \| [ Design](general/design/README.md) \| [Compliance Requirements](general/requirements/README.md)| -| Data plane | [Parent Folder](dataplane/README.md) \| [ Design](dataplane/design/README.md) \| [Compliance Requirements](dataplane/requirements/README.md)| -| High-Availability (HA) | [Parent Folder](high-avail/README.md) \| [ Design](high-avail/design/README.md) \| [Compliance Requirements](high-avail/requirements/README.md)| -| gNMI Northbound API | [Parent Folder](gnmi/README.md) \| [ Design](gnmi/design/README.md) \| [Compliance Requirements](gnmi/requirements/README.md)| -| SAI Southbound API | [Parent Folder](sai/README.md) \| [ Design](sai/design/README.md) \| [Compliance Requirements](sai/requirements/README.md)| +| Topic | Documents | +| ------------------------------------- | --------------------------------------------| +| General Architecture and Requirements | [DASH general](./general/README.md)| | +| Data plane | [Data plane](./dataplane/README.md) | +| High-Availability (HA) | [High-Availability](./high-avail/README.md) | +| gNMI Northbound API | [gNMI Northbound API](./gnmi/README.md) | +| SAI Southbound API | [SAI Southbound API](./sai/README.md) | ## Service Specifications and Requirements + DASH devices may implement one or more of the following services. + They shall conform to each service's design specifications and compliance requirements. -| Topic | Links to Folders | -| ------- | ---------| -| Load Balancer Service | [Parent Folder](load-bal-service/README.md) \| [ Design](load-bal-service/design/README.md) \| [Compliance Requirements](load-bal-service/requirements/README.md)| -| VNET-to-VNET Service | [Parent Folder](vnet2vnet-service/README.md) \| [ Design](vnet2vnet-service/design/README.md) \| [Compliance Requirements](vnet2vnet-service/requirements/README.md)| -| Service Tunnel & Private Link Service | [Parent Folder](stpl-service/README.md) \| [ Design](stpl-service/design/README.md) \| [Compliance Requirements](stpl-service/requirements/README.md)| -| VNET Peering Service | [Parent Folder](vnet-peering-service/README.md) \| [ Design](vnet-peering-service/design/README.md) \| [Compliance Requirements](vnet-peering-service/requirements/README.md)| -| Express Route (ER) Service | [Parent Folder](express-route-service/README.md) \| [ Design](express-route-service/design/README.md) \| [Compliance Requirements](express-route-service/requirements/README.md)| -| Encryption Gateway Service | [Parent Folder](encrypt-gw-service/README.md) \| [ Design](encrypt-gw-service/design/README.md) \| [Compliance Requirements](encrypt-gw-service/requirements/README.md)| - - -# Organization of Design & Requirements Documents -Documentation consists of separate, but related *System Descriptions* (HLDs, architecture, theory of operations, etc.) and *Compliance Requirements* (hard specifications, typically numerical but also behavioral). These two types of documents are deliberately kept separated, see [Relationships and Flow of Documents](#relationships-and-flow-of-documents). - -Documentation is organized into folders as follows. Each feature or topic has all the high-level specs and the compliance requirements in the same parent folder, e.g. General, High-Availability, etc., making it easier to access related information about one topic. As the complexity grows, this helps keep things organized according to "functional topic." -``` -topic1 - design - topic1 High-level Descriptions and architecture - requirements - topic1 compliance Requirements - -topic2 - design - topic2 High-level Descriptions - requirements - topic2 compliance Requirements - -etc -... -``` + +| Topic | Documents | +| --------------------------------------| ------------------------------------------------------------------| +| Load Balancer Service | [Load Balancer Service](./load-bal-service/README.md) | +| VNET-to-VNET Service | [VNET-to-VNET Service](./vnet2vnet-service/README.md) | +| Service Tunnel & Private Link Service | [Service Tunnel & Private Link Service](./stpl-service/README.md) | +| VNET Peering Service | [VNET Peering Service ](./vnet-peering-service/README.md) | +| Express Route (ER) Service | [Express Route (ER) Service](./express-route-service/README.md) | +| Encryption Gateway Service | [Encryption Gateway Service](./encrypt-gw-service/README.md) | # Relationships and Flow of Documents The diagram below shows how High-Level Descriptions beget Compliance requirements, compliance requirements beget test cases, and test cases are executed by test scripts to produce Test Results. diff --git a/documentation/dataplane/README.md b/documentation/dataplane/README.md index c4775ec8d..03dc75736 100644 --- a/documentation/dataplane/README.md +++ b/documentation/dataplane/README.md @@ -1,11 +1,17 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] - # DASH Data plane Documents + This folder contains DASH data plane design and requirements documents. -# Contents +## Design + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | +|[dash-update-timing.md](dash-update-timing.md) |Routing, ACL, Mapping Updates (WIP) | +|[dash-config-schema-json.md](dash-config-schema-json.md) |Configuration schema example | + + + +## Requirements -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH Data plane design & architecture documents | -| [requirements](requirements/README.md) | DASH Data plane requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/dataplane/design/dash-config-schema-json.md b/documentation/dataplane/dash-config-schema-json.md similarity index 100% rename from documentation/dataplane/design/dash-config-schema-json.md rename to documentation/dataplane/dash-config-schema-json.md diff --git a/documentation/dataplane/design/dash-update-timing.md b/documentation/dataplane/dash-update-timing.md similarity index 100% rename from documentation/dataplane/design/dash-update-timing.md rename to documentation/dataplane/dash-update-timing.md diff --git a/documentation/dataplane/design/README.md b/documentation/dataplane/design/README.md deleted file mode 100644 index c50d6337b..000000000 --- a/documentation/dataplane/design/README.md +++ /dev/null @@ -1,13 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH Data plane Design Documents - -This folder contains DASH data plane design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | -|[dash-update-timing.md](dash-update-timing.md)|Routing, ACL, Mapping Updates (WIP)| diff --git a/documentation/dataplane/requirements/README.md b/documentation/dataplane/requirements/README.md deleted file mode 100644 index 810e051a2..000000000 --- a/documentation/dataplane/requirements/README.md +++ /dev/null @@ -1,12 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH Data plane Requirements Documents - -This folder contains DASH data plane compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/encrypt-gw-service/README.md b/documentation/encrypt-gw-service/README.md index 426d8fff2..264913705 100644 --- a/documentation/encrypt-gw-service/README.md +++ b/documentation/encrypt-gw-service/README.md @@ -1,10 +1,14 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] +# DASH Encryption Gateway Service Documents This folder contains DASH Encryption Gateway Service design and requirements documents. -# Contents +## Design -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH Encryption Gateway Service design & architecture documents | -| [requirements](requirements/README.md) | DASH Encryption Gateway Service requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | + + +## Requirements + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/encrypt-gw-service/design/README.md b/documentation/encrypt-gw-service/design/README.md deleted file mode 100644 index c8b33b863..000000000 --- a/documentation/encrypt-gw-service/design/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH Encryption Gateway Service design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/encrypt-gw-service/requirements/README.md b/documentation/encrypt-gw-service/requirements/README.md deleted file mode 100644 index 4bb45c51b..000000000 --- a/documentation/encrypt-gw-service/requirements/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH Encryption Gateway Service compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/express-route-service/README.md b/documentation/express-route-service/README.md index c93d45497..e951ad476 100644 --- a/documentation/express-route-service/README.md +++ b/documentation/express-route-service/README.md @@ -1,10 +1,14 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] +# DASH Express Route Gateway Service Documents This folder contains DASH Express Route Gateway Service design and requirements documents. -# Contents +## Design -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH Express Route Gateway Service design & architecture documents | -| [requirements](requirements/README.md) | DASH Express Route Gateway Service requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | + + +## Requirements + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/express-route-service/design/README.md b/documentation/express-route-service/design/README.md deleted file mode 100644 index a3680001c..000000000 --- a/documentation/express-route-service/design/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH Express Route Gateway Service design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/express-route-service/requirements/README.md b/documentation/express-route-service/requirements/README.md deleted file mode 100644 index 95192f45b..000000000 --- a/documentation/express-route-service/requirements/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH Express Route Gateway Service compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/general/README.md b/documentation/general/README.md index 8098f8808..da9a60763 100644 --- a/documentation/general/README.md +++ b/documentation/general/README.md @@ -1,12 +1,23 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] - # DASH General Documents -This folder contains DASH "General" design and requirements documents. +This folder contains DASH general design and requirements documents. + +## Design + +| Document | Description | +| ------------------------------------------------------------------------- | -------------------------------------------------| +| [dash-high-level-design.md](dash-high-level-design.md) | DASH High-Level Architecture and Design | +| [dash-sonic-hld.md](dash-sonic-hld.md) | DASH APIs, orch agent, config and APP DB Schemas | +| [sdn-features-packet-transforms.md](sdn-features-packet-transforms.md) | DASH VNET-to-VNET HLD and Packet Transforms | +| [sdn-pipeline-basic-elements.md](sdn-pipeline-basic-elements.md) | Pipeline basics such as path direction and flow | +| [dash-handling-fragmented-packets.md](dash-handling-fragmented-packets.md)| Handling of packet fragments | +||| + + -# Contents +## Requirements -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH General design & architecture documents | -| [requirements](requirements/README.md) | DASH General requirements documents | +| Document | Description | +| ---------------------------------------------------------------------------------- | ------------------------------------------ | +| [dash-general-compliance-requirements.md](dash-general-compliance-requirements.md) | DASH General Compliance Requirements | +| [program-scale-testing-requirements-draft.md](program-scale-testing-requirements-draft.md) | DASH scale and performance requirements | \ No newline at end of file diff --git a/documentation/general/requirements/dash-general-compliance-requirements.md b/documentation/general/dash-general-compliance-requirements.md similarity index 86% rename from documentation/general/requirements/dash-general-compliance-requirements.md rename to documentation/general/dash-general-compliance-requirements.md index f994c777d..014f3eda1 100644 --- a/documentation/general/requirements/dash-general-compliance-requirements.md +++ b/documentation/general/dash-general-compliance-requirements.md @@ -1,13 +1,10 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - # DASH General Compliance Requirements -# DASH Versioning and Configuration Management + +## DASH Versioning and Configuration Management >**TODO** Determine a versioning system for each category as well as the overall configuration of a "release." -# Continuous Integration and Test +## Continuous Integration and Test Continuous integration verifies the correctness of each committed configuration. Workflows can be triggered manually, or automatically (by commits). Success/failure can be criteria for accepting pull requests. **TODO** Define objectives and implement automation (Git Actions). The follow non-exhaustive list is just an example of what can be done: @@ -19,6 +16,6 @@ Continuous integration verifies the correctness of each committed configuration. * Execute DASH software data planes via P4 behavioral models: run test suites which configure the software Device under Test (DUT) and send traffic to/from the data plane with software traffic testers. See [DASH Testing Using P4 Simulators and SAI Thrift](../test/docs/dash-test-workflow-p4-saithrift.md) for an example workflow. -# Reference Architectures +## Reference Architectures Reference architectures for test scenarios are described in [test/docs/dash-test-ref-arch.md](../../../test/docs/dash-test-ref-arch.md) diff --git a/documentation/general/design/dash-handling-fragmented-packets.md b/documentation/general/dash-handling-fragmented-packets.md similarity index 100% rename from documentation/general/design/dash-handling-fragmented-packets.md rename to documentation/general/dash-handling-fragmented-packets.md diff --git a/documentation/general/design/dash-high-level-design.md b/documentation/general/dash-high-level-design.md similarity index 88% rename from documentation/general/design/dash-high-level-design.md rename to documentation/general/dash-high-level-design.md index b30817e71..2eba12135 100644 --- a/documentation/general/design/dash-high-level-design.md +++ b/documentation/general/dash-high-level-design.md @@ -1,49 +1,44 @@ --- -Last update: 06/22/2022 +Last update: 09/20/2022 --- -[<< Back to parent directory](../README.md) ] - -[<< Back to DASH top-level Documents](../../README.md#contents) ] - # Disaggregated API for SONiC Hosts (DASH) high level design -- [Disaggregated API for SONiC Hosts (DASH) high level design](#disaggregated-api-for-sonic-hosts-dash-high-level-design) - - [Introduction](#introduction) - - [Why DASH?](#why-dash) - - [Objectives](#objectives) - - [Compliance and requirements](#compliance-and-requirements) - - [Scenarios](#scenarios) - - [Azure provisioning example](#azure-provisioning-example) - - [DASH project](#dash-project) - - [Logical architecture (software stack)](#logical-architecture-software-stack) - - [SDN controller](#sdn-controller) - - [SDN and DPU High-Availability (HA)](#sdn-and-dpu-high-availability-ha) - - [gNMI container](#gnmi-container) - - [Multiple DPUs device](#multiple-dpus-device) - - [SONiC app containers](#sonic-app-containers) - - [Switch State Service (SWSS)](#switch-state-service-swss) - - [Switch Abstraction Interface (SAI) DASH extension](#switch-abstraction-interface-sai-dash-extension) - - [ASIC Drivers](#asic-drivers) - - [DASH capable ASICs](#dash-capable-asics) - - [SONiC integration](#sonic-integration) - - [DASH single DPU on NIC](#dash-single-dpu-on-nic) - - [DASH appliance](#dash-appliance) - - [High Level Architecture](#high-level-architecture) - - [Low level architecture](#low-level-architecture) - - [DASH smart switch](#dash-smart-switch) - - [High level architecture](#high-level-architecture-1) - - [Low level architecture](#low-level-architecture-1) - - [Example of network representation](#example-of-network-representation) - - [Deployment](#deployment) - - [Behavioral model](#behavioral-model) - - [SONiC Integration testing](#sonic-integration-testing) - - [DASH services conformance and performance testing](#dash-services-conformance-and-performance-testing) - - [Appendix](#appendix) - - [A day in the life of a DASH packet](#a-day-in-the-life-of-a-dash-packet) - - [A day in the life of a DASH SDN controller](#a-day-in-the-life-of-a-dash-sdn-controller) - - [A day in the life of a gNMI container](#a-day-in-the-life-of-a-gnmi-container) - - [References](#references) +- [Introduction](#introduction) + - [Why DASH?](#why-dash) + - [Objectives](#objectives) +- [Compliance and requirements](#compliance-and-requirements) +- [Scenarios](#scenarios) +- [Azure provisioning example](#azure-provisioning-example) +- [DASH project](#dash-project) +- [Logical architecture (software stack)](#logical-architecture-software-stack) + - [SDN controller](#sdn-controller) + - [SDN and DPU High-Availability (HA)](#sdn-and-dpu-high-availability-ha) + - [gNMI container](#gnmi-container) + - [Multiple DPUs device](#multiple-dpus-device) + - [SONiC app containers](#sonic-app-containers) + - [Switch State Service (SWSS)](#switch-state-service-swss) + - [Switch Abstraction Interface (SAI) DASH extension](#switch-abstraction-interface-sai-dash-extension) + - [ASIC Drivers](#asic-drivers) + - [DASH capable ASICs](#dash-capable-asics) +- [SONiC integration](#sonic-integration) + - [DASH single DPU on NIC](#dash-single-dpu-on-nic) + - [DASH appliance](#dash-appliance) + - [High Level Architecture](#high-level-architecture) + - [Low level architecture](#low-level-architecture) + - [DASH smart switch](#dash-smart-switch) + - [High level architecture](#high-level-architecture-1) + - [Low level architecture](#low-level-architecture-1) +- [Example of network representation](#example-of-network-representation) + - [Deployment](#deployment) +- [Behavioral model](#behavioral-model) +- [SONiC Integration testing](#sonic-integration-testing) +- [DASH services conformance and performance testing](#dash-services-conformance-and-performance-testing) +- [Appendix](#appendix) + - [A day in the life of a DASH packet](#a-day-in-the-life-of-a-dash-packet) + - [A day in the life of a DASH SDN controller](#a-day-in-the-life-of-a-dash-sdn-controller) + - [A day in the life of a gNMI container](#a-day-in-the-life-of-a-gnmi-container) +- [References](#references) ## Introduction @@ -109,18 +104,12 @@ achieve **10x or even 100x stateful connection performance** with hardware offlo The following are the compliance and requirements details applicable to the supported scenario: -- [VNET to VNET - service](https://github.com/Azure/DASH/blob/main/documentation/vnet2vnet-service/requirements/README.md) -- [VNET peering - service](https://github.com/Azure/DASH/blob/main/documentation/vnet-peering-service/requirements/README.md) -- [Service tunnel & Private link - service](https://github.com/Azure/DASH/blob/main/documentation/stpl-service/requirements/README.md) -- [Load balancer - service](https://github.com/Azure/DASH/blob/main/documentation/load-bal-service/requirements/README.md) -- [Encryption gateway - service](https://github.com/Azure/DASH/blob/main/documentation/encrypt-gw-service/requirements/README.md) -- [Express route gateway - service](https://github.com/Azure/DASH/blob/main/documentation/express-route-service/requirements/README.md) +- [VNET to VNET service](../vnet2vnet-service/README.md) +- [VNET peering service](../vnet-peering-service/README.md) +- [Service tunnel & Private link service](../stpl-service/README.md) +- [Load balancer service](../load-bal-service/README.md) +- [Encryption gateway service](../encrypt-gw-service/README.md) +- [Express route gateway service](../express-route-service/README.md) ## Scenarios @@ -279,7 +268,7 @@ The only requirement on the card from the HA perspective is for the cards to setup a channel between themselves for flow synchronization. The synchronization mechanism is left for technology suppliers to define and implement. For more information, see [High Availability and -Scale](../../high-avail/design/high-availability-and-scale.md) document. +Scale](../high-avail/high-availability-and-scale.md) document. ### gNMI container @@ -342,8 +331,7 @@ In the case of a multiple DPUs device the following applies: The SWSS container comprises many daemons which operate on conceptual SONIC config objects across several databases. For more information and details about -the integration, see [SONiC DASH -HLD](https://github.com/Azure/DASH/blob/main/documentation/general/design/dash-sonic-hld.md). +the integration, see [SONiC DASH HLD](dash-sonic-hld.md). ### Switch Abstraction Interface (SAI) DASH extension @@ -404,8 +392,7 @@ FPGAs, or some other high-density, performant hardware. The system architecture for SONiC DASH relies upon the [SONiC system architecture](https://github.com/Azure/SONiC/wiki/Architecture). For more -information and details about the integration, see [SONiC DASH -HLD](https://github.com/Azure/DASH/blob/main/documentation/general/design/dash-sonic-hld.md). +information and details about the integration, see [SONiC DASH HLD](dash-sonic-hld.md). The SONiC DASH integration introduces the following DASH modifications: @@ -593,9 +580,11 @@ testing](https://github.com/Azure/DASH/tree/main/test). - [FAQ](https://github.com/Azure/DASH/wiki/FAQ) - [Glossary](https://github.com/Azure/DASH/wiki/Glossary) -- [SAI headers](https://github.com/Azure/DASH/tree/main/SAI) -- [DASH pipeline](https://github.com/Azure/DASH/tree/main/dash-pipeline) +- [SAI headers](../sai/README.md) +- [DASH pipeline](../../dash-pipeline/README.md) - [DASH conformance and performance testing](https://github.com/Azure/DASH/tree/main/test) -- [SONiC DASH HLD](https://github.com/Azure/DASH/blob/main/documentation/general/design/dash-sonic-hld.md) +- [SONiC DASH HLD](dash-sonic-hld.md) - [SONiC System Architecture](https://github.com/Azure/SONiC/wiki/Architecture#sonic-system-architecture) - [P4 as a Single Source of Truth for SONiC DASH - 2022 P4 Workshop](https://www.youtube.com/watch?v=mT7-t_aDozM) + + diff --git a/documentation/general/design/dash-sonic-hld.md b/documentation/general/dash-sonic-hld.md similarity index 99% rename from documentation/general/design/dash-sonic-hld.md rename to documentation/general/dash-sonic-hld.md index 0c56e9a96..3d528ffc3 100644 --- a/documentation/general/design/dash-sonic-hld.md +++ b/documentation/general/dash-sonic-hld.md @@ -468,7 +468,7 @@ The [figure below](#schema_relationships) illustrates the various schema and the * [SAI](https://github.com/Azure/DASH/tree/main/SAI) table and attribute objects #### Canonical Test Data and schema transformations -For testing purposes, it is convenient to express test configurations in a single canonical format, and use this to drive the different API layers to verify correct behavior. A tentative JSON format for representing DASH service configurations is described in https://github.com/Azure/DASH/blob/main/documentation/gnmi/design/dash-reference-config-example.md. Test drivers can accept this input, transform it into different schemas and drive the associated interfaces. For example, a JSON representation of an ACL rule can be transformed into gNMI API calls, SAI-redis calls, SAI-thrift calls, etc. +For testing purposes, it is convenient to express test configurations in a single canonical format, and use this to drive the different API layers to verify correct behavior. A tentative JSON format for representing DASH service configurations is described in [Reference configuration example (JSON)](../gnmi/dash-reference-config-example.md). Test drivers can accept this input, transform it into different schemas and drive the associated interfaces. For example, a JSON representation of an ACL rule can be transformed into gNMI API calls, SAI-redis calls, SAI-thrift calls, etc. ### Figure - Schema Relationships diff --git a/documentation/general/design/README.md b/documentation/general/design/README.md deleted file mode 100644 index 7c51dce3f..000000000 --- a/documentation/general/design/README.md +++ /dev/null @@ -1,18 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH General Design Documents - -This folder contains DASH "general" design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------------------------- | -------------------------------------------------| -| [dash-high-level-design.md](dash-high-level-design.md) | DASH High-Level Architecture and Design | -| [dash-sonic-hld.md](dash-sonic-hld.md) | DASH APIs, orch agent, config and APP DB Schemas | -| [sdn-features-packet-transforms.md](sdn-features-packet-transforms.md) | DASH VNET-to-VNET HLD and Packet Transforms | -| [sdn-pipeline-basic-elements.md](sdn-pipeline-basic-elements.md) | Pipeline basics such as path direction and flow | -| [dash-handling-fragmented-packets.md](dash-handling-fragmented-packets.md)| Handling of packet fragments | -||| diff --git a/documentation/general/design/images/dash-hld-eni-objects.svg b/documentation/general/images/dash-hld-eni-objects.svg similarity index 100% rename from documentation/general/design/images/dash-hld-eni-objects.svg rename to documentation/general/images/dash-hld-eni-objects.svg diff --git a/documentation/general/design/images/dash-hld-inbound-packet-processing-pipeline.svg b/documentation/general/images/dash-hld-inbound-packet-processing-pipeline.svg similarity index 100% rename from documentation/general/design/images/dash-hld-inbound-packet-processing-pipeline.svg rename to documentation/general/images/dash-hld-inbound-packet-processing-pipeline.svg diff --git a/documentation/general/design/images/dash-hld-outbound-packet-processing-pipeline.svg b/documentation/general/images/dash-hld-outbound-packet-processing-pipeline.svg similarity index 100% rename from documentation/general/design/images/dash-hld-outbound-packet-processing-pipeline.svg rename to documentation/general/images/dash-hld-outbound-packet-processing-pipeline.svg diff --git a/documentation/general/design/images/dash-hld-outbound-vni.svg b/documentation/general/images/dash-hld-outbound-vni.svg similarity index 100% rename from documentation/general/design/images/dash-hld-outbound-vni.svg rename to documentation/general/images/dash-hld-outbound-vni.svg diff --git a/documentation/general/design/images/dash-hld-vnet-objects.svg b/documentation/general/images/dash-hld-vnet-objects.svg similarity index 100% rename from documentation/general/design/images/dash-hld-vnet-objects.svg rename to documentation/general/images/dash-hld-vnet-objects.svg diff --git a/documentation/general/design/images/dash-simplified-physical-deployment-example.svg b/documentation/general/images/dash-simplified-physical-deployment-example.svg similarity index 100% rename from documentation/general/design/images/dash-simplified-physical-deployment-example.svg rename to documentation/general/images/dash-simplified-physical-deployment-example.svg diff --git a/documentation/general/design/images/dash-words-cloud.png b/documentation/general/images/dash-words-cloud.png similarity index 100% rename from documentation/general/design/images/dash-words-cloud.png rename to documentation/general/images/dash-words-cloud.png diff --git a/documentation/general/design/images/hld/dash-appliance-architecture.svg b/documentation/general/images/hld/dash-appliance-architecture.svg similarity index 100% rename from documentation/general/design/images/hld/dash-appliance-architecture.svg rename to documentation/general/images/hld/dash-appliance-architecture.svg diff --git a/documentation/general/design/images/hld/dash-high-level-appliance.svg b/documentation/general/images/hld/dash-high-level-appliance.svg similarity index 100% rename from documentation/general/design/images/hld/dash-high-level-appliance.svg rename to documentation/general/images/hld/dash-high-level-appliance.svg diff --git a/documentation/general/design/images/hld/dash-high-level-design-schema.svg b/documentation/general/images/hld/dash-high-level-design-schema.svg similarity index 100% rename from documentation/general/design/images/hld/dash-high-level-design-schema.svg rename to documentation/general/images/hld/dash-high-level-design-schema.svg diff --git a/documentation/general/design/images/hld/dash-high-level-design.svg b/documentation/general/images/hld/dash-high-level-design.svg similarity index 100% rename from documentation/general/design/images/hld/dash-high-level-design.svg rename to documentation/general/images/hld/dash-high-level-design.svg diff --git a/documentation/general/design/images/hld/dash-high-level-smart-switch.svg b/documentation/general/images/hld/dash-high-level-smart-switch.svg similarity index 100% rename from documentation/general/design/images/hld/dash-high-level-smart-switch.svg rename to documentation/general/images/hld/dash-high-level-smart-switch.svg diff --git a/documentation/general/design/images/hld/dash-hld-project-ecosystem.svg b/documentation/general/images/hld/dash-hld-project-ecosystem.svg similarity index 100% rename from documentation/general/design/images/hld/dash-hld-project-ecosystem.svg rename to documentation/general/images/hld/dash-hld-project-ecosystem.svg diff --git a/documentation/general/design/images/hld/dash-hld-software-stack.svg b/documentation/general/images/hld/dash-hld-software-stack.svg similarity index 100% rename from documentation/general/design/images/hld/dash-hld-software-stack.svg rename to documentation/general/images/hld/dash-hld-software-stack.svg diff --git a/documentation/general/design/images/hld/dash-single-dpu-architecture.svg b/documentation/general/images/hld/dash-single-dpu-architecture.svg similarity index 100% rename from documentation/general/design/images/hld/dash-single-dpu-architecture.svg rename to documentation/general/images/hld/dash-single-dpu-architecture.svg diff --git a/documentation/general/design/images/hld/dash-smart-switch-architecture.svg b/documentation/general/images/hld/dash-smart-switch-architecture.svg similarity index 100% rename from documentation/general/design/images/hld/dash-smart-switch-architecture.svg rename to documentation/general/images/hld/dash-smart-switch-architecture.svg diff --git a/documentation/general/design/images/in_slow_path_no_flow_match.png b/documentation/general/images/in_slow_path_no_flow_match.png similarity index 100% rename from documentation/general/design/images/in_slow_path_no_flow_match.png rename to documentation/general/images/in_slow_path_no_flow_match.png diff --git a/documentation/general/design/images/inb_fast_path_flow_match.png b/documentation/general/images/inb_fast_path_flow_match.png similarity index 100% rename from documentation/general/design/images/inb_fast_path_flow_match.png rename to documentation/general/images/inb_fast_path_flow_match.png diff --git a/documentation/general/design/images/inbound_frm_ilb.png b/documentation/general/images/inbound_frm_ilb.png similarity index 100% rename from documentation/general/design/images/inbound_frm_ilb.png rename to documentation/general/images/inbound_frm_ilb.png diff --git a/documentation/general/design/images/out_fast_path_flow_match.png b/documentation/general/images/out_fast_path_flow_match.png similarity index 100% rename from documentation/general/design/images/out_fast_path_flow_match.png rename to documentation/general/images/out_fast_path_flow_match.png diff --git a/documentation/general/design/images/out_slow_path_pol_eval_no_flow_match.png b/documentation/general/images/out_slow_path_pol_eval_no_flow_match.png similarity index 100% rename from documentation/general/design/images/out_slow_path_pol_eval_no_flow_match.png rename to documentation/general/images/out_slow_path_pol_eval_no_flow_match.png diff --git a/documentation/general/design/images/outbound_nat_l4.png b/documentation/general/images/outbound_nat_l4.png similarity index 100% rename from documentation/general/design/images/outbound_nat_l4.png rename to documentation/general/images/outbound_nat_l4.png diff --git a/documentation/general/design/images/packet-flow-in-flow-match.svg b/documentation/general/images/packet-flow-in-flow-match.svg similarity index 100% rename from documentation/general/design/images/packet-flow-in-flow-match.svg rename to documentation/general/images/packet-flow-in-flow-match.svg diff --git a/documentation/general/design/images/private_link.png b/documentation/general/images/private_link.png similarity index 100% rename from documentation/general/design/images/private_link.png rename to documentation/general/images/private_link.png diff --git a/documentation/general/design/images/private_link_service.png b/documentation/general/images/private_link_service.png similarity index 100% rename from documentation/general/design/images/private_link_service.png rename to documentation/general/images/private_link_service.png diff --git a/documentation/general/requirements/images/[msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png b/documentation/general/images/req/[msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/[msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png rename to documentation/general/images/req/[msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png diff --git a/documentation/general/requirements/images/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01.png b/documentation/general/images/req/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01.png rename to documentation/general/images/req/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01.png diff --git a/documentation/general/requirements/images/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png b/documentation/general/images/req/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png rename to documentation/general/images/req/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png diff --git a/documentation/general/requirements/images/cps-streams.png b/documentation/general/images/req/cps-streams.png similarity index 100% rename from documentation/general/requirements/images/cps-streams.png rename to documentation/general/images/req/cps-streams.png diff --git a/documentation/general/requirements/images/learning-streams.png b/documentation/general/images/req/learning-streams.png similarity index 100% rename from documentation/general/requirements/images/learning-streams.png rename to documentation/general/images/req/learning-streams.png diff --git a/documentation/general/requirements/images/msft-8v-1m-rx-bw-port1-100sec-01.png b/documentation/general/images/req/msft-8v-1m-rx-bw-port1-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-rx-bw-port1-100sec-01.png rename to documentation/general/images/req/msft-8v-1m-rx-bw-port1-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-1m-rx-bw-port1-100sec-02.png b/documentation/general/images/req/msft-8v-1m-rx-bw-port1-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-rx-bw-port1-100sec-02.png rename to documentation/general/images/req/msft-8v-1m-rx-bw-port1-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-1m-rx-pps-64pkt-flow-100sec-01.png b/documentation/general/images/req/msft-8v-1m-rx-pps-64pkt-flow-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-rx-pps-64pkt-flow-100sec-01.png rename to documentation/general/images/req/msft-8v-1m-rx-pps-64pkt-flow-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-1m-rx-pps-64pkt-flow-100sec-02.png b/documentation/general/images/req/msft-8v-1m-rx-pps-64pkt-flow-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-rx-pps-64pkt-flow-100sec-02.png rename to documentation/general/images/req/msft-8v-1m-rx-pps-64pkt-flow-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-1m-rx-pps-learning-01.png b/documentation/general/images/req/msft-8v-1m-rx-pps-learning-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-rx-pps-learning-01.png rename to documentation/general/images/req/msft-8v-1m-rx-pps-learning-01.png diff --git a/documentation/general/requirements/images/msft-8v-1m-rx-pps-learning-02.png b/documentation/general/images/req/msft-8v-1m-rx-pps-learning-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-rx-pps-learning-02.png rename to documentation/general/images/req/msft-8v-1m-rx-pps-learning-02.png diff --git a/documentation/general/requirements/images/msft-8v-1m-tx-bw-port1-100sec-01.png b/documentation/general/images/req/msft-8v-1m-tx-bw-port1-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-tx-bw-port1-100sec-01.png rename to documentation/general/images/req/msft-8v-1m-tx-bw-port1-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-1m-tx-bw-port1-100sec-02.png b/documentation/general/images/req/msft-8v-1m-tx-bw-port1-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-tx-bw-port1-100sec-02.png rename to documentation/general/images/req/msft-8v-1m-tx-bw-port1-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-1m-tx-pps-64pkt-flow-100sec-01.png b/documentation/general/images/req/msft-8v-1m-tx-pps-64pkt-flow-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-tx-pps-64pkt-flow-100sec-01.png rename to documentation/general/images/req/msft-8v-1m-tx-pps-64pkt-flow-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-1m-tx-pps-64pkt-flow-100sec-02.png b/documentation/general/images/req/msft-8v-1m-tx-pps-64pkt-flow-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-tx-pps-64pkt-flow-100sec-02.png rename to documentation/general/images/req/msft-8v-1m-tx-pps-64pkt-flow-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-1m-tx-pps-learning-01.png b/documentation/general/images/req/msft-8v-1m-tx-pps-learning-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-tx-pps-learning-01.png rename to documentation/general/images/req/msft-8v-1m-tx-pps-learning-01.png diff --git a/documentation/general/requirements/images/msft-8v-1m-tx-pps-learning-02.png b/documentation/general/images/req/msft-8v-1m-tx-pps-learning-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-1m-tx-pps-learning-02.png rename to documentation/general/images/req/msft-8v-1m-tx-pps-learning-02.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-1-syn-tx-cps-100sec-01.png b/documentation/general/images/req/msft-8v-4m-stream-1-syn-tx-cps-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-1-syn-tx-cps-100sec-01.png rename to documentation/general/images/req/msft-8v-4m-stream-1-syn-tx-cps-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-1-syn-tx-cps-100sec-02.png b/documentation/general/images/req/msft-8v-4m-stream-1-syn-tx-cps-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-1-syn-tx-cps-100sec-02.png rename to documentation/general/images/req/msft-8v-4m-stream-1-syn-tx-cps-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01.png b/documentation/general/images/req/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01.png rename to documentation/general/images/req/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02.png b/documentation/general/images/req/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02.png rename to documentation/general/images/req/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-3-ack-tx-cps-100sec-01.png b/documentation/general/images/req/msft-8v-4m-stream-3-ack-tx-cps-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-3-ack-tx-cps-100sec-01.png rename to documentation/general/images/req/msft-8v-4m-stream-3-ack-tx-cps-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-3-ack-tx-cps-100sec-02.png b/documentation/general/images/req/msft-8v-4m-stream-3-ack-tx-cps-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-3-ack-tx-cps-100sec-02.png rename to documentation/general/images/req/msft-8v-4m-stream-3-ack-tx-cps-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01.png b/documentation/general/images/req/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01.png rename to documentation/general/images/req/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02.png b/documentation/general/images/req/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02.png rename to documentation/general/images/req/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01.png b/documentation/general/images/req/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01.png rename to documentation/general/images/req/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png b/documentation/general/images/req/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png rename to documentation/general/images/req/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png diff --git a/documentation/general/requirements/images/msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png b/documentation/general/images/req/msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png similarity index 100% rename from documentation/general/requirements/images/msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png rename to documentation/general/images/req/msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png diff --git a/documentation/general/requirements/images/msft-lab-ixia-config-01.png b/documentation/general/images/req/msft-lab-ixia-config-01.png similarity index 100% rename from documentation/general/requirements/images/msft-lab-ixia-config-01.png rename to documentation/general/images/req/msft-lab-ixia-config-01.png diff --git a/documentation/general/requirements/images/msft-lab-ixia-config-02.png b/documentation/general/images/req/msft-lab-ixia-config-02.png similarity index 100% rename from documentation/general/requirements/images/msft-lab-ixia-config-02.png rename to documentation/general/images/req/msft-lab-ixia-config-02.png diff --git a/documentation/general/design/images/sdn-appliance.svg b/documentation/general/images/sdn-appliance.svg similarity index 100% rename from documentation/general/design/images/sdn-appliance.svg rename to documentation/general/images/sdn-appliance.svg diff --git a/documentation/general/design/images/sdn-high-cps.svg b/documentation/general/images/sdn-high-cps.svg similarity index 100% rename from documentation/general/design/images/sdn-high-cps.svg rename to documentation/general/images/sdn-high-cps.svg diff --git a/documentation/general/design/images/sdn/eni-match-flow-direction.svg b/documentation/general/images/sdn/eni-match-flow-direction.svg similarity index 100% rename from documentation/general/design/images/sdn/eni-match-flow-direction.svg rename to documentation/general/images/sdn/eni-match-flow-direction.svg diff --git a/documentation/general/design/images/sdn/inbound-fast-path-flow.svg b/documentation/general/images/sdn/inbound-fast-path-flow.svg similarity index 100% rename from documentation/general/design/images/sdn/inbound-fast-path-flow.svg rename to documentation/general/images/sdn/inbound-fast-path-flow.svg diff --git a/documentation/general/design/images/sdn/inbound-slow-path-flow.svg b/documentation/general/images/sdn/inbound-slow-path-flow.svg similarity index 100% rename from documentation/general/design/images/sdn/inbound-slow-path-flow.svg rename to documentation/general/images/sdn/inbound-slow-path-flow.svg diff --git a/documentation/general/design/images/sdn/outbound-fast-path-flow.svg b/documentation/general/images/sdn/outbound-fast-path-flow.svg similarity index 100% rename from documentation/general/design/images/sdn/outbound-fast-path-flow.svg rename to documentation/general/images/sdn/outbound-fast-path-flow.svg diff --git a/documentation/general/design/images/sdn/outbound-slow-path-flow.svg b/documentation/general/images/sdn/outbound-slow-path-flow.svg similarity index 100% rename from documentation/general/design/images/sdn/outbound-slow-path-flow.svg rename to documentation/general/images/sdn/outbound-slow-path-flow.svg diff --git a/documentation/general/design/images/sdn/sdn-packet-transforms-inbound-from-lb.svg b/documentation/general/images/sdn/sdn-packet-transforms-inbound-from-lb.svg similarity index 100% rename from documentation/general/design/images/sdn/sdn-packet-transforms-inbound-from-lb.svg rename to documentation/general/images/sdn/sdn-packet-transforms-inbound-from-lb.svg diff --git a/documentation/general/design/images/sdn/sdn-packet-transforms-outbound-nat-l4.svg b/documentation/general/images/sdn/sdn-packet-transforms-outbound-nat-l4.svg similarity index 100% rename from documentation/general/design/images/sdn/sdn-packet-transforms-outbound-nat-l4.svg rename to documentation/general/images/sdn/sdn-packet-transforms-outbound-nat-l4.svg diff --git a/documentation/general/design/images/sdn/sdn-packet-transforms-private-link-service.svg b/documentation/general/images/sdn/sdn-packet-transforms-private-link-service.svg similarity index 100% rename from documentation/general/design/images/sdn/sdn-packet-transforms-private-link-service.svg rename to documentation/general/images/sdn/sdn-packet-transforms-private-link-service.svg diff --git a/documentation/general/design/images/sdn/sdn-packet-transforms-private-link.svg b/documentation/general/images/sdn/sdn-packet-transforms-private-link.svg similarity index 100% rename from documentation/general/design/images/sdn/sdn-packet-transforms-private-link.svg rename to documentation/general/images/sdn/sdn-packet-transforms-private-link.svg diff --git a/documentation/general/design/images/sdn/sdn-packet-transforms-service-tunneling.svg b/documentation/general/images/sdn/sdn-packet-transforms-service-tunneling.svg similarity index 100% rename from documentation/general/design/images/sdn/sdn-packet-transforms-service-tunneling.svg rename to documentation/general/images/sdn/sdn-packet-transforms-service-tunneling.svg diff --git a/documentation/general/design/images/sdn/sdn-packet-transforms-vm-internal-load-balancer.svg b/documentation/general/images/sdn/sdn-packet-transforms-vm-internal-load-balancer.svg similarity index 100% rename from documentation/general/design/images/sdn/sdn-packet-transforms-vm-internal-load-balancer.svg rename to documentation/general/images/sdn/sdn-packet-transforms-vm-internal-load-balancer.svg diff --git a/documentation/general/design/images/sdn/sdn-packet-transforms-vm-to-vm.svg b/documentation/general/images/sdn/sdn-packet-transforms-vm-to-vm.svg similarity index 100% rename from documentation/general/design/images/sdn/sdn-packet-transforms-vm-to-vm.svg rename to documentation/general/images/sdn/sdn-packet-transforms-vm-to-vm.svg diff --git a/documentation/general/design/images/sdn/sdn-virtual-port.svg b/documentation/general/images/sdn/sdn-virtual-port.svg similarity index 100% rename from documentation/general/design/images/sdn/sdn-virtual-port.svg rename to documentation/general/images/sdn/sdn-virtual-port.svg diff --git a/documentation/general/design/images/service_tunneling.png b/documentation/general/images/service_tunneling.png similarity index 100% rename from documentation/general/design/images/service_tunneling.png rename to documentation/general/images/service_tunneling.png diff --git a/documentation/general/design/images/tcp-connection-abort.svg b/documentation/general/images/tcp-connection-abort.svg similarity index 100% rename from documentation/general/design/images/tcp-connection-abort.svg rename to documentation/general/images/tcp-connection-abort.svg diff --git a/documentation/general/design/images/tcp-connection-create.svg b/documentation/general/images/tcp-connection-create.svg similarity index 100% rename from documentation/general/design/images/tcp-connection-create.svg rename to documentation/general/images/tcp-connection-create.svg diff --git a/documentation/general/design/images/tcp-connection-delete.svg b/documentation/general/images/tcp-connection-delete.svg similarity index 100% rename from documentation/general/design/images/tcp-connection-delete.svg rename to documentation/general/images/tcp-connection-delete.svg diff --git a/documentation/general/design/images/vm_to_ilb.png b/documentation/general/images/vm_to_ilb.png similarity index 100% rename from documentation/general/design/images/vm_to_ilb.png rename to documentation/general/images/vm_to_ilb.png diff --git a/documentation/general/design/images/vm_to_vm.png b/documentation/general/images/vm_to_vm.png similarity index 100% rename from documentation/general/design/images/vm_to_vm.png rename to documentation/general/images/vm_to_vm.png diff --git a/documentation/general/design/images/vport.png b/documentation/general/images/vport.png similarity index 100% rename from documentation/general/design/images/vport.png rename to documentation/general/images/vport.png diff --git a/documentation/general/requirements/program-scale-testing-requirements-draft.md b/documentation/general/program-scale-testing-requirements-draft.md similarity index 88% rename from documentation/general/requirements/program-scale-testing-requirements-draft.md rename to documentation/general/program-scale-testing-requirements-draft.md index 9dd82b399..0a28e47b2 100644 --- a/documentation/general/requirements/program-scale-testing-requirements-draft.md +++ b/documentation/general/program-scale-testing-requirements-draft.md @@ -1,9 +1,5 @@ - -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - # Program Scale Testing Requirements for LAB Validation + >**NOTE**: This prelimiary document includes a text description of a so-called **"Hero Test"** to establish minimum performance requirements and screen captures of Layer 2/3 packet generator stream configurations for IXIA IxExplorer packet tester device. These L23 streams simulate L4 connection establishment. This document, and the testing methodology, will be replaced by a more formal, complete requirements specification and automated testing scripts in due time. ## Table of Contents @@ -345,9 +341,9 @@ both scenarios: IXIA module: NOVUS100GE8Q28 -![msft-lab-ixia-config-01](images/msft-lab-ixia-config-01.png) +![msft-lab-ixia-config-01](images/req/msft-lab-ixia-config-01.png) -![msft-lab-ixia-config-02](images/msft-lab-ixia-config-02.png) +![msft-lab-ixia-config-02](images/req/msft-lab-ixia-config-02.png) ### Streams @@ -361,13 +357,13 @@ Learning Streams will be used to establish 2M CPS connections and 2M UDP background bi-directional flows prior to test execution. These 2M flows will be split across 8 vnics that are pre-configured. -![learning-streams](images/learning-streams.png) +![learning-streams](images/req/learning-streams.png) - MSFT-8V-1M-TX-PPS-Learning -![msft-8v-1m-tx-pps-learning-01](images/msft-8v-1m-tx-pps-learning-01.png) +![msft-8v-1m-tx-pps-learning-01](images/req/msft-8v-1m-tx-pps-learning-01.png) -![msft-8v-1m-tx-pps-learning-02](images/msft-8v-1m-tx-pps-learning-02.png) +![msft-8v-1m-tx-pps-learning-02](images/req/msft-8v-1m-tx-pps-learning-02.png) **Packet view** @@ -415,9 +411,9 @@ UDP: ``` - MSFT-8V-1M-RX-PPS-Learning -![msft-8v-1m-rx-pps-learning-01](images/msft-8v-1m-rx-pps-learning-01.png) +![msft-8v-1m-rx-pps-learning-01](images/req/msft-8v-1m-rx-pps-learning-01.png) -![msft-8v-1m-rx-pps-learning-02](images/msft-8v-1m-rx-pps-learning-02.png) +![msft-8v-1m-rx-pps-learning-02](images/req/msft-8v-1m-rx-pps-learning-02.png) #### Traffic Streams @@ -427,15 +423,15 @@ need to be created individually. - MSFT-8V-1M-TX-PPS-64Pkt/Flow-100Sec -![msft-8v-1m-tx-pps-64pkt-flow-100sec-01](images/msft-8v-1m-tx-pps-64pkt-flow-100sec-01.png) +![msft-8v-1m-tx-pps-64pkt-flow-100sec-01](images/req/msft-8v-1m-tx-pps-64pkt-flow-100sec-01.png) -![msft-8v-1m-tx-pps-64pkt-flow-100sec-02](images/msft-8v-1m-tx-pps-64pkt-flow-100sec-02.png) +![msft-8v-1m-tx-pps-64pkt-flow-100sec-02](images/req/msft-8v-1m-tx-pps-64pkt-flow-100sec-02.png) - MSFT-8V-1M-RX-PPS-64Pkt/Flow-100Sec -![msft-8v-1m-rx-pps-64pkt-flow-100sec-01](images/msft-8v-1m-rx-pps-64pkt-flow-100sec-01.png) +![msft-8v-1m-rx-pps-64pkt-flow-100sec-01](images/req/msft-8v-1m-rx-pps-64pkt-flow-100sec-01.png) -![msft-8v-1m-rx-pps-64pkt-flow-100sec-02](images/msft-8v-1m-rx-pps-64pkt-flow-100sec-02.png) +![msft-8v-1m-rx-pps-64pkt-flow-100sec-02](images/req/msft-8v-1m-rx-pps-64pkt-flow-100sec-02.png) #### Bandwidth Streams @@ -444,9 +440,9 @@ will be used to verify the total 100Gbps bandwidth. - MSFT-8V-1M-TX-BW-Port1-100Sec -![msft-8v-1m-tx-bw-port1-100sec-01](images/msft-8v-1m-tx-bw-port1-100sec-01.png) +![msft-8v-1m-tx-bw-port1-100sec-01](images/req/msft-8v-1m-tx-bw-port1-100sec-01.png) -![msft-8v-1m-tx-bw-port1-100sec-02](images/msft-8v-1m-tx-bw-port1-100sec-02.png) +![msft-8v-1m-tx-bw-port1-100sec-02](images/req/msft-8v-1m-tx-bw-port1-100sec-02.png) **Packet view** @@ -495,51 +491,51 @@ UDP: - MSFT-8V-1M-RX-BW-Port1-100Sec -![msft-8v-1m-rx-bw-port1-100sec-01](images/msft-8v-1m-rx-bw-port1-100sec-01.png) +![msft-8v-1m-rx-bw-port1-100sec-01](images/req/msft-8v-1m-rx-bw-port1-100sec-01.png) -![msft-8v-1m-rx-bw-port1-100sec-02](images/msft-8v-1m-rx-bw-port1-100sec-02.png) +![msft-8v-1m-rx-bw-port1-100sec-02](images/req/msft-8v-1m-rx-bw-port1-100sec-02.png) ### CPS Streams CPS streams will be used to simulate TCP connection establishment and termination. -![cps-streams](images/cps-streams.png) +![cps-streams](images/req/cps-streams.png) - MSFT-8V-4M-Stream 1-Syn-TX-CPS-100Sec -![msft-8v-4m-stream-1-syn-tx-cps-100sec-01](images/msft-8v-4m-stream-1-syn-tx-cps-100sec-01.png) +![msft-8v-4m-stream-1-syn-tx-cps-100sec-01](images/req/msft-8v-4m-stream-1-syn-tx-cps-100sec-01.png) -![msft-8v-4m-stream-1-syn-tx-cps-100sec-02](images/msft-8v-4m-stream-1-syn-tx-cps-100sec-02.png) +![msft-8v-4m-stream-1-syn-tx-cps-100sec-02](images/req/msft-8v-4m-stream-1-syn-tx-cps-100sec-02.png) - MSFT-8V-4M-Stream 2-Syn-Ack-RX-CPS-100Sec -![msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01](images/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01.png) +![msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01](images/req/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-01.png) -![msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02](images/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02.png) +![msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02](images/req/msft-8v-4m-stream-2-syn-ack-rx-cps-100sec-02.png) - MSFT-8V-4M-Stream 3-Ack-TX-CPS-100Sec -![msft-8v-4m-stream-3-ack-tx-cps-100sec-01](images/msft-8v-4m-stream-3-ack-tx-cps-100sec-01.png) +![msft-8v-4m-stream-3-ack-tx-cps-100sec-01](images/req/msft-8v-4m-stream-3-ack-tx-cps-100sec-01.png) -![msft-8v-4m-stream-3-ack-tx-cps-100sec-02](images/msft-8v-4m-stream-3-ack-tx-cps-100sec-02.png) +![msft-8v-4m-stream-3-ack-tx-cps-100sec-02](images/req/msft-8v-4m-stream-3-ack-tx-cps-100sec-02.png) - MSFT-8V-4M-Stream 4-Fin-Ack-RX-CPS-100Sec -![msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01](images/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01.png) +![msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01](images/req/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-01.png) -![msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02](images/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02.png) +![msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02](images/req/msft-8v-4m-stream-4-fin-ack-rx-cps-100sec-02.png) - MSFT-8V-4M-Stream 4-Fin-Ack-TX-CPS-100Sec -![msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01](images/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01.png) +![msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01](images/req/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-01.png) -![msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02](images/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png) +![msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02](images/req/msft-8v-4m-stream-4-fin-ack-tx-cps-100sec-02.png) - MSFT-8V-4M-Stream 6-Ack-for-Fin-RX-CPS-100Sec -![msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01](images/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01.png) +![msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01](images/req/[msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-01.png) -![msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02](images/msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png) +![msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02](images/req/msft-8v-4m-stream-6-ack-fin-rx-cps-100sec-02.png) ### Sample Policy Configuration diff --git a/documentation/general/requirements/README.md b/documentation/general/requirements/README.md deleted file mode 100644 index 00b3a9318..000000000 --- a/documentation/general/requirements/README.md +++ /dev/null @@ -1,14 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH General Requirements Documents - -This folder contains DASH "general" compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | -| [dash-general-compliance-requirements.md](dash-general-compliance-requirements.md) | DASH General Compliance Requirements | -| [program-scale-testing-requirements-draft.md](program-scale-testing-requirements-draft.md) | DASH scale and performance requirements | \ No newline at end of file diff --git a/documentation/general/design/sdn-features-packet-transforms.md b/documentation/general/sdn-features-packet-transforms.md similarity index 93% rename from documentation/general/design/sdn-features-packet-transforms.md rename to documentation/general/sdn-features-packet-transforms.md index 47aea1094..455aa8378 100644 --- a/documentation/general/design/sdn-features-packet-transforms.md +++ b/documentation/general/sdn-features-packet-transforms.md @@ -1,7 +1,3 @@ -[<< Back to parent directory](../README.md) ] - -[<< Back to DASH top-level Documents](../../README.md#contents) ] - # SDN Features, Packet Transforms and Scale > [!NOTE] This document is in the process of being restructured into general and @@ -27,35 +23,34 @@ processing](#outbound-lpm-route-rules-processing) - [Inbound (priority) route rules processing](#inbound-priority-route-rules-processing) -- [SDN Features, Packet Transforms and Scale](#sdn-features-packet-transforms-and-scale) - - [First Target Scenario: SKU for Networked Virtual Appliance (NVA)](#first-target-scenario--sku-for-networked-virtual-appliance-nva) - - [Scale per DPU (Card)](#scale-per-dpu-card) - - [Scenario Milestone and Scoping](#scenario-milestone-and-scoping) - - [Virtual Port (aka Elastic Network Interface / ENI) and Packet Direction](#virtual-port-aka-elastic-network-interface--eni-and-packet-direction) - - [Routing (Routes and Route-Action)](#routing-routes-and-route-action) - - [Outbound routing](#outbound-routing) - - [Inbound routing](#inbound-routing) - - [Route rules processing](#route-rules-processing) - - [Outbound (LPM) route rules processing](#outbound-lpm-route-rules-processing) - - [Inbound (priority) route rules processing](#inbound-priority-route-rules-processing) - - [Packet Flow](#packet-flow) - - [Packet transforms](#packet-transforms) - - [Packet Transform Examples](#packet-transform-examples) - - [VNET to VNET Traffic](#vnet-to-vnet-traffic) - - [VNET to Internet - TBD](#vnet-to-internet---tbd) - - [VNET to Service Endpoints - TBD](#vnet-to-service-endpoints---tbd) - - [VNET to Private Link - TBD](#vnet-to-private-link----tbd) - - [Metering](#metering) - - [VNET Encryption](#vnet-encryption) - - [Telemetry](#telemetry) - - [Counters](#counters) - - [BGP](#bgp) - - [Watchdogs](#watchdogs) - - [Servicing](#servicing) - - [Debugging](#debugging) - - [Flow Replication](#flow-replication) - - [Unit Testing and development](#unit-testing-and-development) - - [Internal Partner dependencies](#internal-partner-dependencies) +- [First Target Scenario: SKU for Networked Virtual Appliance (NVA)](#first-target-scenario--sku-for-networked-virtual-appliance-nva) +- [Scale per DPU (Card)](#scale-per-dpu-card) +- [Scenario Milestone and Scoping](#scenario-milestone-and-scoping) +- [Virtual Port (aka Elastic Network Interface / ENI) and Packet Direction](#virtual-port-aka-elastic-network-interface--eni-and-packet-direction) +- [Routing (Routes and Route-Action)](#routing-routes-and-route-action) + - [Outbound routing](#outbound-routing) + - [Inbound routing](#inbound-routing) + - [Route rules processing](#route-rules-processing) + - [Outbound (LPM) route rules processing](#outbound-lpm-route-rules-processing) + - [Inbound (priority) route rules processing](#inbound-priority-route-rules-processing) +- [Packet Flow](#packet-flow) +- [Packet transforms](#packet-transforms) +- [Packet Transform Examples](#packet-transform-examples) + - [VNET to VNET Traffic](#vnet-to-vnet-traffic) + - [VNET to Internet - TBD](#vnet-to-internet---tbd) + - [VNET to Service Endpoints - TBD](#vnet-to-service-endpoints---tbd) + - [VNET to Private Link - TBD](#vnet-to-private-link----tbd) +- [Metering](#metering) +- [VNET Encryption](#vnet-encryption) +- [Telemetry](#telemetry) +- [Counters](#counters) +- [BGP](#bgp) +- [Watchdogs](#watchdogs) +- [Servicing](#servicing) +- [Debugging](#debugging) +- [Flow Replication](#flow-replication) +- [Unit Testing and development](#unit-testing-and-development) +- [Internal Partner dependencies](#internal-partner-dependencies) ## First Target Scenario: SKU for Networked Virtual Appliance (NVA) diff --git a/documentation/general/design/sdn-pipeline-basic-elements.md b/documentation/general/sdn-pipeline-basic-elements.md similarity index 99% rename from documentation/general/design/sdn-pipeline-basic-elements.md rename to documentation/general/sdn-pipeline-basic-elements.md index 242961d13..10b3058f3 100644 --- a/documentation/general/design/sdn-pipeline-basic-elements.md +++ b/documentation/general/sdn-pipeline-basic-elements.md @@ -1,7 +1,3 @@ -[<< Back to parent directory](../README.md) ] - -[<< Back to DASH top-level Documents](../../README.md#contents) ] - # SDN pipeline basic elements - [Packet flow - selecting packet direction](#packet-flow---selecting-packet-direction) @@ -26,6 +22,7 @@ - [Service Tunneling](#service-tunneling) - [Inbound from LB](#inbound-from-lb) - [Outbound NAT - L4](#outbound-nat---l4) + - [To be added: VNET Peering and VNET Global Peering](#to-be-added--vnet-peering-and-vnet-global-peering) - [References](#references) ## Packet flow - selecting packet direction diff --git a/documentation/gnmi/README.md b/documentation/gnmi/README.md index d9a538c73..0a8edec7a 100644 --- a/documentation/gnmi/README.md +++ b/documentation/gnmi/README.md @@ -1,13 +1,17 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] - # DASH gNMI Documents This folder contains DASH gNMI Interface design and requirements documents. -# Contents +## Design + +| Document | Description | +| ------------------------------------------------------------------ | ------------------------------- | +|[dash-reference-config-example.md](dash-reference-config-example.md)|Reference configuration example | + + + +## Requirements -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH gNMI design & architecture documents | -| [requirements](requirements/README.md) | DASH gNMI requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/gnmi/design/dash-reference-config-example.md b/documentation/gnmi/dash-reference-config-example.md similarity index 100% rename from documentation/gnmi/design/dash-reference-config-example.md rename to documentation/gnmi/dash-reference-config-example.md diff --git a/documentation/gnmi/design/README.md b/documentation/gnmi/design/README.md deleted file mode 100644 index f41f3e157..000000000 --- a/documentation/gnmi/design/README.md +++ /dev/null @@ -1,13 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH gNMI Design Documents - -This folder contains DASH gNMI northbound API design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | -| [Reference configuration example (JSON)](dash-reference-config-example.md) |Configuration schema example | diff --git a/documentation/gnmi/requirements/README.md b/documentation/gnmi/requirements/README.md deleted file mode 100644 index c3a0848ac..000000000 --- a/documentation/gnmi/requirements/README.md +++ /dev/null @@ -1,13 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - - -# DASH gNMI Requirements Documents - -This folder contains DASH gNMI northbound API compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/high-avail/design/AMD-Pensando_HA_Proposal.md b/documentation/high-avail/AMD-Pensando_HA_Proposal.md similarity index 97% rename from documentation/high-avail/design/AMD-Pensando_HA_Proposal.md rename to documentation/high-avail/AMD-Pensando_HA_Proposal.md index 7afc8a37f..2f7ad417f 100644 --- a/documentation/high-avail/design/AMD-Pensando_HA_Proposal.md +++ b/documentation/high-avail/AMD-Pensando_HA_Proposal.md @@ -1,723 +1,723 @@ -# DASH High Availability proposal - -## Overview - -This document describes the High availability mechanisms for DPUs in the DASH framework. High Availability is achieved by pairing DPUs such that a failure in any one in the pair results in the surviving DPU taking over forwarding on behalf of the failed DPU. Since forwarding on the DPU is stateful, all forwarding state from each DPU is synchronized with the other so that the switchover is seamless for user traffic. This document describes the procedures for such pairing and the mechanisms for synchronizing state between the pair. - -## Design Goals - -This proposal has the following design goals - -1. All connections setup before switchover should work reliably after planned and unplanned switchovers -1. 0 downtime planned switchover, <2 sec downtime unplanned switchover -1. Data packets should not be dropped due to flow replication delays -1. Sync connection setup and teardown at datapath rate to support high CPS -1. Sync only required packets to conserve PPS for data traffic - -## Functional Description - -### Terminology - -![](images/terminology.001.png) - -The above picture shows the terminology used for the layers in this document. The SONIC stack represents the sonic stack including gnmi, swss, syncd etc.. DASH SDK is the vendor implementation specific DASH SDK. The DPU is the vendor implementation of the hardware datapath and any associated sw components. - -### Network Topology - -The 2 DPUs in the pairing relation is administratively defined via configuration. Pairing and synchronization happens via the data network. Each DPU is typically connected to the data fabric via 2 interfaces which provides high availability in case of failure in one of the network paths (link or tor). Each DPU has the following IPs - -1. Link IPs connecting to the the TOR -1. A Control plane Loopback IP unique to each DPU -1. 2 Datapath VIPs shared between the pair of DPUs - -The loopback IPs (#2, and #3 above) are advertised and maintained via dynamic advertisements from the DPU. The picture below shows the network topology with 2 paired DPUs. - -![](images/topology.002.jpeg) - -#### Control Network Loopback IP (CNIP) - -The control plane Loopback IP, also referred to in this document as the CNIP, is unique to each DPU and provides the ability to address each DPU as long as some connectivity exists between the DPU and the network fabric. This is used to communicate between the paired DPUs. All control plane traffic between the DPUs is sourced from this IP and addressed to this IP. The Peer DPU is identified by its control plane loopback IP. The CNIP is used for pairing between the DPUs by exchanging control messages, for all flow synchronization packets - both bulk and datapath sync (covered later) and datapath heartbeat messages . The Same IP address is used by the datapath to originate and terminate flow sync packets. - -#### Datapath VIP - -The Datapath VIP IPs are the addresses that are used to direct traffic towards the DPU by the rest of the network. The use of 2 VIP loopback IPs allows for the DPUs to provide an ENI based active-active forwarding paradigm. - -### ENI based active-active - -The 2 Datapath VIPs (DP-VIP) are shared between the paired DPUs. Each DP-VIP is associated with a primary and a secondary DPU. In steady state each DPU has one primary DP-VIP and a secondary DP-VIP while on the peer DPU the roles are flipped. The DPU attracts traffic such that traffic for each DP-VIP lands on the primary DPU for the VIP. The DPU achieves this by signaling via network protocols to the fabric. - -Each ENI configured on the DPU is associated with a DP-VIP by the controller. In steady state for the set of ENIs managed by a DPU pair, traffic to and from a set of ENIs land on one of the DPUs while traffic to/from the remaining ENIs are handled by the other DPU. Thus the dataplanes on both the DPUs are actively forwarding traffic. On failure or administrative switchover, the secondary DPU takes over the active DPUs role for the DP-VIP and hence the DPU ends up handling traffic for both the DP-VIPs at the same time. State synchronization between the 2 DPUs ensures that on switchover there is no loss in state and switchover is seamless for user traffic. - -### Datapath Heartbeat - -Each DPU sends heartbeat messages at a configured interval to its peer. When a peer loses a set number of heartbeats it declares the peer unreachable and a switchover is initiated. The interval between heartbeats and the number of missed heartbeats are configurable. The Heartbeats can be aggressive hence it is left to the DPU to perform the heartbeat. - -## State Synchronization - -State synchronization between the 2 DPUs uses the CNIP IP. All state synchronization happens at the granularity of the DP-VIP and happens from the primary of the DP-VIP towards the secondary. State synchronization happens in 2 parallel stages - -1. Bulk Sync -1. Data path sync - -The below figure shows the channels used for synchronization. The Bulk sync and the datapath synchronization uses 2 different channels. - -![](images/channels.003.png) - -The Control Plane channel is managed by SONiC stack. The SONiC stack relays messages from the DPU to the remote DPU in addition to originating and consuming messages. The Control Plane Channel is used to relay messages between the primary and active. This channel carries Bulk Sync messages, Control messages between the SONIC stack and control messages between the DPUs. This channel is a gRPC bidirectional stream between the 2 SONIC instances in this proposal - -In addition to the Control Plane Channel, there is a DP Sync channel. This channel is between the data paths of the DPUs. This channel is used for Datapath Synchronization which is covered in a later section. - -### Bulk Sync - -On bootup of a DPU, the DPU attempts to look for the configured peer. If the DPU is not able to reach its peer in a given interval of time, the state of the DPU is said to be “standalone” mode. Both the DP-VIPs are set to PRIMARY-STANDALONE mode. This causes the DP-VIP IP addresses to be advertised to the network. Traffic received on the DP-VIP is forwarded and flow state is built accordingly. - -As the peer DPU comes online at some later point in time and Control Plane connectivity is established between the two DPUs, the peer requests for a sync of all accumulated states. This sync is called the Bulk sync. - -The picture above shows a block schematic. The SONiC stack establishes the Control Plane Channel on discovering the liveness of the peer. The Control Plane channel is a bi-directional channel. This channel is defined as a bi-dir streaming grpc channel. The bidirectional stream allows the peers to sync in lock step in an efficient way. The messages used on the channel are defined in a later section. The usage of the message in different workflows is defined later. - -Bulk sync follows the perfect-sync method of marking all flows created during the bulk sync process with a color and syncing all flows not that color to the secondary. - -### Datapath Synchronization - -An Inline flow replication synchronization is employed to allow for reliable and timely synchronization. This synchronization models the primary and the secondary DPUs as one logical DSC. Flow setup and delete are complete only once the operation is performed on both the primary and the secondary. The primary`s policy evaluation result is honored on the secondary so no policy evaluation happens on the secondary. There is a reconciliation that is performed on switchover when the secondary becomes primary. That is discussed in a later section. - -![](images/dpreplication.004.png) - -Only Control packets for a flow are synched to the secondary. Once the flow has been synchronized to the secondary the primary does not forward any packets to the secondary. The Primary tracks the status of the synchronization to achieve the short circuit. The exact mechanisms for doing this will vary for each hardware implementation and is not covered here. The inline synchronization mechanism has the advantage that there is no buffering of data packets in the DPU. any network losses either in the Source-DPU, DPU-DPU, DPU-Dest paths are handled due to retransmission by the source (in case of TCP) or handled as regular network drops (in case of UDP/ICMP) - -The sync packets between the DPUs are logically structured as below. - -![](images/dp_repl_packet.005.png) - -### Interaction between Bulk Sync and Datapath Sync - -Due to the scale requirements for DASH the flow table size that needs to be handled during bulk sync can be very large and hence the bulk sync process can take a long time to complete. It is not possible to halt all traffic that would create new flows during this time. Hence the sync mechanism has to handle creation of new flows during bulk sync. It is also possible that there might be changes in the policy that might affect existing flows. The perfect sync mechanism calls for marking different “color”s to flows that are created after the start of bulk sync. The flow table is walked and all flows not the current color are synchronized to the peer. Any flows that are created during the bulk sync phase are inline synchronized via the datapath synchronization path. Other challenges include - -- Handling of flows that are affected by policy changes -- Flows that terminate during bulk sync -- Flow aging during bulk sync - -All these problems require the hw implementation maintain a mechanism of marking the flows with a synchronization status and handle these events as per that status. During Bulk sync there might be flows that are in the bulk sync snapshot that are affected by changes. The actual mechanism of handling would differ by implementation and is not covered here. When implementation specific signaling is needed between the DPUs for such optimizations, the control plane channel allows for such messages to be relayed. - -## HA State Machine - -![](images/ha_sm.006.png) - -**Bootup** - -This is the initial state for the box on bootup. The statemachine waits for external input to indicate that config is complete. At which point it progresses to the next state - -**Init** - -In this state the get\_capabilities call retrieves the local datapath capabilities. The SAI SDK call returns the local DPs capabilities as defined in the capabilities struct previously. This will be used in later exchanges with the peer. Validations of the local configuration as well as any other local checks are performed in this state. If there are configuration errors the state machine moves to Cfg\_err state and waits for configuration changes to fix the errors. - -**Peer Connect** - -There is a timed attempt made to connect to the peer in this stage. If there is no connectivity established with the peer within a configured timeout interval, the operational state moves to standalone-primary. - -**Standalone Primary** - -In the standalone primary mode all datapath functions are enabled and the DPU starts forwarding traffic. Since there is no peer connectivity established, no flow synchronization is needed. - -**Compat Check** - -The peer connect sequence exchanges capabilities with the peer. These received capabilities are then compared with the local capabilities for compatibility. The compat is done in 2 stages. The first is compatibility at the SONIC stack level. Any common attributes (across all implementations) is checked here. The next stage is to check compatibility between the underlying DASH implementations. This is done via a SAI-DASH call to the SDK. - -**Start Sync** - -Once the two peers are deemed compatible bulk sync is initiated between the peers. First the SONIC stack establishes a bidirectional streaming sync channel between the peers (Control Plane Channel). This channel is then passed to the DASH SDK. The underlying DPU implementation then uses the CP Channel to exchange messages between the peers. The data transfer involves Flow sync messages from Primary to Secondary. There can also be messages from the Secondary to the Primary to back pressure or optimize the primary->secondary flow data. - -**Wait Sync** - -The State machine on the SONIC stack then waits for the DP to signal completion of bulk sync in this state. The completion of the bulk sync is notified by the DP in a CP control message. At this point further states are defined by the configured Admin role of the DPU. - -**Wait Peer Sync** - -This state is on node that is in standalone primary and is servicing a bulk sync request from the newly booting up peer. SInce the Bulk sync is initiated from the new node, the existing node waits for a signal from the SDK that bulk sync has been completed. When the BulkSyncDone message is received it is relayed to the peer and also triggers the transition out of this state. - -**Wait HA Role Activation** - -As per deployment requirements the controller has the control to activate the HA role. Transition to Primary or Secondary happens only after the controller signals so. This state waits on such an external trigger to activate. - -**Activate Primary** - -This state is reached when bulk sync is complete and the admin role of the node is primary. The node then attempts to take over as the primary. This is triggered by notifying the underlying datapath to switch to the primary role. At this point the VIP routes are advertised to attract traffic. - -**Wait Primary** - -In this state the node is waiting for the Datapath to signal completion of taking over as primary. The datapath indicates this by notifying the SONIC stack via an oper status update message. At this point the peer is notified to move to standby. - -**Activate Secondary** - -This state is reached when bulk sync is complete and the admin role of the node is secondary. The node then attempts to get to the secondary state. This is triggered by notifying the underlying datapath to switch to the secondary role. At this point the VIP routes are advertised. The routes may be advertised with a less desirable metric. - -**Wait Secondary** - -In this state the node is waiting for the Datapath to signal completion of state as secondary. The datapath indicates this by notifying the SONIC stack via an oper status update message. - -**Secondary** - -If the configured role is secondary the node goes to terminal state secondary. The DPU then waits for a switchover event to switch to primary. In this state the node keeps receiving flow sync messages from the peer and keeps the datapath ready for switchover. - -**Primary** - -This is the terminal state for the node when the node is configured as the primary. In this state the local datapath is forwarding traffic actively and synching state to the peer. - -### SAI Definitions - -The SAI API calls necessary for communication between the SONIC stack and the SAI-DASH SDK are defined below. - -```cpp -#include - -/** - * @brief Notification data format for received for the DPU Control message - * callback. - */ -typedef struct _sai_dash_dpu_control_message_notification_data_t { - /** - * @brief Control message Type - */ - sai_uint16_t type; - - /** - * @brief Data for the message - */ - sai_u8_list_t data; -} sai_dash_dpu_control_message_notification_data_t; - -/** - * @brief L4 information for TCP and UDP flows. - */ -typedef struct _sai_dash_flow_tcp_udp_info_t { - /** Source port */ - sai_uint16_t src_port; - - /** Destination port */ - sai_uint16_t dst_port; -} sai_dash_flow_tcp_udp_info_t; - -/** - * @brief L4 flow information for ICMP flows. - */ -typedef struct _sai_dash_flow_icmp_info_t { - /** ICMP Type */ - sai_uint32_t type; - - /** ICMP code */ - sai_uint32_t code; - - /** ICMP ID */ - sai_uint32_t id; -} sai_dash_flow_icmp_info_t; - -/** - * @brief L4 Flow information - */ -typedef union _sai_dash_flow_l4_info_t { - /** TCP/UDP info */ - sai_dash_flow_tcp_udp_info_t tcp_udp; - - /** ICMP Info */ - sai_dash_flow_icmp_info_t icmp; -} sai_dash_flow_l4_info_t; - -/** - * @brief Notification Data format for received flow sync messages from the DPU - */ -typedef struct _sai_dash_flow_sync_message_notification_data_t { - /** - * @brief ENI MAC for this flow - */ - sai_mac_t eni_mac; - - /** - * @brief Source IP address - */ - sai_ip_address_t src_ip; - - /** - * @brief Destination IP address - */ - sai_ip_address_t dst_ip; - - /** - * @brief IP Protocol - */ - sai_uint8_t protocol; - - /** - * @brief L4 Information (TCP/UDP/ICMP) - */ - sai_dash_flow_l4_info_t l4_info; - - /** - * @brief policy results metadata - */ - sai_u8_list_t metadata; -} sai_dash_flow_sync_message_notification_data_t; - -/** - * @brief Attributes ID for get_peer_capabilities - */ -typedef enum _sai_get_peer_capabilities_attr_t { - /** - * @brief HB Interval - * @type sai_uint16_t - */ - SAI_DASH_GET_PEER_CAPABILITIES_ATTR_HB_INTERVAL, - - /** - * @brief HB Miss Count - * @type sai_uint16_t - */ - SAI_DASH_GET_PEER_CAPABILITIES_ATTR_HB_MISS_COUNT, - - /** - * @brief Capabilities - * @type sai_uint8_list_t - */ - SAI_DASH_GET_PEER_CAPABILITIES_ATTR_CAPABILITIES, - -} sai_get_peer_capabilities_attr_t; - -/** - * @brief Get Capabilities of the DP - * - * @param[in] sai_object_id_t vipID - * @param[in] attr_count Number of attributes - * @param[in] attr_list Array of attributes - * - * @return #SAI_STATUS_SUCCESS on success Failure status code on error - */ -typedef sai_status_t (*sai_get_capabilities_fn) ( - _In_ sai_object_id_t vipID; - _In_ uint32_t attr_count, - _InOut_ sai_attribute_t *attr_list); - -/** - * @brief Attributes ID for register_cp_channel - */ -typedef enum _sai_register_cp_channel_attr_t { - /** - * @brief Named pipe for bi-directional control stream - * @type sai_uint8_list_t - */ - SAI_DASH_REGISTER_CP_CHANNEL_ATTR_NAMED_PIPE, -} - -/** - * @brief Register the CP control channel with the DP - * - * @param[in] sai_object_id_t vipID - * @param[in] attr_count Number of attributes - * @param[in] attr_list Array of attributes - * - * @return #SAI_STATUS_SUCCESS on success Failure status code on error - */ -typedef sai_status_t (*sai_register_cp_channel_fn) ( - _In_ sai_object_id_t vipID; - _In_ uint32_t attr_count, - _In_ sai_attribute_t *attr_list); - -/** - * @brief Attributes ID for process_peer_capabilities - */ -typedef enum _sai_process_peer_capabilities_attr_t { - /** - * @brief HB Interval - * @type sai_uint16_t - */ - SAI_DASH_PROCESS_PEER_CAPABILITIES_ATTR_HB_INTERVAL, - - /** - * @brief HB Miss Count - * @type sai_uint16_t - */ - SAI_DASH_PROCESS_PEER_CAPABILITIES_ATTR_HB_MISS_COUNT, - - /** - * @brief Capabilities - * @type sai_uint8_list_t - */ - SAI_DASH_PROCESS_PEER_CAPABILITIES_ATTR_CAPABILITIES, - -} sai_process_peer_capabilities_attr_t; - -/** - * @brief Process peer capabilities of peer DPU - * - * @param[in] sai_object_id_t vipID - * @param[in] attr_count Number of attributes - * @param[in] attr_list Array of attributes - * - * @return #SAI_STATUS_SUCCESS on success Failure status code on error - */ -typedef sai_status_t (*sai_process_peer_capabilities_fn) ( - _In_ sai_object_id_t vipID; - _In_ uint32_t attr_count, - _Inout_ sai_attribute_t *attr_list); - -/** - * @brief Attributes ID for process_dpu_control_message - */ -typedef enum _sai_process_dpu_control_message_attr_t { - /** - * @brief Type - * @type sai_uint16_t - */ - SAI_DASH_PROCESS_DPU_CONTROL_MESSAGE_ATTR_TYPE, - - /** - * @brief Data - * @type sai_u8_list_t - */ - SAI_DASH_PROCESS_DPU_CONTROL_MESSAGE_ATTR_DATA, -} sai_process_dpu_control_message_attr_t; - -/** - * @brief Control Messages exchanged between Datapaths of DPU - * - * @param[in] sai_object_id_t vipID - * @param[in] attr_count Number of attributes - * @param[in] attr_list Array of attributes - * - * @return #SAI_STATUS_SUCCESS on success Failure status code on error - */ -typedef sai_status_t (*sai_process_dpu_control_message_fn) ( - _In_ sai_object_id_t vipID; - _In_ uint32_t attr_count, - _In_ sai_attribute_t *attr_list); - -/** - * @brief Attributes ID for process_flow_sync_message - */ -typedef enum _sai_process_flow_sync_message_attr_t { - /** - * @brief Flow information - * @type sai_dash_flow_sync_message_notification_data_t - */ - SAI_DASH_PROCESS_FLOW_SYNC_MESSAGE_ATTR_FLOW_INFO, -} sai_process_flow_sync_message_attr_t; - -/** - * @brief FLow Sync messages exchanged between of DPU - * - * @param[in] sai_object_id_t vipID - * @param[in] attr_count Number of attributes - * @param[in] attr_list Array of attributes - * - * @return #SAI_STATUS_SUCCESS on success Failure status code on error - */ -typedef sai_status_t (*sai_process_flow_sync_message_fn) ( - _In_ sai_object_id_t vipID; - _In_ uint32_t attr_count, - _In_ sai_attribute_t *attr_list); - -/** - * @brief Attributes ID for oper_role_status - */ -typedef enum _sai_oper_role_status_attr_t { - /** - * @brief OperState - * @type sai_uint16_t - */ - SAI_DASH_OPER_ROLE_STATUS_ATTR_OPER_STATE, -}; - -/** - * @brief Update Oper Role state - * - * Updates from DPU for the operational role. Current state is passed as a attribute. - * - * @param[in] sai_object_id_t vipID - * @param[in] attr_count Number of attributes - * @param[in] attr_list Array of attributes - * - * @return #SAI_STATUS_SUCCESS on success Failure status code on error - */ -typedef sai_status_t (*sai_oper_role_status_fn) ( - _In_ sai_object_id_t vipID; - _In_ uint32_t attr_count, - _In_ sai_attribute_t *attr_list); - -/** - * @brief Attributes ID for cp_control_message - */ -typedef enum _sai_cp_control_message_attr_t { - /** - * @brief Operation - * @type sai_uint16_t - */ - SAI_DASH_CP_CONTROL_MESSAGE_ATTR_OPERATION, -} sai_cp_control_message_attr_t; - -/** - * @brief Process CP control message - * - * Process control messages between DPUs. The Operation is passed as a attribute. - * - * @param[in] sai_object_id_t vipID - * @param[in] attr_count Number of attributes - * @param[in] attr_list Array of attributes - * - * @return #SAI_STATUS_SUCCESS on success Failure status code on error - */ -typedef sai_status_t (*sai_cp_control_message_fn) ( - _In_ sai_object_id_t vipID; - _In_ uint32_t attr_count, - _In_ sai_attribute_t *attr_list; -) - -typedef struct _sai_dash_ha_api_t { - sai_register_cp_channel_fn register_cp_channel; - sai_get_capabilities_fn get_capabilities; - sai_process_peer_capabilities_fn process_peer_capabilities; - sai_process_dpu_control_message_fn process_dpu_control_message; - sai_process_flow_sync_message_fn process_flow_sync_message; - sai_oper_role_status_fn oper_role_status; - sai_cp_control_message_fn cp_control_message; -} sai_dash_ha_api_t; -``` - -### Control Plane Channel Message Definitions - -The below definitions pertain to the GRPC channel defined as the Control Plane Channel. This channel is established between the SONIC stacks on the two peer nodes. These messages can be originated from SONIC or sent by the DPU implementation and relayed via SONIC. - -```protobuf -syntax = "proto3"; -package dashsync; - -// IP address families -enum IPAF { - IP_AF_NONE = 0; - IP_AF_INET = 1; // IPv4 - IP_AF_INET6 = 2; // IPv6 -} - -// Admin Roles for a VIP -enum AdminRole { - // Unspecified - AdminNone = 0; - // Primary node for peering session. - AdminPrimary = 1; - // Secondary node for peering session. - AdminSecondary = 2; -} - -// Operational state of the VIP -enum OperRole { - // Unspecified - OperNone = 0; - // Primary node for peering session. - OperPrimary = 1; - // Secondary node for peering session. - OperSecondary = 2; - // Standalone mode. No active peering. - OperStandalone = 3; -} - - -// IP Address object -message IPAddress { - IPAF Af = 1; - // IP address family - oneof v4_or_v6 { - // IPv4 address - fixed32 V4Addr = 2; - // IPv6 address - bytes V6Addr = 3; - } -} - -// L4 portion of flow key tuple -message FlowL4Info { - // key fields for TCP/UDP flows - message TCPUDPInfo { - uint32 SrcPort = 1; - uint32 DstPort = 2; - } - // key fields for ICMP flows - message ICMPInfo { - uint32 Type = 1; - uint32 Code = 2; - uint32 Id = 3; - } - oneof l4_info { - TCPUDPInfo TcpUdpInfo = 1; - ICMPInfo IcmpInfo = 2; - } -} - -// flow key for IP flows -message IPFlowKey { - // ENI MAC address - uint64 EniMAC = 1; - // source IP seen in the packet - IPAddress SrcIP = 2; - // destination IP seen in the packet - IPAddress DstIP = 3; - // IP protocol - uint32 IPProtocol = 4; - // L4 information of the flow key - FlowL4Info L4Info = 5; -} - -// Flow Sync Msg -message FlowSyncMsg { - message FlowInfo { - // DP-VIP associated to the flow - bytes VipId = 1; - // IP Flow tuple - IPFlowKey Key = 2; - // Metadata containing policy results - bytes Metadata = 3; - } - repeated FlowInfo Info = 1; -} - -// Control plane operations carried in CPControlMsg -enum CPControlOperation { - OpNone = 0; - OpStartBulkSync = 1; - OpBulkSyncDone = 2; - OpShutdownPrepare = 3; - OpShutdownReady = 4; - OpShutdown = 5; - OpSwitchover = 6; - OpSwitchoverReady = 7; - OpSwitchoverDone = 8; -} - -// Message used to trigger/Notify state change events between peers. -message CPControlMsg { - // The VIP this event pertains to. - bytes VipId = 1; - // Operation/Event - CPControlOperation Operation = 2; -} - -// CompatCheck used to carry the compatibility information for the node -// contains information about the DP-VIPs, the DPUs capabilities and any -// other relevant capabilities to be checked. -message CompatCheck { - // VIP related parameters. One added per VIP. - message DpVIPInfo { - bytes VipId = 1; - // Address configured - IPAddress VipIP = 2; - // Role of the VIP on this Node - AdminRole AdminRole = 3; - // Metric used for the protocol to differentiate the primary/secondary routes. - // Valid when using BGP as the underlay protocol. - uint32 ProtocolMetric = 4; - } - // DPU capabilities on this node. - message DPUInfo { - // Configured interval for HB messages - uint32 HBinterval = 1; - // Number of HB misses that will trigger switchover - uint32 MissCount = 2; - // Opaque - bytes Capabilities = 3; - } - // Compatibility/Capability information for each VIP on the node. Typically two entries. - repeated DpVIPInfo VipInfo = 1; - // Copability information for the Datapath. - DPUInfo DPUCapabilities = 2; -} - -// Results from the Compatibility check between the nodes. -enum CompatResult { - CompatSuccess = 0; - CompatFailure = 1; -} - -// Results from the Compatibility check between the nodes. -message CompatResults { - // Compatibility Error information pertaining to the VIP - message DpVIPCompatError { - // VIP this pertains to - bytes VipID = 1; - // Error code - uint32 Code = 2; - // detailed user readable reason - string Reason = 3; - } - - message DPUCompatError { - // Error code - uint32 Code = 2; - // detailed user readable reason - string Reason = 3; - } - CompatResult Result = 1; - repeated DpVIPCompatError DpVIPInfo = 2; - DPUCompatError DPUInfo = 3; -} - -// Control Message. This can be either from the Primary to Secondary or vice-versa -message DPUControlMsg { - // Control Message type - uint32 Type = 1; - // Data for the message - bytes Data = 2; -} - -// Wrapper message for all control messages between peers -message ControlMsg { - oneof ctrl_msg { - DPUControlMsg DPUControlMsg = 2; - CompatCheck CompatCheck = 3; - CompatResults CompatResults = 4; - CPControlMsg CPControlMsg = 5; - } -} - -// Wrapper message for all messages between the peers. -message SyncMsg { - oneof sync_msg { - FlowSyncMsg FlowSyncMsg = 1; - ControlMsg ControlMsg = 2; - } -} - -service CPSync { - rpc SyncChannel(stream SyncMsg) returns (stream SyncMsg) {}; -} -``` - -## Message Flows - -The following are some important procedures and corresponding control message flows - -### Node Pairing and Bulk Sync - -![](images/node_pairing.007.png) - -Node pairing follows the state machine defined in the previous section. SONIC stack does initial connection to the peer. For each DPU pair the sonic stack establishes a bi-directional streaming channel to the peer. All control messages including bulk sync uses this channel. There is also a parallel channel registered between the DPU data paths directly. This channel will carry the DP flow sync messages between the DPUs (represented by the orange dotted lines in the picture above. - -The initial compatibility messages exchanged between the peers ensures that capabilities match. These could be hardware capabilities, software capabilities, scale limits etc. As was mentioned earlier these capabilities are a combination of capabilities from the SONIC and capabilities of the DPU. - -The SONIC stack initiates bulk sync between the peers and also notifies the DPU via the SDK to start bulk sync. The DPU sends and receives flow synchronization messages via the CP stream. DPUs can back pressure or optimize the bulk sync process with its DPU peer by exchanging the DPUControlMsgs on the channel. - -As is evident from the picture above the Datapath flow synchronization may be initiated by the DPUs in parallel to the bulk sync process. - -### Unplanned Switchover - -![](images/unplanned_switchover.008.png) - -This is triggered by failures in the network or a failure on the peer DPU. This is typically detected via loss of heartbeat message between the DPUs. The DPU then notifies the SONIC stack of the change via the notification message about the HB loss and initiates the switchover to standalone state on the DPU. Once the switchover is complete the SONIC stack is notified of the change via a notification. - -All flows inserted on the secondary before switchover are after evaluation of primary`s policies. Flow resimulation triggers the flows to be evaluated as per local policies. The SONIC stack waits for confirmation from the SDN controller that all policy configurations on the DPU are updated and then initiates flow reconciliation on the DPU. This triggers flow resimulation to update policy results on flows as per current policy configuration. - -### Planned Switchover - -![](images/planned_switchover.009.jpeg) - -Switchover can be a planned event for maintenance and other reasons. With planned switchover the goal is to have close to zero loss and to coordinate between the primary and secondary to achieve this goal. Both the DP-VIPs will switch roles to primary on this trigger. - -The controller initiates the planned switchover and notifies the secondary DPU to initiate switchover. Once switchover is complete the newly primary DPU relays a SwitchoverDone message to the old primary DPU. The old primary initiates a withdrawal of protocol routes so the network can drain traffic. During this time the old primary continues to forward traffic so any traffic in transit is forwarded without being dropped. During this network convergence timeout both the primary and secondary are forwarding traffic and flow sync messages may be exchanged in both directions. - -After the network convergence time the new Primary enters PRE\_STANDALONE state and waits for a flush time out and transitions to standalone state. -**AMD-Pensando** 25 +# DASH High Availability proposal + +## Overview + +This document describes the High availability mechanisms for DPUs in the DASH framework. High Availability is achieved by pairing DPUs such that a failure in any one in the pair results in the surviving DPU taking over forwarding on behalf of the failed DPU. Since forwarding on the DPU is stateful, all forwarding state from each DPU is synchronized with the other so that the switchover is seamless for user traffic. This document describes the procedures for such pairing and the mechanisms for synchronizing state between the pair. + +## Design Goals + +This proposal has the following design goals + +1. All connections setup before switchover should work reliably after planned and unplanned switchovers +1. 0 downtime planned switchover, <2 sec downtime unplanned switchover +1. Data packets should not be dropped due to flow replication delays +1. Sync connection setup and teardown at datapath rate to support high CPS +1. Sync only required packets to conserve PPS for data traffic + +## Functional Description + +### Terminology + +![](images/terminology.001.png) + +The above picture shows the terminology used for the layers in this document. The SONIC stack represents the sonic stack including gnmi, swss, syncd etc.. DASH SDK is the vendor implementation specific DASH SDK. The DPU is the vendor implementation of the hardware datapath and any associated sw components. + +### Network Topology + +The 2 DPUs in the pairing relation is administratively defined via configuration. Pairing and synchronization happens via the data network. Each DPU is typically connected to the data fabric via 2 interfaces which provides high availability in case of failure in one of the network paths (link or tor). Each DPU has the following IPs + +1. Link IPs connecting to the the TOR +1. A Control plane Loopback IP unique to each DPU +1. 2 Datapath VIPs shared between the pair of DPUs + +The loopback IPs (#2, and #3 above) are advertised and maintained via dynamic advertisements from the DPU. The picture below shows the network topology with 2 paired DPUs. + +![](images/topology.002.jpeg) + +#### Control Network Loopback IP (CNIP) + +The control plane Loopback IP, also referred to in this document as the CNIP, is unique to each DPU and provides the ability to address each DPU as long as some connectivity exists between the DPU and the network fabric. This is used to communicate between the paired DPUs. All control plane traffic between the DPUs is sourced from this IP and addressed to this IP. The Peer DPU is identified by its control plane loopback IP. The CNIP is used for pairing between the DPUs by exchanging control messages, for all flow synchronization packets - both bulk and datapath sync (covered later) and datapath heartbeat messages . The Same IP address is used by the datapath to originate and terminate flow sync packets. + +#### Datapath VIP + +The Datapath VIP IPs are the addresses that are used to direct traffic towards the DPU by the rest of the network. The use of 2 VIP loopback IPs allows for the DPUs to provide an ENI based active-active forwarding paradigm. + +### ENI based active-active + +The 2 Datapath VIPs (DP-VIP) are shared between the paired DPUs. Each DP-VIP is associated with a primary and a secondary DPU. In steady state each DPU has one primary DP-VIP and a secondary DP-VIP while on the peer DPU the roles are flipped. The DPU attracts traffic such that traffic for each DP-VIP lands on the primary DPU for the VIP. The DPU achieves this by signaling via network protocols to the fabric. + +Each ENI configured on the DPU is associated with a DP-VIP by the controller. In steady state for the set of ENIs managed by a DPU pair, traffic to and from a set of ENIs land on one of the DPUs while traffic to/from the remaining ENIs are handled by the other DPU. Thus the dataplanes on both the DPUs are actively forwarding traffic. On failure or administrative switchover, the secondary DPU takes over the active DPUs role for the DP-VIP and hence the DPU ends up handling traffic for both the DP-VIPs at the same time. State synchronization between the 2 DPUs ensures that on switchover there is no loss in state and switchover is seamless for user traffic. + +### Datapath Heartbeat + +Each DPU sends heartbeat messages at a configured interval to its peer. When a peer loses a set number of heartbeats it declares the peer unreachable and a switchover is initiated. The interval between heartbeats and the number of missed heartbeats are configurable. The Heartbeats can be aggressive hence it is left to the DPU to perform the heartbeat. + +## State Synchronization + +State synchronization between the 2 DPUs uses the CNIP IP. All state synchronization happens at the granularity of the DP-VIP and happens from the primary of the DP-VIP towards the secondary. State synchronization happens in 2 parallel stages + +1. Bulk Sync +1. Data path sync + +The below figure shows the channels used for synchronization. The Bulk sync and the datapath synchronization uses 2 different channels. + +![](images/channels.003.png) + +The Control Plane channel is managed by SONiC stack. The SONiC stack relays messages from the DPU to the remote DPU in addition to originating and consuming messages. The Control Plane Channel is used to relay messages between the primary and active. This channel carries Bulk Sync messages, Control messages between the SONIC stack and control messages between the DPUs. This channel is a gRPC bidirectional stream between the 2 SONIC instances in this proposal + +In addition to the Control Plane Channel, there is a DP Sync channel. This channel is between the data paths of the DPUs. This channel is used for Datapath Synchronization which is covered in a later section. + +### Bulk Sync + +On bootup of a DPU, the DPU attempts to look for the configured peer. If the DPU is not able to reach its peer in a given interval of time, the state of the DPU is said to be “standalone” mode. Both the DP-VIPs are set to PRIMARY-STANDALONE mode. This causes the DP-VIP IP addresses to be advertised to the network. Traffic received on the DP-VIP is forwarded and flow state is built accordingly. + +As the peer DPU comes online at some later point in time and Control Plane connectivity is established between the two DPUs, the peer requests for a sync of all accumulated states. This sync is called the Bulk sync. + +The picture above shows a block schematic. The SONiC stack establishes the Control Plane Channel on discovering the liveness of the peer. The Control Plane channel is a bi-directional channel. This channel is defined as a bi-dir streaming grpc channel. The bidirectional stream allows the peers to sync in lock step in an efficient way. The messages used on the channel are defined in a later section. The usage of the message in different workflows is defined later. + +Bulk sync follows the perfect-sync method of marking all flows created during the bulk sync process with a color and syncing all flows not that color to the secondary. + +### Datapath Synchronization + +An Inline flow replication synchronization is employed to allow for reliable and timely synchronization. This synchronization models the primary and the secondary DPUs as one logical DSC. Flow setup and delete are complete only once the operation is performed on both the primary and the secondary. The primary`s policy evaluation result is honored on the secondary so no policy evaluation happens on the secondary. There is a reconciliation that is performed on switchover when the secondary becomes primary. That is discussed in a later section. + +![](images/dpreplication.004.png) + +Only Control packets for a flow are synched to the secondary. Once the flow has been synchronized to the secondary the primary does not forward any packets to the secondary. The Primary tracks the status of the synchronization to achieve the short circuit. The exact mechanisms for doing this will vary for each hardware implementation and is not covered here. The inline synchronization mechanism has the advantage that there is no buffering of data packets in the DPU. any network losses either in the Source-DPU, DPU-DPU, DPU-Dest paths are handled due to retransmission by the source (in case of TCP) or handled as regular network drops (in case of UDP/ICMP) + +The sync packets between the DPUs are logically structured as below. + +![](images/dp_repl_packet.005.png) + +### Interaction between Bulk Sync and Datapath Sync + +Due to the scale requirements for DASH the flow table size that needs to be handled during bulk sync can be very large and hence the bulk sync process can take a long time to complete. It is not possible to halt all traffic that would create new flows during this time. Hence the sync mechanism has to handle creation of new flows during bulk sync. It is also possible that there might be changes in the policy that might affect existing flows. The perfect sync mechanism calls for marking different “color”s to flows that are created after the start of bulk sync. The flow table is walked and all flows not the current color are synchronized to the peer. Any flows that are created during the bulk sync phase are inline synchronized via the datapath synchronization path. Other challenges include + +- Handling of flows that are affected by policy changes +- Flows that terminate during bulk sync +- Flow aging during bulk sync + +All these problems require the hw implementation maintain a mechanism of marking the flows with a synchronization status and handle these events as per that status. During Bulk sync there might be flows that are in the bulk sync snapshot that are affected by changes. The actual mechanism of handling would differ by implementation and is not covered here. When implementation specific signaling is needed between the DPUs for such optimizations, the control plane channel allows for such messages to be relayed. + +## HA State Machine + +![](images/ha_sm.006.png) + +**Bootup** + +This is the initial state for the box on bootup. The statemachine waits for external input to indicate that config is complete. At which point it progresses to the next state + +**Init** + +In this state the get\_capabilities call retrieves the local datapath capabilities. The SAI SDK call returns the local DPs capabilities as defined in the capabilities struct previously. This will be used in later exchanges with the peer. Validations of the local configuration as well as any other local checks are performed in this state. If there are configuration errors the state machine moves to Cfg\_err state and waits for configuration changes to fix the errors. + +**Peer Connect** + +There is a timed attempt made to connect to the peer in this stage. If there is no connectivity established with the peer within a configured timeout interval, the operational state moves to standalone-primary. + +**Standalone Primary** + +In the standalone primary mode all datapath functions are enabled and the DPU starts forwarding traffic. Since there is no peer connectivity established, no flow synchronization is needed. + +**Compat Check** + +The peer connect sequence exchanges capabilities with the peer. These received capabilities are then compared with the local capabilities for compatibility. The compat is done in 2 stages. The first is compatibility at the SONIC stack level. Any common attributes (across all implementations) is checked here. The next stage is to check compatibility between the underlying DASH implementations. This is done via a SAI-DASH call to the SDK. + +**Start Sync** + +Once the two peers are deemed compatible bulk sync is initiated between the peers. First the SONIC stack establishes a bidirectional streaming sync channel between the peers (Control Plane Channel). This channel is then passed to the DASH SDK. The underlying DPU implementation then uses the CP Channel to exchange messages between the peers. The data transfer involves Flow sync messages from Primary to Secondary. There can also be messages from the Secondary to the Primary to back pressure or optimize the primary->secondary flow data. + +**Wait Sync** + +The State machine on the SONIC stack then waits for the DP to signal completion of bulk sync in this state. The completion of the bulk sync is notified by the DP in a CP control message. At this point further states are defined by the configured Admin role of the DPU. + +**Wait Peer Sync** + +This state is on node that is in standalone primary and is servicing a bulk sync request from the newly booting up peer. SInce the Bulk sync is initiated from the new node, the existing node waits for a signal from the SDK that bulk sync has been completed. When the BulkSyncDone message is received it is relayed to the peer and also triggers the transition out of this state. + +**Wait HA Role Activation** + +As per deployment requirements the controller has the control to activate the HA role. Transition to Primary or Secondary happens only after the controller signals so. This state waits on such an external trigger to activate. + +**Activate Primary** + +This state is reached when bulk sync is complete and the admin role of the node is primary. The node then attempts to take over as the primary. This is triggered by notifying the underlying datapath to switch to the primary role. At this point the VIP routes are advertised to attract traffic. + +**Wait Primary** + +In this state the node is waiting for the Datapath to signal completion of taking over as primary. The datapath indicates this by notifying the SONIC stack via an oper status update message. At this point the peer is notified to move to standby. + +**Activate Secondary** + +This state is reached when bulk sync is complete and the admin role of the node is secondary. The node then attempts to get to the secondary state. This is triggered by notifying the underlying datapath to switch to the secondary role. At this point the VIP routes are advertised. The routes may be advertised with a less desirable metric. + +**Wait Secondary** + +In this state the node is waiting for the Datapath to signal completion of state as secondary. The datapath indicates this by notifying the SONIC stack via an oper status update message. + +**Secondary** + +If the configured role is secondary the node goes to terminal state secondary. The DPU then waits for a switchover event to switch to primary. In this state the node keeps receiving flow sync messages from the peer and keeps the datapath ready for switchover. + +**Primary** + +This is the terminal state for the node when the node is configured as the primary. In this state the local datapath is forwarding traffic actively and synching state to the peer. + +### SAI Definitions + +The SAI API calls necessary for communication between the SONIC stack and the SAI-DASH SDK are defined below. + +```cpp +#include + +/** + * @brief Notification data format for received for the DPU Control message + * callback. + */ +typedef struct _sai_dash_dpu_control_message_notification_data_t { + /** + * @brief Control message Type + */ + sai_uint16_t type; + + /** + * @brief Data for the message + */ + sai_u8_list_t data; +} sai_dash_dpu_control_message_notification_data_t; + +/** + * @brief L4 information for TCP and UDP flows. + */ +typedef struct _sai_dash_flow_tcp_udp_info_t { + /** Source port */ + sai_uint16_t src_port; + + /** Destination port */ + sai_uint16_t dst_port; +} sai_dash_flow_tcp_udp_info_t; + +/** + * @brief L4 flow information for ICMP flows. + */ +typedef struct _sai_dash_flow_icmp_info_t { + /** ICMP Type */ + sai_uint32_t type; + + /** ICMP code */ + sai_uint32_t code; + + /** ICMP ID */ + sai_uint32_t id; +} sai_dash_flow_icmp_info_t; + +/** + * @brief L4 Flow information + */ +typedef union _sai_dash_flow_l4_info_t { + /** TCP/UDP info */ + sai_dash_flow_tcp_udp_info_t tcp_udp; + + /** ICMP Info */ + sai_dash_flow_icmp_info_t icmp; +} sai_dash_flow_l4_info_t; + +/** + * @brief Notification Data format for received flow sync messages from the DPU + */ +typedef struct _sai_dash_flow_sync_message_notification_data_t { + /** + * @brief ENI MAC for this flow + */ + sai_mac_t eni_mac; + + /** + * @brief Source IP address + */ + sai_ip_address_t src_ip; + + /** + * @brief Destination IP address + */ + sai_ip_address_t dst_ip; + + /** + * @brief IP Protocol + */ + sai_uint8_t protocol; + + /** + * @brief L4 Information (TCP/UDP/ICMP) + */ + sai_dash_flow_l4_info_t l4_info; + + /** + * @brief policy results metadata + */ + sai_u8_list_t metadata; +} sai_dash_flow_sync_message_notification_data_t; + +/** + * @brief Attributes ID for get_peer_capabilities + */ +typedef enum _sai_get_peer_capabilities_attr_t { + /** + * @brief HB Interval + * @type sai_uint16_t + */ + SAI_DASH_GET_PEER_CAPABILITIES_ATTR_HB_INTERVAL, + + /** + * @brief HB Miss Count + * @type sai_uint16_t + */ + SAI_DASH_GET_PEER_CAPABILITIES_ATTR_HB_MISS_COUNT, + + /** + * @brief Capabilities + * @type sai_uint8_list_t + */ + SAI_DASH_GET_PEER_CAPABILITIES_ATTR_CAPABILITIES, + +} sai_get_peer_capabilities_attr_t; + +/** + * @brief Get Capabilities of the DP + * + * @param[in] sai_object_id_t vipID + * @param[in] attr_count Number of attributes + * @param[in] attr_list Array of attributes + * + * @return #SAI_STATUS_SUCCESS on success Failure status code on error + */ +typedef sai_status_t (*sai_get_capabilities_fn) ( + _In_ sai_object_id_t vipID; + _In_ uint32_t attr_count, + _InOut_ sai_attribute_t *attr_list); + +/** + * @brief Attributes ID for register_cp_channel + */ +typedef enum _sai_register_cp_channel_attr_t { + /** + * @brief Named pipe for bi-directional control stream + * @type sai_uint8_list_t + */ + SAI_DASH_REGISTER_CP_CHANNEL_ATTR_NAMED_PIPE, +} + +/** + * @brief Register the CP control channel with the DP + * + * @param[in] sai_object_id_t vipID + * @param[in] attr_count Number of attributes + * @param[in] attr_list Array of attributes + * + * @return #SAI_STATUS_SUCCESS on success Failure status code on error + */ +typedef sai_status_t (*sai_register_cp_channel_fn) ( + _In_ sai_object_id_t vipID; + _In_ uint32_t attr_count, + _In_ sai_attribute_t *attr_list); + +/** + * @brief Attributes ID for process_peer_capabilities + */ +typedef enum _sai_process_peer_capabilities_attr_t { + /** + * @brief HB Interval + * @type sai_uint16_t + */ + SAI_DASH_PROCESS_PEER_CAPABILITIES_ATTR_HB_INTERVAL, + + /** + * @brief HB Miss Count + * @type sai_uint16_t + */ + SAI_DASH_PROCESS_PEER_CAPABILITIES_ATTR_HB_MISS_COUNT, + + /** + * @brief Capabilities + * @type sai_uint8_list_t + */ + SAI_DASH_PROCESS_PEER_CAPABILITIES_ATTR_CAPABILITIES, + +} sai_process_peer_capabilities_attr_t; + +/** + * @brief Process peer capabilities of peer DPU + * + * @param[in] sai_object_id_t vipID + * @param[in] attr_count Number of attributes + * @param[in] attr_list Array of attributes + * + * @return #SAI_STATUS_SUCCESS on success Failure status code on error + */ +typedef sai_status_t (*sai_process_peer_capabilities_fn) ( + _In_ sai_object_id_t vipID; + _In_ uint32_t attr_count, + _Inout_ sai_attribute_t *attr_list); + +/** + * @brief Attributes ID for process_dpu_control_message + */ +typedef enum _sai_process_dpu_control_message_attr_t { + /** + * @brief Type + * @type sai_uint16_t + */ + SAI_DASH_PROCESS_DPU_CONTROL_MESSAGE_ATTR_TYPE, + + /** + * @brief Data + * @type sai_u8_list_t + */ + SAI_DASH_PROCESS_DPU_CONTROL_MESSAGE_ATTR_DATA, +} sai_process_dpu_control_message_attr_t; + +/** + * @brief Control Messages exchanged between Datapaths of DPU + * + * @param[in] sai_object_id_t vipID + * @param[in] attr_count Number of attributes + * @param[in] attr_list Array of attributes + * + * @return #SAI_STATUS_SUCCESS on success Failure status code on error + */ +typedef sai_status_t (*sai_process_dpu_control_message_fn) ( + _In_ sai_object_id_t vipID; + _In_ uint32_t attr_count, + _In_ sai_attribute_t *attr_list); + +/** + * @brief Attributes ID for process_flow_sync_message + */ +typedef enum _sai_process_flow_sync_message_attr_t { + /** + * @brief Flow information + * @type sai_dash_flow_sync_message_notification_data_t + */ + SAI_DASH_PROCESS_FLOW_SYNC_MESSAGE_ATTR_FLOW_INFO, +} sai_process_flow_sync_message_attr_t; + +/** + * @brief FLow Sync messages exchanged between of DPU + * + * @param[in] sai_object_id_t vipID + * @param[in] attr_count Number of attributes + * @param[in] attr_list Array of attributes + * + * @return #SAI_STATUS_SUCCESS on success Failure status code on error + */ +typedef sai_status_t (*sai_process_flow_sync_message_fn) ( + _In_ sai_object_id_t vipID; + _In_ uint32_t attr_count, + _In_ sai_attribute_t *attr_list); + +/** + * @brief Attributes ID for oper_role_status + */ +typedef enum _sai_oper_role_status_attr_t { + /** + * @brief OperState + * @type sai_uint16_t + */ + SAI_DASH_OPER_ROLE_STATUS_ATTR_OPER_STATE, +}; + +/** + * @brief Update Oper Role state + * + * Updates from DPU for the operational role. Current state is passed as a attribute. + * + * @param[in] sai_object_id_t vipID + * @param[in] attr_count Number of attributes + * @param[in] attr_list Array of attributes + * + * @return #SAI_STATUS_SUCCESS on success Failure status code on error + */ +typedef sai_status_t (*sai_oper_role_status_fn) ( + _In_ sai_object_id_t vipID; + _In_ uint32_t attr_count, + _In_ sai_attribute_t *attr_list); + +/** + * @brief Attributes ID for cp_control_message + */ +typedef enum _sai_cp_control_message_attr_t { + /** + * @brief Operation + * @type sai_uint16_t + */ + SAI_DASH_CP_CONTROL_MESSAGE_ATTR_OPERATION, +} sai_cp_control_message_attr_t; + +/** + * @brief Process CP control message + * + * Process control messages between DPUs. The Operation is passed as a attribute. + * + * @param[in] sai_object_id_t vipID + * @param[in] attr_count Number of attributes + * @param[in] attr_list Array of attributes + * + * @return #SAI_STATUS_SUCCESS on success Failure status code on error + */ +typedef sai_status_t (*sai_cp_control_message_fn) ( + _In_ sai_object_id_t vipID; + _In_ uint32_t attr_count, + _In_ sai_attribute_t *attr_list; +) + +typedef struct _sai_dash_ha_api_t { + sai_register_cp_channel_fn register_cp_channel; + sai_get_capabilities_fn get_capabilities; + sai_process_peer_capabilities_fn process_peer_capabilities; + sai_process_dpu_control_message_fn process_dpu_control_message; + sai_process_flow_sync_message_fn process_flow_sync_message; + sai_oper_role_status_fn oper_role_status; + sai_cp_control_message_fn cp_control_message; +} sai_dash_ha_api_t; +``` + +### Control Plane Channel Message Definitions + +The below definitions pertain to the GRPC channel defined as the Control Plane Channel. This channel is established between the SONIC stacks on the two peer nodes. These messages can be originated from SONIC or sent by the DPU implementation and relayed via SONIC. + +```protobuf +syntax = "proto3"; +package dashsync; + +// IP address families +enum IPAF { + IP_AF_NONE = 0; + IP_AF_INET = 1; // IPv4 + IP_AF_INET6 = 2; // IPv6 +} + +// Admin Roles for a VIP +enum AdminRole { + // Unspecified + AdminNone = 0; + // Primary node for peering session. + AdminPrimary = 1; + // Secondary node for peering session. + AdminSecondary = 2; +} + +// Operational state of the VIP +enum OperRole { + // Unspecified + OperNone = 0; + // Primary node for peering session. + OperPrimary = 1; + // Secondary node for peering session. + OperSecondary = 2; + // Standalone mode. No active peering. + OperStandalone = 3; +} + + +// IP Address object +message IPAddress { + IPAF Af = 1; + // IP address family + oneof v4_or_v6 { + // IPv4 address + fixed32 V4Addr = 2; + // IPv6 address + bytes V6Addr = 3; + } +} + +// L4 portion of flow key tuple +message FlowL4Info { + // key fields for TCP/UDP flows + message TCPUDPInfo { + uint32 SrcPort = 1; + uint32 DstPort = 2; + } + // key fields for ICMP flows + message ICMPInfo { + uint32 Type = 1; + uint32 Code = 2; + uint32 Id = 3; + } + oneof l4_info { + TCPUDPInfo TcpUdpInfo = 1; + ICMPInfo IcmpInfo = 2; + } +} + +// flow key for IP flows +message IPFlowKey { + // ENI MAC address + uint64 EniMAC = 1; + // source IP seen in the packet + IPAddress SrcIP = 2; + // destination IP seen in the packet + IPAddress DstIP = 3; + // IP protocol + uint32 IPProtocol = 4; + // L4 information of the flow key + FlowL4Info L4Info = 5; +} + +// Flow Sync Msg +message FlowSyncMsg { + message FlowInfo { + // DP-VIP associated to the flow + bytes VipId = 1; + // IP Flow tuple + IPFlowKey Key = 2; + // Metadata containing policy results + bytes Metadata = 3; + } + repeated FlowInfo Info = 1; +} + +// Control plane operations carried in CPControlMsg +enum CPControlOperation { + OpNone = 0; + OpStartBulkSync = 1; + OpBulkSyncDone = 2; + OpShutdownPrepare = 3; + OpShutdownReady = 4; + OpShutdown = 5; + OpSwitchover = 6; + OpSwitchoverReady = 7; + OpSwitchoverDone = 8; +} + +// Message used to trigger/Notify state change events between peers. +message CPControlMsg { + // The VIP this event pertains to. + bytes VipId = 1; + // Operation/Event + CPControlOperation Operation = 2; +} + +// CompatCheck used to carry the compatibility information for the node +// contains information about the DP-VIPs, the DPUs capabilities and any +// other relevant capabilities to be checked. +message CompatCheck { + // VIP related parameters. One added per VIP. + message DpVIPInfo { + bytes VipId = 1; + // Address configured + IPAddress VipIP = 2; + // Role of the VIP on this Node + AdminRole AdminRole = 3; + // Metric used for the protocol to differentiate the primary/secondary routes. + // Valid when using BGP as the underlay protocol. + uint32 ProtocolMetric = 4; + } + // DPU capabilities on this node. + message DPUInfo { + // Configured interval for HB messages + uint32 HBinterval = 1; + // Number of HB misses that will trigger switchover + uint32 MissCount = 2; + // Opaque + bytes Capabilities = 3; + } + // Compatibility/Capability information for each VIP on the node. Typically two entries. + repeated DpVIPInfo VipInfo = 1; + // Copability information for the Datapath. + DPUInfo DPUCapabilities = 2; +} + +// Results from the Compatibility check between the nodes. +enum CompatResult { + CompatSuccess = 0; + CompatFailure = 1; +} + +// Results from the Compatibility check between the nodes. +message CompatResults { + // Compatibility Error information pertaining to the VIP + message DpVIPCompatError { + // VIP this pertains to + bytes VipID = 1; + // Error code + uint32 Code = 2; + // detailed user readable reason + string Reason = 3; + } + + message DPUCompatError { + // Error code + uint32 Code = 2; + // detailed user readable reason + string Reason = 3; + } + CompatResult Result = 1; + repeated DpVIPCompatError DpVIPInfo = 2; + DPUCompatError DPUInfo = 3; +} + +// Control Message. This can be either from the Primary to Secondary or vice-versa +message DPUControlMsg { + // Control Message type + uint32 Type = 1; + // Data for the message + bytes Data = 2; +} + +// Wrapper message for all control messages between peers +message ControlMsg { + oneof ctrl_msg { + DPUControlMsg DPUControlMsg = 2; + CompatCheck CompatCheck = 3; + CompatResults CompatResults = 4; + CPControlMsg CPControlMsg = 5; + } +} + +// Wrapper message for all messages between the peers. +message SyncMsg { + oneof sync_msg { + FlowSyncMsg FlowSyncMsg = 1; + ControlMsg ControlMsg = 2; + } +} + +service CPSync { + rpc SyncChannel(stream SyncMsg) returns (stream SyncMsg) {}; +} +``` + +## Message Flows + +The following are some important procedures and corresponding control message flows + +### Node Pairing and Bulk Sync + +![](images/node_pairing.007.png) + +Node pairing follows the state machine defined in the previous section. SONIC stack does initial connection to the peer. For each DPU pair the sonic stack establishes a bi-directional streaming channel to the peer. All control messages including bulk sync uses this channel. There is also a parallel channel registered between the DPU data paths directly. This channel will carry the DP flow sync messages between the DPUs (represented by the orange dotted lines in the picture above. + +The initial compatibility messages exchanged between the peers ensures that capabilities match. These could be hardware capabilities, software capabilities, scale limits etc. As was mentioned earlier these capabilities are a combination of capabilities from the SONIC and capabilities of the DPU. + +The SONIC stack initiates bulk sync between the peers and also notifies the DPU via the SDK to start bulk sync. The DPU sends and receives flow synchronization messages via the CP stream. DPUs can back pressure or optimize the bulk sync process with its DPU peer by exchanging the DPUControlMsgs on the channel. + +As is evident from the picture above the Datapath flow synchronization may be initiated by the DPUs in parallel to the bulk sync process. + +### Unplanned Switchover + +![](images/unplanned_switchover.008.png) + +This is triggered by failures in the network or a failure on the peer DPU. This is typically detected via loss of heartbeat message between the DPUs. The DPU then notifies the SONIC stack of the change via the notification message about the HB loss and initiates the switchover to standalone state on the DPU. Once the switchover is complete the SONIC stack is notified of the change via a notification. + +All flows inserted on the secondary before switchover are after evaluation of primary`s policies. Flow resimulation triggers the flows to be evaluated as per local policies. The SONIC stack waits for confirmation from the SDN controller that all policy configurations on the DPU are updated and then initiates flow reconciliation on the DPU. This triggers flow resimulation to update policy results on flows as per current policy configuration. + +### Planned Switchover + +![](images/planned_switchover.009.jpeg) + +Switchover can be a planned event for maintenance and other reasons. With planned switchover the goal is to have close to zero loss and to coordinate between the primary and secondary to achieve this goal. Both the DP-VIPs will switch roles to primary on this trigger. + +The controller initiates the planned switchover and notifies the secondary DPU to initiate switchover. Once switchover is complete the newly primary DPU relays a SwitchoverDone message to the old primary DPU. The old primary initiates a withdrawal of protocol routes so the network can drain traffic. During this time the old primary continues to forward traffic so any traffic in transit is forwarded without being dropped. During this network convergence timeout both the primary and secondary are forwarding traffic and flow sync messages may be exchanged in both directions. + +After the network convergence time the new Primary enters PRE\_STANDALONE state and waits for a flush time out and transitions to standalone state. +**AMD-Pensando** 25 diff --git a/documentation/high-avail/design/AMD_Pensando_HA_Overview.pdf b/documentation/high-avail/AMD_Pensando_HA_Overview.pdf similarity index 100% rename from documentation/high-avail/design/AMD_Pensando_HA_Overview.pdf rename to documentation/high-avail/AMD_Pensando_HA_Overview.pdf diff --git a/documentation/high-avail/README.md b/documentation/high-avail/README.md index 1b1b86d36..253f76c1c 100644 --- a/documentation/high-avail/README.md +++ b/documentation/high-avail/README.md @@ -1,12 +1,17 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] - # DASH High-Availability Documents This folder contains DASH High Availability design and requirements documents. -# Contents +## Design + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | +| [high-availability-and-scale.md](high-availability-and-scale.md) | DASH High-Availability and Scale design document | +| [xsight-labs-ha-proposal-v1.md](xsight-labs-ha-proposal-v1.md) | Initial HA proposal document | +| [xsight-labs-ha-proposal-new-ideas.md](xsight-labs-ha-proposal-new-ideas.md)|Addendum to the initial HA proposal (preview)| + + +## Requirements -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH High Availability design & architecture documents | -| [requirements](requirements/README.md) | DASH High Availability requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/high-avail/design/README.md b/documentation/high-avail/design/README.md deleted file mode 100644 index cd254b7f0..000000000 --- a/documentation/high-avail/design/README.md +++ /dev/null @@ -1,15 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH High-Availability Design Documents - -This folder contains DASH High Availability and Scale design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | -| [high-availability-and-scale.md](high-availability-and-scale.md) | DASH High-Availability and Scale design document | -| [xsight-labs-ha-proposal-v1.md](xsight-labs-ha-proposal-v1.md) | Initial HA proposal document | -| [xsight-labs-ha-proposal-new-ideas.md](xsight-labs-ha-proposal-new-ideas.md)|Addendum to the initial HA proposal (preview)| diff --git a/documentation/high-avail/design/high-availability-and-scale.md b/documentation/high-avail/high-availability-and-scale.md similarity index 100% rename from documentation/high-avail/design/high-availability-and-scale.md rename to documentation/high-avail/high-availability-and-scale.md diff --git a/documentation/high-avail/design/images/channels.003.png b/documentation/high-avail/images/channels.003.png similarity index 100% rename from documentation/high-avail/design/images/channels.003.png rename to documentation/high-avail/images/channels.003.png diff --git a/documentation/high-avail/design/images/dash-ha-appliance.svg b/documentation/high-avail/images/dash-ha-appliance.svg similarity index 100% rename from documentation/high-avail/design/images/dash-ha-appliance.svg rename to documentation/high-avail/images/dash-ha-appliance.svg diff --git a/documentation/high-avail/design/images/dash-ha-smart-switch.svg b/documentation/high-avail/images/dash-ha-smart-switch.svg similarity index 100% rename from documentation/high-avail/design/images/dash-ha-smart-switch.svg rename to documentation/high-avail/images/dash-ha-smart-switch.svg diff --git a/documentation/high-avail/design/images/dp_repl_packet.005.png b/documentation/high-avail/images/dp_repl_packet.005.png similarity index 100% rename from documentation/high-avail/design/images/dp_repl_packet.005.png rename to documentation/high-avail/images/dp_repl_packet.005.png diff --git a/documentation/high-avail/design/images/dpreplication.004.png b/documentation/high-avail/images/dpreplication.004.png similarity index 100% rename from documentation/high-avail/design/images/dpreplication.004.png rename to documentation/high-avail/images/dpreplication.004.png diff --git a/documentation/high-avail/design/images/ha-functional-diag.svg b/documentation/high-avail/images/ha-functional-diag.svg similarity index 100% rename from documentation/high-avail/design/images/ha-functional-diag.svg rename to documentation/high-avail/images/ha-functional-diag.svg diff --git a/documentation/high-avail/design/images/ha-state-sync-packet-format.svg b/documentation/high-avail/images/ha-state-sync-packet-format.svg similarity index 100% rename from documentation/high-avail/design/images/ha-state-sync-packet-format.svg rename to documentation/high-avail/images/ha-state-sync-packet-format.svg diff --git a/documentation/high-avail/design/images/ha-sync-operations.svg b/documentation/high-avail/images/ha-sync-operations.svg similarity index 100% rename from documentation/high-avail/design/images/ha-sync-operations.svg rename to documentation/high-avail/images/ha-sync-operations.svg diff --git a/documentation/high-avail/design/images/ha_sm.006.png b/documentation/high-avail/images/ha_sm.006.png similarity index 100% rename from documentation/high-avail/design/images/ha_sm.006.png rename to documentation/high-avail/images/ha_sm.006.png diff --git a/documentation/high-avail/design/images/node_pairing.007.png b/documentation/high-avail/images/node_pairing.007.png similarity index 100% rename from documentation/high-avail/design/images/node_pairing.007.png rename to documentation/high-avail/images/node_pairing.007.png diff --git a/documentation/high-avail/design/images/planned_switchover.009.jpeg b/documentation/high-avail/images/planned_switchover.009.jpeg similarity index 100% rename from documentation/high-avail/design/images/planned_switchover.009.jpeg rename to documentation/high-avail/images/planned_switchover.009.jpeg diff --git a/documentation/high-avail/design/images/terminology.001.png b/documentation/high-avail/images/terminology.001.png similarity index 100% rename from documentation/high-avail/design/images/terminology.001.png rename to documentation/high-avail/images/terminology.001.png diff --git a/documentation/high-avail/design/images/topology.002.jpeg b/documentation/high-avail/images/topology.002.jpeg similarity index 100% rename from documentation/high-avail/design/images/topology.002.jpeg rename to documentation/high-avail/images/topology.002.jpeg diff --git a/documentation/high-avail/design/images/traffic-flow-has-scale-appliance.png b/documentation/high-avail/images/traffic-flow-has-scale-appliance.png similarity index 100% rename from documentation/high-avail/design/images/traffic-flow-has-scale-appliance.png rename to documentation/high-avail/images/traffic-flow-has-scale-appliance.png diff --git a/documentation/high-avail/design/images/unplanned_switchover.008.png b/documentation/high-avail/images/unplanned_switchover.008.png similarity index 100% rename from documentation/high-avail/design/images/unplanned_switchover.008.png rename to documentation/high-avail/images/unplanned_switchover.008.png diff --git a/documentation/high-avail/requirements/README.md b/documentation/high-avail/requirements/README.md deleted file mode 100644 index 581bd98f1..000000000 --- a/documentation/high-avail/requirements/README.md +++ /dev/null @@ -1,13 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH High-AvailabilityRequirements Documents - - -This folder contains DASH High Availability and Scale compliance requirement documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/high-avail/slides/README.md b/documentation/high-avail/slides/README.md index 5792dfed0..f7e750e8e 100644 --- a/documentation/high-avail/slides/README.md +++ b/documentation/high-avail/slides/README.md @@ -1,7 +1,3 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - # DASH High-Availability presentations This folder contains DASH High Availability and Scale presentations diff --git a/documentation/high-avail/design/xsight-labs-ha-proposal-new-ideas.md b/documentation/high-avail/xsight-labs-ha-proposal-new-ideas.md similarity index 100% rename from documentation/high-avail/design/xsight-labs-ha-proposal-new-ideas.md rename to documentation/high-avail/xsight-labs-ha-proposal-new-ideas.md diff --git a/documentation/high-avail/design/xsight-labs-ha-proposal-v1.md b/documentation/high-avail/xsight-labs-ha-proposal-v1.md similarity index 98% rename from documentation/high-avail/design/xsight-labs-ha-proposal-v1.md rename to documentation/high-avail/xsight-labs-ha-proposal-v1.md index db8cc8d70..68920a650 100644 --- a/documentation/high-avail/design/xsight-labs-ha-proposal-v1.md +++ b/documentation/high-avail/xsight-labs-ha-proposal-v1.md @@ -7,9 +7,7 @@ The purpose is to generate discussion that will lead to an actual design doc. # HA Requirements -The High Availability document lists the requirements: -https://github.com/Azure/DASH/blob/main/documentation/high-avail/design/high-availability-and-scale.md - +See the [High Availability and Scale](high-availability-and-scale.md) document for the requirements. # Proposal diff --git a/documentation/images/README.md b/documentation/images/README.md index 843517fd6..ea18374da 100644 --- a/documentation/images/README.md +++ b/documentation/images/README.md @@ -1,7 +1,5 @@ # Images The following is the Image folder break-down in sub-folders. +- [general](general). It contains DASH images applicable to the general doc set. - [icons](icons). It contains DASH and SONiC icons. -- [loadbalancer](loadbalancer). It contains images used in the [Load Balancer_v3.md](../Load%20Balancer_v3.md) article. -- [sdn](sdn). It contains images used in the [SDN-Features-Packet-Transforms.md](../SDN-Features-Packet-Transforms.md) article. -- [test](test). It contains images used in the [Program Scale Testing Requirements - Draft.md](../Program%20Scale%20Testing%20Requirements%20-%20Draft.md) article. diff --git a/documentation/load-bal-service/README.md b/documentation/load-bal-service/README.md index 28768be84..e4919efbb 100644 --- a/documentation/load-bal-service/README.md +++ b/documentation/load-bal-service/README.md @@ -1,10 +1,15 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] +# DASH Load Balancer Service Documents This folder contains DASH Load Balancer Service design and requirements documents. -# Contents +## Design -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH Load Balancer Service design & architecture documents | -| [requirements](requirements/README.md) | DASH Load Balancer Service requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | +| [load-balancer-v3.md](load-balancer-v3.md) | DASH Load Balancer design document | + + +## Requirements + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/load-bal-service/design/README.md b/documentation/load-bal-service/design/README.md deleted file mode 100644 index 4157363af..000000000 --- a/documentation/load-bal-service/design/README.md +++ /dev/null @@ -1,11 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH Load-Balancer Service design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | -| [load-balancer-v3.md](load-balancer-v3.md) | DASH Load Balancer design document | \ No newline at end of file diff --git a/documentation/load-bal-service/design/images/ICMP-redirect.png b/documentation/load-bal-service/images/ICMP-redirect.png similarity index 100% rename from documentation/load-bal-service/design/images/ICMP-redirect.png rename to documentation/load-bal-service/images/ICMP-redirect.png diff --git a/documentation/load-bal-service/design/images/TCP-handshake.png b/documentation/load-bal-service/images/TCP-handshake.png similarity index 100% rename from documentation/load-bal-service/design/images/TCP-handshake.png rename to documentation/load-bal-service/images/TCP-handshake.png diff --git a/documentation/load-bal-service/design/images/after-ICMP-redirect.png b/documentation/load-bal-service/images/after-ICMP-redirect.png similarity index 100% rename from documentation/load-bal-service/design/images/after-ICMP-redirect.png rename to documentation/load-bal-service/images/after-ICMP-redirect.png diff --git a/documentation/load-bal-service/design/images/load-balancer-architecture.png b/documentation/load-bal-service/images/load-balancer-architecture.png similarity index 100% rename from documentation/load-bal-service/design/images/load-balancer-architecture.png rename to documentation/load-bal-service/images/load-balancer-architecture.png diff --git a/documentation/load-bal-service/design/images/packet-transform.png b/documentation/load-bal-service/images/packet-transform.png similarity index 100% rename from documentation/load-bal-service/design/images/packet-transform.png rename to documentation/load-bal-service/images/packet-transform.png diff --git a/documentation/load-bal-service/design/load-balancer-v3.md b/documentation/load-bal-service/load-balancer-v3.md similarity index 100% rename from documentation/load-bal-service/design/load-balancer-v3.md rename to documentation/load-bal-service/load-balancer-v3.md diff --git a/documentation/load-bal-service/requirements/README.md b/documentation/load-bal-service/requirements/README.md deleted file mode 100644 index 814cb6439..000000000 --- a/documentation/load-bal-service/requirements/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH Load-Balancer Service compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/sai/design/DASH-apis-rough-draft.xlsx b/documentation/sai/DASH-apis-rough-draft.xlsx similarity index 100% rename from documentation/sai/design/DASH-apis-rough-draft.xlsx rename to documentation/sai/DASH-apis-rough-draft.xlsx diff --git a/documentation/sai/README.md b/documentation/sai/README.md index 0edd78525..8ff4c80bc 100644 --- a/documentation/sai/README.md +++ b/documentation/sai/README.md @@ -1,12 +1,14 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] - # DASH SAI Documents This folder contains DASH SAI Interface design and requirements documents. -# Contents +## Design + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | +| [DASH-apis-rough-draft.xlsx](DASH-apis-rough-draft.xlsx) | Preliminary SAI APIs (**NOTE** - obsolete?) | + +## Requirements -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH SAI design & architecture documents | -| [requirements](requirements/README.md) | DASH SAI requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/sai/design/README.md b/documentation/sai/design/README.md deleted file mode 100644 index d3a41123e..000000000 --- a/documentation/sai/design/README.md +++ /dev/null @@ -1,13 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH SAI Design Documents - -This folder contains DASH SAI southbound API design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | -| [DASH-apis-rough-draft.xlsx](DASH-apis-rough-draft.xlsx) | Preliminary SAI APIs (**NOTE** - obsolete?) | \ No newline at end of file diff --git a/documentation/sai/requirements/README.md b/documentation/sai/requirements/README.md deleted file mode 100644 index cd43b5473..000000000 --- a/documentation/sai/requirements/README.md +++ /dev/null @@ -1,12 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH SAI Requirements Documents - -This folder contains DASH SAI southbound API compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/stpl-service/README.md b/documentation/stpl-service/README.md index 4deeb8c67..bad04f19b 100644 --- a/documentation/stpl-service/README.md +++ b/documentation/stpl-service/README.md @@ -1,10 +1,14 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] +# DASH Service Tunnel & Private Link Service Documents This folder contains DASH Service Tunnel & Private Link Service design and requirements documents. -# Contents +## Design -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH Service Tunnel & Private Link Service design & architecture documents | -| [requirements](requirements/README.md) | DASH Service Tunnel & Private Link Service requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | + + +## Requirements + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/stpl-service/design/README.md b/documentation/stpl-service/design/README.md deleted file mode 100644 index 4ef120185..000000000 --- a/documentation/stpl-service/design/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH Service Tunnel & Private Link Service design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/stpl-service/requirements/README.md b/documentation/stpl-service/requirements/README.md deleted file mode 100644 index 5b802ca2c..000000000 --- a/documentation/stpl-service/requirements/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH Service Tunnel & Private Link Service compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/vnet-peering-service/README.md b/documentation/vnet-peering-service/README.md index 9258206fd..3138cb808 100644 --- a/documentation/vnet-peering-service/README.md +++ b/documentation/vnet-peering-service/README.md @@ -1,10 +1,14 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] +# DASH VNET Peering Service Documents This folder contains DASH VNET Peering Service design and requirements documents. -# Contents +## Design -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH VNET Peering Service design & architecture documents | -| [requirements](requirements/README.md) | DASH VNET Peering Service requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | + + +## Requirements + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/vnet-peering-service/design/README.md b/documentation/vnet-peering-service/design/README.md deleted file mode 100644 index e287cfb8c..000000000 --- a/documentation/vnet-peering-service/design/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH VNET Peering Service design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/vnet-peering-service/requirements/README.md b/documentation/vnet-peering-service/requirements/README.md deleted file mode 100644 index 71c800aa5..000000000 --- a/documentation/vnet-peering-service/requirements/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -This folder contains DASH VNET Peering Service compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/vnet2vnet-service/README.md b/documentation/vnet2vnet-service/README.md index 1e4723515..ad29b2e94 100644 --- a/documentation/vnet2vnet-service/README.md +++ b/documentation/vnet2vnet-service/README.md @@ -1,12 +1,15 @@ -[ [ << Back to DASH top-level Documents](../README.md#contents) ] - # DASH VNET-to-VNET Service Documents This folder contains DASH VNET-to-VNET Service design and requirements documents. -# Contents +## Design + +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | +|[VNET to VNET scenario](vnet-to-vnet-service.md)|Implement and test core DASH mechanisms in VM to VM communication in VNET| + + +## Requirements -| Folder | Description | -| ------------------------------------------------------ | -------------------------------------------- | -| [design](design/README.md) | DASH VNET-to-VNET Service design & architecture documents | -| [requirements](requirements/README.md) | DASH VNET-to-VNET Service requirements documents | +| Document | Description | +| ------------------------------------------------------ | ------------------------------------------ | \ No newline at end of file diff --git a/documentation/vnet2vnet-service/design/README.md b/documentation/vnet2vnet-service/design/README.md deleted file mode 100644 index e0afe7521..000000000 --- a/documentation/vnet2vnet-service/design/README.md +++ /dev/null @@ -1,13 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH VNET-to-VNET Service Design Documents - -This folder contains DASH VNET-to-VNET Service design and architecture documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | -|[VNET to VNET scenario](vnet-to-vnet-service.md)|Implement and test core DASH mechanisms in VM to VM communication in VNET| diff --git a/documentation/vnet2vnet-service/design/images/packet-pipeline-processing-per-eni-inbound.svg b/documentation/vnet2vnet-service/images/packet-pipeline-processing-per-eni-inbound.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/packet-pipeline-processing-per-eni-inbound.svg rename to documentation/vnet2vnet-service/images/packet-pipeline-processing-per-eni-inbound.svg diff --git a/documentation/vnet2vnet-service/design/images/packet-pipeline-processing-per-eni-outbound.svg b/documentation/vnet2vnet-service/images/packet-pipeline-processing-per-eni-outbound.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/packet-pipeline-processing-per-eni-outbound.svg rename to documentation/vnet2vnet-service/images/packet-pipeline-processing-per-eni-outbound.svg diff --git a/documentation/vnet2vnet-service/design/images/packet-processing-pipeline-example.png b/documentation/vnet2vnet-service/images/packet-processing-pipeline-example.png similarity index 100% rename from documentation/vnet2vnet-service/design/images/packet-processing-pipeline-example.png rename to documentation/vnet2vnet-service/images/packet-processing-pipeline-example.png diff --git a/documentation/vnet2vnet-service/design/images/packet-processing-pipeline-tables-example.svg b/documentation/vnet2vnet-service/images/packet-processing-pipeline-tables-example.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/packet-processing-pipeline-tables-example.svg rename to documentation/vnet2vnet-service/images/packet-processing-pipeline-tables-example.svg diff --git a/documentation/vnet2vnet-service/design/images/packet-transforms-vm-to-vm-in-vnet-without-dash.svg b/documentation/vnet2vnet-service/images/packet-transforms-vm-to-vm-in-vnet-without-dash.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/packet-transforms-vm-to-vm-in-vnet-without-dash.svg rename to documentation/vnet2vnet-service/images/packet-transforms-vm-to-vm-in-vnet-without-dash.svg diff --git a/documentation/vnet2vnet-service/design/images/routing-packet-10.1.0.1.svg b/documentation/vnet2vnet-service/images/routing-packet-10.1.0.1.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/routing-packet-10.1.0.1.svg rename to documentation/vnet2vnet-service/images/routing-packet-10.1.0.1.svg diff --git a/documentation/vnet2vnet-service/design/images/routing-packet-10.1.1.1.svg b/documentation/vnet2vnet-service/images/routing-packet-10.1.1.1.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/routing-packet-10.1.1.1.svg rename to documentation/vnet2vnet-service/images/routing-packet-10.1.1.1.svg diff --git a/documentation/vnet2vnet-service/design/images/routing-packet-10.2.5.1.svg b/documentation/vnet2vnet-service/images/routing-packet-10.2.5.1.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/routing-packet-10.2.5.1.svg rename to documentation/vnet2vnet-service/images/routing-packet-10.2.5.1.svg diff --git a/documentation/vnet2vnet-service/design/images/routing-packet-30.0.0.1.svg b/documentation/vnet2vnet-service/images/routing-packet-30.0.0.1.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/routing-packet-30.0.0.1.svg rename to documentation/vnet2vnet-service/images/routing-packet-30.0.0.1.svg diff --git a/documentation/vnet2vnet-service/design/images/vm-to-vm-communication-vnet.svg b/documentation/vnet2vnet-service/images/vm-to-vm-communication-vnet.svg similarity index 100% rename from documentation/vnet2vnet-service/design/images/vm-to-vm-communication-vnet.svg rename to documentation/vnet2vnet-service/images/vm-to-vm-communication-vnet.svg diff --git a/documentation/vnet2vnet-service/requirements/README.md b/documentation/vnet2vnet-service/requirements/README.md deleted file mode 100644 index 59a64ef94..000000000 --- a/documentation/vnet2vnet-service/requirements/README.md +++ /dev/null @@ -1,12 +0,0 @@ -[ [ << Back to parent directory](../README.md) ] - -[ [ << Back to DASH top-level Documents](../../README.md#contents) ] - -# DASH VNET-to-VNET Service Requirements Documents - -This folder contains DASH VNET-to-VNET Service compliance requirements documents. - -# Contents - -| Document | Description | -| ------------------------------------------------------ | ------------------------------------------ | diff --git a/documentation/vnet2vnet-service/design/vnet-to-vnet-service.md b/documentation/vnet2vnet-service/vnet-to-vnet-service.md similarity index 95% rename from documentation/vnet2vnet-service/design/vnet-to-vnet-service.md rename to documentation/vnet2vnet-service/vnet-to-vnet-service.md index 33c8c8ab2..0ca83a9a5 100644 --- a/documentation/vnet2vnet-service/design/vnet-to-vnet-service.md +++ b/documentation/vnet2vnet-service/vnet-to-vnet-service.md @@ -1,11 +1,7 @@ --- -Last update: 06/22/2022 +Last update: 09/20/2022 --- -[[<< Back to parent directory](../README.md)] - -[[<< Back to DASH top-level Documents](../../README.md#contents)] - # VNET to VNET scenario - [Overview](#overview) @@ -73,11 +69,11 @@ DASH performance enhancements (so called *bump in the wire*) happens. When talking about packet flow, we need to think about a process that involves several steps, as explained below. -> [!NOTE] From [SONiC-DASH HLD](../../general/design/dash-sonic-hld.md) +> [!NOTE] From [SONiC-DASH HLD](../general/dash-sonic-hld.md) ### Outbound packet processing pipeline -![dash-outbound](../../general/design/images/dash-hld-outbound-packet-processing-pipeline.svg) +![dash-outbound](../general/images/dash-hld-outbound-packet-processing-pipeline.svg)
Figure 2 - Outbound packet processing pipeline


@@ -107,7 +103,7 @@ In the outbound flow, the criteria listed below are applied. ### Inbound packet processing pipeline -![dash-outbound](../../general/design/images/dash-hld-inbound-packet-processing-pipeline.svg) +![dash-outbound](../general/images/dash-hld-inbound-packet-processing-pipeline.svg)
Figure 3 - Inbound packet processing pipeline


@@ -305,8 +301,8 @@ setting i.e., without DASH optimization. ## References - [Disaggregated API for SONiC Hosts (DASH) high level - design](../../general/design/dash-high-level-design.md) -- [SONiC-DASH HLD](../../general/design/dash-sonic-hld.md) + design](../general/dash-high-level-design.md) +- [SONiC-DASH HLD](../general/dash-sonic-hld.md) - [P4 Getting Started](https://github.com/p4lang/education/blob/master/GettingStarted.md) - [P4-16 Language Specification](https://p4.org/p4-spec/docs/P4-16-v1.2.2.html)