Documentation ¶
Index ¶
- func LoadBpf() (*ebpf.CollectionSpec, error)
- func LoadBpfObjects(obj interface{}, opts *ebpf.CollectionOptions) error
- type BpfDnsFlowId
- type BpfDnsRecordT
- type BpfFlowId
- type BpfFlowIdT
- type BpfFlowMetrics
- type BpfFlowMetricsT
- type BpfFlowRecordT
- type BpfMapSpecs
- type BpfMaps
- type BpfObjects
- type BpfPktDropsT
- type BpfProgramSpecs
- type BpfPrograms
- type BpfSpecs
- type FlowFetcher
- type FlowFetcherConfig
- type PacketFetcher
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func LoadBpf ¶ added in v0.3.0
func LoadBpf() (*ebpf.CollectionSpec, error)
LoadBpf returns the embedded CollectionSpec for Bpf.
func LoadBpfObjects ¶ added in v0.3.0
func LoadBpfObjects(obj interface{}, opts *ebpf.CollectionOptions) error
LoadBpfObjects loads Bpf and converts it into a struct.
The following types are suitable as obj argument:
*BpfObjects *BpfPrograms *BpfMaps
See ebpf.CollectionSpec.LoadAndAssign documentation for details.
Types ¶
type BpfDnsFlowId ¶ added in v0.3.2
type BpfDnsRecordT ¶ added in v0.3.2
type BpfFlowId ¶ added in v0.3.0
type BpfFlowId BpfFlowIdT
type BpfFlowIdT ¶ added in v0.3.0
type BpfFlowMetrics ¶ added in v0.3.0
type BpfFlowMetrics BpfFlowMetricsT
type BpfFlowMetricsT ¶ added in v0.3.0
type BpfFlowMetricsT struct { Packets uint32 Bytes uint64 StartMonoTimeTs uint64 EndMonoTimeTs uint64 Flags uint16 Errno uint8 Dscp uint8 PktDrops BpfPktDropsT DnsRecord BpfDnsRecordT FlowRtt uint64 }
type BpfFlowRecordT ¶ added in v0.3.0
type BpfFlowRecordT struct { Id BpfFlowId Metrics BpfFlowMetrics }
type BpfMapSpecs ¶ added in v0.3.0
type BpfMapSpecs struct { AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` }
BpfMapSpecs contains maps before they are loaded into the kernel.
It can be passed ebpf.CollectionSpec.Assign.
type BpfMaps ¶ added in v0.3.0
type BpfMaps struct { AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` DirectFlows *ebpf.Map `ebpf:"direct_flows"` DnsFlows *ebpf.Map `ebpf:"dns_flows"` PacketRecord *ebpf.Map `ebpf:"packet_record"` }
BpfMaps contains all maps after they have been loaded into the kernel.
It can be passed to LoadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
type BpfObjects ¶ added in v0.3.0
type BpfObjects struct { BpfPrograms BpfMaps }
BpfObjects contains all objects after they have been loaded into the kernel.
It can be passed to LoadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
func (*BpfObjects) Close ¶ added in v0.3.0
func (o *BpfObjects) Close() error
type BpfPktDropsT ¶ added in v0.3.2
type BpfProgramSpecs ¶ added in v0.3.0
type BpfProgramSpecs struct { EgressFlowParse *ebpf.ProgramSpec `ebpf:"egress_flow_parse"` EgressPcaParse *ebpf.ProgramSpec `ebpf:"egress_pca_parse"` IngressFlowParse *ebpf.ProgramSpec `ebpf:"ingress_flow_parse"` IngressPcaParse *ebpf.ProgramSpec `ebpf:"ingress_pca_parse"` KfreeSkb *ebpf.ProgramSpec `ebpf:"kfree_skb"` TcpRcvFentry *ebpf.ProgramSpec `ebpf:"tcp_rcv_fentry"` TcpRcvKprobe *ebpf.ProgramSpec `ebpf:"tcp_rcv_kprobe"` }
BpfSpecs contains programs before they are loaded into the kernel.
It can be passed ebpf.CollectionSpec.Assign.
type BpfPrograms ¶ added in v0.3.0
type BpfPrograms struct { EgressFlowParse *ebpf.Program `ebpf:"egress_flow_parse"` EgressPcaParse *ebpf.Program `ebpf:"egress_pca_parse"` IngressFlowParse *ebpf.Program `ebpf:"ingress_flow_parse"` IngressPcaParse *ebpf.Program `ebpf:"ingress_pca_parse"` KfreeSkb *ebpf.Program `ebpf:"kfree_skb"` TcpRcvFentry *ebpf.Program `ebpf:"tcp_rcv_fentry"` TcpRcvKprobe *ebpf.Program `ebpf:"tcp_rcv_kprobe"` }
BpfPrograms contains all programs after they have been loaded into the kernel.
It can be passed to LoadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
func (*BpfPrograms) Close ¶ added in v0.3.0
func (p *BpfPrograms) Close() error
type BpfSpecs ¶ added in v0.3.0
type BpfSpecs struct { BpfProgramSpecs BpfMapSpecs }
BpfSpecs contains maps and programs before they are loaded into the kernel.
It can be passed ebpf.CollectionSpec.Assign.
type FlowFetcher ¶ added in v0.2.1
type FlowFetcher struct {
// contains filtered or unexported fields
}
FlowFetcher reads and forwards the Flows from the Traffic Control hooks in the eBPF kernel space. It provides access both to flows that are aggregated in the kernel space (via PerfCPU hashmap) and to flows that are forwarded by the kernel via ringbuffer because could not be aggregated in the map
func NewFlowFetcher ¶ added in v0.2.1
func NewFlowFetcher(cfg *FlowFetcherConfig) (*FlowFetcher, error)
func (*FlowFetcher) Close ¶ added in v0.2.1
func (m *FlowFetcher) Close() error
Close the eBPF fetcher from the system. We don't need a "Close(iface)" method because the filters and qdiscs are automatically removed when the interface is down nolint:cyclop
func (*FlowFetcher) DeleteMapsStaleEntries ¶ added in v0.3.2
func (m *FlowFetcher) DeleteMapsStaleEntries(timeOut time.Duration)
DeleteMapsStaleEntries Look for any stale entries in the features maps and delete them
func (*FlowFetcher) LookupAndDeleteMap ¶ added in v0.2.1
func (m *FlowFetcher) LookupAndDeleteMap() map[BpfFlowId][]BpfFlowMetrics
LookupAndDeleteMap reads all the entries from the eBPF map and removes them from it. It returns a map where the key For synchronization purposes, we get/delete a whole snapshot of the flows map. This way we avoid missing packets that could be updated on the ebpf side while we process/aggregate them here Changing this method invocation by BatchLookupAndDelete could improve performance TODO: detect whether BatchLookupAndDelete is supported (Kernel>=5.6) and use it selectively Supported Lookup/Delete operations by kernel: https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md Race conditions here causes that some flows are lost in high-load scenarios
func (*FlowFetcher) ReadRingBuf ¶ added in v0.2.1
func (m *FlowFetcher) ReadRingBuf() (ringbuf.Record, error)
type FlowFetcherConfig ¶ added in v0.3.2
type PacketFetcher ¶ added in v0.3.3
type PacketFetcher struct {
// contains filtered or unexported fields
}
It provides access to packets from the kernel space (via PerfCPU hashmap)
func NewPacketFetcher ¶ added in v0.3.3
func NewPacketFetcher( cacheMaxSize int, pcaFilters string, ingress, egress bool, ) (*PacketFetcher, error)
func (*PacketFetcher) Close ¶ added in v0.3.3
func (p *PacketFetcher) Close() error
Close the eBPF fetcher from the system. We don't need an "Close(iface)" method because the filters and qdiscs are automatically removed when the interface is down
func (*PacketFetcher) LookupAndDeleteMap ¶ added in v0.3.3
func (p *PacketFetcher) LookupAndDeleteMap() map[int][]*byte