Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
c68299e
Add mermaid mkdocs plugin
jitseklomp Jun 3, 2025
07973c3
Add custom_fences config to mkdocs.yml
jitseklomp Jun 3, 2025
304975a
Add node deletion unit testing case for zone_ic_handler
cathy-zhou May 31, 2025
61f57e2
Delete logical static routes only if they belong to the spefified router
cathy-zhou Jun 5, 2025
d14d848
remote node deletion failure due to libovsdb integrity violation error
cathy-zhou May 29, 2025
10be596
Bump golang.org/x/crypto
dependabot[bot] Jun 11, 2025
2412b50
stop adding events to NAD if the network type is not ovn-k
SchSeba Feb 3, 2025
228d444
GH VM: remove more items after disk space limit reached
martinkennelly May 16, 2025
deff5e6
Add the IP rule for a UDN only when it is advertised to the default VRF
pliurh Jun 6, 2025
7a21aa6
Merge pull request #5026 from SchSeba/fix_multus_networks
tssurya Jun 12, 2025
1fb8983
[e2e] kubevirt: generate test name that is compatible with file path.
npinaeva Jun 16, 2025
3ac9c69
Merge pull request #5256 from martinkennelly/free-more-space-sigh-let…
trozet Jun 16, 2025
4de8fd5
Merge pull request #4894 from ovn-kubernetes/dependabot/go_modules/te…
trozet Jun 17, 2025
eea781b
Merge pull request #5308 from npinaeva/kubevirt-testname
trozet Jun 18, 2025
70fe56c
Add labels to filter e2e tests
martinkennelly Mar 4, 2025
19be786
use slash as path separator for some sysctl commands
hedgieinsocks Jun 19, 2025
21e4f0e
Fix the host drop rules to match on new state
tssurya Jun 8, 2025
d3bb075
Merge pull request #5291 from tssurya/fix-bgp-host-to-pod-isolation
tssurya Jun 23, 2025
11ca0ec
Merge pull request #5281 from jitseklomp/mermaid
trozet Jun 23, 2025
ff1b163
Bump the go_modules group across 3 directories with 4 updates
dependabot[bot] Jun 24, 2025
116ba52
ovnkube.sh: Add new overwriting options for the gateway options and k…
aserdean Jun 12, 2025
05f8d8f
Add short doc update with the ovn-ic components on the DPU
aserdean Jun 16, 2025
816598a
Merge pull request #5298 from aserdean/ovn_ic_dpu_bash
trozet Jun 25, 2025
a89b20e
Merge pull request #5326 from ovn-kubernetes/dependabot/go_modules/go…
trozet Jun 25, 2025
abc2b83
Merge pull request #5312 from hedgieinsocks/fix/use_sysctl_slash_sepa…
trozet Jun 25, 2025
5115ef4
Merge pull request #5084 from martinkennelly/add-e2e-labels
trozet Jun 27, 2025
5ea894c
contrib, kind.sh: Fix local registry when using podman
ormergi May 15, 2025
a1d4731
contrib,kind: Use skopeo to get the actual ovnkube-image digest
ormergi May 15, 2025
8a70c81
EIP OVN controller: stop pod config flap
martinkennelly Jun 16, 2025
db87df1
Layer 2 EIP: remove stale LRP if pod is remote
martinkennelly Jun 26, 2025
5b4cd1e
Merge pull request #5254 from ormergi/kind-enable-podman-local-reg
tssurya Jul 1, 2025
122306f
Merge pull request #5310 from martinkennelly/fix-eip-flap
tssurya Jul 1, 2025
1ea2739
Revert "Add the IP rule for a UDN only when it is advertised to the d…
jcaamano Jun 18, 2025
259f309
Merge pull request #5314 from jcaamano/revert-deff5e64c
tssurya Jul 4, 2025
c41b61e
Merge remote-tracking branch 'origin/master' into ds_merge
pliurh Jul 4, 2025
0f86580
Merge pull request #2639 from pliurh/ds_merge
openshift-merge-bot[bot] Jul 9, 2025
2a58872
Merge remote-tracking branch 'upstream/release-4.20' into 4.19-sync-f…
jluhrsen Jul 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 36 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ jobs:

- name: Free up disk space
run: |
df -h
sudo rm -rf /usr/local/lib/android/sdk
sudo apt-get update
sudo eatmydata apt-get purge --auto-remove -y \
Expand All @@ -323,6 +324,17 @@ jobs:
llvm-* microsoft-edge-stable mono-* \
msbuild mysql-server-core-* php-* php7* \
powershell temurin-* zulu-*
# clean unused packages
sudo apt-get autoclean
sudo apt-get autoremove -y
# clean apt cache
sudo apt-get clean
sudo docker system prune -af --volumes
df -h
sudo swapon --show
sudo swapoff -a
sudo rm -f /mnt/swapfile
df -h

