//go:build linux package bridge import ( "fmt" "net" ) // ErrConfigExists error is returned when driver already has a config applied. type ErrConfigExists struct{} func (ece *ErrConfigExists) Error() string { return "configuration already exists, bridge configuration can be applied only once" } // Forbidden denotes the type of this error func (ece *ErrConfigExists) Forbidden() {} // ErrInvalidDriverConfig error is returned when Bridge Driver is passed an invalid config type ErrInvalidDriverConfig struct{} func (eidc *ErrInvalidDriverConfig) Error() string { return "Invalid configuration passed to Bridge Driver" } // ErrInvalidNetworkConfig error is returned when a network is created on a driver without valid config. type ErrInvalidNetworkConfig struct{} func (einc *ErrInvalidNetworkConfig) Error() string { return "trying to create a network on a driver without valid config" } // Forbidden denotes the type of this error func (einc *ErrInvalidNetworkConfig) Forbidden() {} // ErrInvalidEndpointConfig error is returned when an endpoint create is attempted with an invalid endpoint configuration. type ErrInvalidEndpointConfig struct{} func (eiec *ErrInvalidEndpointConfig) Error() string { return "trying to create an endpoint with an invalid endpoint configuration" } // InvalidParameter denotes the type of this error func (eiec *ErrInvalidEndpointConfig) InvalidParameter() {} // ErrNetworkExists error is returned when a network already exists and another network is created. type ErrNetworkExists struct{} func (ene *ErrNetworkExists) Error() string { return "network already exists, bridge can only have one network" } // Forbidden denotes the type of this error func (ene *ErrNetworkExists) Forbidden() {} // ErrIfaceName error is returned when a new name could not be generated. type ErrIfaceName struct{} func (ein *ErrIfaceName) Error() string { return "failed to find name for new interface" } // InternalError denotes the type of this error func (ein *ErrIfaceName) InternalError() {} // ErrNoIPAddr error is returned when bridge has no IPv4 address configured. type ErrNoIPAddr struct{} func (enip *ErrNoIPAddr) Error() string { return "bridge has no IPv4 address configured" } // InternalError denotes the type of this error func (enip *ErrNoIPAddr) InternalError() {} // ErrInvalidGateway is returned when the user provided default gateway (v4/v6) is not not valid. type ErrInvalidGateway struct{} func (eig *ErrInvalidGateway) Error() string { return "default gateway ip must be part of the network" } // InvalidParameter denotes the type of this error func (eig *ErrInvalidGateway) InvalidParameter() {} // ErrInvalidContainerSubnet is returned when the container subnet (FixedCIDR) is not valid. type ErrInvalidContainerSubnet struct{} func (eis *ErrInvalidContainerSubnet) Error() string { return "container subnet must be a subset of bridge network" } // InvalidParameter denotes the type of this error func (eis *ErrInvalidContainerSubnet) InvalidParameter() {} // ErrInvalidMtu is returned when the user provided MTU is not valid. type ErrInvalidMtu int func (eim ErrInvalidMtu) Error() string { return fmt.Sprintf("invalid MTU number: %d", int(eim)) } // InvalidParameter denotes the type of this error func (eim ErrInvalidMtu) InvalidParameter() {} // ErrUnsupportedAddressType is returned when the specified address type is not supported. type ErrUnsupportedAddressType string func (uat ErrUnsupportedAddressType) Error() string { return fmt.Sprintf("unsupported address type: %s", string(uat)) } // InvalidParameter denotes the type of this error func (uat ErrUnsupportedAddressType) InvalidParameter() {} // ActiveEndpointsError is returned when there are // still active endpoints in the network being deleted. type ActiveEndpointsError string func (aee ActiveEndpointsError) Error() string { return fmt.Sprintf("network %s has active endpoint", string(aee)) } // Forbidden denotes the type of this error func (aee ActiveEndpointsError) Forbidden() {} // InvalidNetworkIDError is returned when the passed // network id for an existing network is not a known id. type InvalidNetworkIDError string func (inie InvalidNetworkIDError) Error() string { return fmt.Sprintf("invalid network id %s", string(inie)) } // NotFound denotes the type of this error func (inie InvalidNetworkIDError) NotFound() {} // InvalidEndpointIDError is returned when the passed // endpoint id is not valid. type InvalidEndpointIDError string func (ieie InvalidEndpointIDError) Error() string { return fmt.Sprintf("invalid endpoint id: %s", string(ieie)) } // InvalidParameter denotes the type of this error func (ieie InvalidEndpointIDError) InvalidParameter() {} // EndpointNotFoundError is returned when the no endpoint // with the passed endpoint id is found. type EndpointNotFoundError string func (enfe EndpointNotFoundError) Error() string { return fmt.Sprintf("endpoint not found: %s", string(enfe)) } // NotFound denotes the type of this error func (enfe EndpointNotFoundError) NotFound() {} // NonDefaultBridgeExistError is returned when a non-default // bridge config is passed but it does not already exist. type NonDefaultBridgeExistError string func (ndbee NonDefaultBridgeExistError) Error() string { return fmt.Sprintf("bridge device with non default name %s must be created manually", string(ndbee)) } // Forbidden denotes the type of this error func (ndbee NonDefaultBridgeExistError) Forbidden() {} // NonDefaultBridgeNeedsIPError is returned when a non-default // bridge config is passed but it has no ip configured type NonDefaultBridgeNeedsIPError string func (ndbee NonDefaultBridgeNeedsIPError) Error() string { return fmt.Sprintf("bridge device with non default name %s must have a valid IP address", string(ndbee)) } // Forbidden denotes the type of this error func (ndbee NonDefaultBridgeNeedsIPError) Forbidden() {} // FixedCIDRv4Error is returned when fixed-cidrv4 configuration // failed. type FixedCIDRv4Error struct { Net *net.IPNet Subnet *net.IPNet Err error } func (fcv4 *FixedCIDRv4Error) Error() string { return fmt.Sprintf("setup FixedCIDRv4 failed for subnet %s in %s: %v", fcv4.Subnet, fcv4.Net, fcv4.Err) } // InternalError denotes the type of this error func (fcv4 *FixedCIDRv4Error) InternalError() {} // FixedCIDRv6Error is returned when fixed-cidrv6 configuration // failed. type FixedCIDRv6Error struct { Net *net.IPNet Err error } func (fcv6 *FixedCIDRv6Error) Error() string { return fmt.Sprintf("setup FixedCIDRv6 failed for subnet %s in %s: %v", fcv6.Net, fcv6.Net, fcv6.Err) } // InternalError denotes the type of this error func (fcv6 *FixedCIDRv6Error) InternalError() {} // IPv4AddrAddError is returned when IPv4 address could not be added to the bridge. type IPv4AddrAddError struct { IP *net.IPNet Err error } func (ipv4 *IPv4AddrAddError) Error() string { return fmt.Sprintf("failed to add IPv4 address %s to bridge: %v", ipv4.IP, ipv4.Err) } // InternalError denotes the type of this error func (ipv4 *IPv4AddrAddError) InternalError() {} // IPv4AddrNoMatchError is returned when the bridge's IPv4 address does not match configured. type IPv4AddrNoMatchError struct { IP net.IP CfgIP net.IP } func (ipv4 *IPv4AddrNoMatchError) Error() string { return fmt.Sprintf("bridge IPv4 (%s) does not match requested configuration %s", ipv4.IP, ipv4.CfgIP) } // IPv6AddrNoMatchError is returned when the bridge's IPv6 address does not match configured. type IPv6AddrNoMatchError net.IPNet func (ipv6 *IPv6AddrNoMatchError) Error() string { return fmt.Sprintf("bridge IPv6 addresses do not match the expected bridge configuration %s", (*net.IPNet)(ipv6).String()) }