Documentation ¶
Overview ¶
Package linuxcalls contains wrappers over Netlink APIs related to Linux VETH interfaces or Linux interfaces in general.
Index ¶
- Constants
- func GetDummyIfAlias(linuxIf *interfaces.Interface) string
- func GetTapAlias(linuxIf *interfaces.Interface, origHostIfName string) string
- func GetVRFAlias(linuxIf *interfaces.Interface) string
- func GetVethAlias(vethName, peerName string) string
- func ParseDummyIfAlias(alias string) (ifName string)
- func ParseTapAlias(alias string) (linuxTapName, vppTapName, origHostIfName string)
- func ParseVRFAlias(alias string) (vrfName string)
- func ParseVethAlias(alias string) (vethName, peerName string)
- type InterfaceDetails
- type InterfaceMeta
- type InterfaceStatistics
- type NetLinkHandler
- func (h *NetLinkHandler) AddDummyInterface(ifName string) error
- func (h *NetLinkHandler) AddInterfaceIP(ifName string, ip *net.IPNet) error
- func (h *NetLinkHandler) AddVRFDevice(vrfDevName string, routingTable uint32) error
- func (h *NetLinkHandler) AddVethInterfacePair(ifName, peerIfName string) error
- func (h *NetLinkHandler) AddrSubscribe(ch chan<- netlink.AddrUpdate, done <-chan struct{}) error
- func (h *NetLinkHandler) DelInterfaceIP(ifName string, ip *net.IPNet) error
- func (h *NetLinkHandler) DeleteInterface(ifName string) error
- func (h *NetLinkHandler) DumpInterfaceStats() ([]*InterfaceStatistics, error)
- func (h *NetLinkHandler) DumpInterfaceStatsFromNamespaces(nsList []*namespaces.NetNamespace) ([]*InterfaceStatistics, error)
- func (h *NetLinkHandler) DumpInterfaces() ([]*InterfaceDetails, error)
- func (h *NetLinkHandler) DumpInterfacesFromNamespaces(nsList []*namespaces.NetNamespace) ([]*InterfaceDetails, error)
- func (h *NetLinkHandler) GetAddressList(ifName string) ([]netlink.Addr, error)
- func (h *NetLinkHandler) GetChecksumOffloading(ifName string) (rxOn, txOn bool, err error)
- func (h *NetLinkHandler) GetInterfaceType(ifName string) (string, error)
- func (h *NetLinkHandler) GetLinkByIndex(ifIdx int) (netlink.Link, error)
- func (h *NetLinkHandler) GetLinkByName(ifName string) (netlink.Link, error)
- func (h *NetLinkHandler) GetLinkList() ([]netlink.Link, error)
- func (h *NetLinkHandler) InterfaceExists(ifName string) (bool, error)
- func (h *NetLinkHandler) IsInterfaceUp(ifName string) (bool, error)
- func (h *NetLinkHandler) LinkSubscribe(ch chan<- netlink.LinkUpdate, done <-chan struct{}) error
- func (h *NetLinkHandler) PutInterfaceIntoVRF(ifName, vrfDevName string) error
- func (h *NetLinkHandler) RemoveInterfaceFromVRF(ifName, vrfDevName string) error
- func (h *NetLinkHandler) RenameInterface(ifName string, newName string) error
- func (h *NetLinkHandler) SetChecksumOffloading(ifName string, rxOn, txOn bool) error
- func (h *NetLinkHandler) SetInterfaceAlias(ifName, alias string) error
- func (h *NetLinkHandler) SetInterfaceDown(ifName string) error
- func (h *NetLinkHandler) SetInterfaceMTU(ifName string, mtu int) error
- func (h *NetLinkHandler) SetInterfaceMac(ifName string, macAddress string) error
- func (h *NetLinkHandler) SetInterfaceUp(ifName string) error
- func (h *NetLinkHandler) SetLinkNamespace(link netlink.Link, ns netns.NsHandle) (err error)
- type NetlinkAPI
- type NetlinkAPIRead
Constants ¶
const ( // defaultLoopbackName is the name used to access loopback interface in linux // host_if_name field in config is effectively ignored DefaultLoopbackName = "lo" )
Variables ¶
This section is empty.
Functions ¶
func GetDummyIfAlias ¶ added in v3.3.0
func GetDummyIfAlias(linuxIf *interfaces.Interface) string
GetDummyIfAlias returns alias for Linux Dummy interface managed by the agent.
func GetTapAlias ¶
func GetTapAlias(linuxIf *interfaces.Interface, origHostIfName string) string
GetTapAlias returns alias for Linux TAP interface managed by the agent. The alias stores the TAP_TO_VPP logical name together with VPP-TAP logical name and the host interface name as originally set by VPP side.
func GetVRFAlias ¶ added in v3.2.0
func GetVRFAlias(linuxIf *interfaces.Interface) string
GetVRFAlias returns alias for Linux VRF devices managed by the agent.
func GetVethAlias ¶
GetVethAlias returns alias for Linux VETH interface managed by the agent. The alias stores the VETH logical name together with the peer (logical) name.
func ParseDummyIfAlias ¶ added in v3.3.0
ParseDummyIfAlias parses out logical name of a Dummy interface from the alias. Currently there are no other logical information stored in the alias so it is very straightforward.
func ParseTapAlias ¶
ParseTapAlias parses out TAP_TO_VPP logical name together with the name of the linked VPP-TAP and the original TAP host interface name.
func ParseVRFAlias ¶ added in v3.2.0
ParseVRFAlias parses out logical name of a VRF devices from the alias. Currently there are no other logical information stored in the alias so it is very straightforward.
func ParseVethAlias ¶
ParseVethAlias parses out VETH logical name together with the peer name from the alias.
Types ¶
type InterfaceDetails ¶
type InterfaceDetails struct { Interface *interfaces.Interface `json:"interface"` Meta *InterfaceMeta `json:"interface_meta"` }
InterfaceDetails is an object combining linux interface data based on proto model with additional metadata
type InterfaceMeta ¶
type InterfaceMeta struct { LinuxIfIndex int `json:"linux_if_index"` ParentIndex int `json:"parent_index"` MasterIndex int `json:"master_index"` OperState uint8 `json:"oper_state"` Flags uint32 `json:"flags"` Encapsulation string `json:"encapsulation"` NumRxQueues int `json:"num_rx_queue"` NumTxQueues int `json:"num_tx_queue"` TxQueueLen int `json:"tx_queue_len"` }
InterfaceMeta represents linux interface metadata
type InterfaceStatistics ¶
type InterfaceStatistics struct { Name string `json:"interface_name"` Type interfaces.Interface_Type `json:"interface_type"` LinuxIfIndex int `json:"linux_if_index"` // stats data RxPackets uint64 `json:"rx_packets"` TxPackets uint64 `json:"tx_packets"` RxBytes uint64 `json:"rx_bytes"` TxBytes uint64 `json:"tx_bytes"` RxErrors uint64 `json:"rx_errors"` TxErrors uint64 `json:"tx_errors"` RxDropped uint64 `json:"rx_dropped"` TxDropped uint64 `json:"tx_dropped"` }
InterfaceStatistics are represented here since there is currently no model
type NetLinkHandler ¶
NetLinkHandler is accessor for Netlink methods.
func NewNetLinkHandler ¶
func NewNetLinkHandler( nsPlugin nsplugin.API, ifIndexes ifaceidx.LinuxIfMetadataIndex, agentPrefix string, goRoutineCount int, log logging.Logger, ) *NetLinkHandler
NewNetLinkHandler creates new instance of Netlink handler.
func NewNetLinkHandlerNs ¶ added in v3.3.0
func NewNetLinkHandlerNs(ns netns.NsHandle, log logging.Logger) *NetLinkHandler
func (*NetLinkHandler) AddDummyInterface ¶ added in v3.3.0
func (h *NetLinkHandler) AddDummyInterface(ifName string) error
AddDummyInterface configures dummy interface (effectively additional loopback).
func (*NetLinkHandler) AddInterfaceIP ¶
func (h *NetLinkHandler) AddInterfaceIP(ifName string, ip *net.IPNet) error
AddInterfaceIP calls AddrAdd Netlink API.
func (*NetLinkHandler) AddVRFDevice ¶ added in v3.2.0
func (h *NetLinkHandler) AddVRFDevice(vrfDevName string, routingTable uint32) error
AddVRFDevice configures new VRF network device.
func (*NetLinkHandler) AddVethInterfacePair ¶
func (h *NetLinkHandler) AddVethInterfacePair(ifName, peerIfName string) error
AddVethInterfacePair calls LinkAdd Netlink API for the Netlink.Veth interface type.
func (*NetLinkHandler) AddrSubscribe ¶ added in v3.3.0
func (h *NetLinkHandler) AddrSubscribe(ch chan<- netlink.AddrUpdate, done <-chan struct{}) error
AddrSubscribe takes a channel to which notifications will be sent when addresses change. Close the 'done' chan to stop subscription.
func (*NetLinkHandler) DelInterfaceIP ¶
func (h *NetLinkHandler) DelInterfaceIP(ifName string, ip *net.IPNet) error
DelInterfaceIP calls AddrDel Netlink API.
func (*NetLinkHandler) DeleteInterface ¶
func (h *NetLinkHandler) DeleteInterface(ifName string) error
DeleteInterface removes the given interface.
func (*NetLinkHandler) DumpInterfaceStats ¶
func (h *NetLinkHandler) DumpInterfaceStats() ([]*InterfaceStatistics, error)
DumpInterfaceStats retrieves statistics for all linux interfaces from default namespace and from all the other namespaces based on known linux interfaces from the index map.
func (*NetLinkHandler) DumpInterfaceStatsFromNamespaces ¶
func (h *NetLinkHandler) DumpInterfaceStatsFromNamespaces(nsList []*namespaces.NetNamespace) ([]*InterfaceStatistics, error)
DumpInterfaceStatsFromNamespaces requires context in form of the namespace list of which linux interface stats will be retrieved. If no context is provided, interface stats only from the default namespace interfaces are retrieved.
func (*NetLinkHandler) DumpInterfaces ¶
func (h *NetLinkHandler) DumpInterfaces() ([]*InterfaceDetails, error)
DumpInterfaces retrieves all linux interfaces from default namespace and from all the other namespaces based on known linux interfaces from the index map.
func (*NetLinkHandler) DumpInterfacesFromNamespaces ¶
func (h *NetLinkHandler) DumpInterfacesFromNamespaces(nsList []*namespaces.NetNamespace) ([]*InterfaceDetails, error)
DumpInterfacesFromNamespaces requires context in form of the namespace list of which linux interfaces will be retrieved. If no context is provided, interfaces only from the default namespace are retrieved.
func (*NetLinkHandler) GetAddressList ¶
func (h *NetLinkHandler) GetAddressList(ifName string) ([]netlink.Addr, error)
GetAddressList calls AddrList netlink API
func (*NetLinkHandler) GetChecksumOffloading ¶
func (h *NetLinkHandler) GetChecksumOffloading(ifName string) (rxOn, txOn bool, err error)
GetChecksumOffloading returns the state of Rx/Tx checksum offloading for the given interface.
func (*NetLinkHandler) GetInterfaceType ¶
func (h *NetLinkHandler) GetInterfaceType(ifName string) (string, error)
GetInterfaceType returns the type (string representation) of a given interface.
func (*NetLinkHandler) GetLinkByIndex ¶ added in v3.3.0
func (h *NetLinkHandler) GetLinkByIndex(ifIdx int) (netlink.Link, error)
GetLinkByIndex calls netlink API to get Link type from interface index
func (*NetLinkHandler) GetLinkByName ¶
func (h *NetLinkHandler) GetLinkByName(ifName string) (netlink.Link, error)
GetLinkByName calls netlink API to get Link type from interface name
func (*NetLinkHandler) GetLinkList ¶
func (h *NetLinkHandler) GetLinkList() ([]netlink.Link, error)
GetLinkList calls netlink API to get all Links in namespace
func (*NetLinkHandler) InterfaceExists ¶
func (h *NetLinkHandler) InterfaceExists(ifName string) (bool, error)
InterfaceExists checks if interface with a given name exists.
func (*NetLinkHandler) IsInterfaceUp ¶
func (h *NetLinkHandler) IsInterfaceUp(ifName string) (bool, error)
IsInterfaceUp checks if the interface is UP.
func (*NetLinkHandler) LinkSubscribe ¶
func (h *NetLinkHandler) LinkSubscribe(ch chan<- netlink.LinkUpdate, done <-chan struct{}) error
LinkSubscribe takes a channel to which notifications will be sent when links change. Close the 'done' chan to stop subscription.
func (*NetLinkHandler) PutInterfaceIntoVRF ¶ added in v3.2.0
func (h *NetLinkHandler) PutInterfaceIntoVRF(ifName, vrfDevName string) error
PutInterfaceIntoVRF assigns Linux interface into a given VRF.
func (*NetLinkHandler) RemoveInterfaceFromVRF ¶ added in v3.2.0
func (h *NetLinkHandler) RemoveInterfaceFromVRF(ifName, vrfDevName string) error
RemoveInterfaceFromVRF un-assigns Linux interface from a given VRF.
func (*NetLinkHandler) RenameInterface ¶
func (h *NetLinkHandler) RenameInterface(ifName string, newName string) error
RenameInterface changes the name of the interface <ifName> to <newName>.
func (*NetLinkHandler) SetChecksumOffloading ¶
func (h *NetLinkHandler) SetChecksumOffloading(ifName string, rxOn, txOn bool) error
SetChecksumOffloading enables/disables Rx/Tx checksum offloading for the given interface.
func (*NetLinkHandler) SetInterfaceAlias ¶
func (h *NetLinkHandler) SetInterfaceAlias(ifName, alias string) error
SetInterfaceAlias sets the alias of the given interface. Equivalent to: `ip link set dev $ifName alias $alias`
func (*NetLinkHandler) SetInterfaceDown ¶
func (h *NetLinkHandler) SetInterfaceDown(ifName string) error
SetInterfaceDown calls Netlink API LinkSetDown.
func (*NetLinkHandler) SetInterfaceMTU ¶
func (h *NetLinkHandler) SetInterfaceMTU(ifName string, mtu int) error
SetInterfaceMTU calls LinkSetMTU Netlink API.
func (*NetLinkHandler) SetInterfaceMac ¶
func (h *NetLinkHandler) SetInterfaceMac(ifName string, macAddress string) error
SetInterfaceMac calls LinkSetHardwareAddr netlink API.
func (*NetLinkHandler) SetInterfaceUp ¶
func (h *NetLinkHandler) SetInterfaceUp(ifName string) error
SetInterfaceUp calls Netlink API LinkSetUp.
func (*NetLinkHandler) SetLinkNamespace ¶
SetLinkNamespace puts link into a network namespace.
type NetlinkAPI ¶
type NetlinkAPI interface { NetlinkAPIRead // AddVethInterfacePair configures two connected VETH interfaces AddVethInterfacePair(ifName, peerIfName string) error // AddDummyInterface configures dummy interface (effectively additional loopback). AddDummyInterface(ifName string) error // AddVRFDevice configures new VRF network device. AddVRFDevice(vrfDevName string, routingTable uint32) error // PutInterfaceIntoVRF assigns Linux interface into a given VRF. PutInterfaceIntoVRF(ifName, vrfDevName string) error // RemoveInterfaceFromVRF un-assigns Linux interface from a given VRF. RemoveInterfaceFromVRF(ifName, vrfDevName string) error // DeleteInterface removes the given interface. DeleteInterface(ifName string) error // SetInterfaceUp sets interface state to 'up' SetInterfaceUp(ifName string) error // SetInterfaceDown sets interface state to 'down' SetInterfaceDown(ifName string) error // AddInterfaceIP adds new IP address AddInterfaceIP(ifName string, addr *net.IPNet) error // DelInterfaceIP removes IP address from linux interface DelInterfaceIP(ifName string, addr *net.IPNet) error // SetInterfaceMac sets MAC address SetInterfaceMac(ifName string, macAddress string) error // SetInterfaceMTU set maximum transmission unit for interface SetInterfaceMTU(ifName string, mtu int) error // RenameInterface changes interface host name RenameInterface(ifName string, newName string) error // SetInterfaceAlias sets the alias of the given interface. // Equivalent to: `ip link set dev $ifName alias $alias` SetInterfaceAlias(ifName, alias string) error // SetLinkNamespace puts link into a network namespace. SetLinkNamespace(link netlink.Link, ns netns.NsHandle) error // SetChecksumOffloading enables/disables Rx/Tx checksum offloading // for the given interface. SetChecksumOffloading(ifName string, rxOn, txOn bool) error }
NetlinkAPI interface covers all methods inside linux calls package needed to manage linux interfaces.
type NetlinkAPIRead ¶
type NetlinkAPIRead interface { // GetLinkByName calls netlink API to get Link type from interface name GetLinkByName(ifName string) (netlink.Link, error) // GetLinkByIndex calls netlink API to get Link type from interface index GetLinkByIndex(ifIdx int) (netlink.Link, error) // GetLinkList return all links from namespace GetLinkList() ([]netlink.Link, error) // LinkSubscribe takes a channel to which notifications will be sent // when links change. Close the 'done' chan to stop subscription. LinkSubscribe(ch chan<- netlink.LinkUpdate, done <-chan struct{}) error // AddrSubscribe takes a channel to which notifications will be sent // when addresses change. Close the 'done' chan to stop subscription. AddrSubscribe(ch chan<- netlink.AddrUpdate, done <-chan struct{}) error // GetAddressList reads all IP addresses GetAddressList(ifName string) ([]netlink.Addr, error) // InterfaceExists verifies interface existence InterfaceExists(ifName string) (bool, error) // IsInterfaceUp checks if the interface is UP. IsInterfaceUp(ifName string) (bool, error) // GetInterfaceType returns linux interface type GetInterfaceType(ifName string) (string, error) // GetChecksumOffloading returns the state of Rx/Tx checksum offloading // for the given interface. GetChecksumOffloading(ifName string) (rxOn, txOn bool, err error) // DumpInterfaces uses local cache to gather information about linux // namespaces and retrieves interfaces from them. DumpInterfaces() ([]*InterfaceDetails, error) // DumpInterfacesFromNamespaces retrieves all linux interfaces based // on provided namespace context. DumpInterfacesFromNamespaces(nsList []*namespaces.NetNamespace) ([]*InterfaceDetails, error) // DumpInterfaceStats uses local cache to gather information about linux // namespaces and retrieves stats for interfaces in that namespace them. DumpInterfaceStats() ([]*InterfaceStatistics, error) // DumpInterfaceStatsFromNamespaces retrieves all linux interface stats based // on provided namespace context. DumpInterfaceStatsFromNamespaces(nsList []*namespaces.NetNamespace) ([]*InterfaceStatistics, error) }
NetlinkAPIRead interface covers read methods inside linux calls package needed to manage linux interfaces.