- name: Download test-image-master
uses: actions/download-artifact@v4
Expand Down Expand Up @@ -507,6 +519,7 @@ jobs:

- name: Free up disk space
run: |
df -h
sudo rm -rf /usr/local/lib/android/sdk
sudo apt-get update
sudo eatmydata apt-get purge --auto-remove -y \
Expand All @@ -515,7 +528,17 @@ jobs:
llvm-* microsoft-edge-stable mono-* \
msbuild mysql-server-core-* php-* php7* \
powershell temurin-* zulu-*
sudo docker system prune -af
# clean unused packages
sudo apt-get autoclean
sudo apt-get autoremove -y
# clean apt cache
sudo apt-get clean
sudo docker system prune -af --volumes
df -h
sudo swapon --show
sudo swapoff -a
sudo rm -f /mnt/swapfile
df -h

- name: Setup /mnt/runner directory
run: |
Expand Down Expand Up @@ -730,6 +753,7 @@ jobs:

- name: Free up disk space
run: |
df -h
sudo rm -rf /usr/local/lib/android/sdk
sudo apt-get update
sudo eatmydata apt-get purge --auto-remove -y \
Expand All @@ -738,6 +762,17 @@ jobs:
llvm-* microsoft-edge-stable mono-* \
msbuild mysql-server-core-* php-* php7* \
powershell temurin-* zulu-*
# clean unused packages
sudo apt-get autoclean
sudo apt-get autoremove -y
# clean apt cache
sudo apt-get clean
sudo docker system prune -af --volumes
df -h
sudo swapon --show
sudo swapoff -a
sudo rm -f /mnt/swapfile
df -h

- name: Disable ufw
# For IPv6 and Dualstack, ufw (Uncomplicated Firewall) should be disabled.
Expand Down
25 changes: 21 additions & 4 deletions contrib/kind.sh
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,11 @@ check_dependencies() {
echo "Dependency not met: Neither docker nor podman found"
exit 1
fi

if command_exists podman && ! command_exists skopeo; then
echo "Dependency not met: skopeo not installed. Run the following command to install it: 'sudo dnf install skopeo'"
exit 1
fi
}

OPENSSL=""
Expand Down Expand Up @@ -822,6 +827,12 @@ set_ovn_image() {
}

build_ovn_image() {
local push_args=""
if [ "$OCI_BIN" == "podman" ]; then
# docker doesn't perform tls check by default only podman does, hence we need to disable it for podman.
push_args="--tls-verify=false"
fi

if [ "$OVN_IMAGE" == local ]; then
set_ovn_image

Expand All @@ -834,22 +845,28 @@ build_ovn_image() {
# store in local registry
if [ "$KIND_LOCAL_REGISTRY" == true ];then
echo "Pushing built image to local $OCI_BIN registry"
$OCI_BIN push "${OVN_IMAGE}"
$OCI_BIN push "$push_args" "$OVN_IMAGE"
fi
# We should push to local registry if image is not remote
elif [ "${OVN_IMAGE}" != "" -a "${KIND_LOCAL_REGISTRY}" == true ] && (echo "$OVN_IMAGE" | grep / -vq); then
local local_registry_ovn_image="localhost:5000/${OVN_IMAGE}"
$OCI_BIN tag "$OVN_IMAGE" $local_registry_ovn_image
OVN_IMAGE=$local_registry_ovn_image
$OCI_BIN push $OVN_IMAGE
$OCI_BIN push "$push_args" "$OVN_IMAGE"
fi
}

create_ovn_kube_manifests() {
local ovnkube_image=${OVN_IMAGE}
if [ "$KIND_LOCAL_REGISTRY" == true ];then
# When updating with local registry we have to reference the sha
ovnkube_image=$($OCI_BIN inspect --format='{{index .RepoDigests 0}}' $OVN_IMAGE)
# When updating with local registry we have to reference the image digest (SHA)
# Check the image digest in the local registry because it might be different then the digest in the local container runtime
if [ "$OCI_BIN" == "podman" ]; then
# due to differences how podman and docker persist images, for podman use skopeo to get the image and digest.
ovnkube_image=$(skopeo inspect --format "{{.Name}}@{{.Digest}}" --tls-verify=false "docker://$OVN_IMAGE")
else
ovnkube_image=$($OCI_BIN inspect --format='{{index .RepoDigests 0}}' $OVN_IMAGE)
fi
fi
pushd ${DIR}/../dist/images
if [ "$OVN_ENABLE_INTERCONNECT" == true ]; then
Expand Down
40 changes: 32 additions & 8 deletions dist/images/ovnkube.sh
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,16 @@ ovn_nohostsubnet_label=${OVN_NOHOSTSUBNET_LABEL:-""}
# should be set to true when dpu nodes are in the cluster
ovn_disable_requestedchassis=${OVN_DISABLE_REQUESTEDCHASSIS:-false}

# external_ids:host-k8s-nodename is set on an Open_vSwitch enabled system if the ovnkube stack
# should function on behalf of a different host than external_ids:hostname. This includes
# all the components that belond in an ovnkube stack (i.e. NB DB, SB DB, ovnkube etc)
# overwrite the K8S_NODE env var with the one found within the OVS metadata in this case
ovn_k8s_node=$(ovs-vsctl --if-exists get Open_vSwitch . external_ids:host-k8s-nodename | tr -d '\"')
if [[ ! -z $ovn_k8s_node ]]; then
echo "host-k8s-nodename is set, overriding K8S_NODE with $ovn_k8s_node"
K8S_NODE=$ovn_k8s_node
fi

# Determine the ovn rundir.
if [[ -f /usr/bin/ovn-appctl ]]; then
# ovn-appctl is present. Use new ovn run dir path.
Expand Down Expand Up @@ -1356,6 +1366,7 @@ ovn-master() {
${network_qos_enabled_flag} \
${ovn_enable_dnsnameresolver_flag} \
${nohostsubnet_label_option} \
${ovn_stateless_netpol_enable_flag} \
${ovn_disable_requestedchassis_flag} \
--cluster-subnets ${net_cidr} --k8s-service-cidr=${svc_cidr} \
--gateway-mode=${ovn_gateway_mode} ${ovn_gateway_opts} \
Expand Down Expand Up @@ -1626,6 +1637,13 @@ ovnkube-controller() {
fi
echo "ovn_observ_enable_flag=${ovn_observ_enable_flag}"


ovn_stateless_netpol_enable_flag=
if [[ ${ovn_stateless_netpol_enable} == "true" ]]; then
ovn_stateless_netpol_enable_flag="--enable-stateless-netpol"
fi
echo "ovn_stateless_netpol_enable_flag: ${ovn_stateless_netpol_enable_flag}"

echo "=============== ovnkube-controller ========== MASTER ONLY"
/usr/bin/ovnkube --init-ovnkube-controller ${K8S_NODE} \
${anp_enabled_flag} \
Expand Down Expand Up @@ -2054,6 +2072,11 @@ ovnkube-controller-with-node() {
fi
echo "ovn_observ_enable_flag=${ovn_observ_enable_flag}"

ovn_stateless_netpol_enable_flag=
if [[ ${ovn_stateless_netpol_enable} == "true" ]]; then
ovn_stateless_netpol_enable_flag="--enable-stateless-netpol"
fi

echo "=============== ovnkube-controller-with-node --init-ovnkube-controller-with-node=========="
/usr/bin/ovnkube --init-ovnkube-controller ${K8S_NODE} --init-node ${K8S_NODE} \
${anp_enabled_flag} \
Expand Down Expand Up @@ -2399,8 +2422,15 @@ ovn-node() {
wait_for_event ovs_ready
fi

echo "=============== ovn-node - (wait for ready_to_start_node)"
wait_for_event ready_to_start_node
if [[ ${ovnkube_node_mode} == "dpu-host" ]] && [[ ${ovn_enable_interconnect} == "true" ]]; then
# ready_to_start_node checks for the NB/SB readiness state.
# This is not available on the DPU host when interconnect is enabled,
# because the DBs will run locally on the DPU
echo "skipping ready_to_start_node on DPU Host and when interconnect is true"
else
echo "=============== ovn-node - (wait for ready_to_start_node)"
wait_for_event ready_to_start_node
fi

echo "ovn_nbdb ${ovn_nbdb} ovn_sbdb ${ovn_sbdb} ovn_nbdb_conn ${ovn_nbdb_conn}"

Expand Down Expand Up @@ -2578,12 +2608,6 @@ ovn-node() {
fi

if [[ ${ovnkube_node_mode} == "dpu" ]]; then
# in the case of dpu mode we want the host K8s Node Name and not the DPU K8s Node Name
K8S_NODE=$(ovs-vsctl --if-exists get Open_vSwitch . external_ids:host-k8s-nodename | tr -d '\"')
if [[ ${K8S_NODE} == "" ]]; then
echo "Couldn't get the required Host K8s Nodename. Exiting..."
exit 1
fi
if [[ ${ovn_gateway_opts} == "" ]]; then
# get the gateway interface
gw_iface=$(ovs-vsctl --if-exists get Open_vSwitch . external_ids:ovn-gw-interface | tr -d \")
Expand Down
36 changes: 36 additions & 0 deletions docs/features/hardware-offload/dpu-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,39 @@ on the embedded CPU.
Any vendor that manufactures a DPU which supports the above model should work with current design.

Design document can be found [here](https://docs.google.com/document/d/11IoMKiohK7hIyIE36FJmwJv46DEBx52a4fqvrpCBBcg/edit?usp=sharing).

## OVN Kubernetes in a DPU-Accelerated Environment

The **ovn-kubernetes** deployment will have two parts one on the host and another on the DPU side.


These aforementioned parts are expected to be deployed also on two different Kubernetes clusters, one for the host and another for the DPUs.


### Host Cluster
---

#### OVN Kubernetes control plane related component
- ovn-cluster-manager

#### OVN Kubernetes components on a Standard Host (Non-DPU)
- local-nb-ovsdb
- local-sb-ovsdb
- run-ovn-northd
- ovnkube-controller-with-node
- ovn-controller
- ovs-metrics

#### OVN Kubernetes component on a DPU-Enabled Host
- ovn-node

### DPU Cluster
---

#### OVN Kubernetes components
- local-nb-ovsdb
- local-sb-ovsdb
- run-ovn-northd
- ovnkube-controller-with-node
- ovn-controller
- ovs-metrics
14 changes: 7 additions & 7 deletions go-controller/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ require (
github.com/urfave/cli/v2 v2.27.2
github.com/vishvananda/netlink v1.3.1-0.20250206174618-62fb240731fa
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
golang.org/x/net v0.30.0
golang.org/x/sync v0.8.0
golang.org/x/sys v0.26.0
golang.org/x/net v0.38.0
golang.org/x/sync v0.12.0
golang.org/x/sys v0.31.0
golang.org/x/time v0.7.0
google.golang.org/grpc v1.65.0
google.golang.org/grpc/security/advancedtls v0.0.0-20240425232638-1e8b9b7fc655
Expand All @@ -62,7 +62,7 @@ require (
k8s.io/client-go v0.32.3
k8s.io/component-helpers v0.32.3
k8s.io/klog/v2 v2.130.1
k8s.io/kubernetes v1.32.3
k8s.io/kubernetes v1.32.6
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
kubevirt.io/api v1.0.0-alpha.0
sigs.k8s.io/controller-runtime v0.20.3
Expand Down Expand Up @@ -124,10 +124,10 @@ require (
github.com/x448/float16 v0.8.4 // indirect
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect
go.opencensus.io v0.24.0 // indirect
golang.org/x/crypto v0.28.0 // indirect
golang.org/x/crypto v0.36.0 // indirect
golang.org/x/oauth2 v0.23.0 // indirect
golang.org/x/term v0.25.0 // indirect
golang.org/x/text v0.19.0 // indirect
golang.org/x/term v0.30.0 // indirect
golang.org/x/text v0.23.0 // indirect
golang.org/x/tools v0.26.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7 // indirect
Expand Down
28 changes: 14 additions & 14 deletions go-controller/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -841,8 +841,8 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
Expand Down Expand Up @@ -934,8 +934,8 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand All @@ -958,8 +958,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down Expand Up @@ -1047,14 +1047,14 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand All @@ -1064,8 +1064,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
Expand Down Expand Up @@ -1368,8 +1368,8 @@ k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lV
k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
k8s.io/kubernetes v1.32.3 h1:2A58BlNME8NwsMawmnM6InYo3Jf35Nw5G79q46kXwoA=
k8s.io/kubernetes v1.32.3/go.mod h1:GvhiBeolvSRzBpFlgM0z/Bbu3Oxs9w3P6XfEgYaMi8k=
k8s.io/kubernetes v1.32.6 h1:tp1gRjOqZjaoFBek5PN6eSmODdS1QRrH5UKiFP8ZByg=
k8s.io/kubernetes v1.32.6/go.mod h1:REY0Gok66BTTrbGyZaFMNKO9JhxvgBDW9B7aksWRFoY=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
Expand Down
8 changes: 4 additions & 4 deletions go-controller/pkg/config/cni.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,6 @@ func parseNetConfSingle(bytes []byte) (*ovncnitypes.NetConf, error) {
}

func parseNetConfList(confList *libcni.NetworkConfigList) (*ovncnitypes.NetConf, error) {
if len(confList.Plugins) > 1 {
return nil, ErrorChainingNotSupported
}

netconf := &ovncnitypes.NetConf{MTU: Default.MTU}
if err := json.Unmarshal(confList.Plugins[0].Bytes, netconf); err != nil {
return nil, err
Expand All @@ -134,6 +130,10 @@ func parseNetConfList(confList *libcni.NetworkConfigList) (*ovncnitypes.NetConf,
return nil, ErrorAttachDefNotOvnManaged
}

if len(confList.Plugins) > 1 {
return nil, ErrorChainingNotSupported
}

netconf.Name = confList.Name
netconf.CNIVersion = confList.CNIVersion

Expand Down
Loading