nat

package
v1.14.0-snapshot.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2023 License: Apache-2.0 Imports: 18 Imported by: 14

Documentation

Overview

Package nat implements the BPF NAT map interaction code. +groupName=maps

Index

Constants

View Source
const (
	// MapNameSnat4Global represents global IPv4 NAT table.
	MapNameSnat4Global = "cilium_snat_v4_external"
	// MapNameSnat6Global represents global IPv6 NAT table.
	MapNameSnat6Global = "cilium_snat_v6_external"

	// MinPortSnatDefault represents default min port from range.
	MinPortSnatDefault = 1024
	// MaxPortSnatDefault represents default max port from range.
	MaxPortSnatDefault = 65535
)
View Source
const SizeofNatEntry4 = int(unsafe.Sizeof(NatEntry4{}))

SizeofNatEntry4 is the size of the NatEntry4 type in bytes.

View Source
const SizeofNatEntry6 = int(unsafe.Sizeof(NatEntry6{}))

SizeofNatEntry6 is the size of the NatEntry6 type in bytes.

View Source
const SizeofNatKey4 = int(unsafe.Sizeof(NatKey4{}))

SizeofNatKey4 is the size of the NatKey4 type in bytes.

View Source
const SizeofNatKey6 = int(unsafe.Sizeof(NatKey6{}))

SizeofNatKey6 is the size of the NatKey6 type in bytes.

Variables

This section is empty.

Functions

func DoDumpEntries

func DoDumpEntries(m NatMap) (string, error)

DoDumpEntries iterates through Map m and writes the values of the nat entries in m to a string.

func InitDummyPerClusterNATMaps added in v1.14.0

func InitDummyPerClusterNATMaps(ipv4, ipv6 bool, innerMapEntries int) error

func InitPerClusterNATMaps added in v1.14.0

func InitPerClusterNATMaps(ipv4, ipv6 bool, innerMapEntries int) error

func NatDumpCreated

func NatDumpCreated(dumpStart, entryCreated uint64) string

NatDumpCreated returns time in seconds when NAT entry was created.

Types

type Map

type Map struct {
	bpf.Map
	// contains filtered or unexported fields
}

Map represents a NAT map. It also implements the NatMap interface.

func ClusterMaps

func ClusterMaps(clusterID uint32, ipv4, ipv6 bool) (ipv4Map, ipv6Map *Map, err error)

ClusterMaps returns all NAT maps for given clusters

func GlobalMaps

func GlobalMaps(ipv4, ipv6, nodeport bool) (ipv4Map, ipv6Map *Map)

GlobalMaps returns all global NAT maps.

func NewMap

func NewMap(name string, v4 bool, entries int) *Map

NewMap instantiates a Map.

func (*Map) Delete

func (m *Map) Delete(k bpf.MapKey) (deleted bool, err error)

func (*Map) DeleteMapping

func (m *Map) DeleteMapping(key tuple.TupleKey) error

DeleteMapping removes a NAT mapping from the global NAT table.

func (*Map) DumpEntries

func (m *Map) DumpEntries() (string, error)

DumpEntries iterates through Map m and writes the values of the nat entries in m to a string.

func (*Map) DumpReliablyWithCallback

func (m *Map) DumpReliablyWithCallback(cb bpf.DumpCallback, stats *bpf.DumpStats) error

func (*Map) DumpStats

func (m *Map) DumpStats() *bpf.DumpStats

func (*Map) Flush

func (m *Map) Flush() int

Flush deletes all NAT mappings from the given table.

type NatEntry

type NatEntry interface {
	bpf.MapValue

	// ToHost converts fields to host byte order.
	ToHost() NatEntry

	// Dumps the Nat entry as string.
	Dump(key NatKey, start uint64) string
}

NatEntry is the interface describing values to the NAT map.

type NatEntry4

type NatEntry4 struct {
	Created   uint64     `align:"created"`
	HostLocal uint64     `align:"host_local"`
	Pad1      uint64     `align:"pad1"`
	Pad2      uint64     `align:"pad2"`
	Addr      types.IPv4 `align:"to_saddr"`
	Port      uint16     `align:"to_sport"`
}

NatEntry4 represents an IPv4 entry in the NAT table. +k8s:deepcopy-gen=true +k8s:deepcopy-gen:interfaces=github.com/cilium/cilium/pkg/bpf.MapValue

func (*NatEntry4) DeepCopy added in v1.5.1

func (in *NatEntry4) DeepCopy() *NatEntry4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NatEntry4.

func (*NatEntry4) DeepCopyInto added in v1.5.1

func (in *NatEntry4) DeepCopyInto(out *NatEntry4)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*NatEntry4) DeepCopyMapValue added in v1.5.1

func (in *NatEntry4) DeepCopyMapValue() bpf.MapValue

DeepCopyMapValue is an autogenerated deepcopy function, copying the receiver, creating a new bpf.MapValue.

func (*NatEntry4) Dump

