mirror of
https://github.com/netbirdio/netbird.git
synced 2025-07-22 08:40:36 +02:00
adds NetFlow functionality to track and log network traffic information between peers, with features including: - Flow logging for TCP, UDP, and ICMP traffic - Integration with connection tracking system - Resource ID tracking in NetFlow events - DNS and exit node collection configuration - Flow API and Redis cache in management - Memory-based flow storage implementation - Kernel conntrack counters and userspace counters - TCP state machine improvements for more accurate tracking - Migration from net.IP to netip.Addr in the userspace firewall
53 lines
892 B
Go
53 lines
892 B
Go
package store
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"golang.org/x/exp/maps"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
"github.com/netbirdio/netbird/client/internal/netflow/types"
|
|
)
|
|
|
|
func NewMemoryStore() *Memory {
|
|
return &Memory{
|
|
events: make(map[uuid.UUID]*types.Event),
|
|
}
|
|
}
|
|
|
|
type Memory struct {
|
|
mux sync.Mutex
|
|
events map[uuid.UUID]*types.Event
|
|
}
|
|
|
|
func (m *Memory) StoreEvent(event *types.Event) {
|
|
m.mux.Lock()
|
|
defer m.mux.Unlock()
|
|
m.events[event.ID] = event
|
|
}
|
|
|
|
func (m *Memory) Close() {
|
|
m.mux.Lock()
|
|
defer m.mux.Unlock()
|
|
maps.Clear(m.events)
|
|
}
|
|
|
|
func (m *Memory) GetEvents() []*types.Event {
|
|
m.mux.Lock()
|
|
defer m.mux.Unlock()
|
|
events := make([]*types.Event, 0, len(m.events))
|
|
for _, event := range m.events {
|
|
events = append(events, event)
|
|
}
|
|
return events
|
|
}
|
|
|
|
func (m *Memory) DeleteEvents(ids []uuid.UUID) {
|
|
m.mux.Lock()
|
|
defer m.mux.Unlock()
|
|
for _, id := range ids {
|
|
delete(m.events, id)
|
|
}
|
|
}
|