netlink

package
v0.0.2-0...-4ce78c8 Latest Latest
Warning

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

Go to latest
Published: Jun 17, 2021 License: Apache-2.0, Apache-2.0 Imports: 27 Imported by: 0

Documentation

Overview

Package netlink is a generated GoMock package.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func EncodeConn

func EncodeConn(conn *Con) ([]byte, error)

EncodeConn netlink encodes a `Con` object

func GenerateBPFSampler

func GenerateBPFSampler(samplingRate float64) ([]bpf.RawInstruction, error)

GenerateBPFSampler returns BPF assembly for a traffic sampler

func IsNAT

func IsNAT(c Con) bool

IsNAT returns whether this Con represents a NAT translation

Types

type AttributeScanner

type AttributeScanner struct {
	// contains filtered or unexported fields
}

AttributeScanner provides an iterator API to traverse each field in a netlink message. The same AttributeScanner instance can be used multiple times with different messages by calling ResetTo(). When scanning a netlink message, every time we "enter" in a nested field, a new NestedFrame is created. Based on https://github.com/mdlayher/netlink/blob/c558cf25207e57bc9cc026d2dd69e2ea2f6abd0e/attribute.go

func NewAttributeScanner

func NewAttributeScanner() *AttributeScanner

NewAttributeScanner returns a new instance of AttributeScanner

func (*AttributeScanner) Bytes

func (s *AttributeScanner) Bytes() []byte

Bytes returns the raw bytes of the current Attribute's data.

func (*AttributeScanner) Err

func (s *AttributeScanner) Err() error

Err returns the first error encountered by the scanner.

func (*AttributeScanner) Nested

func (s *AttributeScanner) Nested(fn func() error)

Nested executes the given function within a new NestedFrame

func (*AttributeScanner) Next

func (s *AttributeScanner) Next() bool

Next advances the scanner to the next netlink attribute (within the same NestedFrame). It returns false when no more attributes are present, or an error was encountered.

func (*AttributeScanner) ResetTo

func (s *AttributeScanner) ResetTo(data []byte) error

ResetTo makes the current AttributeScanner ready for another netlink message

func (*AttributeScanner) Type

func (s *AttributeScanner) Type() uint16

Type returns the Attribute.Type field of the current netlink attribute pointed to by the scanner.

type CircuitBreaker

type CircuitBreaker struct {
	// contains filtered or unexported fields
}

CircuitBreaker is meant to enforce a maximum rate of events per second Once the event rate goes above the threshold the circuit breaker will trip and remain open until Reset() is called.

func NewCircuitBreaker

func NewCircuitBreaker(maxEventsPerSec int64) *CircuitBreaker

NewCircuitBreaker instantiates a new CircuitBreaker that only allows a maxEventsPerSec to pass. The rate of events is calculated using an EWMA.

func (*CircuitBreaker) IsOpen

func (c *CircuitBreaker) IsOpen() bool

IsOpen returns true when the circuit breaker trips and remain unchanched until Reset() is called.

func (*CircuitBreaker) Rate

func (c *CircuitBreaker) Rate() int64

Rate returns the current rate of events

func (*CircuitBreaker) Reset

func (c *CircuitBreaker) Reset()

Reset closes the circuit breaker and its state.

func (*CircuitBreaker) Tick

func (c *CircuitBreaker) Tick(n int)

Tick represents one or more events passing through the circuit breaker.

type Con

type Con struct {
	ct.Con
	NetNS int32
}

Con represents a conntrack entry, along with any network namespace info (nsid)

func DecodeAndReleaseEvent

func DecodeAndReleaseEvent(e Event) []Con

DecodeAndReleaseEvent decodes a single Event into a slice of []ct.Con objects and releases the underlying buffer. TODO: Replace the intermediate ct.Con object by the same format we use in the cache

func (Con) String

func (c Con) String() string

type Conntrack

type Conntrack interface {
	// Exists checks if a connection exists in the conntrack
	// table based on matches to `conn.Origin` or `conn.Reply`.
	Exists(conn *Con) (bool, error)
	// Dump dumps the conntrack table.
	Dump() ([]Con, error)
	// Get gets the conntrack record for a connection. Similar to
	// Exists, but returns the full connection information.
	Get(conn *Con) (Con, error)
	// Close closes the conntrack object
	Close() error
}

Conntrack is an interface to the system conntrack table

func NewConntrack

func NewConntrack(netNS int) (Conntrack, error)

NewConntrack creates an implementation of the Conntrack interface. `netNS` is the network namespace for the conntrack operations. A value of `0` will use the current thread's network namespace

type Conntracker

type Conntracker interface {
	GetTranslationForConn(network.ConnectionStats) *network.IPTranslation
	DeleteTranslation(network.ConnectionStats)
	GetStats() map[string]int64
	Close()
}

Conntracker is a wrapper around go-conntracker that keeps a record of all connections in user space

func NewConntracker

func NewConntracker(config *config.Config) (Conntracker, error)

NewConntracker creates a new conntracker with a short term buffer capped at the given size

func NewNoOpConntracker

func NewNoOpConntracker() Conntracker

NewNoOpConntracker creates a conntracker which always returns empty information

type Consumer

type Consumer struct {
	// contains filtered or unexported fields
}

Consumer is responsible for encapsulating all the logic of hooking into Conntrack via a Netlink socket and streaming new connection events.

