From ca9707c540889bb7ebcaef1fd33c132ebab9e31d Mon Sep 17 00:00:00 2001 From: Syed Hasan Raza Naqvi Date: Tue, 23 Jun 2020 10:03:01 -0700 Subject: [PATCH 1/3] IP SLA HLD v1 --- L3/ipsla/images/ipsla_design.jpg | Bin 0 -> 34751 bytes L3/ipsla/images/ipsla_use_case.jpg | Bin 0 -> 30746 bytes L3/ipsla/ip_sla.md | 941 +++++++++++++++++++++++++++++ 3 files changed, 941 insertions(+) create mode 100755 L3/ipsla/images/ipsla_design.jpg create mode 100755 L3/ipsla/images/ipsla_use_case.jpg create mode 100644 L3/ipsla/ip_sla.md diff --git a/L3/ipsla/images/ipsla_design.jpg b/L3/ipsla/images/ipsla_design.jpg new file mode 100755 index 0000000000000000000000000000000000000000..827d9102305bbc08d64fe5d6179218c11017464e GIT binary patch literal 34751 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 literal 0 HcmV?d00001 diff --git a/L3/ipsla/images/ipsla_use_case.jpg b/L3/ipsla/images/ipsla_use_case.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e49deea1689bed477a87a3928fb5df48bc8da3d8 GIT binary patch literal 30746 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 [vrf ] +sonic(config-ip-sla-10-icmp)# source-address +sonic(config-ip-sla-10-icmp)# source-interface +sonic(config-ip-sla-10-icmp)# request-data-size <28-1472> +sonic(config-ip-sla-10-icmp)# ttl <1-255> +sonic(config-ip-sla-10-icmp)# tos <1-255> + +``` + +The following commands will be used to configure TCP SLA track. + + +``` +sonic(config)# ip sla 20 +sonic(config-ip-sla-20)# tcp-connect [vrf ] +sonic(config-ip-sla-20-tcp)# source-address +sonic(config-ip-sla-20-tcp)# source-port +sonic(config-ip-sla-20-tcp)# source-interface +sonic(config-ip-sla-20-tcp)# ttl <1-255> +sonic(config-ip-sla-20-tcp)# tos <1-255> +sonic(config-ip-sla-20-tcp)# exit +``` + +The following configuration commands are common to ICMP and TCP SLA Track: + +``` +sonic(config-ip-sla-number)# frequency <1-300> +sonic(config-ip-sla-number)# threshold <1-1000> +sonic(config-ip-sla-number)# timeout 1000 +sonic(config-ip-sla-number)# +``` + +Static route can be configured to track a given SLA track object: +``` +sonic(config)# ip route 0.0.0.0 2.2.2.2 track 10 +``` + +### 3.5.4 Show Commands + +Summary output listing all of the configured IP SLAs: +``` +sonic# show ip sla +SLA# Type State Target VRF Transitions Last change +---- ---- ----- ------------------------ ----------- ----------- ----------- +10 TCP-connect Up 51.52.0.1(22) default 29 01:16:16 ago +11 ICMP-echo Up 4090::2 default 1 2d09h48m ago +12 TCP-connect Down 4090::2(22) default 0 2d09h50m ago +20 ICMP-echo Up 51.52.0.1 default 1 2d09h48m ago +``` + +#### 3.5.4.1 show ICMP SLA track commands +Show output of specific ICMP-echo IP SLA instance: + +``` +sonic# show ip sla 20 +IP SLA Operation Number: 20 + Type of Operation: ICMP-echo + ICMP destination IP address: 51.52.0.1 + ICMP source IP address: + ICMP source interface: Vlan4090 + ICMP request data size: 32 + ICMP Time-To-Live(TTL): 0 + ICMP Type-of-Service(ToS): 0 + Source VRF: default + Operation frequency (sec): 1 + Operation timeout (sec): 3 + Operation threshold: 3 + Operation state: Up + Operation state transitions: 1 + Operation last state change: 2d09h49m ago + ICMP Echo Request counter: 191708 + ICMP Echo Reply counter: 191707 + ICMP Error counter: 114 + ICMP Invalid responses: 0 +sonic# +``` + +Detailed show output of specific ICMP-echo IP SLA instance: + +``` +sonic# show ip sla 20 detail +IP SLA Operation Number: 20 + Type of Operation: ICMP-echo + ICMP destination IP address: 51.52.0.1 + ICMP source IP address: + ICMP source interface: Vlan4090 + ICMP request data size: 32 + ICMP Time-To-Live(TTL): 0 + ICMP Type-of-Service(ToS): 0 + Source VRF: default + Operation frequency (sec): 1 + Operation timeout (sec): 3 + Operation threshold: 3 + Operation state: Up + Operation state transitions: 1 + Operation last state change: 2d09h50m ago + ICMP Echo Request counter: 191758 + ICMP Echo Reply counter: 191758 + ICMP Error counter: 114 + ICMP Invalid responses: 0 + VRF present: True + NHT registered: True + NHT reachable: True + Source interface present: True + Socket fd: 14 + Threshold counter: 0 + Last error: Pkt send error(Network is unreachable) + Last error happened: 2d09h50m ago +sonic# + +``` + +History output of specific IP SLA instance: +``` +sonic# show ip sla 20 history +Timestamp Event +--------- ----- +Sat Jun 20 10:27:27 2020 Started +Sat Jun 20 10:27:27 2020 Pkt send error(Network is unreachable) +Sat Jun 20 10:29:25 2020 State changed to: Up +sonic# + + +``` + +#### 3.5.4.2 show TCP SLA track commands +Show output of specific TCP-connect IP SLA instance: +``` +sonic# show ip sla 10 +IP SLA Operation Number: 10 + Type of Operation: TCP-connect + TCP destination IP address: 51.52.0.1 + TCP destination port: 22 + TCP source IP address: 40.90.0.0 + TCP source port: 1020 + TCP source interface: + TCP Time-To-Live(TTL): 0 + TCP ToS (Type-of-Service): 0 + Source VRF: default + Operation frequency (sec): 1 + Operation timeout (sec): 3 + Operation threshold: 3 + Operation state: Up + Operation state transitions: 29 + Operation last state change: 01:19:34 ago + TCP connect request counter: 191876 + TCP connect success counter: 191762 + TCP connect error counter: 59 +sonic# +``` + +Detailed show output of specific TCP-connect IP SLA instance: +``` +sonic# show ip sla 10 detail +IP SLA Operation Number: 10 + Type of Operation: TCP-connect + TCP destination IP address: 51.52.0.1 + TCP destination port: 22 + TCP source IP address: 40.90.0.0 + TCP source port: 1020 + TCP source interface: + TCP Time-To-Live(TTL): 0 + TCP ToS (Type-of-Service): 0 + Source VRF: default + Operation frequency (sec): 1 + Operation timeout (sec): 3 + Operation threshold: 3 + Operation state: Up + Operation state transitions: 29 + Operation last state change: 01:19:39 ago + TCP connect request counter: 191881 + TCP connect success counter: 191767 + TCP connect error counter: 59 + VRF present: True + NHT registered: True + NHT reachable: True + Threshold counter: 3 + Last error: Socket connect error(Cannot assign requested address) + Last error happened: 00:13:20 ago +sonic# + +``` + + +### 3.5.5 Clear commands +Below commands can be used to clear statistics and history for all of the IP +SLA instances or for a particular one. + +``` +sonic# clear ip sla all +sonic# clear ip sla <1-255> +``` + +### 3.5.6 Debug Commands +Debugging for IP SLA can be enabled using below iptrack commands from FRR vtysh: +``` +sonic# debug iptrack +sonic# debug iptrack sla <1-255> +``` +The first command above enables debug logs for all of the IP SLA instances. +Whereas the second command above enables debug logs only for the given IP SLA +instance. + + +### 3.5.7 REST API Support + +The following REST API with actions GET, HEAD, PATCH & DELETE will be supported for IP SLA. + +/restconf/data/openconfig-ip-sla:ip-slas + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id} + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/frequency + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/threshold + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/timeout + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/tcp-source-port + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/tcp-dst-port + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/tcp-source-interface + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/tcp-ttl + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/tcp-tos + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/tcp-source-ip + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/tcp-dst-ip + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/vrf + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/icmp-source-interface + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/icmp-source-ip + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/icmp-dst-ip + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/config/icmp-size + +The following REST APIs with actions HEAD & GET will be supported for IP SLA. + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/ip-sla-id + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/frequency + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/threshold + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/timeout + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-source-port + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-dst-port + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-source-interface + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-ttl + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-tos + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-source-ip + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-dst-ip + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/vrf + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-source-interface + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-source-ip + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-dst-ip + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-size + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/transition + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/timestamp + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/lastchange + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/transition-count + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-operation-state + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-success-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-fail-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-echo-req-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-echo-reply-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/icmp-error-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-operation-frequency + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-operation-timeout + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-operation-state + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-operation-success-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-operation-fail-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-connect-req-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-connect-success-counter + +/restconf/data/openconfig-ip-sla:ip-slas/ip-sla={ip-sla-id}/state/tcp-connect-fail-counter + +# 4 Flow Diagrams + +### 4.1.1 Configure sequence of ip-sla and static route +Below flow diaram shows sample sequence of config of ip-sla and static route +tracking a given ip-sla number. + +```mermaid +sequenceDiagram + participant config_db + participant bgpcfgd + participant vtysh + participant iptrackd + participant staticd + participant zebra + + config_db->>bgpcfgd : ip-sla-10 + bgpcfgd->>vtysh : ip-sla-10 + vtysh->>iptrackd : ip-sla-10 + iptrackd->>iptrackd: create ip-sla-10 instance + + config_db->>bgpcfgd : icmp-echo-51.52.0.1 + bgpcfgd->>vtysh: icmp-echo-51.52.0.1 + vtysh->>iptrackd: icmp-echo-51.52.0.1 + iptrackd->>iptrackd: set sla type to icmp + iptrackd->>zebra: register next-hop 51.52.0.1 + zebra->>iptrackd: next-hop 51.52.0.1 reachable + iptrackd->>iptrackd: start sending icmp echo requests + iptrackd->>iptrackd: state moves to up if icmp echo replies received + + config_db->>bgpcfgd: static-route-track-10 + bgpcfgd->>vtysh: static-route-track-10 + vtysh->>staticd: static-route-track-10 + staticd->>iptrackd: register ipsla 10 + iptrackd->>staticd: ipsla 10 is up + staticd->>zebra: install static route +``` + +### 4.1.2 Unconfigure sequence of ip-sla and static route +Sequence diagram below shows sample sequence of unconfiguring ip-sla instance +first and then removing the static route. + +```mermaid +sequenceDiagram + participant config_db + participant bgpcfgd + participant vtysh + participant iptrackd + participant staticd + participant zebra + + config_db->>bgpcfgd: no-ip-sla-10 + bgpcfgd->>vtysh: no-ip-sla-10 + vtysh->>iptrackd: no-ip-sla-10 + iptrackd->>iptrackd: delete sla 10 instance + iptrackd->>staticd: sla 10 is down + staticd->>zebra: un-install static route + + config_db->>bgpcfgd: no-static-route-track-10 + bgpcfgd->>vtysh: no-static-route-track-10 + vtysh->>staticd: no-static-route-track-10 + staticd->>iptrackd: unregister sla 10 + staticd->>staticd: remote static route +``` + + +# 5 Error Handling +No SAI attribute change require error handling specific to IP SLA. + + +# 6 Serviceability and Debug + +# 7 Warm Boot Support +No specific handling required for warm-boot. + +Static routes would be maintained in forwarding plane until the reconciliation +timer expires (default 5 mins). IP SLA timeouts are to be configured such that +IP SLA state is brought up before reconciliation happens. + +# 8 Scalability + +| SLA Track Type | Max instances supported | +| -------------- | ----------------------- | +| ICMP | 50 | +| TCP | 50 | + +# 9 Unit Test + +## 9.1 Functional Test Cases + +1. Verify ICMP echo and TCP connection requests are sent at specified interval +2. Verify when remote end is brought down/unconfigured, SLA track status goes down after threshold number of unsuccessful attempts. +3. Verify when remote end is brought up/configured, SLA track status goes up after threshold number of successful attempts. +4. Verify static route is installed/uninstalled after tracked SLA status goes up/down. +5. Verify ICMP echo and TCP connect with same IP addresses across different VRFs +6. Verify ICMP and TCP tracks are functional with connected, bgp, static, ospf, and leaked route sources. +7. Verify ICMP and TCP sla tracks do not flap while unknown neighbor traffic at line rate is sent causing cpu queues to get stressed. +8. Verify history of the ICMP and TCP track transitions are logged correctly. + +## 9.2 Negative Test Cases +1. Verify ICMP and TCP tracks are resumed after reachable route is flapped. +2. Verify ICMP and TCP tracks are resumed after VRF is deleted and added back +3. Verify ICMP and TCP tracks are resumed after outgoing interface is flapped +4. Verify ICMP and TCP tracks are resumed after unconfig/config. +5. Verify multiple ICMP and TCP tracks to the same destination. + +## 9.3 Scale Test Cases +1. Verify max no. of ICMP and TCP tracks at the same time in the same VRF. +2. Verify max no. of ICMP (50) and TCP tracks (50) in different VRFs. +3. Verify all of the ICMP and TCP tracks status transitions on various triggers (e.g. route flap, vrf flap, interface flap) + +## 9.4 Warm boot Test Cases + +1. Verify static route traffic remains unimpacted while device undergoes warm-reboot + +# 10 Configuration Example + +## 10.1 IP SLA and Static route configuration examples + +``` +ip sla 1 + icmp-echo 192.168.1.10 vrf Vrf-red +! + +ip sla 2 + icmp-echo 192.168.1.20 vrf Vrf-red +! + +ip sla 3 + icmp-echo fe80::dc25:d9ff:feef:90a2 vrf Vrf-red + source-interface Ethernet0 + ! +! + +ip sla 4 + tcp-connect 192.168.1.10 port 22 vrf Vrf-red +! +``` + +``` +ip route 0.0.0.0/0 192.168.1.10 track 1 +ip route 0.0.0.0/0 192.168.1.20 track 2 +``` + +## 10.2 ACL configuration for assigning CIR/PIR to IP SLA traffic +This section describes how ACL can be used to classify TCP traffic from remote +SLA tracked destination and assign desired CIR/PIR. + +Please refer to ACL HLD for more details. + +Following steps can be followed to configure the access-list and policy map: +i) Create ip access list +ii) Create classifier & map this access list created in previous step. +iii) Create policy & map classifier created in previous step. +iv) Set CIR in policy map +v) Apply the policy map to entire switch (global mode) + + +Access list can be configured for specific source and destination pair and +corresponding source and destination TCP ports. +``` +sonic(config)# ip access-list test-acl +sonic(config-ipv4-acl)# seq 1 permit tcp host 1.1.1.1 eq 1000 host 2.2.2.2 eq 2000 +``` + +Or it can configured with source IP address range and the destination port +for the incoming TCP frames from remote. +``` +sonic(config)# ip access-list test-acl +sonic(config-ipv4-acl)# seq 2 permit tcp 100.0.0.0/24 any eq 2000 +``` + +Configure classifier: +``` +sonic(config)# classifier c1 match-type acl +sonic(config-classifier)# ip access-group test-acl in +``` + +Configure QoS policy: +``` +sonic(config)# policy p1 type qos +sonic(config-policy-flow)# police cir 1000 +``` + +Verify QoS policy is configured: +``` +sonic(config-policy-flow)# do show policy +Policy copp-system-policy Type copp +Policy p1 Type qos + Description: + Flow c1 at priority 50 + Description: + police cir 1000 cbs 0 pir 0 pbs 0 + Applied to + Switch at Ingress +sonic(config-policy-flow)# +``` + +For debgging purpose, counters can be verified as below: +``` +debugsh> show system internal orchagent policer statistics +Policer Name: p1:c1:Switch:INGRESS +Policer OID: 0x12000000000bed +Status:0x0 +Packets:166821121 Bytes:0x21353106432 +GreenPackets:19780 GreenBytes:0x2531840 +YellowPackets:101 YellowBytes:12928 +RedPackets:166801304 RedBytes:21350567808 + +debugsh> +``` From 1abecbe5fc67004eb11b29068865a9a76872a243 Mon Sep 17 00:00:00 2001 From: Syed Hasan Raza Naqvi Date: Tue, 23 Jun 2020 16:55:21 -0700 Subject: [PATCH 2/3] Added BGP VRF and route-leak section in command reference guide. --- release_documents/Command-Reference.md | 157 +++++++++++++++++++++++++ 1 file changed, 157 insertions(+) diff --git a/release_documents/Command-Reference.md b/release_documents/Command-Reference.md index c1d3e74c5361..6b76b7dbac86 100644 --- a/release_documents/Command-Reference.md +++ b/release_documents/Command-Reference.md @@ -68,6 +68,10 @@ Table of Contents * [Configuration Commands](#bgp-error-handling-config-commands) * [Show Commands](#bgp-error-handling-show-commands) * [Clear Commands](#bgp-error-handling-clear-commands) + * [BGP VRF Configuration And Show Commands](#bgp-vrf-configuration-and-show-commands) + * [Configuration Commands](#bgp-vrf-config-commands) + * [BGP VRF Route Leak](#bgp-vrf-route-leak) + * [Show Commands](#bgp-vrf-route-leak-show-commands) * [EVPN Configuration And Show Commands](#evpn-configuration-and-show-commands) * [Enable EVPN between BGP Neighbors](#enable-evpn-between-bgp-neighbors) * [EVPN Configuration Commands](#evpn-configuration-commands) @@ -2829,6 +2833,159 @@ To retry installation of failed routes from Zebra, a clear command has been prov root@sonic:~# clear ip route not-installed ``` +# BGP VRF Configuration And Show Commands +This section provides high level config and show commands for BGP VRF +configuration and VRF route leak via BGP. + +Please refer to "VRF configuration and show commands" section for details on +how to create VRFs in SONiC. + +## Configuration Commands + +BGP VRF instance for a given VRF can be configured using IS-CLI as shown below. +Autonomous-System (AS) number for the BGP VRF instance is not mandated to same +as of default BGP VRF instance. + +Below example configures BGP instance for Vrf-red, configures a neighbor, and +redistributes connected routes into BGP VRF instance. + +``` +sonic(config)# router bgp 65535 vrf Vrf-red +sonic(config-router-bgp)# router-id 192.168.1.1 +sonic(config-router-bgp)# neighbor 10.20.30.40 +sonic(config-router-bgp-neighbor)# remote-as external +sonic(config-router-bgp-neighbor)# address-family ipv4 unicast +sonic(config-router-bgp-neighbor-af)# activate + +sonic(config-router-bgp)# address-family ipv4 unicast +sonic(config-router-bgp-af)# redistribute connected +``` + +It is recommended to configure router-id for the BGP VRF instance(s) in order +to avoid router-id reselection when IP addresses are unconfigured in the VRF. + +IPv4 unicast, IPv6 unicast, and L2VPN EVPN address-families are +supported in the BGP VRF instances. Details on using L2VPN EVPN +address-family is described in the next BGP EVPN section. + +BGP VRF instance can be created without creating default BGP VRF instance. +However, deletion of default BGP VRF instance is restricted if non-default BGP +VRF instance(s) are present. All non-default BGP VRF instances are required to +be deleted before deleting BGP default VRF instance. + + +## BGP VRF Route Leak +Routes can be leaked from one VRF to another using BGP VRF route leak feature +described in this section. + +Use the 'import' command in corresponding address-family of BGP VRF instance to +import routes from the given source VRF. In the example below, BGP Vrf-red +instance is configured to import IPv4 and IPv6 routes from BGP Vrf-blue. +``` +sonic(config)# router bgp 20 vrf Vrf-red +sonic(config-router-bgp)# address-family ipv4 unicast +sonic(config-router-bgp-af)# import vrf Vrf-blue + +sonic(config-router-bgp)# address-family ipv6 unicast +sonic(config-router-bgp-af)# import vrf Vrf-blue + +``` + +Import of routes from multiple BGP VRF instances is allowed. + +Route-map can be applied for the imported leaked routes as shown below. + +``` +sonic(config)# router bgp 20 vrf Vrf-red +sonic(config-router-bgp)# address-family ipv4 unicast +sonic(config-router-bgp-af)# import vrf route-map my-import-filter +sonic(config-router-bgp-af)# import vrf Vrf-red +sonic(config-router-bgp-af)# +``` + +Configured import route-map filters routes from all of the configured +import-VRFs. In case specific routes from specific VRF are required to be +filtered, match-vrf clause in the route-map can be used. + +Note that above BGP VRF import commands leak the prefixes, including connected +subnets, from one vrf to another. Leaking of connected subnets may incur +sub-optimal forwarding for the inter-vrf traffic through the CPU (slow) path. +It is therefore recommended to always leak the routes which have remote +next-hops instead of leaking the connected subnets. + + +## Show Commands +In order to show routes from a given VRF instance, 'vrf' option can be +specified to the regular bgp and ip route show commands. + +Below commands show BGP routes in the given BGP VRF instance: + +``` +sonic# show ip bgp vrf Vrf-red +BGP table version is 9, local router ID is 169.100.1.1, vrf id 91 +Default local pref 100, local AS 10 +Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, # not installed in hardware + i internal, r RIB-failure, S Stale, R Removed +Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self +Origin codes: i - IGP, e - EGP, ? - incomplete + + Network Next Hop Metric LocPrf Weight Path +*> 1.1.1.1/32 0.0.0.0@0< 0 32768 ? +*> 1.2.1.1/32 0.0.0.0@0< 0 32768 ? +*> 4.1.1.1/32 fe80::5054:ff:fe8d:7741@0< +*> 8.0.0.0/24 fe80::5054:ff:fe8d:7741@0< +* 10.59.128.0/20 fe80::5054:ff:fe8d:7741@0< +*> 51.52.0.0/31 0.0.0.0@0< 0 32768 ? +*> 155.100.1.0/24 0.0.0.0 0 32768 ? +*> 169.100.1.0/24 0.0.0.0 0 32768 ? +*> 200.2.1.0/24 0.0.0.0@0< 0 32768 ? + +Displayed 9 routes and 13 total paths +sonic# + +``` + +``` +sonic# show bgp vrf Vrf-red ipv6 +BGP table version is 3, local router ID is 169.100.1.1, vrf id 91 +Default local pref 100, local AS 10 +Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, # not installed in hardware + i internal, r RIB-failure, S Stale, R Removed +Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self +Origin codes: i - IGP, e - EGP, ? - incomplete + + Network Next Hop Metric LocPrf Weight Path +*> 1550:100:1::/80 :: 0 32768 ? +*> 1690:100:1::/64 :: 0 32768 ? +*> 2000:200::/64 ::@0< 0 32768 ? + +Displayed 3 routes and 3 total paths +sonic# +``` + + +Below command shows routes from the RIB for the specified VRF: +``` +sonic# show ip route vrf Vrf-red +Codes: K - kernel route, C - connected, S - static, R - RIP, + O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, + T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, + F - PBR, f - OpenFabric, + > - selected route, * - FIB route, q - queued route, r - rejected route, # - not installed in hardware +VRF Vrf-red: +B>* 1.1.1.1/32 [200/0] is directly connected, Loopback10(vrf default), 01:33:30 +B>* 1.2.1.1/32 [200/0] is directly connected, Loopback11(vrf default), 01:33:30 +B>* 4.1.1.1/32 [200/0] via fe80::5054:ff:fe8d:7741, Ethernet0(vrf default), 01:33:29 +B>* 8.0.0.0/24 [200/0] via fe80::5054:ff:fe8d:7741, Ethernet0(vrf default), 01:33:29 +B>* 10.59.128.0/20 [200/0] is directly connected, eth0(vrf default), 01:33:30 +B>* 51.52.0.0/31 [200/0] is directly connected, Vlan4090(vrf default), 01:33:30 +C>* 155.100.1.0/24 is directly connected, Vlan100, 01:33:52 +C>* 169.100.1.0/24 is directly connected, Vlan1000, 01:33:52 +B>* 200.2.1.0/24 [200/0] is directly connected, Vlan200(vrf default), 01:33:30 +sonic# + +``` + # EVPN Configuration And Show Commands The following sections provide the basic configuration needed to use EVPN as the control plane for VXLAN. From aa8c4195b7d0555b658206ad964ca07681cc94c8 Mon Sep 17 00:00:00 2001 From: Syed Hasan Raza Naqvi Date: Tue, 23 Jun 2020 17:05:28 -0700 Subject: [PATCH 3/3] Revert "Added BGP VRF and route-leak section in command reference guide." This reverts commit 1abecbe5fc67004eb11b29068865a9a76872a243. --- release_documents/Command-Reference.md | 157 ------------------------- 1 file changed, 157 deletions(-) diff --git a/release_documents/Command-Reference.md b/release_documents/Command-Reference.md index 6b76b7dbac86..c1d3e74c5361 100644 --- a/release_documents/Command-Reference.md +++ b/release_documents/Command-Reference.md @@ -68,10 +68,6 @@ Table of Contents * [Configuration Commands](#bgp-error-handling-config-commands) * [Show Commands](#bgp-error-handling-show-commands) * [Clear Commands](#bgp-error-handling-clear-commands) - * [BGP VRF Configuration And Show Commands](#bgp-vrf-configuration-and-show-commands) - * [Configuration Commands](#bgp-vrf-config-commands) - * [BGP VRF Route Leak](#bgp-vrf-route-leak) - * [Show Commands](#bgp-vrf-route-leak-show-commands) * [EVPN Configuration And Show Commands](#evpn-configuration-and-show-commands) * [Enable EVPN between BGP Neighbors](#enable-evpn-between-bgp-neighbors) * [EVPN Configuration Commands](#evpn-configuration-commands) @@ -2833,159 +2829,6 @@ To retry installation of failed routes from Zebra, a clear command has been prov root@sonic:~# clear ip route not-installed ``` -# BGP VRF Configuration And Show Commands -This section provides high level config and show commands for BGP VRF -configuration and VRF route leak via BGP. - -Please refer to "VRF configuration and show commands" section for details on -how to create VRFs in SONiC. - -## Configuration Commands - -BGP VRF instance for a given VRF can be configured using IS-CLI as shown below. -Autonomous-System (AS) number for the BGP VRF instance is not mandated to same -as of default BGP VRF instance. - -Below example configures BGP instance for Vrf-red, configures a neighbor, and -redistributes connected routes into BGP VRF instance. - -``` -sonic(config)# router bgp 65535 vrf Vrf-red -sonic(config-router-bgp)# router-id 192.168.1.1 -sonic(config-router-bgp)# neighbor 10.20.30.40 -sonic(config-router-bgp-neighbor)# remote-as external -sonic(config-router-bgp-neighbor)# address-family ipv4 unicast -sonic(config-router-bgp-neighbor-af)# activate - -sonic(config-router-bgp)# address-family ipv4 unicast -sonic(config-router-bgp-af)# redistribute connected -``` - -It is recommended to configure router-id for the BGP VRF instance(s) in order -to avoid router-id reselection when IP addresses are unconfigured in the VRF. - -IPv4 unicast, IPv6 unicast, and L2VPN EVPN address-families are -supported in the BGP VRF instances. Details on using L2VPN EVPN -address-family is described in the next BGP EVPN section. - -BGP VRF instance can be created without creating default BGP VRF instance. -However, deletion of default BGP VRF instance is restricted if non-default BGP -VRF instance(s) are present. All non-default BGP VRF instances are required to -be deleted before deleting BGP default VRF instance. - - -## BGP VRF Route Leak -Routes can be leaked from one VRF to another using BGP VRF route leak feature -described in this section. - -Use the 'import' command in corresponding address-family of BGP VRF instance to -import routes from the given source VRF. In the example below, BGP Vrf-red -instance is configured to import IPv4 and IPv6 routes from BGP Vrf-blue. -``` -sonic(config)# router bgp 20 vrf Vrf-red -sonic(config-router-bgp)# address-family ipv4 unicast -sonic(config-router-bgp-af)# import vrf Vrf-blue - -sonic(config-router-bgp)# address-family ipv6 unicast -sonic(config-router-bgp-af)# import vrf Vrf-blue - -``` - -Import of routes from multiple BGP VRF instances is allowed. - -Route-map can be applied for the imported leaked routes as shown below. - -``` -sonic(config)# router bgp 20 vrf Vrf-red -sonic(config-router-bgp)# address-family ipv4 unicast -sonic(config-router-bgp-af)# import vrf route-map my-import-filter -sonic(config-router-bgp-af)# import vrf Vrf-red -sonic(config-router-bgp-af)# -``` - -Configured import route-map filters routes from all of the configured -import-VRFs. In case specific routes from specific VRF are required to be -filtered, match-vrf clause in the route-map can be used. - -Note that above BGP VRF import commands leak the prefixes, including connected -subnets, from one vrf to another. Leaking of connected subnets may incur -sub-optimal forwarding for the inter-vrf traffic through the CPU (slow) path. -It is therefore recommended to always leak the routes which have remote -next-hops instead of leaking the connected subnets. - - -## Show Commands -In order to show routes from a given VRF instance, 'vrf' option can be -specified to the regular bgp and ip route show commands. - -Below commands show BGP routes in the given BGP VRF instance: - -``` -sonic# show ip bgp vrf Vrf-red -BGP table version is 9, local router ID is 169.100.1.1, vrf id 91 -Default local pref 100, local AS 10 -Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, # not installed in hardware - i internal, r RIB-failure, S Stale, R Removed -Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self -Origin codes: i - IGP, e - EGP, ? - incomplete - - Network Next Hop Metric LocPrf Weight Path -*> 1.1.1.1/32 0.0.0.0@0< 0 32768 ? -*> 1.2.1.1/32 0.0.0.0@0< 0 32768 ? -*> 4.1.1.1/32 fe80::5054:ff:fe8d:7741@0< -*> 8.0.0.0/24 fe80::5054:ff:fe8d:7741@0< -* 10.59.128.0/20 fe80::5054:ff:fe8d:7741@0< -*> 51.52.0.0/31 0.0.0.0@0< 0 32768 ? -*> 155.100.1.0/24 0.0.0.0 0 32768 ? -*> 169.100.1.0/24 0.0.0.0 0 32768 ? -*> 200.2.1.0/24 0.0.0.0@0< 0 32768 ? - -Displayed 9 routes and 13 total paths -sonic# - -``` - -``` -sonic# show bgp vrf Vrf-red ipv6 -BGP table version is 3, local router ID is 169.100.1.1, vrf id 91 -Default local pref 100, local AS 10 -Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, # not installed in hardware - i internal, r RIB-failure, S Stale, R Removed -Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self -Origin codes: i - IGP, e - EGP, ? - incomplete - - Network Next Hop Metric LocPrf Weight Path -*> 1550:100:1::/80 :: 0 32768 ? -*> 1690:100:1::/64 :: 0 32768 ? -*> 2000:200::/64 ::@0< 0 32768 ? - -Displayed 3 routes and 3 total paths -sonic# -``` - - -Below command shows routes from the RIB for the specified VRF: -``` -sonic# show ip route vrf Vrf-red -Codes: K - kernel route, C - connected, S - static, R - RIP, - O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, - T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, - F - PBR, f - OpenFabric, - > - selected route, * - FIB route, q - queued route, r - rejected route, # - not installed in hardware -VRF Vrf-red: -B>* 1.1.1.1/32 [200/0] is directly connected, Loopback10(vrf default), 01:33:30 -B>* 1.2.1.1/32 [200/0] is directly connected, Loopback11(vrf default), 01:33:30 -B>* 4.1.1.1/32 [200/0] via fe80::5054:ff:fe8d:7741, Ethernet0(vrf default), 01:33:29 -B>* 8.0.0.0/24 [200/0] via fe80::5054:ff:fe8d:7741, Ethernet0(vrf default), 01:33:29 -B>* 10.59.128.0/20 [200/0] is directly connected, eth0(vrf default), 01:33:30 -B>* 51.52.0.0/31 [200/0] is directly connected, Vlan4090(vrf default), 01:33:30 -C>* 155.100.1.0/24 is directly connected, Vlan100, 01:33:52 -C>* 169.100.1.0/24 is directly connected, Vlan1000, 01:33:52 -B>* 200.2.1.0/24 [200/0] is directly connected, Vlan200(vrf default), 01:33:30 -sonic# - -``` - # EVPN Configuration And Show Commands The following sections provide the basic configuration needed to use EVPN as the control plane for VXLAN.