Documentation
¶
Overview ¶
Package datapath defines the interfaces to abstract all platform specific datapath components.
Current datapath implementations:
pkg/datapath/linux pkg/datapath/fake
Index ¶
- func RemoteSNATDstAddrExclusionCIDR() *cidr.CIDR
- type BaseProgramOwner
- type CompileTimeConfiguration
- type ConfigWriter
- type Datapath
- type DeviceConfiguration
- type Endpoint
- type EndpointConfiguration
- type IptablesManager
- type LoadTimeConfiguration
- type Loader
- type LocalNodeConfiguration
- type NodeAddressing
- type NodeAddressingFamily
- type NodeHandler
- type PreFilter
- type Proxy
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RemoteSNATDstAddrExclusionCIDR ¶ added in v1.8.0
RemoteSNATDstAddrExclusionCIDR returns a CIDR for SNAT exclusion. Any packet sent from a local endpoint to an IP address belonging to the CIDR should not be SNAT'd.
Types ¶
type BaseProgramOwner ¶ added in v1.7.0
type BaseProgramOwner interface {
DeviceConfiguration
GetCompilationLock() *lock.RWMutex
Datapath() Datapath
LocalConfig() *LocalNodeConfiguration
SetPrefilter(pf PreFilter)
}
BaseProgramOwner is any type for which a loader is building base programs.
type CompileTimeConfiguration ¶ added in v1.8.0
type CompileTimeConfiguration interface {
DeviceConfiguration
// TODO: Move this detail into the datapath
HasIpvlanDataPath() bool
ConntrackLocalLocked() bool
// RequireARPPassthrough returns true if the datapath must implement
// ARP passthrough for this endpoint
RequireARPPassthrough() bool
// RequireEgressProg returns true if the endpoint requires an egress
// program attached to the InterfaceName() invoking the section
// "to-container"
RequireEgressProg() bool
// RequireRouting returns true if the endpoint requires BPF routing to
// be enabled, when disabled, routing is delegated to Linux routing
RequireRouting() bool
// RequireEndpointRoute returns true if the endpoint wishes to have a
// per endpoint route installed in the host's routing table to point to
// the endpoint's interface
RequireEndpointRoute() bool
// GetPolicyVerdictLogFilter returns the PolicyVerdictLogFilter for the endpoint
GetPolicyVerdictLogFilter() uint32
// IsHost returns true if the endpoint is the host endpoint.
IsHost() bool
}
CompileTimeConfiguration provides datapath implementations a clean interface to access endpoint-specific configuration that can only be changed at compile time.
type ConfigWriter ¶ added in v1.7.0
type ConfigWriter interface {
// WriteNodeConfig writes the implementation-specific configuration of
// node-wide options into the specified writer.
WriteNodeConfig(io.Writer, *LocalNodeConfiguration) error
// WriteNetdevConfig writes the implementation-specific configuration
// of configurable options to the specified writer. Options specified
// here will apply to base programs and not to endpoints, though
// endpoints may have equivalent configurable options.
WriteNetdevConfig(io.Writer, DeviceConfiguration) error
// WriteTemplateConfig writes the implementation-specific configuration
// of configurable options for BPF templates to the specified writer.
WriteTemplateConfig(w io.Writer, cfg EndpointConfiguration) error
// WriteEndpointConfig writes the implementation-specific configuration
// of configurable options for the endpoint to the specified writer.
WriteEndpointConfig(w io.Writer, cfg EndpointConfiguration) error
}
ConfigWriter is anything which writes the configuration for various datapath program types.
type Datapath ¶ added in v1.5.0
type Datapath interface {
ConfigWriter
IptablesManager
// Node must return the handler for node events
Node() NodeHandler
// LocalNodeAddressing must return the node addressing implementation
// of the local node
LocalNodeAddressing() NodeAddressing
// Loader must return the implementation of the loader, which is responsible
// for loading, reloading, and compiling datapath programs.
Loader() Loader
// SetupIPVLAN sets up IPVLAN in the specified network namespace. Returns
// the file descriptor for the tail call map / ID, and an error if any
// operation while configuring said namespace fails.
SetupIPVLAN(netNS string) (int, int, error)
}
Datapath is the interface to abstract all datapath interactions. The abstraction allows to implement the datapath requirements with multiple implementations
type DeviceConfiguration ¶ added in v1.5.0
type DeviceConfiguration interface {
// GetCIDRPrefixLengths fetches the lists of unique IPv6 and IPv4
// prefix lengths used for datapath lookups, each of which is sorted
// from longest prefix to shortest prefix. It must return more than
// one element in each returned array.
GetCIDRPrefixLengths() (s6, s4 []int)
// GetOptions fetches the configurable datapath options from the owner.
GetOptions() *option.IntOptions
}
DeviceConfiguration is an interface for injecting configuration of datapath options that affect lookups and logic applied at a per-device level, whether those are devices associated with the endpoint or associated with the host.