9d3b1f9419
It's still not "great", but implement a `newInterface()` constructor to create a new Interface instance, instead of creating a partial instance and applying "options" after the fact. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package osl
|
|
|
|
import "net"
|
|
|
|
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
|
|
}
|
|
}
|