Documentation ¶
Index ¶
- Constants
- func NewSystemHandler() *systemHandler
- type Microservice
- type MicroserviceCtx
- type MicroserviceEvent
- type Microservices
- type Namespace
- type NamespaceAPI
- type NamespaceMgmtCtx
- type NetlinkNamespace
- type NsConvertor
- type NsHandler
- func (plugin *NsHandler) ArpNsToGeneric(ns *l3.LinuxStaticArpEntries_ArpEntry_Namespace) *Namespace
- func (plugin *NsHandler) Close() error
- func (plugin *NsHandler) GenericToArpNs(ns *Namespace) (*l3.LinuxStaticArpEntries_ArpEntry_Namespace, error)
- func (plugin *NsHandler) GenericToRouteNs(ns *Namespace) (*l3.LinuxStaticRoutes_Route_Namespace, error)
- func (plugin *NsHandler) GetConfigNamespace() *intf.LinuxInterfaces_Interface_Namespace
- func (plugin *NsHandler) GetMicroserviceByID() map[string]*Microservice
- func (plugin *NsHandler) GetMicroserviceByLabel() map[string]*Microservice
- func (plugin *NsHandler) HandleMicroservices(ctx *MicroserviceCtx)
- func (plugin *NsHandler) IfNsToGeneric(ns *intf.LinuxInterfaces_Interface_Namespace) *Namespace
- func (plugin *NsHandler) IfaceNsToString(namespace *intf.LinuxInterfaces_Interface_Namespace) string
- func (plugin *NsHandler) Init(logger logging.PluginLogger, ifHandler linuxcalls.NetlinkAPI, ...) error
- func (plugin *NsHandler) IsNamespaceAvailable(ns *intf.LinuxInterfaces_Interface_Namespace) bool
- func (plugin *NsHandler) RouteNsToGeneric(ns *l3.LinuxStaticRoutes_Route_Namespace) *Namespace
- func (plugin *NsHandler) SetInterfaceNamespace(ctx *NamespaceMgmtCtx, ifName string, ...) error
- func (plugin *NsHandler) SwitchNamespace(ns *Namespace, ctx *NamespaceMgmtCtx) (revert func(), err error)
- func (plugin *NsHandler) SwitchToNamespace(nsMgmtCtx *NamespaceMgmtCtx, ns *intf.LinuxInterfaces_Interface_Namespace) (revert func(), err error)
- type NsManagement
- type OperatingSystem
- type Syscall
- type SystemAPI
Constants ¶
const ( // NewMicroservice event type NewMicroservice = "new-ms" // TerminatedMicroservice event type TerminatedMicroservice = "term-ms" )
Microservice event types
const ( // Namespace types PidRefNs = 0 MicroserviceRefNs = 1 NamedNs = 2 FileRefNs = 3 )
Namespace-related constants
Variables ¶
This section is empty.
Functions ¶
func NewSystemHandler ¶
func NewSystemHandler() *systemHandler
Types ¶
type Microservice ¶
Microservice is used to store PID and ID of the container running a given microservice.
type MicroserviceCtx ¶
type MicroserviceCtx struct {
// contains filtered or unexported fields
}
MicroserviceCtx contains all data required to handle microservice changes
type MicroserviceEvent ¶
type MicroserviceEvent struct { *Microservice EventType string }
MicroserviceEvent contains microservice object and event type
type Microservices ¶
type Microservices interface { // HandleMicroservices handles microservice changes HandleMicroservices(ctx *MicroserviceCtx) }
Microservices defines all methods needed to manage microservices
type Namespace ¶
Namespace is a generic representation of typed namespace (interface, arp, etc...)
func (*Namespace) CompareNamespaces ¶
CompareNamespaces is a comparison function for "Namespace" type.
func (*Namespace) GenericNsToString ¶
GenericNsToString returns a string representation of a namespace suitable for logging purposes.
func (*Namespace) GenericToIfaceNs ¶
func (ns *Namespace) GenericToIfaceNs() (*intf.LinuxInterfaces_Interface_Namespace, error)
GenericToIfaceNs converts generic namespace to interface-type namespace
type NamespaceAPI ¶
type NamespaceAPI interface { NsManagement NsConvertor Microservices }
NamespaceAPI defines all methods required for managing namespaces and microservices
type NamespaceMgmtCtx ¶
type NamespaceMgmtCtx struct {
// contains filtered or unexported fields
}
NamespaceMgmtCtx represents context of an ongoing management of Linux namespaces. The same context should not be used concurrently.
func NewNamespaceMgmtCtx ¶
func NewNamespaceMgmtCtx() *NamespaceMgmtCtx
NewNamespaceMgmtCtx creates and returns a new context for management of Linux namespaces.
type NetlinkNamespace ¶
type NetlinkNamespace interface { // NewNetworkNamespace crates new namespace and returns handle to manage it further NewNetworkNamespace() (ns netns.NsHandle, err error) // GetNamespaceFromName returns namespace handle from its name GetNamespaceFromName(name string) (ns netns.NsHandle, err error) // SetNamespace sets the current namespace to the namespace represented by the handle SetNamespace(ns netns.NsHandle) (err error) }
NetlinkNamespace defines method for namespace handling from netlink package
type NsConvertor ¶
type NsConvertor interface { // IfaceNsToString returns a string representation of namespace IfaceNsToString(namespace *interfaces.LinuxInterfaces_Interface_Namespace) string // IfNsToGeneric converts interface-specific type namespace to generic type IfNsToGeneric(ns *interfaces.LinuxInterfaces_Interface_Namespace) *Namespace // ArpNsToGeneric converts arp-specific type namespace to generic type ArpNsToGeneric(ns *l3.LinuxStaticArpEntries_ArpEntry_Namespace) *Namespace // GenericToArpNs converts generic namespace to arp-specific type GenericToArpNs(ns *Namespace) (*l3.LinuxStaticArpEntries_ArpEntry_Namespace, error) // RouteNsToGeneric converts route-specific type namespace to generic type RouteNsToGeneric(ns *l3.LinuxStaticRoutes_Route_Namespace) *Namespace }
NsConvertor defines common methods to convert namespace types
type NsHandler ¶
type NsHandler struct {
// contains filtered or unexported fields
}
NsHandler is a plugin to handle namespaces and microservices for other linux plugins (ifplugin, l3plugin ...). It does not follow the standard concept of CRUD, but provides a set of methods other plugins can use to manage namespaces
func (*NsHandler) ArpNsToGeneric ¶
func (plugin *NsHandler) ArpNsToGeneric(ns *l3.LinuxStaticArpEntries_ArpEntry_Namespace) *Namespace
ArpNsToGeneric converts arp-type namespace to generic type namespace. Such an object can be used to call common namespace-related methods
func (*NsHandler) GenericToArpNs ¶
func (plugin *NsHandler) GenericToArpNs(ns *Namespace) (*l3.LinuxStaticArpEntries_ArpEntry_Namespace, error)
GenericToArpNs converts generic namespace to arp-type namespace
func (*NsHandler) GenericToRouteNs ¶
func (plugin *NsHandler) GenericToRouteNs(ns *Namespace) (*l3.LinuxStaticRoutes_Route_Namespace, error)
GenericToRouteNs converts generic namespace to arp-type namespace
func (*NsHandler) GetConfigNamespace ¶
func (plugin *NsHandler) GetConfigNamespace() *intf.LinuxInterfaces_Interface_Namespace
GetConfigNamespace return configuration namespace object
func (*NsHandler) GetMicroserviceByID ¶
func (plugin *NsHandler) GetMicroserviceByID() map[string]*Microservice
GetMicroserviceByID returns internal microservice-by-id mapping
func (*NsHandler) GetMicroserviceByLabel ¶
func (plugin *NsHandler) GetMicroserviceByLabel() map[string]*Microservice
GetMicroserviceByLabel returns internal microservice-by-label mapping
func (*NsHandler) HandleMicroservices ¶
func (plugin *NsHandler) HandleMicroservices(ctx *MicroserviceCtx)
HandleMicroservices handles microservice changes
func (*NsHandler) IfNsToGeneric ¶
func (plugin *NsHandler) IfNsToGeneric(ns *intf.LinuxInterfaces_Interface_Namespace) *Namespace
IfNsToGeneric converts interface-type namespace to generic type namespace. Such an object can be used to call common namespace-related methods
func (*NsHandler) IfaceNsToString ¶
func (plugin *NsHandler) IfaceNsToString(namespace *intf.LinuxInterfaces_Interface_Namespace) string
IfaceNsToString returns a string representation of a namespace suitable for logging purposes.
func (*NsHandler) Init ¶
func (plugin *NsHandler) Init(logger logging.PluginLogger, ifHandler linuxcalls.NetlinkAPI, sysHandler SystemAPI, msChan chan *MicroserviceCtx, ifNotif chan *MicroserviceEvent) error
Init namespace handler caches and create config namespace
func (*NsHandler) IsNamespaceAvailable ¶
func (plugin *NsHandler) IsNamespaceAvailable(ns *intf.LinuxInterfaces_Interface_Namespace) bool
IsNamespaceAvailable returns true if the destination namespace is available.
func (*NsHandler) RouteNsToGeneric ¶
func (plugin *NsHandler) RouteNsToGeneric(ns *l3.LinuxStaticRoutes_Route_Namespace) *Namespace
RouteNsToGeneric converts route-type namespace to generic type namespace. Such an object can be used to call common namespace-related methods
func (*NsHandler) SetInterfaceNamespace ¶
func (plugin *NsHandler) SetInterfaceNamespace(ctx *NamespaceMgmtCtx, ifName string, namespace *intf.LinuxInterfaces_Interface_Namespace) error
SetInterfaceNamespace moves a given Linux interface into a specified namespace.
func (*NsHandler) SwitchNamespace ¶
func (plugin *NsHandler) SwitchNamespace(ns *Namespace, ctx *NamespaceMgmtCtx) (revert func(), err error)
SwitchNamespace switches the network namespace of the current thread. Caller should eventually call the returned "revert" function in order to get back to the original network namespace (for example using "defer revert()").
func (*NsHandler) SwitchToNamespace ¶
func (plugin *NsHandler) SwitchToNamespace(nsMgmtCtx *NamespaceMgmtCtx, ns *intf.LinuxInterfaces_Interface_Namespace) (revert func(), err error)
switchToNamespace switches the network namespace of the current thread.
type NsManagement ¶
type NsManagement interface { // IsNamespaceAvailable verifies whether required namespace exists and is accessible IsNamespaceAvailable(ns *interfaces.LinuxInterfaces_Interface_Namespace) bool // SwitchNamespace switches the network namespace of the current thread SwitchNamespace(ns *Namespace, ctx *NamespaceMgmtCtx) (revert func(), err error) // SwitchToNamespace switches the network namespace of the current thread // todo merge these two methods if possible SwitchToNamespace(nsMgmtCtx *NamespaceMgmtCtx, ns *interfaces.LinuxInterfaces_Interface_Namespace) (revert func(), err error) // SetInterfaceNamespace moves linux interface to desired namespace SetInterfaceNamespace(ctx *NamespaceMgmtCtx, ifName string, namespace *interfaces.LinuxInterfaces_Interface_Namespace) error // GetConfigNamespace returns configuration namespace (used for VETHs) GetConfigNamespace() *interfaces.LinuxInterfaces_Interface_Namespace }
NsManagement defines methods to manage namespaces
type OperatingSystem ¶
type OperatingSystem interface { // Open file OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) // MkDirAll creates a directory with all parent directories MkDirAll(path string, perm os.FileMode) error // Remove removes named file or directory Remove(name string) error }
Operating system defines all methods calling os package
type Syscall ¶
type Syscall interface { // Mount makes resources available Mount(source string, target string, fsType string, flags uintptr, data string) error // Unmount resources Unmount(target string, flags int) (err error) }
Syscall defines methods using low-level operating system primitives
type SystemAPI ¶
type SystemAPI interface { OperatingSystem Syscall NetlinkNamespace }
Defines all methods required for managing operating system, system calls and namespaces on system level