func NewConsumer

func NewConsumer(procRoot string, targetRateLimit int, listenAllNamespaces bool) *Consumer

NewConsumer creates a new Conntrack event consumer. targetRateLimit represents the maximum number of netlink messages per second that can be read off the socket

func (*Consumer) DumpTable

func (c *Consumer) DumpTable(family uint8) (<-chan Event, error)

DumpTable returns a channel of Event objects containing all entries present in the Conntrack table. The channel is closed once all entries are read. This method is meant to be used once during the process initialization of system-probe.

func (*Consumer) Events

func (c *Consumer) Events() (<-chan Event, error)

Events returns a channel of Event objects (wrapping netlink messages) which receives all new connections added to the Conntrack table.

func (*Consumer) GetStats

func (c *Consumer) GetStats() map[string]int64

GetStats returns telemetry associated to the Consumer

func (*Consumer) Stop

func (c *Consumer) Stop()

Stop the consumer

type Event

type Event struct {
	// contains filtered or unexported fields
}

Event encapsulates the result of a single netlink.Con.Receive() call

func (*Event) Done

func (e *Event) Done()

Done must be called after decoding events so the underlying buffers can be reclaimed.

func (*Event) Messages

func (e *Event) Messages() []netlink.Message

Messages returned from the socket read

type MockConntracker

type MockConntracker struct {
	// contains filtered or unexported fields
}

MockConntracker is a mock of Conntracker interface

func NewMockConntracker

func NewMockConntracker(ctrl *gomock.Controller) *MockConntracker

NewMockConntracker creates a new mock instance

func (*MockConntracker) Close

func (m *MockConntracker) Close()

Close mocks base method

func (*MockConntracker) DeleteTranslation

func (m *MockConntracker) DeleteTranslation(arg0 network.ConnectionStats)

DeleteTranslation mocks base method

func (*MockConntracker) EXPECT

EXPECT returns an object that allows the caller to indicate expected use

func (*MockConntracker) GetStats

func (m *MockConntracker) GetStats() map[string]int64

GetStats mocks base method

func (*MockConntracker) GetTranslationForConn

func (m *MockConntracker) GetTranslationForConn(arg0 network.ConnectionStats) *network.IPTranslation

GetTranslationForConn mocks base method

type MockConntrackerMockRecorder

type MockConntrackerMockRecorder struct {
	// contains filtered or unexported fields
}

MockConntrackerMockRecorder is the mock recorder for MockConntracker

func (*MockConntrackerMockRecorder) Close

Close indicates an expected call of Close

func (*MockConntrackerMockRecorder) DeleteTranslation

func (mr *MockConntrackerMockRecorder) DeleteTranslation(arg0 interface{}) *gomock.Call

DeleteTranslation indicates an expected call of DeleteTranslation

func (*MockConntrackerMockRecorder) GetStats

func (mr *MockConntrackerMockRecorder) GetStats() *gomock.Call

GetStats indicates an expected call of GetStats

func (*MockConntrackerMockRecorder) GetTranslationForConn

func (mr *MockConntrackerMockRecorder) GetTranslationForConn(arg0 interface{}) *gomock.Call

GetTranslationForConn indicates an expected call of GetTranslationForConn

type NestedFrame

type NestedFrame struct {
	// contains filtered or unexported fields
}

A NestedFrame encapsulates the decoding information of a certain nesting level

type Socket

type Socket struct {
	// contains filtered or unexported fields
}

Socket is an implementation of netlink.Socket (github.com/mdlayher/netlink) It's mostly a copy of the original implementation (netlink.conn) with a few optimizations: * We don't MSG_PEEK as we use a pre-allocated buffer large enough to fit any netlink message; * We use a buffer pool for the message data; * We remove all the synchronization & go-channels cruft and bring it upstream in a cheaper/simpler way (Consumer)

func NewSocket

func NewSocket() (*Socket, error)

NewSocket creates a new NETLINK socket

func (*Socket) Close

func (s *Socket) Close() error

Close the socket

func (*Socket) File

func (s *Socket) File() *os.File

File descriptor of the socket

func (*Socket) GetSockoptInt

func (s *Socket) GetSockoptInt(level, opt int) (int, error)

GetSockoptInt gets a socket option

func (*Socket) JoinGroup

func (s *Socket) JoinGroup(group uint32) error

JoinGroup creates a new group membership

func (*Socket) LeaveGroup

func (s *Socket) LeaveGroup(group uint32) error

LeaveGroup deletes a group membership

func (*Socket) Receive

func (s *Socket) Receive() ([]netlink.Message, error)

Receive is not implemented. See ReceiveInto

func (*Socket) ReceiveInto

func (s *Socket) ReceiveInto(b []byte) ([]netlink.Message, int32, error)

ReceiveInto reads one or more netlink.Messages off the socket

func (*Socket) Send

func (s *Socket) Send(m netlink.Message) error

Send a netlink.Message

func (*Socket) SendMessages

func (s *Socket) SendMessages(m []netlink.Message) error

SendMessages isn't implemented in our case

func (*Socket) SetBPF

func (s *Socket) SetBPF(filter []bpf.RawInstruction) error

SetBPF attaches an assembled BPF program to the socket

func (*Socket) SetSockoptInt

func (s *Socket) SetSockoptInt(level, opt, value int) error

SetSockoptInt sets a socket option

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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