From 888c778ee975b449aef6dec6bbdfb029a7fe385e Mon Sep 17 00:00:00 2001
From: Paul Holzinger <pholzing@redhat.com>
Date: Tue, 14 Dec 2021 17:06:50 +0100
Subject: fix network id handling

We have to get the network ID from the network backend. With the
netavark backend we no longer use the sha from the name as ID.

[NO NEW TESTS NEEDED]

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
---
 pkg/domain/filters/containers.go | 18 +++++++++++-------
 pkg/domain/filters/pods.go       | 20 ++++++++++++--------
 pkg/domain/infra/abi/pods.go     |  2 +-
 pkg/network/network.go           | 27 ---------------------------
 4 files changed, 24 insertions(+), 43 deletions(-)
 delete mode 100644 pkg/network/network.go

(limited to 'pkg')

diff --git a/pkg/domain/filters/containers.go b/pkg/domain/filters/containers.go
index 269cd2d27..a28167d3e 100644
--- a/pkg/domain/filters/containers.go
+++ b/pkg/domain/filters/containers.go
@@ -8,7 +8,6 @@ import (
 
 	"github.com/containers/podman/v3/libpod"
 	"github.com/containers/podman/v3/libpod/define"
-	"github.com/containers/podman/v3/pkg/network"
 	"github.com/containers/podman/v3/pkg/util"
 	"github.com/pkg/errors"
 )
@@ -210,6 +209,15 @@ func GenerateContainerFilterFuncs(filter string, filterValues []string, r *libpo
 			return false
 		}, nil
 	case "network":
+		var inputNetNames []string
+		for _, val := range filterValues {
+			net, err := r.Network().NetworkInspect(val)
+			if err != nil {
+				// ignore not found errors
+				break
+			}
+			inputNetNames = append(inputNetNames, net.Name)
+		}
 		return func(c *libpod.Container) bool {
 			networkMode := c.NetworkMode()
 			// support docker like `--filter network=container:<IDorName>`
@@ -247,12 +255,8 @@ func GenerateContainerFilterFuncs(filter string, filterValues []string, r *libpo
 				return false
 			}
 			for _, net := range networks {
-				netID := network.GetNetworkID(net)
-				for _, val := range filterValues {
-					// match by network name or id
-					if val == net || val == netID {
-						return true
-					}
+				if util.StringInSlice(net, inputNetNames) {
+					return true
 				}
 			}
 			return false
diff --git a/pkg/domain/filters/pods.go b/pkg/domain/filters/pods.go
index 9a2f0a3ba..ed7506bf3 100644
--- a/pkg/domain/filters/pods.go
+++ b/pkg/domain/filters/pods.go
@@ -6,7 +6,6 @@ import (
 
 	"github.com/containers/podman/v3/libpod"
 	"github.com/containers/podman/v3/libpod/define"
-	"github.com/containers/podman/v3/pkg/network"
 	"github.com/containers/podman/v3/pkg/util"
 	"github.com/pkg/errors"
 )
@@ -14,7 +13,7 @@ import (
 // GeneratePodFilterFunc takes a filter and filtervalue (key, value)
 // and generates a libpod function that can be used to filter
 // pods
-func GeneratePodFilterFunc(filter string, filterValues []string) (
+func GeneratePodFilterFunc(filter string, filterValues []string, r *libpod.Runtime) (
 	func(pod *libpod.Pod) bool, error) {
 	switch filter {
 	case "ctr-ids":
@@ -128,6 +127,15 @@ func GeneratePodFilterFunc(filter string, filterValues []string) (
 			return false
 		}, nil
 	case "network":
+		var inputNetNames []string
+		for _, val := range filterValues {
+			net, err := r.Network().NetworkInspect(val)
+			if err != nil {
+				// ignore not found errors
+				break
+			}
+			inputNetNames = append(inputNetNames, net.Name)
+		}
 		return func(p *libpod.Pod) bool {
 			infra, err := p.InfraContainer()
 			// no infra, quick out
@@ -140,12 +148,8 @@ func GeneratePodFilterFunc(filter string, filterValues []string) (
 				return false
 			}
 			for _, net := range networks {
-				netID := network.GetNetworkID(net)
-				for _, val := range filterValues {
-					// match by network name or id
-					if val == net || val == netID {
-						return true
-					}
+				if util.StringInSlice(net, inputNetNames) {
+					return true
 				}
 			}
 			return false
diff --git a/pkg/domain/infra/abi/pods.go b/pkg/domain/infra/abi/pods.go
index 028de9e81..fc0a2337c 100644
--- a/pkg/domain/infra/abi/pods.go
+++ b/pkg/domain/infra/abi/pods.go
@@ -325,7 +325,7 @@ func (ic *ContainerEngine) PodPs(ctx context.Context, options entities.PodPSOpti
 
 	filters := make([]libpod.PodFilter, 0, len(options.Filters))
 	for k, v := range options.Filters {
-		f, err := dfilters.GeneratePodFilterFunc(k, v)
+		f, err := dfilters.GeneratePodFilterFunc(k, v, ic.Libpod)
 		if err != nil {
 			return nil, err
 		}
diff --git a/pkg/network/network.go b/pkg/network/network.go
deleted file mode 100644
index 44132ca28..000000000
--- a/pkg/network/network.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package network
-
-import (
-	"crypto/sha256"
-	"encoding/hex"
-	"strings"
-
-	"github.com/containernetworking/cni/libcni"
-)
-
-// GetCNIPlugins returns a list of plugins that a given network
-// has in the form of a string
-func GetCNIPlugins(list *libcni.NetworkConfigList) string {
-	plugins := make([]string, 0, len(list.Plugins))
-	for _, plug := range list.Plugins {
-		plugins = append(plugins, plug.Network.Type)
-	}
-	return strings.Join(plugins, ",")
-}
-
-// GetNetworkID return the network ID for a given name.
-// It is just the sha256 hash but this should be good enough.
-// The caller has to make sure it is only called with the network name.
-func GetNetworkID(name string) string {
-	hash := sha256.Sum256([]byte(name))
-	return hex.EncodeToString(hash[:])
-}
-- 
cgit v1.2.3-54-g00ecf