From 014d56353e16387bae5079a0ad64e3cae10dcd3f Mon Sep 17 00:00:00 2001 From: laurayang842 Date: Tue, 21 Apr 2026 17:04:58 -0400 Subject: [PATCH 1/2] system-tests: update ipvlan-validation.go to support IPv6 single stack --- .../rdscorecommon/ipvlan-validation.go | 137 ++++++++++++------ 1 file changed, 89 insertions(+), 48 deletions(-) diff --git a/tests/system-tests/rdscore/internal/rdscorecommon/ipvlan-validation.go b/tests/system-tests/rdscore/internal/rdscorecommon/ipvlan-validation.go index f91d17741..df0ba32b4 100644 --- a/tests/system-tests/rdscore/internal/rdscorecommon/ipvlan-validation.go +++ b/tests/system-tests/rdscore/internal/rdscorecommon/ipvlan-validation.go @@ -158,33 +158,53 @@ func VerifyIPVlanOnDifferentNodes() { // VerifyIPVLANConnectivityBetweenDifferentNodes verifies connectivity between workloads, // using IPVLAN interfaces and running on different nodes. func VerifyIPVLANConnectivityBetweenDifferentNodes() { - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy10Label, - ipvlanDeploy11Label, - RDSCoreConfig.IPVlanDeploy1TargetAddress) + Expect(RDSCoreConfig.IPVlanDeploy1TargetAddress != "" || + RDSCoreConfig.IPVlanDeploy1TargetAddressIPv6 != "").To(BeTrue(), + "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy1") - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy11Label, - ipvlanDeploy10Label, - RDSCoreConfig.IPVlanDeploy2TargetAddress) + addressesList := []string{RDSCoreConfig.IPVlanDeploy1TargetAddress, + RDSCoreConfig.IPVlanDeploy1TargetAddressIPv6} - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy10Label, - ipvlanDeploy11Label, - RDSCoreConfig.IPVlanDeploy1TargetAddressIPv6) + for _, targetAddress := range addressesList { + if targetAddress == "" { + klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Skipping empty address %q", targetAddress) - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy11Label, - ipvlanDeploy10Label, - RDSCoreConfig.IPVlanDeploy2TargetAddressIPv6) + continue + } + + klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Access workload via %q", targetAddress) + + verifySRIOVConnectivity( + RDSCoreConfig.IPVlanNSOne, + RDSCoreConfig.IPVlanNSOne, + ipvlanDeploy10Label, + ipvlanDeploy11Label, + targetAddress) + } + + Expect(RDSCoreConfig.IPVlanDeploy2TargetAddress != "" || + RDSCoreConfig.IPVlanDeploy2TargetAddressIPv6 != "").To(BeTrue(), + "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy2") + + addressesList = []string{RDSCoreConfig.IPVlanDeploy2TargetAddress, + RDSCoreConfig.IPVlanDeploy2TargetAddressIPv6} + + for _, targetAddress := range addressesList { + if targetAddress == "" { + klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Skipping empty address %q", targetAddress) + + continue + } + + klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Access workload via %q", targetAddress) + + verifySRIOVConnectivity( + RDSCoreConfig.IPVlanNSOne, + RDSCoreConfig.IPVlanNSOne, + ipvlanDeploy11Label, + ipvlanDeploy10Label, + targetAddress) + } } // VerifyIPVlanOnSameNode verifies connectivity between freshly deployed workloads that use @@ -291,35 +311,56 @@ func VerifyIPVlanOnSameNode() { // VerifyIPVLANConnectivityOnSameNode verifies connectivity between workloads that use IPVLAN net. func VerifyIPVLANConnectivityOnSameNode() { - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy20Label, - ipvlanDeploy21Label, - RDSCoreConfig.IPVlanDeploy3TargetAddress) + Expect(RDSCoreConfig.IPVlanDeploy3TargetAddress != "" || + RDSCoreConfig.IPVlanDeploy3TargetAddressIPv6 != "").To(BeTrue(), + "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy3") - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy21Label, - ipvlanDeploy20Label, - RDSCoreConfig.IPVlanDeploy4TargetAddress) + addressesList := []string{RDSCoreConfig.IPVlanDeploy3TargetAddress, + RDSCoreConfig.IPVlanDeploy3TargetAddressIPv6} - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy20Label, - ipvlanDeploy21Label, - RDSCoreConfig.IPVlanDeploy3TargetAddressIPv6) + for _, targetAddress := range addressesList { + if targetAddress == "" { + klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Skipping empty address %q", targetAddress) - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy21Label, - ipvlanDeploy20Label, - RDSCoreConfig.IPVlanDeploy4TargetAddressIPv6) + continue + } + + klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Access workload via %q", targetAddress) + + verifySRIOVConnectivity( + RDSCoreConfig.IPVlanNSOne, + RDSCoreConfig.IPVlanNSOne, + ipvlanDeploy20Label, + ipvlanDeploy21Label, + targetAddress) + } + + Expect(RDSCoreConfig.IPVlanDeploy4TargetAddress != "" || + RDSCoreConfig.IPVlanDeploy4TargetAddressIPv6 != "").To(BeTrue(), + "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy4") + + addressesList = []string{RDSCoreConfig.IPVlanDeploy4TargetAddress, + RDSCoreConfig.IPVlanDeploy4TargetAddressIPv6} + + for _, targetAddress := range addressesList { + if targetAddress == "" { + klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Skipping empty address %q", targetAddress) + + continue + } + + klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Access workload via %q", targetAddress) + + verifySRIOVConnectivity( + RDSCoreConfig.IPVlanNSOne, + RDSCoreConfig.IPVlanNSOne, + ipvlanDeploy21Label, + ipvlanDeploy20Label, + targetAddress) + } } +// defineIPVlanDeployment creates an IPVLAN deployment builder with the specified configuration. func defineIPVlanDeployment(dName, nsName, dLabels, netDefName, volName string, dContainer *corev1.Container, nodeSelector map[string]string) *deployment.Builder { From 0f4fc61c7beba264662a9474b8800981df20ce88 Mon Sep 17 00:00:00 2001 From: laurayang842 Date: Tue, 21 Apr 2026 20:08:34 -0400 Subject: [PATCH 2/2] system-tests: extract the repeated target-address loop into a helper. --- .../rdscorecommon/ipvlan-validation.go | 120 ++++++------------ 1 file changed, 36 insertions(+), 84 deletions(-) diff --git a/tests/system-tests/rdscore/internal/rdscorecommon/ipvlan-validation.go b/tests/system-tests/rdscore/internal/rdscorecommon/ipvlan-validation.go index df0ba32b4..be99aa143 100644 --- a/tests/system-tests/rdscore/internal/rdscorecommon/ipvlan-validation.go +++ b/tests/system-tests/rdscore/internal/rdscorecommon/ipvlan-validation.go @@ -155,56 +155,40 @@ func VerifyIPVlanOnDifferentNodes() { VerifyIPVLANConnectivityBetweenDifferentNodes() } -// VerifyIPVLANConnectivityBetweenDifferentNodes verifies connectivity between workloads, -// using IPVLAN interfaces and running on different nodes. -func VerifyIPVLANConnectivityBetweenDifferentNodes() { - Expect(RDSCoreConfig.IPVlanDeploy1TargetAddress != "" || - RDSCoreConfig.IPVlanDeploy1TargetAddressIPv6 != "").To(BeTrue(), - "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy1") +// verifyIPVLANTargets runs verifySRIOVConnectivity between srcPodLabel and dstPodLabel in namespace +// for each non-empty address. +func verifyIPVLANTargets(namespace, srcPodLabel, dstPodLabel, ipv4Target, ipv6Target, expectMsg string) { + Expect(ipv4Target != "" || ipv6Target != "").To(BeTrue(), expectMsg) - addressesList := []string{RDSCoreConfig.IPVlanDeploy1TargetAddress, - RDSCoreConfig.IPVlanDeploy1TargetAddressIPv6} - - for _, targetAddress := range addressesList { + for _, targetAddress := range []string{ipv4Target, ipv6Target} { if targetAddress == "" { - klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Skipping empty address %q", targetAddress) - continue } klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Access workload via %q", targetAddress) - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy10Label, - ipvlanDeploy11Label, - targetAddress) + verifySRIOVConnectivity(namespace, namespace, srcPodLabel, dstPodLabel, targetAddress) } +} - Expect(RDSCoreConfig.IPVlanDeploy2TargetAddress != "" || - RDSCoreConfig.IPVlanDeploy2TargetAddressIPv6 != "").To(BeTrue(), - "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy2") - - addressesList = []string{RDSCoreConfig.IPVlanDeploy2TargetAddress, - RDSCoreConfig.IPVlanDeploy2TargetAddressIPv6} - - for _, targetAddress := range addressesList { - if targetAddress == "" { - klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Skipping empty address %q", targetAddress) - - continue - } - - klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Access workload via %q", targetAddress) +// VerifyIPVLANConnectivityBetweenDifferentNodes verifies connectivity between workloads, +// using IPVLAN interfaces and running on different nodes. +func VerifyIPVLANConnectivityBetweenDifferentNodes() { + verifyIPVLANTargets( + RDSCoreConfig.IPVlanNSOne, + ipvlanDeploy10Label, + ipvlanDeploy11Label, + RDSCoreConfig.IPVlanDeploy1TargetAddress, + RDSCoreConfig.IPVlanDeploy1TargetAddressIPv6, + "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy1") - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy11Label, - ipvlanDeploy10Label, - targetAddress) - } + verifyIPVLANTargets( + RDSCoreConfig.IPVlanNSOne, + ipvlanDeploy11Label, + ipvlanDeploy10Label, + RDSCoreConfig.IPVlanDeploy2TargetAddress, + RDSCoreConfig.IPVlanDeploy2TargetAddressIPv6, + "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy2") } // VerifyIPVlanOnSameNode verifies connectivity between freshly deployed workloads that use @@ -311,53 +295,21 @@ func VerifyIPVlanOnSameNode() { // VerifyIPVLANConnectivityOnSameNode verifies connectivity between workloads that use IPVLAN net. func VerifyIPVLANConnectivityOnSameNode() { - Expect(RDSCoreConfig.IPVlanDeploy3TargetAddress != "" || - RDSCoreConfig.IPVlanDeploy3TargetAddressIPv6 != "").To(BeTrue(), + verifyIPVLANTargets( + RDSCoreConfig.IPVlanNSOne, + ipvlanDeploy20Label, + ipvlanDeploy21Label, + RDSCoreConfig.IPVlanDeploy3TargetAddress, + RDSCoreConfig.IPVlanDeploy3TargetAddressIPv6, "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy3") - addressesList := []string{RDSCoreConfig.IPVlanDeploy3TargetAddress, - RDSCoreConfig.IPVlanDeploy3TargetAddressIPv6} - - for _, targetAddress := range addressesList { - if targetAddress == "" { - klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Skipping empty address %q", targetAddress) - - continue - } - - klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Access workload via %q", targetAddress) - - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy20Label, - ipvlanDeploy21Label, - targetAddress) - } - - Expect(RDSCoreConfig.IPVlanDeploy4TargetAddress != "" || - RDSCoreConfig.IPVlanDeploy4TargetAddressIPv6 != "").To(BeTrue(), + verifyIPVLANTargets( + RDSCoreConfig.IPVlanNSOne, + ipvlanDeploy21Label, + ipvlanDeploy20Label, + RDSCoreConfig.IPVlanDeploy4TargetAddress, + RDSCoreConfig.IPVlanDeploy4TargetAddressIPv6, "At least one target address (IPv4 or IPv6) must be configured for IPVlan Deploy4") - - addressesList = []string{RDSCoreConfig.IPVlanDeploy4TargetAddress, - RDSCoreConfig.IPVlanDeploy4TargetAddressIPv6} - - for _, targetAddress := range addressesList { - if targetAddress == "" { - klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Skipping empty address %q", targetAddress) - - continue - } - - klog.V(rdscoreparams.RDSCoreLogLevel).Infof("Access workload via %q", targetAddress) - - verifySRIOVConnectivity( - RDSCoreConfig.IPVlanNSOne, - RDSCoreConfig.IPVlanNSOne, - ipvlanDeploy21Label, - ipvlanDeploy20Label, - targetAddress) - } } // defineIPVlanDeployment creates an IPVLAN deployment builder with the specified configuration.