Documentation
¶
Index ¶
- func DecodeAndReleaseEvent(e Event) []ct.Con
- func GenerateBPFSampler(samplingRate float64) ([]bpf.RawInstruction, error)
- func NtohsU16(n uint16) uint16
- type AttributeScanner
- type CircuitBreaker
- type Conntracker
- type Consumer
- type Event
- type NestedFrame
- type Socket
- func (s *Socket) Close() error
- func (s *Socket) File() *os.File
- func (s *Socket) JoinGroup(group uint32) error
- func (s *Socket) LeaveGroup(group uint32) error
- func (s *Socket) Receive() ([]netlink.Message, error)
- func (s *Socket) ReceiveInto(b []byte) ([]netlink.Message, error)
- func (s *Socket) Send(m netlink.Message) error
- func (s *Socket) SendMessages(m []netlink.Message) error
- func (s *Socket) SetBPF(filter []bpf.RawInstruction) error
- func (s *Socket) SetSockoptInt(level, opt, value int) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DecodeAndReleaseEvent ¶
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 GenerateBPFSampler ¶
func GenerateBPFSampler(samplingRate float64) ([]bpf.RawInstruction, error)
GenerateBPFSampler returns BPF assembly for a traffic sampler
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 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(procRoot string, maxStateSize, targetRateLimit int) (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 ¶
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 ¶
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 ¶
Events returns a channel of Event objects (wrapping netlink messages) which receives all new connections added to the Conntrack table.
type Event ¶
type Event struct {
// contains filtered or unexported fields
}
Event encapsulates the result of a single netlink.Con.Receive() call
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 (*Socket) LeaveGroup ¶
LeaveGroup deletes a group membership
func (*Socket) ReceiveInto ¶
ReceiveInto reads one or more netlink.Messages off the socket
func (*Socket) SendMessages ¶
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 ¶
SetSockoptInt sets a socket option