gribi_full_scale_t1 - openconfig/featureprofiles GitHub Wiki
Validate gRIBI scaling requirements (Target T1).
Use the same topology as TE-14.2 but in increased scale:
- DUT [port1] <-> ATE [port1]
- DUT [port2] <-> ATE [port2]
- DUT [port1] -> 1 L3 sub-interface <-> ATE [port1] 1 L3 sub-interface , subnet
192.0.2.0/30 - DUT [port2] -> 640 L3 sub-interfaces <-> ATE [port2] 640 L3 sub-interfaces, Use Vlan tagging for differentiation -
198.18.0.0/20subdivided into/30chunks
# Magic source IP addresses used in this test
* ipv4_outer_src_111 = 198.51.100.111
* ipv4_outer_src_222 = 198.51.100.222
* magic_mac = 02:00:00:00:00:01
* magic_ip = 192.168.1.1
gRIBI client is established with DUT.
DUT [port1] has scaled vrf_selection_policy_c configured:
- 16 Encap VRFs: from
ENCAP_TE_VRF_AtoENCAP_TE_VRF_P - 3 Transit VRFs:
TE_VRF_111/TE_VRF_222/REPAIR_VRF - 1 Decap VRF:
DECAP_TE_VRF - 1 Default VRF
network-instances {
network-instance {
name: DEFAULT
policy-forwarding {
policies {
policy {
policy-id: "vrf_selection_policy_c"
rules {
rule {
sequence-id: 1
ipv4 {
protocol: 4
dscp-set: [dscp_encap_a_1, dscp_encap_a_2]
source-address: "ipv4_outer_src_222"
}
action {
decap-network-instance: "DECAP_TE_VRF"
post-network-instance: "ENCAP_TE_VRF_A"
decap-fallback-network-instance: "TE_VRF_222"
}
}
rule {
sequence-id: 2
ipv4 {
protocol: 41
dscp-set: [dscp_encap_a_1, dscp_encap_a_2]
source-address: "ipv4_outer_src_222"
}
action {
decap-network-instance: "DECAP_TE_VRF"
post-network-instance: "ENCAP_TE_VRF_A"
decap-fallback-network-instance: "TE_VRF_222"
}
}
rule {
sequence-id: 3
ipv4 {
protocol: 4
dscp-set: [dscp_encap_a_1, dscp_encap_a_2]
source-address: "ipv4_outer_src_111"
}
action {
decap-network-instance: "DECAP_TE_VRF"
post-network-instance: "ENCAP_TE_VRF_A"
decap-fallback-network-instance: "TE_VRF_111"
}
}
rule {
sequence-id: 4
ipv4 {
protocol: 41
dscp-set: [dscp_encap_a_1, dscp_encap_a_2]
source-address: "ipv4_outer_src_111"
}
action {
decap-network-instance: "DECAP_TE_VRF"
post-network-instance: "ENCAP_TE_VRF_A"
decap-fallback-network-instance: "TE_VRF_111"
}
}
# Rules 1-4 are repeated for the range ENCAP_TE_VRF_B through ENCAP_TE_VRF_P,
# using the corresponding DSCP sets (dscp_encap_b_1/2 through dscp_encap_p_1/2).
# This generates 60 additional rule stanzas (ommitted here).
rule {
sequence-id: 65
ipv4 {
protocol: 4
source-address: "ipv4_outer_src_222"
}
action {
decap-network-instance: "DECAP_TE_VRF"
post-network-instance: "DEFAULT"
decap-fallback-network-instance: "TE_VRF_222"
}
}
rule {
sequence-id: 66
ipv4 {
protocol: 41
source-address: "ipv4_outer_src_222"
}
action {
decap-network-instance: "DECAP_TE_VRF"
post-network-instance: "DEFAULT"
decap-fallback-network-instance: "TE_VRF_222"
}
}
rule {
sequence-id: 67
ipv4 {
protocol: 4
source-address: "ipv4_outer_src_111"
}
action {
decap-network-instance: "DECAP_TE_VRF"
post-network-instance: "DEFAULT"
decap-fallback-network-instance: "TE_VRF_111"
}
}
rule {
sequence-id: 68
ipv4 {
protocol: 41
source-address: "ipv4_outer_src_111"
}
action {
decap-network-instance: "DECAP_TE_VRF"
post-network-instance: "DEFAULT"
decap-fallback-network-instance: "TE_VRF_111"
}
}
rule {
sequence-id: 69
ipv4 {
dscp-set: [dscp_encap_a_1, dscp_encap_a_2]
}
action {
network-instance: "ENCAP_TE_VRF_A"
}
}
rule {
sequence-id: 70
ipv6 {
dscp-set: [dscp_encap_a_1, dscp_encap_a_2]
}
action {
network-instance: "ENCAP_TE_VRF_A"
}
}
# Rules 69-70 are repeated for the range ENCAP_TE_VRF_B through ENCAP_TE_VRF_P,
# using the corresponding DSCP sets (dscp_encap_b_1/2 through dscp_encap_p_1/2).
# This generates 30 additional rule stanzas (ommitted here).
rule {
sequence-id: 101
action {
network-instance: "DEFAULT"
}
}
}
}
}
}
}
}
Default (fictitious level) VRF setup:
-
A) Install 1000 NextHops, egressing out different interfaces.
-
B) Install 1000 NextHopGroups. Each points to 64 NextHops from A): the weights specified in the NextHopGroup should be co-prime and the sum of the weights should be at granularity:
- T1)
- 80% (800) NHGs should have granularity 1/512
- 20% (200) NHGs should have granularity 1/1K
- T1)
-
C) Install 1000 IPv4 Entries, each pointing at a unique NHG from B).
Static groups:
- S1) Install 1 NHG pointing to a NH. The NH should be a reference to
REPAIR_VRF - S2) Install 1 NHG pointing to a NH. The NH should do decapsulation and point to Default VRF
Transit VRFs setup:
-
Add 3 VRFs:
TE_VRF_111,TE_VRF_222andREPAIR_VRF -
Default VRF setup for
TE_VRF_111/TE_VRF_222:- D.1) Install 1536 NextHops. Each will redirect to an IP from C).
- D.2) Install 1536 NextHops. Each will redirect to an IP from C).
- E.1) Install 768 NextHopGroups. Each will contain 1 NextHops from D.1 with weights 1 and 1 NextHop from D.1 with weight 63. The backup NextHopGroup should be S1).
- E.2) Install 768 NextHopGroups. Each will contain 1 NextHops from D.1 with weights 1 and 1 NextHop from D.1 with weight 63. The backup NextHopGroup should be S2).
-
TE_VRF_111:- Install 200K
/32IPv4Entries (no IPv6Entries). Each points to a NextHopGroup from E.1).
- Install 200K
-
TE_VRF_222:- Install 200K
/32IPv4Entries (no IPv6Entries). Each points to a NextHopGroup from E.2).
- Install 200K
-
Default VRF setup for
REPAIR_VRF:- F) Install X NextHopGroup. 50% of the NHG should point to 1 NH, and 50%
should point to 2 NHs.Each NH should update src address to
ipv4_outer_src_222re-encap to an IPv4 Entry from Repaired VRF. Backup NHG should be S2).- T2) X = 1K
- F) Install X NextHopGroup. 50% of the NHG should point to 1 NH, and 50%
should point to 2 NHs.Each NH should update src address to
-
REPAIR_VRF:- Install 200K IPv4Entries. Each points to a NextHopGroup from F)
Encap / Decap VRFs gRIBI setup:
- Add 16 VRFs for encapsulations: from
ENCAP_TE_VRF_A- toENCAP_TE_VRF_P. - Add 1 VRF for decapsulation,
DECAP_TE_VRF. - Inject 10K IPv4Entry-ies and 10K IPv6Entry-ies to each of the 16 Encap VRFs.
- The entries in the Encap VRFs should point to NextHopGroups in the default VRF. Inject NextHopGroups in the default VRF: - T3) 4K
- Each NextHopGroup should have a number of NextHops where each NextHop should
do encapsulation, update src ip to
ipv4_outer_src_111and point to a tunnel in theTE_VRF_111. In addition, the weights specified in the NextHopGroup should be co-prime and the sum of the weights should be 1/granularity:- 75% NHGs should each point to 8 NHs with granularity 1/64
- 20% NHGs should each point to 32 NHs with granularity 1/128
- 5% NHGs should each point to 32 NHs with granularity 1/256
- Overall the number of unique NHs should be:
- T4) 16K
- Inject 48 ipv4 entries in the
DECAP_TE_VRFwhere the entries have a mix of prefix lengths/22,/24,/26, and/28. - Each NHG points to 1 NH to decapsulate and output to a port
-
Validate that each entry is installed as
FIB_PROGRAMMED -
Validate The Hierarchical route structure was installed correctly:
- Check 10 random addressess from
TE_VRF_111and using gRIBI client ensure they recursively resolve to expected interfaces.
- Check 10 random addressess from
-
Validate the traffic follows the programmed paths. For all the use-cases send the traffic in 2 tests, each for 5 minutes of total 30 Mpps across interfaces with 0% traffic drop tolerance:
- packet size of 64 bytes
- IMIX traffic as a mix of 7:4:1 to 3K:1.5K:0.5K
-
Encap
- Send un-encapsulated traffic to all IPv4 and IPv6 entries in all the Encap VRFs
- For all the
ENCAP_TE_VRF_A-ENCAP_TE_VRF_P(hereVRF_X), the flows are:- src_id=DUT-1, dst_ip=[all IPv4s from
VRF_X], dscp=encap_vrf_dscp_x_1 - src_id=DUT-1, dst_ip=[all IPv4s from
VRF_X], dscp=encap_vrf_dscp_x_2 - src_id=DUT-1, dst_ip=[all IPv6s from
VRF_X], dscp=encap_vrf_dscp_x_1 - src_id=DUT-1, dst_ip=[all IPv6s from
VRF_X], dscp=encap_vrf_dscp_x_2
- src_id=DUT-1, dst_ip=[all IPv4s from
- Verify traffic received by ATE is encapsulated
-
Decap
- Send encapsulated traffic to all the IPv4 expanded from all the prefix
lengths (
/22,/24,/26, and/28) in Decap VRF: - For all the
ENCAP_TE_VRF_A-ENCAP_TE_VRF_P(hereVRF_X), the flows are:- outer_src_ip=
ipv4_outer_src_111, outer_dst_ip=[expanded Decap IPv4s],outer_dscp=encap_vrf_dscp_x_1, inner_src_ip=DUT-1, inner_dst_ip=DUT-2, inner_dscp=encap_vrf_dscp_x_1 - outer_src_ip=
ipv4_outer_src_111, outer_dst_ip=[expanded Decap IPv4s],outer_dscp=encap_vrf_dscp_x_2, inner_src_ip=DUT-1, inner_dst_ip=DUT-2, inner_dscp=encap_vrf_dscp_x_2
- outer_src_ip=
- Verify traffic received by ATE was de-encapsulated
- Send encapsulated traffic to all the IPv4 expanded from all the prefix
lengths (
-
Re-encap
- Send encapsulated traffic to all the IPv4 expanded from all the prefix lengths (
/22,/24,/26, and/28) in Decap VRF to all the Encap VRFs:- For all the
ENCAP_TE_VRF_A-ENCAP_TE_VRF_P(hereVRF_X), the flows are:- outer_src_ip=
ipv4_outer_src_111, outer_dst_ip=[expanded Decap IPv4s], outer_dscp=encap_vrf_dscp_x_1, inner_src_ip=DUT-1, inner_dst_ip=[all IPv4s fromVRF_X], inner_dscp=encap_vrf_dscp_x_1 - outer_src_ip=
ipv4_outer_src_111, outer_dst_ip=[expanded Decap IPv4s], outer_dscp=encap_vrf_dscp_x_2, inner_src_ip=DUT-1, inner_dst_ip=[all IPv4s fromVRF_X], inner_dscp=encap_vrf_dscp_x_2 - outer_src_ip=
ipv4_outer_src_111, outer_dst_ip=[expanded Decap IPv4s], outer_dscp=encap_vrf_dscp_x_1, inner_src_ip=DUT-1, inner_dst_ip=[all IPv6s fromVRF_X], inner_dscp=`encap_vrf_dscp_x_1 - outer_src_ip=
ipv4_outer_src_111, outer_dst_ip=[expanded Decap IPv4s], outer_dscp=encap_vrf_dscp_x_2, inner_src_ip=DUT-1, inner_dst_ip=[all IPv6s fromVRF_X], inner_dscp=`encap_vrf_dscp_x_2 - outer_src_ip=
ipv4_outer_src_222, outer_dst_ip=[expanded Decap IPv4s], outer_dscp=encap_vrf_dscp_x_1, inner_src_ip=DUT-1, inner_dst_ip=[all IPv4s fromVRF_X], inner_dscp=`encap_vrf_dscp_x_1 - outer_src_ip=
ipv4_outer_src_222, outer_dst_ip=[expanded Decap IPv4s], outer_dscp=encap_vrf_dscp_x_2, inner_src_ip=DUT-1, inner_dst_ip=[all IPv4s fromVRF_X], inner_dscp=encap_vrf_dscp_x_2 - outer_src_ip=
ipv4_outer_src_222, outer_dst_ip=[expanded Decap IPv4s], outer_dscp=encap_vrf_dscp_x_1, inner_src_ip=DUT-1, inner_dst_ip=[all IPv6s fromVRF_X], inner_dscp=encap_vrf_dscp_x_1 - outer_src_ip=
ipv4_outer_src_222, outer_dst_ip=[expanded Decap IPv4s], outer_dscp=encap_vrf_dscp_x_2, inner_src_ip=DUT-1, inner_dst_ip=[all IPv6s fromVRF_X], inner_dscp=encap_vrf_dscp_x_2
- outer_src_ip=
- For all the
- Verify that traffic received by ATE is encapsulated and outer_dst_ip is not from the expanded Decap IPv4 set.
- Send encapsulated traffic to all the IPv4 expanded from all the prefix lengths (
-
Transit
- Send encapsulated traffic to all the IPv4 Entries from
TE_VRF_111)`:- For all the
ENCAP_TE_VRF_A-ENCAP_TE_VRF_P(hereVRF_X), the flows are:- outer_src_ip=
ipv4_outer_src_111, outer_dst_ip=[all IPv4s from Repaired], outer_dscp=encap_vrf_dscp_x_1, inner_src_ip=DUT-1, inner_dst_ip=DUT-2,inner_dscp=encap_vrf_dscp_x_1 - outer_src_ip=
ipv4_outer_src_111, outer_dst_ip=[all IPv4s from Repaired], outer_dscp=encap_vrf_dscp_x_2, inner_src_ip=DUT-1,inner_dst_ip=DUT-2,inner_dscp=encap_vrf_dscp_x_2
- outer_src_ip=
- For all the
- Verify that traffic received by ATE stays encapsulated with the outer header having the same source IP and destination IP is from the Transit VRF IPv4 entry set.
- Send encapsulated traffic to all the IPv4 Entries from
-
Repaired (incoming after FRR):
- Send encapsulated traffic to all the IPv4 Entries from
TE_VRF_222: - For all the
ENCAP_TE_VRF_A-ENCAP_TE_VRF_P(hereVRF_X), the flows are:- outer_src_ip=
ipv4_outer_src_222, outer_dst_ip=[all IPv4s from Repaired], outer_dscp=encap_vrf_dscp_x_1, inner_src_ip=DUT-1, inner_dst_ip=DUT-2, inner_dscp=encap_vrf_dscp_x_1 - outer_src_ip=
ipv4_outer_src_222, outer_dst_ip=[all IPv4s from Repaired], outer_dscp=encap_vrf_dscp_x_2, inner_src_ip=DUT-1,inner_dst_ip=DUT-2, inner_dscp=encap_vrf_dscp_x_2
- outer_src_ip=
- Verify that traffic received by ATE stays encapsulated with the outer header having the same source IP and destination IP is from the Repaired VRF IPv4 entry set.
- Send encapsulated traffic to all the IPv4 Entries from
Note: the Canonical OC path section only has description for one sub-interface of DUT[port2] and only considers a single VRF ENCAP_TE_VRF_A to keep it brief.
{
"interfaces": {
"interface": [
{
"config": {
"description": "DUT port1",
"name": "port1",
"type": "ethernetCsmacd"
},
"name": "port1",
"subinterfaces": {
"subinterface": [
{
"config": {
"index": 1
},
"index": 1,
"ipv4": {
"addresses": {
"address": [
{
"config": {
"ip": "192.0.2.1",
"prefix-length": 30
},
"ip": "192.0.2.1"
}
]
}
}
}
]
}
},
{
"config": {
"description": "DUT port2 with 640 sub-interfaces",
"name": "port2",
"type": "ethernetCsmacd"
},
"name": "port2",
"subinterfaces": {
"subinterface": [
{
"config": {
"index": 1
},
"index": 1,
"ipv4": {
"addresses": {
"address": [
{
"config": {
"ip": "198.18.0.1",
"prefix-length": 30
},
"ip": "198.18.0.1"
}
]
}
},
"vlan": {
"config": {
"vlan-id": 1
},
"match": {
"single-tagged": {
"config": {
"vlan-id": 1
}
}
}
}
}
]
}
}
]
},
"network-instances": {
"network-instance": [
{
"config": {
"name": "DECAP_TE_VRF",
"type": "L3VRF"
},
"name": "DECAP_TE_VRF"
},
{
"config": {
"name": "DEFAULT",
"type": "DEFAULT_INSTANCE"
},
"name": "DEFAULT",
"policy-forwarding": {
"interfaces": {
"interface": [
{
"config": {
"apply-vrf-selection-policy": "vrf_selection_policy_c",
"interface-id": "port1"
},
"interface-id": "port1",
"interface-ref": {
"config": {
"interface": "port1",
"subinterface": 1
}
}
}
]
},
"policies": {
"policy": [
{
"config": {
"policy-id": "vrf_selection_policy_c",
"type": "PBR_POLICY"
},
"policy-id": "vrf_selection_policy_c",
"rules": {
"rule": [
{
"action": {
"config": {
"decap-fallback-network-instance": "TE_VRF_222",
"decap-network-instance": "DECAP_TE_VRF",
"post-decap-network-instance": "ENCAP_TE_VRF_A"
}
},
"config": {
"sequence-id": 1
},
"ipv4": {
"config": {
"dscp-set": [
10,
11
],
"protocol": 4,
"source-address": "198.51.100.222/32"
}
},
"sequence-id": 1
},
{
"action": {
"config": {
"network-instance": "DEFAULT"
}
},
"config": {
"sequence-id": 101
},
"sequence-id": 101
},
{
"action": {
"config": {
"decap-fallback-network-instance": "TE_VRF_222",
"decap-network-instance": "DECAP_TE_VRF",
"post-decap-network-instance": "ENCAP_TE_VRF_A"
}
},
"config": {
"sequence-id": 2
},
"ipv4": {
"config": {
"dscp-set": [
10,
11
],
"protocol": 41,
"source-address": "198.51.100.222/32"
}
},
"sequence-id": 2
},
{
"action": {
"config": {
"decap-fallback-network-instance": "TE_VRF_111",
"decap-network-instance": "DECAP_TE_VRF",
"post-decap-network-instance": "ENCAP_TE_VRF_A"
}
},
"config": {
"sequence-id": 3
},
"ipv4": {
"config": {
"dscp-set": [
10,
11
],
"protocol": 4,
"source-address": "198.51.100.111/32"
}
},
"sequence-id": 3
},
{
"action": {
"config": {
"decap-fallback-network-instance": "TE_VRF_111",
"decap-network-instance": "DECAP_TE_VRF",
"post-decap-network-instance": "ENCAP_TE_VRF_A"
}
},
"config": {
"sequence-id": 4
},
"ipv4": {
"config": {
"dscp-set": [
10,
11
],
"protocol": 41,
"source-address": "198.51.100.111/32"
}
},
"sequence-id": 4
},
{
"action": {
"config": {
"decap-fallback-network-instance": "TE_VRF_222",
"decap-network-instance": "DECAP_TE_VRF",
"post-decap-network-instance": "DEFAULT"
}
},
"config": {
"sequence-id": 65
},
"ipv4": {
"config": {
"protocol": 4,
"source-address": "198.51.100.222/32"
}
},
"sequence-id": 65
},
{
"action": {
"config": {
"decap-fallback-network-instance": "TE_VRF_222",
"decap-network-instance": "DECAP_TE_VRF",
"post-decap-network-instance": "DEFAULT"
}
},
"config": {
"sequence-id": 66
},
"ipv4": {
"config": {
"protocol": 41,
"source-address": "198.51.100.222/32"
}
},
"sequence-id": 66
},
{
"action": {
"config": {
"decap-fallback-network-instance": "TE_VRF_111",
"decap-network-instance": "DECAP_TE_VRF",
"post-decap-network-instance": "DEFAULT"
}
},
"config": {
"sequence-id": 67
},
"ipv4": {
"config": {
"protocol": 4,
"source-address": "198.51.100.111/32"
}
},
"sequence-id": 67
},
{
"action": {
"config": {
"decap-fallback-network-instance": "TE_VRF_111",
"decap-network-instance": "DECAP_TE_VRF",
"post-decap-network-instance": "DEFAULT"
}
},
"config": {
"sequence-id": 68
},
"ipv4": {
"config": {
"protocol": 41,
"source-address": "198.51.100.111/32"
}
},
"sequence-id": 68
},
{
"action": {
"config": {
"network-instance": "ENCAP_TE_VRF_A"
}
},
"config": {
"sequence-id": 69
},
"ipv4": {
"config": {
"dscp-set": [
10,
11
]
}
},
"sequence-id": 69
},
{
"action": {
"config": {
"network-instance": "ENCAP_TE_VRF_A"
}
},
"config": {
"sequence-id": 70
},
"ipv6": {
"config": {
"dscp-set": [
10,
11
]
}
},
"sequence-id": 70
}
]
}
}
]
}
}
},
{
"config": {
"name": "ENCAP_TE_VRF_A",
"type": "L3VRF"
},
"name": "ENCAP_TE_VRF_A"
},
{
"config": {
"name": "REPAIR_VRF",
"type": "L3VRF"
},
"name": "REPAIR_VRF"
},
{
"config": {
"name": "TE_VRF_111",
"type": "L3VRF"
},
"name": "TE_VRF_111"
},
{
"config": {
"name": "TE_VRF_222",
"type": "L3VRF"
},
"name": "TE_VRF_222"
}
]
}
}paths:
/interfaces/interface/config/description:
/interfaces/interface/config/enabled:
/interfaces/interface/config/type:
/interfaces/interface/ethernet/config/port-speed:
/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address/config/prefix-length:
/interfaces/interface/subinterfaces/subinterface/ipv4/config/enabled:
/interfaces/interface/subinterfaces/subinterface/vlan/config/vlan-id:
/interfaces/interface/subinterfaces/subinterface/vlan/match/single-tagged/config/vlan-id:
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/next-hop-group:
/network-instances/network-instance/afts/next-hop-groups/next-hop-group/state/id:
/network-instances/network-instance/afts/next-hop-groups/next-hop-group/next-hops/next-hop/state/index:
/network-instances/network-instance/afts/next-hops/next-hop/state/ip-address:
/network-instances/network-instance/afts/next-hops/next-hop/interface-ref/state/interface:
/network-instances/network-instance/config/type:
/network-instances/network-instance/policy-forwarding/interfaces/interface/config/apply-vrf-selection-policy:
/network-instances/network-instance/policy-forwarding/interfaces/interface/interface-ref/config/interface:
/network-instances/network-instance/policy-forwarding/interfaces/interface/interface-ref/config/subinterface:
/network-instances/network-instance/policy-forwarding/policies/policy/config/type:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/action/config/network-instance:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/ipv4/config/source-address:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/action/state/decap-fallback-network-instance:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/ipv4/state/dscp-set:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/ipv4/state/source-address:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/ipv6/state/dscp-set:
rpcs:
gnmi:
gNMI.Get:
gNMI.Set:
gNMI.Subscribe:
gribi:
gRIBI.Get:
gRIBI.Modify:
gRIBI.Flush: