cni

package
v0.3.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 21, 2025 License: MIT Imports: 13 Imported by: 2

Documentation

Index

Constants

View Source
const (
	// CNI commands.
	CmdAdd   = "ADD"
	CmdDel   = "DEL"
	CmdCheck = "CHECK"

	Internal = "internal"
)
View Source
const (
	NatPluginName        = "nat"
	SdnBridgePluginName  = "sdnbridge"
	SdnOverlayPluginName = "sdnoverlay"
)

Aliases for the Windows CNI plugin binary names:

Variables

NOTE(aznashwan): this mapping between the names of binary releases of the WinCNI plugins and the underlying HCN network types is required for backwards-compatibility with callers which rely on the old plugin naming schemes. See: https://github.com/microsoft/windows-container-networking/issues/57

View Source
var VersionsSupported = []string{"0.2.0", "0.3.0", "0.4.0", "1.0.0"}

Supported CNI versions.

Functions

func CallPlugin

func CallPlugin(plugin PluginApi, cmd string, args *cniSkel.CmdArgs, config *NetworkConfig) (*cniTypes.Result, error)

CallPlugin calls the given CNI plugin through the internal interface.

func GetCurrResult added in v0.2.2

func GetCurrResult(network *network.NetworkInfo, endpoint *network.EndpointInfo, ifname string, cniConfig *NetworkConfig) cniTypesCurr.Result

GetCurrResult gets the result object

func GetDualStackAddresses added in v0.2.2

func GetDualStackAddresses(endpoint *network.EndpointInfo) (*IP, *IP)

GetDualStackAddresses returns the IPv4 and IPv6 addresses for the endpoint

func MapCniTypeToHcnType added in v0.3.2

func MapCniTypeToHcnType(typeArg hcn.NetworkType) (hcn.NetworkType, error)

Maps the given CNI network config "type" field into the correct HNS network type.

Types

type IP

type IP struct {
	Version        string         `json:"version"` // 4 or 6
	Address        cniTypes.IPNet `json:"address"`
	Gateway        net.IP         `json:"gateway"`
	InterfaceIndex int            `json:"interface"` // Numeric index into 'interfaces' list
}

func GetIP

func GetIP(network *network.NetworkInfo, endpoint *network.EndpointInfo) IP

GetIP returns the IP for the corresponding endpoint

type Interface

type Interface struct {
	Name       string           `json:"name"`
	MacAddress net.HardwareAddr `json:"mac"`
	Sandbox    string           `json:"sandbox"`
}

func GetInterface

func GetInterface(endpoint *network.EndpointInfo) Interface

GetInterface returns the interface for endpoint

type IpamConfig

type IpamConfig struct {
	Type          string           `json:"type"`
	Environment   string           `json:"environment,omitempty"`
	AddrSpace     string           `json:"addressSpace,omitempty"`
	Subnet        string           `json:"subnet,omitempty"`
	Address       string           `json:"ipAddress,omitempty"`
	QueryInterval string           `json:"queryInterval,omitempty"`
	Routes        []cniTypes.Route `json:"routes,omitempty"`
}

type K8SPodEnvArgs

type K8SPodEnvArgs struct {
	cniTypes.CommonArgs
	K8S_POD_NAMESPACE          cniTypes.UnmarshallableString `json:"K8S_POD_NAMESPACE,omitempty"`
	K8S_POD_NAME               cniTypes.UnmarshallableString `json:"K8S_POD_NAME,omitempty"`
	K8S_POD_INFRA_CONTAINER_ID cniTypes.UnmarshallableString `json:"K8S_POD_INFRA_CONTAINER_ID,omitempty"`
}

func ParseCniArgs

func ParseCniArgs(args string) (*K8SPodEnvArgs, error)

ParseCniArgs

type KVP

type KVP struct {
	Name  string          `json:"name"`
	Value json.RawMessage `json:"value"`
}

