mirror of
https://github.com/containers/podman.git
synced 2025-11-13 01:29:06 +08:00
use libnetwork from c/common
The libpod/network packages were moved to c/common so that buildah can use it as well. To prevent duplication use it in podman as well and remove it from here. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
80
vendor/github.com/containers/common/libnetwork/util/filters.go
generated
vendored
Normal file
80
vendor/github.com/containers/common/libnetwork/util/filters.go
generated
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/containers/common/libnetwork/types"
|
||||
"github.com/containers/common/pkg/filters"
|
||||
"github.com/containers/common/pkg/util"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func GenerateNetworkFilters(f map[string][]string) ([]types.FilterFunc, error) {
|
||||
filterFuncs := make([]types.FilterFunc, 0, len(f))
|
||||
for key, filterValues := range f {
|
||||
filterFunc, err := createFilterFuncs(key, filterValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filterFuncs = append(filterFuncs, filterFunc)
|
||||
}
|
||||
return filterFuncs, nil
|
||||
}
|
||||
|
||||
func createFilterFuncs(key string, filterValues []string) (types.FilterFunc, error) {
|
||||
switch strings.ToLower(key) {
|
||||
case "name":
|
||||
// matches one name, regex allowed
|
||||
return func(net types.Network) bool {
|
||||
return util.StringMatchRegexSlice(net.Name, filterValues)
|
||||
}, nil
|
||||
|
||||
case "driver":
|
||||
// matches network driver
|
||||
return func(net types.Network) bool {
|
||||
return util.StringInSlice(net.Driver, filterValues)
|
||||
}, nil
|
||||
|
||||
case "id":
|
||||
// matches part of one id
|
||||
return func(net types.Network) bool {
|
||||
return util.StringMatchRegexSlice(net.ID, filterValues)
|
||||
}, nil
|
||||
|
||||
// TODO: add dns enabled, internal filter
|
||||
}
|
||||
return createPruneFilterFuncs(key, filterValues)
|
||||
}
|
||||
|
||||
func GenerateNetworkPruneFilters(f map[string][]string) ([]types.FilterFunc, error) {
|
||||
filterFuncs := make([]types.FilterFunc, 0, len(f))
|
||||
for key, filterValues := range f {
|
||||
filterFunc, err := createPruneFilterFuncs(key, filterValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filterFuncs = append(filterFuncs, filterFunc)
|
||||
}
|
||||
return filterFuncs, nil
|
||||
}
|
||||
|
||||
func createPruneFilterFuncs(key string, filterValues []string) (types.FilterFunc, error) {
|
||||
switch strings.ToLower(key) {
|
||||
case "label":
|
||||
// matches all labels
|
||||
return func(net types.Network) bool {
|
||||
return filters.MatchLabelFilters(filterValues, net.Labels)
|
||||
}, nil
|
||||
|
||||
case "until":
|
||||
until, err := filters.ComputeUntilTimestamp(filterValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return func(net types.Network) bool {
|
||||
return net.Created.Before(until)
|
||||
}, nil
|
||||
default:
|
||||
return nil, errors.Errorf("invalid filter %q", key)
|
||||
}
|
||||
}
|
||||
56
vendor/github.com/containers/common/libnetwork/util/ip.go
generated
vendored
Normal file
56
vendor/github.com/containers/common/libnetwork/util/ip.go
generated
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"net"
|
||||
)
|
||||
|
||||
// IsIPv6 returns true if netIP is IPv6.
|
||||
func IsIPv6(netIP net.IP) bool {
|
||||
return netIP != nil && netIP.To4() == nil
|
||||
}
|
||||
|
||||
// IsIPv4 returns true if netIP is IPv4.
|
||||
func IsIPv4(netIP net.IP) bool {
|
||||
return netIP != nil && netIP.To4() != nil
|
||||
}
|
||||
|
||||
// LastIPInSubnet gets the last IP in a subnet
|
||||
func LastIPInSubnet(addr *net.IPNet) (net.IP, error) { //nolint:interfacer
|
||||
// re-parse to ensure clean network address
|
||||
_, cidr, err := net.ParseCIDR(addr.String())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ones, bits := cidr.Mask.Size()
|
||||
if ones == bits {
|
||||
return cidr.IP, nil
|
||||
}
|
||||
for i := range cidr.IP {
|
||||
cidr.IP[i] |= ^cidr.Mask[i]
|
||||
}
|
||||
return cidr.IP, nil
|
||||
}
|
||||
|
||||
// FirstIPInSubnet gets the first IP in a subnet
|
||||
func FirstIPInSubnet(addr *net.IPNet) (net.IP, error) { //nolint:interfacer
|
||||
// re-parse to ensure clean network address
|
||||
_, cidr, err := net.ParseCIDR(addr.String())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ones, bits := cidr.Mask.Size()
|
||||
if ones == bits {
|
||||
return cidr.IP, nil
|
||||
}
|
||||
cidr.IP[len(cidr.IP)-1]++
|
||||
return cidr.IP, nil
|
||||
}
|
||||
|
||||
// NormalizeIP will transform the given ip to the 4 byte len ipv4 if possible
|
||||
func NormalizeIP(ip *net.IP) {
|
||||
ipv4 := ip.To4()
|
||||
if ipv4 != nil {
|
||||
*ip = ipv4
|
||||
}
|
||||
}
|
||||
53
vendor/github.com/containers/common/libnetwork/util/ip_calc.go
generated
vendored
Normal file
53
vendor/github.com/containers/common/libnetwork/util/ip_calc.go
generated
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
// Copyright 2015 CNI authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package util
|
||||
|
||||
import (
|
||||
"math/big"
|
||||
"net"
|
||||
)
|
||||
|
||||
// NextIP returns IP incremented by 1
|
||||
func NextIP(ip net.IP) net.IP {
|
||||
i := ipToInt(ip)
|
||||
return intToIP(i.Add(i, big.NewInt(1)))
|
||||
}
|
||||
|
||||
// PrevIP returns IP decremented by 1
|
||||
func PrevIP(ip net.IP) net.IP {
|
||||
i := ipToInt(ip)
|
||||
return intToIP(i.Sub(i, big.NewInt(1)))
|
||||
}
|
||||
|
||||
// Cmp compares two IPs, returning the usual ordering:
|
||||
// a < b : -1
|
||||
// a == b : 0
|
||||
// a > b : 1
|
||||
func Cmp(a, b net.IP) int {
|
||||
aa := ipToInt(a)
|
||||
bb := ipToInt(b)
|
||||
return aa.Cmp(bb)
|
||||
}
|
||||
|
||||
func ipToInt(ip net.IP) *big.Int {
|
||||
if v := ip.To4(); v != nil {
|
||||
return big.NewInt(0).SetBytes(v)
|
||||
}
|
||||
return big.NewInt(0).SetBytes(ip.To16())
|
||||
}
|
||||
|
||||
func intToIP(i *big.Int) net.IP {
|
||||
return net.IP(i.Bytes())
|
||||
}
|
||||
Reference in New Issue
Block a user