libnetwork: remove redundant init(), remove dead code, and fix stubs / build-tags
- relates to / some bits extracted from https://github.com/moby/moby/pull/43506


### libnetwork: overlayutils: remove redundant init()

### libnetwork: fix stubs

- sandbox, endpoint changed in https://github.com/moby/moby/commit/c71555f03042ca531e24f6368d7e8c128774926f (https://github.com/moby/moby/pull/44805), but  missed updating the stubs.
- add missing stub for `Controller.cleanupServiceDiscovery()`
- While at it also doing some minor (formatting) changes.

### libnetwork: add missing stub for getInitializers()

### libnetwork: remove dead code on Windows

These methods are only called on unix.

### libnetwork/osl: rename var that collided with import

Also renaming another var for consistency ':-)

### libnetwork/osl: unify stubs for IfaceOption

Use the same signature for all platforms, but stub the nwIface type.

### libnetwork/osl: unify stubs for NeighOption

Use the same signature for all platforms, but stub the neigh type.

**- Description for the changelog**
<!--
Write a short (one line) summary that describes the changes in this
pull request for inclusion in the changelog:
-->


**- A picture of a cute animal (not mandatory but encouraged)**


libnetwork/osl/sandbox.go
// 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
)

// 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[string][]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)
}

// 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
)

// 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[string][]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)
}

TBH; we should look at these as they use a non-exported type as part of their type, which effectively means they cannot be implemented outside of this package.

They're currently part of an interface, but perhaps we don't need that if we move code to be with the correct build-tags (I kept that for a later exercise)