123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- // Package osl describes structures and interfaces which abstract os entities
- package osl
- import (
- "net"
- "github.com/docker/docker/libnetwork/types"
- )
- // SandboxType specify the time of the sandbox, this can be used to apply special configs
- type SandboxType int
- const (
- // SandboxTypeIngress indicates that the sandbox is for the ingress
- SandboxTypeIngress = iota
- // SandboxTypeLoadBalancer indicates that the sandbox is a load balancer
- SandboxTypeLoadBalancer = iota
- )
- type Iface struct {
- SrcName, DstPrefix string
- }
- // IfaceOption is a function option type to set interface options.
- type IfaceOption func(i *nwIface)
- // NeighOption is a function option type to set neighbor options.
- type NeighOption func(nh *neigh)
- // Sandbox represents a network sandbox, identified by a specific key. It
- // holds a list of Interfaces, routes etc, and more can be added dynamically.
- type Sandbox interface {
- // Key returns the path where the network namespace is mounted.
- Key() string
- // AddInterface adds an existing Interface to this sandbox. The operation will rename
- // from the Interface SrcName to DstName as it moves, and reconfigure the
- // interface according to the specified settings. The caller is expected
- // to only provide a prefix for DstName. The AddInterface api will auto-generate
- // an appropriate suffix for the DstName to disambiguate.
- AddInterface(SrcName string, DstPrefix string, options ...IfaceOption) error
- // SetGateway sets the default IPv4 gateway for the sandbox.
- SetGateway(gw net.IP) error
- // SetGatewayIPv6 sets the default IPv6 gateway for the sandbox.
- SetGatewayIPv6(gw net.IP) error
- // UnsetGateway the previously set default IPv4 gateway in the sandbox.
- UnsetGateway() error
- // UnsetGatewayIPv6 unsets the previously set default IPv6 gateway in the sandbox.
- UnsetGatewayIPv6() error
- // GetLoopbackIfaceName returns the name of the loopback interface
- GetLoopbackIfaceName() string
- // AddAliasIP adds the passed IP address to the named interface
- AddAliasIP(ifName string, ip *net.IPNet) error
- // RemoveAliasIP removes the passed IP address from the named interface
- RemoveAliasIP(ifName string, ip *net.IPNet) error
- // DisableARPForVIP disables ARP replies and requests for VIP addresses
- // on a particular interface.
- DisableARPForVIP(ifName string) error
- // AddStaticRoute adds a static route to the sandbox.
- AddStaticRoute(*types.StaticRoute) error
- // RemoveStaticRoute removes a static route from the sandbox.
- RemoveStaticRoute(*types.StaticRoute) error
- // AddNeighbor adds a neighbor entry into the sandbox.
- AddNeighbor(dstIP net.IP, dstMac net.HardwareAddr, force bool, option ...NeighOption) error
- // DeleteNeighbor deletes neighbor entry from the sandbox.
- DeleteNeighbor(dstIP net.IP, dstMac net.HardwareAddr, osDelete bool) error
- // NeighborOptions returns an interface with methods to set neighbor options.
- NeighborOptions() NeighborOptionSetter
- // InterfaceOptions an interface with methods to set interface options.
- InterfaceOptions() IfaceOptionSetter
- // InvokeFunc invoke a function in the network namespace.
- InvokeFunc(func()) error
- // Info returns an interface with methods to get sandbox state.
- Info() Info
- // Destroy destroys the sandbox.
- Destroy() error
- // Restore restores the sandbox.
- Restore(ifsopt map[Iface][]IfaceOption, routes []*types.StaticRoute, gw net.IP, gw6 net.IP) error
- // ApplyOSTweaks applies operating system specific knobs on the sandbox.
- ApplyOSTweaks([]SandboxType)
- }
- // NeighborOptionSetter interface defines the option setter methods for interface options
- type NeighborOptionSetter interface {
- // LinkName returns an option setter to set the srcName of the link that should
- // be used in the neighbor entry
- LinkName(string) NeighOption
- // Family returns an option setter to set the address family for the neighbor
- // entry. eg. AF_BRIDGE
- Family(int) NeighOption
- }
- // IfaceOptionSetter interface defines the option setter methods for interface options.
- type IfaceOptionSetter interface {
- // Bridge returns an option setter to set if the interface is a bridge.
- Bridge(bool) IfaceOption
- // MacAddress returns an option setter to set the MAC address.
- MacAddress(net.HardwareAddr) IfaceOption
- // Address returns an option setter to set IPv4 address.
- Address(*net.IPNet) IfaceOption
- // AddressIPv6 returns an option setter to set IPv6 address.
- AddressIPv6(*net.IPNet) IfaceOption
- // LinkLocalAddresses returns an option setter to set the link-local IP addresses.
- LinkLocalAddresses([]*net.IPNet) IfaceOption
- // Master returns an option setter to set the master interface if any for this
- // interface. The master interface name should refer to the srcname of a
- // previously added interface of type bridge.
- Master(string) IfaceOption
- // Routes returns an option setter to set interface routes.
- Routes([]*net.IPNet) IfaceOption
- }
- // Info represents all possible information that
- // the driver wants to place in the sandbox which includes
- // interfaces, routes and gateway
- type Info interface {
- // Interfaces returns the collection of Interface previously added with the AddInterface
- // method. Note that this doesn't include network interfaces added in any
- // other way (such as the default loopback interface which is automatically
- // created on creation of a sandbox).
- Interfaces() []Interface
- // Gateway returns the IPv4 gateway for the sandbox.
- Gateway() net.IP
- // GatewayIPv6 returns the IPv6 gateway for the sandbox.
- GatewayIPv6() net.IP
- // StaticRoutes returns additional static routes for the sandbox. Note that
- // directly connected routes are stored on the particular interface they
- // refer to.
- StaticRoutes() []*types.StaticRoute
- // TODO: Add ip tables etc.
- }
- // Interface represents the settings and identity of a network device. It is
- // used as a return type for Network.Link, and it is common practice for the
- // caller to use this information when moving interface SrcName from host
- // namespace to DstName in a different net namespace with the appropriate
- // network settings.
- type Interface interface {
- // SrcName returns the name of the interface in the origin network namespace.
- SrcName() string
- // DstName returns the name that will be assigned to the interface once
- // moved inside a network namespace. When the caller passes in a DstName,
- // it is only expected to pass a prefix. The name will be modified with an
- // auto-generated suffix.
- DstName() string
- // Address returns the IPv4 address for the interface.
- Address() *net.IPNet
- // AddressIPv6 returns the IPv6 address for the interface.
- AddressIPv6() *net.IPNet
- // LinkLocalAddresses returns the link-local IP addresses assigned to the
- // interface.
- LinkLocalAddresses() []*net.IPNet
- // Routes returns IP routes for the interface.
- Routes() []*net.IPNet
- // Bridge returns true if the interface is a bridge.
- Bridge() bool
- // Master returns the srcname of the master interface for this interface.
- Master() string
- // Remove an interface from the sandbox by renaming to original name
- // and moving it out of the sandbox.
- Remove() error
- // Statistics returns the statistics for this interface
- Statistics() (*types.InterfaceStatistics, error)
- }
|