func (n *NatEntry4) Dump(key NatKey, start uint64) string

Dump dumps NAT entry to string.

func (*NatEntry4) GetValuePtr added in v1.5.0

func (n *NatEntry4) GetValuePtr() unsafe.Pointer

GetValuePtr returns the unsafe.Pointer for n.

func (*NatEntry4) String

func (n *NatEntry4) String() string

String returns the readable format.

func (*NatEntry4) ToHost

func (n *NatEntry4) ToHost() NatEntry

ToHost converts NatEntry4 ports to host byte order.

type NatEntry6

type NatEntry6 struct {
	Created   uint64     `align:"created"`
	HostLocal uint64     `align:"host_local"`
	Pad1      uint64     `align:"pad1"`
	Pad2      uint64     `align:"pad2"`
	Addr      types.IPv6 `align:"to_saddr"`
	Port      uint16     `align:"to_sport"`
}

NatEntry6 represents an IPv6 entry in the NAT table. +k8s:deepcopy-gen=true +k8s:deepcopy-gen:interfaces=github.com/cilium/cilium/pkg/bpf.MapValue

func (*NatEntry6) DeepCopy added in v1.5.1

func (in *NatEntry6) DeepCopy() *NatEntry6

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NatEntry6.

func (*NatEntry6) DeepCopyInto added in v1.5.1

func (in *NatEntry6) DeepCopyInto(out *NatEntry6)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*NatEntry6) DeepCopyMapValue added in v1.5.1

func (in *NatEntry6) DeepCopyMapValue() bpf.MapValue

DeepCopyMapValue is an autogenerated deepcopy function, copying the receiver, creating a new bpf.MapValue.

func (*NatEntry6) Dump

func (n *NatEntry6) Dump(key NatKey, start uint64) string

Dump dumps NAT entry to string.

func (*NatEntry6) GetValuePtr added in v1.5.0

func (n *NatEntry6) GetValuePtr() unsafe.Pointer

GetValuePtr returns the unsafe.Pointer for n.

func (*NatEntry6) String

func (n *NatEntry6) String() string

String returns the readable format.

func (*NatEntry6) ToHost

func (n *NatEntry6) ToHost() NatEntry

ToHost converts NatEntry4 ports to host byte order.

type NatKey

type NatKey interface {
	bpf.MapKey

	// ToNetwork converts fields to network byte order.
	ToNetwork() NatKey

	// ToHost converts fields to host byte order.
	ToHost() NatKey

	// Dump contents of key to sb. Returns true if successful.
	Dump(sb *strings.Builder, reverse bool) bool

	// GetFlags flags containing the direction of the TupleKey.
	GetFlags() uint8

	// GetNextHeader returns the proto of the NatKey
	GetNextHeader() u8proto.U8proto
}

type NatKey4

type NatKey4 struct {
	tuple.TupleKey4Global
}

NatKey4 is needed to provide NatEntry type to Lookup values +k8s:deepcopy-gen=true +k8s:deepcopy-gen:interfaces=github.com/cilium/cilium/pkg/bpf.MapKey

func (*NatKey4) DeepCopy added in v1.6.0

func (in *NatKey4) DeepCopy() *NatKey4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NatKey4.

func (*NatKey4) DeepCopyInto added in v1.6.0

func (in *NatKey4) DeepCopyInto(out *NatKey4)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*NatKey4) DeepCopyMapKey added in v1.6.0

func (in *NatKey4) DeepCopyMapKey() bpf.MapKey

DeepCopyMapKey is an autogenerated deepcopy function, copying the receiver, creating a new bpf.MapKey.

func (*NatKey4) GetKeyPtr added in v1.6.0

func (k *NatKey4) GetKeyPtr() unsafe.Pointer

GetKeyPtr returns the unsafe.Pointer for k.

func (*NatKey4) GetNextHeader

func (k *NatKey4) GetNextHeader() u8proto.U8proto

func (*NatKey4) NewValue added in v1.6.0

func (k *NatKey4) NewValue() bpf.MapValue

NewValue creates a new bpf.MapValue.

func (*NatKey4) ToHost

func (k *NatKey4) ToHost() NatKey

ToHost converts ports to host byte order.

This is necessary to prevent callers from implicitly converting the NatKey4 type here into a local key type in the nested TupleKey4Global field.

func (*NatKey4) ToNetwork

func (k *NatKey4) ToNetwork() NatKey

ToNetwork converts ports to network byte order.

This is necessary to prevent callers from implicitly converting the NatKey4 type here into a local key type in the nested TupleKey4Global field.

type NatKey6

type NatKey6 struct {
	tuple.TupleKey6Global
}

NatKey6 is needed to provide NatEntry type to Lookup values +k8s:deepcopy-gen=true +k8s:deepcopy-gen:interfaces=github.com/cilium/cilium/pkg/bpf.MapKey

func (*NatKey6) DeepCopy added in v1.6.0

func (in *NatKey6) DeepCopy() *NatKey6

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NatKey6.

func (*NatKey6) DeepCopyInto added in v1.6.0

func (in *NatKey6) DeepCopyInto(out *NatKey6)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*NatKey6) DeepCopyMapKey added in v1.6.0

func (in *NatKey6) DeepCopyMapKey() bpf.MapKey

DeepCopyMapKey is an autogenerated deepcopy function, copying the receiver, creating a new bpf.MapKey.

func (*NatKey6) GetKeyPtr added in v1.6.0

func (k *NatKey6) GetKeyPtr() unsafe.Pointer

GetKeyPtr returns the unsafe.Pointer for k.

func (*NatKey6) GetNextHeader

func (k *NatKey6) GetNextHeader() u8proto.U8proto

func (*NatKey6) NewValue added in v1.6.0

func (k *NatKey6) NewValue() bpf.MapValue

NewValue creates a new bpf.MapValue.

func (*NatKey6) ToHost

func (k *NatKey6) ToHost() NatKey

ToHost converts ports to host byte order.

This is necessary to prevent callers from implicitly converting the NatKey6 type here into a local key type in the nested TupleKey6Global field.

func (*NatKey6) ToNetwork

func (k *NatKey6) ToNetwork() NatKey

ToNetwork converts ports to network byte order.

This is necessary to prevent callers from implicitly converting the NatKey6 type here into a local key type in the nested TupleKey6Global field.

type NatMap

type NatMap interface {
	Open() error
	Close() error
	Path() (string, error)
	DumpEntries() (string, error)
	DumpWithCallback(bpf.DumpCallback) error
}

NatMap interface represents a NAT map, and can be reused to implement mock maps for unit tests.

type NatMapRecord

type NatMapRecord struct {
	Key   NatKey
	Value NatEntry
}

A "Record" designates a map entry (key + value), but avoid "entry" because of possible confusion with "NatEntry" (actually the value part). This type is used for JSON dump and mock maps.

type PerClusterNATMap added in v1.14.0

type PerClusterNATMap struct {
	*bpf.Map
	// contains filtered or unexported fields
}

A map-in-map that holds per-cluster NAT maps.

type PerClusterNATMapKey

type PerClusterNATMapKey struct {
	ClusterID uint32
}

+k8s:deepcopy-gen=true +k8s:deepcopy-gen:interfaces=github.com/cilium/cilium/pkg/bpf.MapKey

func (*PerClusterNATMapKey) DeepCopy

func (in *PerClusterNATMapKey) DeepCopy() *PerClusterNATMapKey

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PerClusterNATMapKey.

func (*PerClusterNATMapKey) DeepCopyInto

func (in *PerClusterNATMapKey) DeepCopyInto(out *PerClusterNATMapKey)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PerClusterNATMapKey) DeepCopyMapKey

func (in *PerClusterNATMapKey) DeepCopyMapKey() bpf.MapKey

DeepCopyMapKey is an autogenerated deepcopy function, copying the receiver, creating a new bpf.MapKey.

func (*PerClusterNATMapKey) GetKeyPtr

func (k *PerClusterNATMapKey) GetKeyPtr() unsafe.Pointer

func (*PerClusterNATMapKey) NewValue

func (k *PerClusterNATMapKey) NewValue() bpf.MapValue

func (*PerClusterNATMapKey) String

func (k *PerClusterNATMapKey) String() string

type PerClusterNATMapVal

type PerClusterNATMapVal struct {
	Fd uint32
}

+k8s:deepcopy-gen=true +k8s:deepcopy-gen:interfaces=github.com/cilium/cilium/pkg/bpf.MapValue

func (*PerClusterNATMapVal) DeepCopy

func (in *PerClusterNATMapVal) DeepCopy() *PerClusterNATMapVal

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PerClusterNATMapVal.

func (*PerClusterNATMapVal) DeepCopyInto

func (in *PerClusterNATMapVal) DeepCopyInto(out *PerClusterNATMapVal)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PerClusterNATMapVal) DeepCopyMapValue

func (in *PerClusterNATMapVal) DeepCopyMapValue() bpf.MapValue

DeepCopyMapValue is an autogenerated deepcopy function, copying the receiver, creating a new bpf.MapValue.

func (*PerClusterNATMapVal) GetValuePtr

func (v *PerClusterNATMapVal) GetValuePtr() unsafe.Pointer

func (*PerClusterNATMapVal) String

func (v *PerClusterNATMapVal) String() string

type PerClusterNATMapper

type PerClusterNATMapper interface {
	UpdateClusterNATMaps(clusterID uint32) error
	DeleteClusterNATMaps(clusterID uint32) error
	GetClusterNATMap(clusterID uint32, v4 bool) (*Map, error)
	Cleanup()
}

An interface to interact with the global map.

var PerClusterNATMaps PerClusterNATMapper

Global interface to interact with IPv4 and v6 NAT maps. We can choose the implementation of this at startup time by choosing InitPerClusterNATMaps or InitDummyPerClusterNATMaps for initialization.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL