From ccfd8f5feae846aa32697b90ba7bc12cb8893c9d Mon Sep 17 00:00:00 2001 From: dougbtv Date: Tue, 25 Mar 2025 14:09:58 -0400 Subject: [PATCH] When returning an empty CNI result, it must be properly structured For a previous fix of returning an empty CNI result when pods are not found, the CNI result wasn't properly structured. This fixes the structuring. --- pkg/multus/multus.go | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/pkg/multus/multus.go b/pkg/multus/multus.go index 36c408fd6..92ef0ef35 100644 --- a/pkg/multus/multus.go +++ b/pkg/multus/multus.go @@ -650,10 +650,9 @@ func CmdAdd(args *skel.CmdArgs, exec invoke.Exec, kubeClient *k8s.ClientInfo) (c pod, err := GetPod(kubeClient, k8sArgs, false) if err != nil { if err == errPodNotFound { - logging.Verbosef("CmdAdd: Warning: pod [%s/%s] not found, exiting with empty CNI result", k8sArgs.K8S_POD_NAMESPACE, k8sArgs.K8S_POD_NAME) - return &cni100.Result{ - CNIVersion: n.CNIVersion, - }, nil + emptyresult := emptyCNIResult(args, "1.0.0") + logging.Verbosef("CmdAdd: Warning: pod [%s/%s] not found, exiting with empty CNI result: %v", k8sArgs.K8S_POD_NAMESPACE, k8sArgs.K8S_POD_NAME, emptyresult) + return emptyresult, nil } return nil, err } @@ -1081,3 +1080,24 @@ func CmdGC(args *skel.CmdArgs, exec invoke.Exec, kubeClient *k8s.ClientInfo) err return nil } + +func emptyCNIResult(args *skel.CmdArgs, cniVersion string) *cni100.Result { + return &cni100.Result{ + CNIVersion: cniVersion, + Interfaces: []*cni100.Interface{ + { + Name: args.IfName, + Sandbox: args.Netns, + }, + }, + IPs: []*cni100.IPConfig{ + { + Address: net.IPNet{ + IP: net.ParseIP("0.0.0.0"), + Mask: net.CIDRMask(0, 32), + }, + Gateway: net.ParseIP("0.0.0.0"), + }, + }, + } +}