Documentation

Overview

    Package lxcmap represents the endpoints BPF map in the BPF programs. It is implemented as a hash table containing an entry for all local endpoints. The hashtable can be accessed through the key EndpointKey and points which points to the value EndpointInfo. +groupName=maps

    Index

    Constants

    View Source
    const (
    	MapName = "cilium_lxc"
    
    	// MaxEntries represents the maximum number of endpoints in the map
    	MaxEntries = 65535
    
    	// PortMapMax represents the maximum number of Ports Mapping per container.
    	PortMapMax = 16
    )
    View Source
    const (
    	// EndpointFlagHost indicates that this endpoint represents the host
    	EndpointFlagHost = 1
    )

    Variables

    View Source
    var (
    	// LXCMap represents the BPF map for endpoints
    	LXCMap = bpf.NewMap(MapName,
    		bpf.MapTypeHash,
    		&EndpointKey{},
    		int(unsafe.Sizeof(EndpointKey{})),
    		&EndpointInfo{},
    		int(unsafe.Sizeof(EndpointInfo{})),
    		MaxEntries,
    		0, 0,
    		bpf.ConvertKeyValue,
    	).WithCache()
    )

    Functions

    func AddHostEntry

    func AddHostEntry(ip net.IP) error

      AddHostEntry adds a special endpoint which represents the local host

      func DeleteElement

      func DeleteElement(f EndpointFrontend) []error

        DeleteElement deletes the endpoint using all keys which represent the endpoint. It returns the number of errors encountered during deletion.

        func DeleteEntry

        func DeleteEntry(ip net.IP) error

          DeleteEntry deletes a single map entry

          func DumpToMap

          func DumpToMap() (map[string]*EndpointInfo, error)

            DumpToMap dumps the contents of the lxcmap into a map and returns it

            func SyncHostEntry

            func SyncHostEntry(ip net.IP) (bool, error)

              SyncHostEntry checks if a host entry exists in the lxcmap and adds one if needed. Returns boolean indicating if a new entry was added and an error.

              func WriteEndpoint

              func WriteEndpoint(f EndpointFrontend) error

                WriteEndpoint updates the BPF map with the endpoint information and links the endpoint information to all keys provided.

                Types

                type EndpointFrontend

                type EndpointFrontend interface {
                	LXCMac() mac.MAC
                	GetNodeMAC() mac.MAC
                	GetIfIndex() int
                	GetID() uint64
                	IPv4Address() addressing.CiliumIPv4
                	IPv6Address() addressing.CiliumIPv6
                }

                  EndpointFrontend is the interface to implement for an object to synchronize with the endpoint BPF map.

                  type EndpointInfo

                  type EndpointInfo struct {
                  	IfIndex uint32 `align:"ifindex"`
                  	Unused  uint16 `align:"unused"`
                  	LxcID   uint16 `align:"lxc_id"`
                  	Flags   uint32 `align:"flags"`
                  
                  	MAC     MAC        `align:"mac"`
                  	NodeMAC MAC        `align:"node_mac"`
                  	Pad     pad4uint32 `align:"pad"`
                  	// contains filtered or unexported fields
                  }

                    EndpointInfo represents the value of the endpoints BPF map.

                    Must be in sync with struct endpoint_info in <bpf/lib/common.h> +k8s:deepcopy-gen=true +k8s:deepcopy-gen:interfaces=github.com/cilium/cilium/pkg/bpf.MapValue

                    func GetBPFValue

                    func GetBPFValue(e EndpointFrontend) (*EndpointInfo, error)

                      GetBPFValue returns the value which should represent this endpoint in the BPF endpoints map Must only be called if init() succeeded.

                      func (*EndpointInfo) DeepCopy

                      func (in *EndpointInfo) DeepCopy() *EndpointInfo

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

                        func (*EndpointInfo) DeepCopyInto

                        func (in *EndpointInfo) DeepCopyInto(out *EndpointInfo)

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

                          func (*EndpointInfo) DeepCopyMapValue

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

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

                            func (*EndpointInfo) GetValuePtr

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

                              GetValuePtr returns the unsafe pointer to the BPF value

                              func (*EndpointInfo) IsHost

                              func (v *EndpointInfo) IsHost() bool

                                IsHost returns true if the EndpointInfo represents a host IP

                                func (*EndpointInfo) String

                                func (v *EndpointInfo) String() string

                                  String returns the human readable representation of an EndpointInfo

                                  type EndpointKey

                                  type EndpointKey struct {
                                  	bpf.EndpointKey
                                  }

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

                                    func GetBPFKeys

                                    func GetBPFKeys(e EndpointFrontend) []*EndpointKey

                                      GetBPFKeys returns all keys which should represent this endpoint in the BPF endpoints map

                                      func NewEndpointKey

                                      func NewEndpointKey(ip net.IP) *EndpointKey

                                        NewEndpointKey returns an EndpointKey based on the provided IP address. The address family is automatically detected

                                        func (*EndpointKey) DeepCopy

                                        func (in *EndpointKey) DeepCopy() *EndpointKey

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

                                          func (*EndpointKey) DeepCopyInto

                                          func (in *EndpointKey) DeepCopyInto(out *EndpointKey)

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

                                            func (*EndpointKey) DeepCopyMapKey

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

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

                                              func (EndpointKey) NewValue

                                              func (k EndpointKey) NewValue() bpf.MapValue

                                                NewValue returns a new empty instance of the structure representing the BPF map value

                                                type MAC

                                                type MAC uint64

                                                  MAC is the __u64 representation of a MAC address.

                                                  func (MAC) String

                                                  func (m MAC) String() string