mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
132 lines
3.4 KiB
Go
132 lines
3.4 KiB
Go
package osl
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"time"
|
|
)
|
|
|
|
func (nh *neigh) processNeighOptions(options ...NeighOption) {
|
|
for _, opt := range options {
|
|
if opt != nil {
|
|
opt(nh)
|
|
}
|
|
}
|
|
}
|
|
|
|
// WithLinkName sets the srcName of the link to use in the neighbor entry.
|
|
func WithLinkName(name string) NeighOption {
|
|
return func(nh *neigh) {
|
|
nh.linkName = name
|
|
}
|
|
}
|
|
|
|
// WithFamily sets the address-family for the neighbor entry. e.g. [syscall.AF_BRIDGE].
|
|
func WithFamily(family int) NeighOption {
|
|
return func(nh *neigh) {
|
|
nh.family = family
|
|
}
|
|
}
|
|
|
|
// WithIsBridge sets whether the interface is a bridge.
|
|
func WithIsBridge(isBridge bool) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.bridge = isBridge
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithMaster sets 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.
|
|
func WithMaster(name string) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.master = name
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithMACAddress sets the interface MAC-address.
|
|
func WithMACAddress(mac net.HardwareAddr) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.mac = mac
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithIPv4Address sets the IPv4 address of the interface.
|
|
func WithIPv4Address(addr *net.IPNet) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.address = addr
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithIPv6Address sets the IPv6 address of the interface.
|
|
func WithIPv6Address(addr *net.IPNet) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.addressIPv6 = addr
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithLinkLocalAddresses set the link-local IP addresses of the interface.
|
|
func WithLinkLocalAddresses(list []*net.IPNet) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.llAddrs = list
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithRoutes sets the interface routes.
|
|
func WithRoutes(routes []*net.IPNet) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.routes = routes
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithSysctls sets the interface sysctls.
|
|
func WithSysctls(sysctls []string) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.sysctls = sysctls
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithAdvertiseAddrNMsgs sets the number of unsolicited ARP/NA messages that will
|
|
// be sent to advertise a network interface's addresses.
|
|
func WithAdvertiseAddrNMsgs(nMsgs int) IfaceOption {
|
|
return func(i *Interface) error {
|
|
if nMsgs < AdvertiseAddrNMsgsMin || nMsgs > AdvertiseAddrNMsgsMax {
|
|
return fmt.Errorf("AdvertiseAddrNMsgs %d is not in the range %d to %d",
|
|
nMsgs, AdvertiseAddrNMsgsMin, AdvertiseAddrNMsgsMax)
|
|
}
|
|
i.advertiseAddrNMsgs = nMsgs
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithAdvertiseAddrInterval sets the interval between unsolicited ARP/NA messages
|
|
// sent to advertise a network interface's addresses.
|
|
func WithAdvertiseAddrInterval(interval time.Duration) IfaceOption {
|
|
return func(i *Interface) error {
|
|
if interval < AdvertiseAddrIntervalMin || interval > AdvertiseAddrIntervalMax {
|
|
return fmt.Errorf("AdvertiseAddrNMsgs %d is not in the range %v to %v milliseconds",
|
|
interval, AdvertiseAddrIntervalMin, AdvertiseAddrIntervalMax)
|
|
}
|
|
i.advertiseAddrInterval = interval
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithCreatedInContainer can be used to say the network driver created the
|
|
// interface in the container's network namespace (and, therefore, it doesn't
|
|
// need to be moved into that namespace.)
|
|
func WithCreatedInContainer(cic bool) IfaceOption {
|
|
return func(i *Interface) error {
|
|
i.createdInContainer = cic
|
|
return nil
|
|
}
|
|
}
|