type NetworkConfig

type NetworkConfig struct {
	CniVersion       string           `json:"cniVersion"`
	Name             string           `json:"name"` // Name is the Network Name.
	Type             hcn.NetworkType  `json:"type"` // As per SPEC, Type is Name of the Binary
	Ipam             IpamConfig       `json:"ipam"`
	DNS              cniTypes.DNS     `json:"dns"`
	OptionalFlags    OptionalFlags    `json:"optionalFlags"`
	RuntimeConfig    RuntimeConfig    `json:"runtimeConfig"`
	AdditionalRoutes []cniTypes.Route `json:"additionalRoutes"`
	AdditionalArgs   []KVP
}

NetworkConfig represents the Windows CNI plugin's network configuration. Defined as per https://github.com/containernetworking/cni/blob/master/SPEC.md

func ParseNetworkConfig

func ParseNetworkConfig(b []byte) (*NetworkConfig, error)

ParseNetworkConfig unmarshals network configuration from bytes.

func (*NetworkConfig) GetEndpointInfo

func (config *NetworkConfig) GetEndpointInfo(
	networkInfo *network.NetworkInfo,
	containerID string, netNs string) (*network.EndpointInfo, error)

GetEndpointInfo constructs endpoint info using endpoint id, containerid and netns

func (*NetworkConfig) GetNetworkInfo

func (config *NetworkConfig) GetNetworkInfo(podNamespace string) (ninfo *network.NetworkInfo, err error)

GetNetworkInfo from the NetworkConfig

func (*NetworkConfig) Serialize

func (config *NetworkConfig) Serialize() []byte

Serialize marshals a network configuration to bytes.

type OptionalFlags

type OptionalFlags struct {
	LocalRoutePortMapping       bool `json:"localRoutedPortMapping"`
	AllowAclPortMapping         bool `json:"allowAclPortMapping"`
	ForceBridgeGateway          bool `json:"forceBridgeGateway"` // Intended to be temporary workaround
	EnableDualStack             bool `json:"enableDualStack"`
	LoopbackDSR                 bool `json:"loopbackDSR"`
	GatewayFromAdditionalRoutes bool `json:"gatewayFromAdditionalRoutes"`
}

type Plugin

type Plugin struct {
	*common.Plugin
}

Plugin is the parent class for CNI plugins.

func NewPlugin

func NewPlugin(name, version string) (*Plugin, error)

NewPlugin creates a new CNI plugin.

func (*Plugin) Execute

func (plugin *Plugin) Execute(api PluginApi) error

Execute executes the CNI command.

func (*Plugin) Initialize

func (plugin *Plugin) Initialize(config *common.PluginConfig) error

Initialize initializes the plugin.

func (*Plugin) Uninitialize

func (plugin *Plugin) Uninitialize()

Uninitialize uninitializes the plugin.

type PluginApi

type PluginApi interface {
	Add(args *cniSkel.CmdArgs) error
	Delete(args *cniSkel.CmdArgs) error
	Check(args *cniSkel.CmdArgs) error
}

CNI contract.

type PortMapping

type PortMapping struct {
	HostPort      int    `json:"hostPort"`
	ContainerPort int    `json:"containerPort"`
	Protocol      string `json:"protocol"`
	HostIp        string `json:"hostIP,omitempty"`
}

type Result

type Result struct {
	CniVersion string           `json:"cniVersion"`
	Interfaces []Interface      `json:"interfaces"`
	IP         []IP             `json:"ip"`
	DNS        cniTypes.DNS     `json:"dns"`
	Routes     []cniTypes.Route `json:"routes,omitempty"`
}

func (*Result) Print

func (r *Result) Print()

func (*Result) String

func (r *Result) String() string

type RuntimeConfig

type RuntimeConfig struct {
	PortMappings []PortMapping `json:"portMappings,omitempty"`
	DNS          cniDNSConfig  `json:"dns"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL