network

package
v0.0.0-...-63b02d4 Latest Latest
Warning

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

Go to latest
Published: Apr 18, 2024 License: Apache-2.0 Imports: 29 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// CNIVersion is the version we write in the generated CNI network configuration files
	CNIVersion = "0.3.0"
)

Variables

View Source
var (
	ErrInvalidType = errors.New("invalid network type")
)

Functions

func CNIConfigFile

func CNIConfigFile(dir string, nw Networker) string

func Driver

func Driver(t string) func() Networker

func GetNodeAddr

func GetNodeAddr(nodename string, network string) (net.IP, error)

func IPReachableFrom

func IPReachableFrom(peerIP net.IP) (net.IP, *net.IPNet, error)

func IncIP

func IncIP(ip net.IP)

func IncIPN

func IncIPN(ip net.IP, n int)

func IsDisabled

func IsDisabled(t Networker) bool

IsDisabled returns true if the network keyword value is "none"

func IsSameNetwork

func IsSameNetwork(localIP, peerIP net.IP) (bool, error)

func IsValid

func IsValid(t Networker) bool

IsValid returns true if the network configuration is sane enough to setup.

func List

func List(noder Noder) []string

func MACFromIP4

func MACFromIP4(ip net.IP) (net.HardwareAddr, error)

MACFromIP4 returns a mac address using a 0a:58 prefix followed by the bridge ipv4 address converted to hexa (same algorithm used in k8s).

When the device with the lowest mac is removed from the bridge or when a new device with the lowest mac is added to the bridge, all containers can experience tcp hangs while the arp table resynchronizes.

Setting a mac address to the bridge explicitely avoids these mac address changes.

func Setup

func Setup(n *object.Node) error

Types

type By

type By func(p1, p2 *Status) bool

func (By) Sort

func (by By) Sort(l []Status)

type CNIer

type CNIer interface {
	CNIConfigData() (interface{}, error)
}

type Networker

type Networker interface {
	// SetDriver sets the driver name, which is obtained from the
	// "type" keyword in the network configuration.
	SetDriver(string)

	// SetName sets the network name. See Name().
	SetName(string)

	// SetImplicit sets isImplicit. See IsImplicit().
	SetImplicit(bool)

	// SetNetwork sets the network CIDR. Normally read from the
	// merged cluster configuration.
	SetNetwork(string)

	// SetNeedCommit can be called by drivers to signal network
	// configuration changes are staged and // need to be written
	// to file.
	SetNeedCommit(bool)

	// SetNoder stores the Noder
	SetNoder(Noder)

	// IsImplicit returns true if the network is a builtin with
	// no override section in the configuration.
	IsImplicit() bool

	// IsIP6 returns true if the network is a CIDR representation
	// of a IPv6 network.
	IsIP6() bool

	// Name returns the name of the network. Which is the part
	// after the dash in the configuration section name.
	Name() string

	// Network returns the CIDR representation of the network.
	Network() string

	// IPNet returns the result of ParseCIDR() on the Network()
	// CIDR string, without the net.IP
	IPNet() (*net.IPNet, error)

	// NeedCommit return true if the network configuration cache
	// has staged changes. This can be used by Networks() users to
	// do one commit per action instead of one per network.
	NeedCommit() bool

	// Type return the driver name.
	Type() string

	FilterIPs(clusterip.L) clusterip.L

	AllowEmptyNetwork() bool

	// Config is a wrapper for the noder MergedConfig
	Config() *xconfig.T

	// Log returns a zerolog Logger configured to add the network
	// name to log entries.
	Log() *plog.Logger

	// Nodes is a wrapper for the noder Nodes, which returns the
	// list of cluster nodes to make the network available on.
	Nodes() ([]string, error)

	NodeSubnet(nodename string) (*net.IPNet, error)
	NodeSubnetIP(nodename string) (net.IP, error)
}

func Networks

func Networks(noder Noder) []Networker

func NewFromNoder

func NewFromNoder(name string, noder Noder) Networker

func NewTyped

func NewTyped(name, networkType, networkNetwork string, noder Noder) Networker

type Noder

type Noder interface {
	MergedConfig() *xconfig.T
	Log() *plog.Logger
	Nodes() ([]string, error)
}

type Route

type Route struct {
	Nodename string     `json:"node"`
	Dev      string     `json:"dev"`
	Dst      *net.IPNet `json:"dst"`
	Src      net.IP     `json:"ip"`
	Gateway  net.IP     `json:"gw"`
	Table    string     `json:"table"`
}

func (Route) Add

func (t Route) Add() error

func (Route) String

func (t Route) String() string

type Routes

type Routes []Route

func (Routes) Add

func (t Routes) Add() error

type Setuper

type Setuper interface {
	Setup() error
}

type Status

type Status struct {
	Name    string      `json:"name"`
	Type    string      `json:"type"`
	Network string      `json:"network"`
	IPs     clusterip.L `json:"ips"`
	Errors  []string    `json:"errors,omitempty"`
	Usage
}

func GetStatus

func GetStatus(t Networker, ips clusterip.L) Status

func NewStatus

func NewStatus() Status

type StatusList

type StatusList []Status

func NewStatusList

func NewStatusList() StatusList

func ShowNetworks

func ShowNetworks(noder Noder, ips clusterip.L) StatusList

func ShowNetworksByName

func ShowNetworksByName(noder Noder, name string, ips clusterip.L) StatusList

func (StatusList) Add

func (t StatusList) Add(p Networker, ips clusterip.L) StatusList

func (StatusList) Len

func (t StatusList) Len() int

func (StatusList) Less

func (t StatusList) Less(i, j int) bool

func (StatusList) Swap

func (t StatusList) Swap(i, j int)

type T

type T struct {
	// contains filtered or unexported fields
}

func (T) AllowEmptyNetwork

func (t T) AllowEmptyNetwork() bool

AllowEmptyNetwork returns true if the driver supports empty "network" keywork value. For one, the loopback driver does support that.

func (*T) Config

func (t *T) Config() *xconfig.T

func (T) FilterIPs

func (t T) FilterIPs(ips clusterip.L) clusterip.L

func (*T) GetInt

func (t *T) GetInt(s string) int

func (*T) GetString

func (t *T) GetString(s string) string

func (*T) GetStrings

func (t *T) GetStrings(s string) []string

func (*T) GetSubnetAs

func (t *T) GetSubnetAs(nodename string) string

func (T) IPNet

func (t T) IPNet() (*net.IPNet, error)

func (*T) IPsPerNode

func (t *T) IPsPerNode() (int, error)

func (T) IsIP6

func (t T) IsIP6() bool

func (T) IsImplicit

func (t T) IsImplicit() bool

func (*T) Log

func (t *T) Log() *plog.Logger

func (T) Name

func (t T) Name() string

func (T) NeedCommit

func (t T) NeedCommit() bool

func (*T) Network

func (t *T) Network() string

func (*T) NodeSubnet

func (t *T) NodeSubnet(nodename string) (*net.IPNet, error)

NodeSubnet returns the network subnet assigned to a cluster node, as a *net.IPNet. This subnet is usually found in the network configuration, as a subnet@<nodename> option. If not found there, allocate and write one.

The subnet allocator uses ips_per_node to compute a netmask (narrower than the network mask). The subnet first ip is computed using the position of the node in the cluster nodes list.

Example: With

cluster.nodes = n1 n2 n3
net1.network = 10.0.0.0/24
net1.ips_per_node = 64

=>

subnet@n1 = 10.0.0.0/26
subnet@n2 = 10.0.0.64/26
subnet@n3 = 10.0.0.128/26

func (*T) NodeSubnetIP

func (t *T) NodeSubnetIP(nodename string) (net.IP, error)

func (T) Nodes

func (t T) Nodes() ([]string, error)

func (*T) Set

func (t *T) Set(option, value string) error

func (T) SetAllowEmptyNetwork

func (t T) SetAllowEmptyNetwork(v bool)

func (*T) SetDriver

func (t *T) SetDriver(name string)

func (*T) SetImplicit

func (t *T) SetImplicit(v bool)

func (*T) SetName

func (t *T) SetName(name string)

func (*T) SetNeedCommit

func (t *T) SetNeedCommit(v bool)

func (*T) SetNetwork

func (t *T) SetNetwork(s string)

func (*T) SetNoder

func (t *T) SetNoder(noder Noder)

func (*T) Tables

func (t *T) Tables() []string

func (T) Type

func (t T) Type() string

type Usage

type Usage struct {
	Free int `json:"free"`
	Used int `json:"used"`
	Size int `json:"size"`
}

Jump to

Keyboard shortcuts

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