Skip to content

Commit b33df64

Browse files
updated branch
1 parent c58e192 commit b33df64

File tree

9 files changed

+355
-95
lines changed

9 files changed

+355
-95
lines changed

feature/policy_forwarding/encapsulation/otg_tests/staticgueencap_and_bgp_path_selection/staticgueencap_and_bgp_path_selection_test.go

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -874,40 +874,42 @@ func configureGueEncap(t *testing.T, dut *ondatra.DUTDevice) {
874874
_, ni, _ := cfgplugins.SetupPolicyForwardingInfraOC(deviations.DefaultNetworkInstance(dut))
875875

876876
v4NexthopUDPParams := cfgplugins.NexthopGroupUDPParams{
877-
TrafficType: oc.Aft_EncapsulationHeaderType_UDPV6,
878-
NexthopGrpName: nexthopGroupName1,
879-
Index: "0",
880-
SrcIp: loopbackIntfName,
881-
DstIp: []string{bgpInternalTE10.IPv6},
882-
TTL: 64,
883-
DstUdpPort: udpEncapPort,
884-
NetworkInstance: ni,
885-
DeleteTtl: false,
877+
IPFamily: "V6Udp",
878+
NexthopGrpName: nexthopGroupName1,
879+
Index: "0",
880+
SrcInterface: loopbackIntfName,
881+
DstIp: []string{bgpInternalTE10.IPv6},
882+
TTL: 64,
883+
DstUdpPort: udpEncapPort,
884+
NetworkInstanceObj: ni,
885+
DeleteTtl: false,
886886
}
887887
// Create nexthop group for v4
888888
cfgplugins.NextHopGroupConfigForIpOverUdp(t, dut, v4NexthopUDPParams)
889889

890890
v4NexthopUDPParams2 := cfgplugins.NexthopGroupUDPParams{
891-
TrafficType: oc.Aft_EncapsulationHeaderType_UDPV6,
892-
NexthopGrpName: nexthopGroupName2,
893-
Index: "1",
894-
SrcIp: loopbackIntfName,
895-
DstIp: []string{bgpInternalTE11.IPv6},
896-
TTL: 64,
897-
DstUdpPort: udpEncapPort,
898-
NetworkInstance: ni,
899-
DeleteTtl: false,
891+
IPFamily: "V6Udp",
892+
NexthopGrpName: nexthopGroupName2,
893+
Index: "1",
894+
SrcInterface: loopbackIntfName,
895+
DstIp: []string{bgpInternalTE11.IPv6},
896+
TTL: 64,
897+
DstUdpPort: udpEncapPort,
898+
NetworkInstanceObj: ni,
899+
DeleteTtl: false,
900900
}
901901
// Create nexthop group for v4
902902
cfgplugins.NextHopGroupConfigForIpOverUdp(t, dut, v4NexthopUDPParams2)
903903

904904
// Apply traffic policy on interface
905905
if deviations.NextHopGroupOCUnsupported(dut) {
906906
interfacePolicyParams := cfgplugins.OcPolicyForwardingParams{
907-
InterfaceID: dut.Port(t, "port1").Name(),
908-
AppliedPolicyName: guePolicyName,
907+
InterfaceName: dut.Port(t, "port1").Name(),
908+
AppliedPolicyName: guePolicyName,
909+
NetworkInstanceObj: ni,
910+
PolicyName: guePolicyName,
909911
}
910-
cfgplugins.InterfacePolicyForwardingApply(t, dut, dut.Port(t, "port1").Name(), guePolicyName, ni, interfacePolicyParams)
912+
cfgplugins.InterfacePolicyForwardingApply(t, dut, interfacePolicyParams)
911913
}
912914
}
913915

@@ -1886,11 +1888,12 @@ func testIbgpTunnelEndpointRemoved(t *testing.T, dut *ondatra.DUTDevice, ate *on
18861888

18871889
if deviations.NextHopGroupOCUnsupported(dut) {
18881890
interfacePolicyParams := cfgplugins.OcPolicyForwardingParams{
1889-
InterfaceID: dut.Port(t, "port1").Name(),
1890-
AppliedPolicyName: guePolicyName,
1891-
RemovePolicyName: true,
1891+
InterfaceName: dut.Port(t, "port1").Name(),
1892+
PolicyName: guePolicyName,
1893+
RemovePolicyName: true,
1894+
NetworkInstanceObj: ni,
18921895
}
1893-
cfgplugins.InterfacePolicyForwardingApply(t, dut, dut.Port(t, "port1").Name(), guePolicyName, ni, interfacePolicyParams)
1896+
cfgplugins.InterfacePolicyForwardingApply(t, dut, interfacePolicyParams)
18941897
}
18951898

18961899
t.Log("Stop advertising tunnel endpoints on ATE Port2")
@@ -1952,10 +1955,11 @@ func testEstablishIBGPoverEBGP(t *testing.T, dut *ondatra.DUTDevice, ate *ondatr
19521955

19531956
if deviations.NextHopGroupOCUnsupported(dut) {
19541957
interfacePolicyParams := cfgplugins.OcPolicyForwardingParams{
1955-
InterfaceID: dut.Port(t, "port1").Name(),
1956-
AppliedPolicyName: guePolicyName,
1958+
InterfaceName: dut.Port(t, "port1").Name(),
1959+
PolicyName: guePolicyName,
1960+
NetworkInstanceObj: ni,
19571961
}
1958-
cfgplugins.InterfacePolicyForwardingApply(t, dut, dut.Port(t, "port1").Name(), guePolicyName, ni, interfacePolicyParams)
1962+
cfgplugins.InterfacePolicyForwardingApply(t, dut, interfacePolicyParams)
19591963
}
19601964

19611965
configureStaticRoute(t, dut)

internal/cfgplugins/policyforwarding.go

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -688,8 +688,10 @@ func aristaGueDecapCLIConfig(t *testing.T, dut *ondatra.DUTDevice, params OcPoli
688688
ip decap-group %s
689689
tunnel type UDP
690690
tunnel decap-ip %s
691-
tunnel decap-interface %s
692-
`, params.GUEPort, decapProto, params.IPType, params.GUEPort, params.AppliedPolicyName, params.TunnelIP, params.InterfaceID)
691+
`, params.GUEPort, decapProto, params.IPType, params.TunnelIP)
692+
if params.InterfaceID != "" {
693+
cliConfig += fmt.Sprintf("tunnel decap-interface %s", params.InterfaceID)
694+
}
693695
helpers.GnmiCLIConfig(t, dut, cliConfig)
694696
}
695697

@@ -709,28 +711,6 @@ func aristaGreDecapCLIConfig(t *testing.T, dut *ondatra.DUTDevice, params OcPoli
709711

710712
}
711713

712-
func InterfacePolicyForwardingApply(t *testing.T, dut *ondatra.DUTDevice, interfaceName string, policyName string, ni *oc.NetworkInstance, params OcPolicyForwardingParams) {
713-
t.Helper()
714-
715-
// Check if the DUT requires CLI-based configuration due to an OpenConfig deviation.
716-
if deviations.InterfacePolicyForwardingOCUnsupported(dut) {
717-
// If deviations exist, apply configuration using vendor-specific CLI commands.
718-
switch dut.Vendor() {
719-
case ondatra.ARISTA:
720-
if params.RemovePolicyName {
721-
helpers.GnmiCLIConfig(t, dut, fmt.Sprintf("interface %s \n no traffic-policy input %s \n", interfaceName, policyName))
722-
} else {
723-
helpers.GnmiCLIConfig(t, dut, fmt.Sprintf("interface %s \n traffic-policy input %s \n", interfaceName, policyName))
724-
}
725-
default:
726-
t.Logf("Unsupported vendor %s for native command support for deviation 'policy-forwarding config'", dut.Vendor())
727-
}
728-
} else {
729-
policyForward := ni.GetOrCreatePolicyForwarding()
730-
ApplyPolicyToInterfaceOC(t, policyForward, params.InterfaceID, params.AppliedPolicyName)
731-
}
732-
}
733-
734714
// QosClassificationConfig configures the interface qos classification.
735715
func ConfigureTOSGUE(t *testing.T, dut *ondatra.DUTDevice, policyName string, dscpValue uint32, port string, deleteTOS bool) {
736716
if deviations.QosClassificationOCUnsupported(dut) {
@@ -1244,9 +1224,13 @@ func InterfacePolicyForwardingApply(t *testing.T, dut *ondatra.DUTDevice, params
12441224
// If deviations exist, apply configuration using vendor-specific CLI commands.
12451225
switch dut.Vendor() {
12461226
case ondatra.ARISTA:
1247-
pfa := fmt.Sprintf(`interface %s
1227+
if params.RemovePolicyName {
1228+
helpers.GnmiCLIConfig(t, dut, fmt.Sprintf("interface %s \n no traffic-policy input %s \n", params.InterfaceName, params.PolicyName))
1229+
} else {
1230+
pfa := fmt.Sprintf(`interface %s
12481231
traffic-policy input %s`, params.InterfaceName, params.PolicyName)
1249-
helpers.GnmiCLIConfig(t, dut, pfa)
1232+
helpers.GnmiCLIConfig(t, dut, pfa)
1233+
}
12501234
default:
12511235
t.Logf("Unsupported vendor %s for native command support for deviation 'policy-forwarding config'", dut.Vendor())
12521236
}

internal/cfgplugins/staticnexthop.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -217,11 +217,14 @@ type NexthopGroupUDPParams struct {
217217
NexthopGrpName string
218218
DstIp []string
219219
SrcIp string
220+
SrcInterface string
220221
DstUdpPort uint16
221222
SrcUdpPort uint16
222223
TTL uint8
223224
DSCP uint8
224225
NetworkInstanceObj *oc.NetworkInstance
226+
Index string
227+
DeleteTtl bool
225228
}
226229

227230
// configureNextHopGroups configures the next-hop groups and their encapsulation headers.
@@ -293,11 +296,17 @@ func NextHopGroupConfigForIpOverUdp(t *testing.T, dut *ondatra.DUTDevice, params
293296
tunnelDst += fmt.Sprintf("entry %d tunnel-destination %s \n", i, addr)
294297
}
295298
cli = fmt.Sprintf(`
299+
qos rewrite ipv4-over-udp inner dscp disabled
300+
qos rewrite ipv6-over-udp inner dscp disabled
296301
nexthop-group %s type %s
297-
tunnel-source %s
298302
fec hierarchical
299303
%s
300-
`, params.NexthopGrpName, groupType, params.SrcIp, tunnelDst)
304+
`, params.NexthopGrpName, groupType, tunnelDst)
305+
if params.SrcInterface != "" {
306+
cli += fmt.Sprintf("tunnel-source intf %s", params.SrcInterface)
307+
} else {
308+
cli += fmt.Sprintf("tunnel-source %s", params.SrcIp)
309+
}
301310
helpers.GnmiCLIConfig(t, dut, cli)
302311
}
303312
if params.TTL != 0 {
@@ -316,6 +325,14 @@ func NextHopGroupConfigForIpOverUdp(t *testing.T, dut *ondatra.DUTDevice, params
316325
helpers.GnmiCLIConfig(t, dut, cli)
317326
}
318327

328+
if params.DeleteTtl {
329+
cli = fmt.Sprintf(
330+
`nexthop-group %s type %s
331+
no ttl %v
332+
`, params.NexthopGrpName, groupType, params.TTL)
333+
helpers.GnmiCLIConfig(t, dut, cli)
334+
}
335+
319336
if params.DstUdpPort != 0 {
320337
// Select and apply the appropriate CLI snippet based on 'traffictype'.
321338
cli = fmt.Sprintf(`tunnel type %s udp destination port %v`, groupType, params.DstUdpPort)
@@ -325,17 +342,15 @@ func NextHopGroupConfigForIpOverUdp(t *testing.T, dut *ondatra.DUTDevice, params
325342
t.Logf("Unsupported vendor %s for native command support for deviation 'next-hop-group config'", dut.Vendor())
326343
}
327344
} else {
328-
t.Helper()
329345
nhg := params.NetworkInstanceObj.GetOrCreateStatic().GetOrCreateNextHopGroup(params.NexthopGrpName)
330-
nhg.GetOrCreateNextHop("Dest A-NH1").Index = ygot.String("Dest A-NH1")
346+
nhg.GetOrCreateNextHop(params.Index).SetIndex(params.Index)
331347

332-
// Set the encap header for each next-hop
333-
ueh1 := params.NetworkInstanceObj.GetOrCreateStatic().GetOrCreateNextHop("Dest A-NH1").GetOrCreateEncapHeader(1)
348+
ueh1 := params.NetworkInstanceObj.GetOrCreateStatic().GetOrCreateNextHop(params.Index).GetOrCreateEncapHeader(1)
334349
for _, addr := range params.DstIp {
335-
ueh1.GetOrCreateUdpV4().DstIp = ygot.String(addr)
350+
ueh1.GetOrCreateUdpV4().SetDstIp(addr)
336351
}
337352
if params.TTL != 0 {
338-
ueh1.GetOrCreateUdpV4().IpTtl = ygot.Uint8(params.TTL)
353+
ueh1.GetOrCreateUdpV4().SetIpTtl(params.TTL)
339354
}
340355
ueh1.GetOrCreateUdpV4().SetSrcIp(params.SrcIp)
341356
ueh1.GetOrCreateUdpV4().SetDscp(params.DSCP)

internal/cfgplugins/staticroute.go

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,20 @@ import (
2929

3030
// StaticRouteCfg defines commonly used attributes for setting a static route
3131
type StaticRouteCfg struct {
32-
NetworkInstance string
33-
Prefix string
34-
NextHops map[string]oc.NetworkInstance_Protocol_Static_NextHop_NextHop_Union
35-
IPType string
36-
NextHopAddr string
32+
NetworkInstance string
33+
Prefix string
34+
NextHops map[string]oc.NetworkInstance_Protocol_Static_NextHop_NextHop_Union
35+
IPType string
36+
NextHopAddr string
37+
NexthopGroup bool
38+
NexthopGroupName string
39+
Metric uint32
40+
Recurse bool
41+
T *testing.T
42+
TrafficType oc.E_Aft_EncapsulationHeaderType
43+
PolicyName string
44+
Rule string
45+
RemoveStaticRoute bool
3746
}
3847

3948
// StaticVRFRouteCfg represents a static route configuration within a specific network instance (VRF). It defines the destination prefix, associated next-hop group, and the protocol string used for identification.
@@ -160,3 +169,31 @@ func NewStaticVRFRoute(t *testing.T, batch *gnmi.SetBatch, cfg *StaticVRFRouteCf
160169

161170
return s, nil
162171
}
172+
173+
// staticRouteToNextHopGroupCLI configures routes to a next-hop-group for gue encapsulation
174+
func staticRouteToNextHopGroupCLI(t *testing.T, dut *ondatra.DUTDevice, params StaticRouteCfg) {
175+
t.Helper()
176+
groupType := ""
177+
178+
switch params.TrafficType {
179+
case oc.Aft_EncapsulationHeaderType_UDPV4:
180+
groupType = "ipv4"
181+
case oc.Aft_EncapsulationHeaderType_UDPV6:
182+
groupType = "ipv6"
183+
}
184+
185+
// Configure traffic policy
186+
cli := ""
187+
switch dut.Vendor() {
188+
case ondatra.ARISTA:
189+
cli = fmt.Sprintf(`
190+
traffic-policies
191+
traffic-policy %s
192+
match %s %s
193+
actions
194+
redirect next-hop group %s`, params.PolicyName, params.Rule, groupType, params.NexthopGroupName)
195+
helpers.GnmiCLIConfig(t, dut, cli)
196+
default:
197+
t.Logf("Unsupported vendor %s for native command support for deviation 'policy-forwarding config'", dut.Vendor())
198+
}
199+
}

internal/deviations/deviations.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1999,3 +1999,8 @@ func QosFt(dut *ondatra.DUTDevice) string {
19991999
func SystemMountPointStateFt(dut *ondatra.DUTDevice) string {
20002000
return lookupDUTDeviations(dut).GetSystemMountPointStateFt()
20012001
}
2002+
2003+
// StaticRouteToNextHopGroupOCNotSupported returns true if device does not support oc state path static route to nexthop group
2004+
func StaticRouteToNHGOCUnsupported(dut *ondatra.DUTDevice) bool {
2005+
return lookupDUTDeviations(dut).GetStaticRouteToNhgOcUnsupported()
2006+
}

0 commit comments

Comments
 (0)