package ip

import "github.com/containernetworking/plugins/pkg/ip"

Index

Constants

const SETTLE_INTERVAL = 50 * time.Millisecond

Variables

var ErrLinkNotFound = errors.New("link not found")

Functions

func AddDefaultRoute

func AddDefaultRoute(gw net.IP, dev netlink.Link) error

AddDefaultRoute sets the default route on the given gateway.

func AddHostRoute

func AddHostRoute(ipn *net.IPNet, gw net.IP, dev netlink.Link) error

AddHostRoute adds a host-scoped route to a device.

func AddRoute

func AddRoute(ipn *net.IPNet, gw net.IP, dev netlink.Link) error

AddRoute adds a universally-scoped route to a device.

func Cmp

func Cmp(a, b net.IP) int

Cmp compares two IPs, returning the usual ordering: a < b : -1 a == b : 0 a > b : 1 incomparable : -2

func DelLinkByName

func DelLinkByName(ifName string) error

DelLinkByName removes an interface link.

func DelLinkByNameAddr

func DelLinkByNameAddr(ifName string) ([]*net.IPNet, error)

DelLinkByNameAddr remove an interface and returns its addresses

func EnableForward

func EnableForward(ips []*current.IPConfig) error

EnableForward will enable forwarding for all configured address families

func EnableIP4Forward

func EnableIP4Forward() error

func EnableIP6Forward

func EnableIP6Forward() error

func GCIPMasqForNetwork

func GCIPMasqForNetwork(network string, attachments []types.GCAttachment) error

GCIPMasqForNetwork garbage collects stale IPMasq entries for network

func GetVethPeerIfindex

func GetVethPeerIfindex(ifName string) (netlink.Link, int, error)

GetVethPeerIfindex returns the veth link object, the peer ifindex of the veth, or an error. This peer ifindex will only be valid in the peer's network namespace.

func IsIPNetZero

func IsIPNetZero(ipnet *net.IPNet) bool

IsIPNetZero check if the IPNet is "0.0.0.0/0" or "::/0" This is needed as go-netlink replaces nil Dst with a '0' IPNet since https://github.com/vishvananda/netlink/commit/acdc658b8613655ddb69f978e9fb4cf413e2b830

func Network

func Network(ipn *net.IPNet) *net.IPNet

Network masks off the host portion of the IP, if IPNet is invalid, return nil

func NextIP

func NextIP(ip net.IP) net.IP

NextIP returns IP incremented by 1, if IP is invalid, return nil

func PrevIP

func PrevIP(ip net.IP) net.IP

PrevIP returns IP decremented by 1, if IP is invalid, return nil

func RandomVethName

func RandomVethName() (string, error)

RandomVethName returns string "veth" with random prefix (hashed from entropy)

func RenameLink(curName, newName string) error

func SettleAddresses

func SettleAddresses(ifName string, timeout time.Duration) error

SettleAddresses waits for all addresses on a link to leave tentative state. This is particularly useful for ipv6, where all addresses need to do DAD. There is no easy way to wait for this as an event, so just loop until the addresses are no longer tentative. If any addresses are still tentative after timeout seconds, then error.

func SetupIPMasq

func SetupIPMasq(ipn *net.IPNet, chain string, comment string) error

SetupIPMasq installs iptables rules to masquerade traffic coming from ip of ipn and going outside of ipn. Deprecated: This function only supports iptables. Use SetupIPMasqForNetworks, which supports both iptables and nftables.

func SetupIPMasqForNetworks

func SetupIPMasqForNetworks(backend *string, ipns []*net.IPNet, network, ifname, containerID string) error

SetupIPMasqForNetworks installs rules to masquerade traffic coming from ips of ipns and going outside of ipns, using a chain name based on network, ifname, and containerID. The backend can be either "iptables" or "nftables"; if it is nil, then a suitable default implementation will be used.

func SetupVeth

func SetupVeth(contVethName string, mtu int, contVethMac string, hostNS ns.NetNS) (net.Interface, net.Interface, error)

SetupVeth sets up a pair of virtual ethernet devices. Call SetupVeth from inside the container netns. It will create both veth devices and move the host-side veth into the provided hostNS namespace. On success, SetupVeth returns (hostVeth, containerVeth, nil)

func SetupVethWithName

func SetupVethWithName(contVethName, hostVethName string, mtu int, contVethMac string, hostNS ns.NetNS) (net.Interface, net.Interface, error)

SetupVethWithName sets up a pair of virtual ethernet devices. Call SetupVethWithName from inside the container netns. It will create both veth devices and move the host-side veth into the provided hostNS namespace. hostVethName: If hostVethName is not specified, the host-side veth name will use a random string. On success, SetupVethWithName returns (hostVeth, containerVeth, nil)

func TeardownIPMasq

func TeardownIPMasq(ipn *net.IPNet, chain string, comment string) error

TeardownIPMasq undoes the effects of SetupIPMasq. Deprecated: This function only supports iptables. Use TeardownIPMasqForNetworks, which supports both iptables and nftables.

func TeardownIPMasqForNetworks

func TeardownIPMasqForNetworks(ipns []*net.IPNet, network, ifname, containerID string) error

TeardownIPMasqForNetworks undoes the effects of SetupIPMasqForNetworks

func ValidateExpectedInterfaceIPs

func ValidateExpectedInterfaceIPs(ifName string, resultIPs []*current.IPConfig) error

func ValidateExpectedRoute

func ValidateExpectedRoute(resultRoutes []*types.Route) error

Types

type IP

type IP struct {
	net.IPNet
}

IP is a CNI maintained type inherited from net.IPNet which can represent a single IP address with or without prefix.

func ParseIP

func ParseIP(s string) *IP

ParseIP will parse string s as an IP, and return it. The string s must be formed like <ip>[/<prefix>]. If s is not a valid textual representation of an IP, will return nil.

func (*IP) MarshalText

func (i *IP) MarshalText() ([]byte, error)

MarshalText implements the encoding.TextMarshaler interface. The encoding is the same as returned by String, But when len(ip) is zero, will return an empty slice.

func (*IP) String

func (i *IP) String() string

String returns the string form of this IP.

func (*IP) ToIP

func (i *IP) ToIP() net.IP

ToIP will return a net.IP in standard form from this IP. If this IP can not be converted to a valid net.IP, will return nil.

func (*IP) UnmarshalText

func (i *IP) UnmarshalText(b []byte) error

UnmarshalText implements the encoding.TextUnmarshaler interface. The textual bytes are expected in a form accepted by Parse, But when len(b) is zero, will return an empty IP.

Source Files

addr_linux.go cidr.go ip.go ipforward_linux.go ipmasq_iptables_linux.go ipmasq_linux.go ipmasq_nftables_linux.go link_linux.go route_linux.go utils_linux.go

Version
v1.7.1 (latest)
Published
Apr 25, 2025
Platform
linux/amd64
Imports
21 packages
Last checked
9 hours ago

Tools for package owners.