diff --git a/go.mod b/go.mod index bdad2e074..d601ee690 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/netobserv/gopipes v0.3.0 github.com/netobserv/loki-client-go v0.0.0-20220927092034-f37122a54500 - github.com/netobserv/netobserv-ebpf-agent v1.7.0-community.0.20241126155236-02d1817b5770 + github.com/netobserv/netobserv-ebpf-agent v1.7.0-community.0.20241213131924-a76ccd3fceb0 github.com/netsampler/goflow2 v1.3.7 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 diff --git a/go.sum b/go.sum index 95e9504f1..4ade4fe2e 100644 --- a/go.sum +++ b/go.sum @@ -696,8 +696,8 @@ github.com/netobserv/gopipes v0.3.0 h1:IYmPnnAVCdSK7VmHmpFhrVBOEm45qpgbZmJz1sSW+ github.com/netobserv/gopipes v0.3.0/go.mod h1:N7/Gz05EOF0CQQSKWsv3eof22Cj2PB08Pbttw98YFYU= github.com/netobserv/loki-client-go v0.0.0-20220927092034-f37122a54500 h1:RmnoJe/ci5q+QdM7upFdxiU+D8F3L3qTd5wXCwwHefw= github.com/netobserv/loki-client-go v0.0.0-20220927092034-f37122a54500/go.mod h1:LHXpc5tjKvsfZn0pwLKrvlgEhZcCaw3Di9mUEZGAI4E= -github.com/netobserv/netobserv-ebpf-agent v1.7.0-community.0.20241126155236-02d1817b5770 h1:yMtrrgEXBxONkxrE/ASC5hAkT42edXy/XyQGydaNdD0= -github.com/netobserv/netobserv-ebpf-agent v1.7.0-community.0.20241126155236-02d1817b5770/go.mod h1:20e1OPAs7h3k9PvNZWS9D6BnXEtkTk2LlfzD66uhvxY= +github.com/netobserv/netobserv-ebpf-agent v1.7.0-community.0.20241213131924-a76ccd3fceb0 h1:D4pwGJYz1iEmPhFe/22zotNUbCJUSEbUnKhkCxntq+8= +github.com/netobserv/netobserv-ebpf-agent v1.7.0-community.0.20241213131924-a76ccd3fceb0/go.mod h1:20e1OPAs7h3k9PvNZWS9D6BnXEtkTk2LlfzD66uhvxY= github.com/netsampler/goflow2 v1.3.7 h1:XZaTy8kkMnGXpJ9hS3KbO1McyrFTpVNhVFEx9rNhMmc= github.com/netsampler/goflow2 v1.3.7/go.mod h1:4UZsVGVAs//iMCptUHn3WNScztJeUhZH7kDW2+/vDdQ= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= diff --git a/pkg/pipeline/pipeline_test.go b/pkg/pipeline/pipeline_test.go index 86e9652ba..be68af181 100644 --- a/pkg/pipeline/pipeline_test.go +++ b/pkg/pipeline/pipeline_test.go @@ -213,7 +213,7 @@ parameters: DnsLatency: durationpb.New(someDuration), DnsId: 1, DnsFlags: 0x80, - DnsErrno: 0, + DnsErrno: 1, TimeFlowRtt: durationpb.New(someDuration), }}, }) @@ -252,7 +252,7 @@ parameters: "DnsLatencyMs": float64(someDuration.Milliseconds()), "DnsId": float64(1), "DnsFlags": float64(0x80), - "DnsErrno": float64(0), + "DnsErrno": float64(1), "DnsFlagsResponseCode": "NoError", "TimeFlowRttNs": float64(someDuration.Nanoseconds()), }, capturedRecord) diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/decode/decode_protobuf.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/decode/decode_protobuf.go index bdf83f377..8b5c2ca4d 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/decode/decode_protobuf.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/decode/decode_protobuf.go @@ -55,12 +55,12 @@ func RecordToMap(fr *model.Record) config.GenericMap { if fr == nil { return config.GenericMap{} } - srcMAC := model.MacAddr(fr.Id.SrcMac) - dstMAC := model.MacAddr(fr.Id.DstMac) + srcMAC := model.MacAddr(fr.Metrics.SrcMac) + dstMAC := model.MacAddr(fr.Metrics.DstMac) out := config.GenericMap{ "SrcMac": srcMAC.String(), "DstMac": dstMAC.String(), - "Etype": fr.Id.EthProtocol, + "Etype": fr.Metrics.EthProtocol, "TimeFlowStartMs": fr.TimeFlowStart.UnixMilli(), "TimeFlowEndMs": fr.TimeFlowEnd.UnixMilli(), "TimeReceived": time.Now().Unix(), @@ -90,44 +90,56 @@ func RecordToMap(fr *model.Record) config.GenericMap { } } else { interfaces = append(interfaces, fr.Interface) - directions = append(directions, int(fr.Id.Direction)) + directions = append(directions, int(fr.ID.Direction)) } out["Interfaces"] = interfaces out["IfDirections"] = directions - if fr.Id.EthProtocol == uint16(ethernet.EtherTypeIPv4) || fr.Id.EthProtocol == uint16(ethernet.EtherTypeIPv6) { - out["SrcAddr"] = model.IP(fr.Id.SrcIp).String() - out["DstAddr"] = model.IP(fr.Id.DstIp).String() - out["Proto"] = fr.Id.TransportProtocol + if fr.Metrics.EthProtocol == uint16(ethernet.EtherTypeIPv4) || fr.Metrics.EthProtocol == uint16(ethernet.EtherTypeIPv6) { + out["SrcAddr"] = model.IP(fr.ID.SrcIp).String() + out["DstAddr"] = model.IP(fr.ID.DstIp).String() + out["Proto"] = fr.ID.TransportProtocol out["Dscp"] = fr.Metrics.Dscp - if fr.Id.TransportProtocol == syscall.IPPROTO_ICMP || fr.Id.TransportProtocol == syscall.IPPROTO_ICMPV6 { - out["IcmpType"] = fr.Id.IcmpType - out["IcmpCode"] = fr.Id.IcmpCode - } else if fr.Id.TransportProtocol == syscall.IPPROTO_TCP || fr.Id.TransportProtocol == syscall.IPPROTO_UDP || fr.Id.TransportProtocol == syscall.IPPROTO_SCTP { - out["SrcPort"] = fr.Id.SrcPort - out["DstPort"] = fr.Id.DstPort - if fr.Id.TransportProtocol == syscall.IPPROTO_TCP { + if fr.ID.TransportProtocol == syscall.IPPROTO_ICMP || fr.ID.TransportProtocol == syscall.IPPROTO_ICMPV6 { + out["IcmpType"] = fr.ID.IcmpType + out["IcmpCode"] = fr.ID.IcmpCode + } else if fr.ID.TransportProtocol == syscall.IPPROTO_TCP || fr.ID.TransportProtocol == syscall.IPPROTO_UDP || fr.ID.TransportProtocol == syscall.IPPROTO_SCTP { + out["SrcPort"] = fr.ID.SrcPort + out["DstPort"] = fr.ID.DstPort + if fr.ID.TransportProtocol == syscall.IPPROTO_TCP { out["Flags"] = fr.Metrics.Flags } } + } - out["DnsErrno"] = fr.Metrics.DnsRecord.Errno - dnsID := fr.Metrics.DnsRecord.Id - if dnsID != 0 { - out["DnsId"] = dnsID - out["DnsFlags"] = fr.Metrics.DnsRecord.Flags - out["DnsFlagsResponseCode"] = DNSRcodeToStr(uint32(fr.Metrics.DnsRecord.Flags) & 0xF) + if fr.Metrics.AdditionalMetrics != nil { + if fr.Metrics.AdditionalMetrics.DnsRecord.Errno != 0 { + out["DnsErrno"] = fr.Metrics.AdditionalMetrics.DnsRecord.Errno + } + if fr.Metrics.AdditionalMetrics.DnsRecord.Id != 0 { + out["DnsId"] = fr.Metrics.AdditionalMetrics.DnsRecord.Id + out["DnsFlags"] = fr.Metrics.AdditionalMetrics.DnsRecord.Flags + out["DnsFlagsResponseCode"] = DNSRcodeToStr(uint32(fr.Metrics.AdditionalMetrics.DnsRecord.Flags) & 0xF) out["DnsLatencyMs"] = fr.DNSLatency.Milliseconds() } - } - if fr.Metrics.PktDrops.LatestDropCause != 0 { - out["PktDropBytes"] = fr.Metrics.PktDrops.Bytes - out["PktDropPackets"] = fr.Metrics.PktDrops.Packets - out["PktDropLatestFlags"] = fr.Metrics.PktDrops.LatestFlags - out["PktDropLatestState"] = TCPStateToStr(uint32(fr.Metrics.PktDrops.LatestState)) - out["PktDropLatestDropCause"] = PktDropCauseToStr(fr.Metrics.PktDrops.LatestDropCause) + if fr.Metrics.AdditionalMetrics.PktDrops.LatestDropCause != 0 { + out["PktDropBytes"] = fr.Metrics.AdditionalMetrics.PktDrops.Bytes + out["PktDropPackets"] = fr.Metrics.AdditionalMetrics.PktDrops.Packets + out["PktDropLatestFlags"] = fr.Metrics.AdditionalMetrics.PktDrops.LatestFlags + out["PktDropLatestState"] = TCPStateToStr(uint32(fr.Metrics.AdditionalMetrics.PktDrops.LatestState)) + out["PktDropLatestDropCause"] = PktDropCauseToStr(fr.Metrics.AdditionalMetrics.PktDrops.LatestDropCause) + } + if !model.AllZeroIP(model.IP(fr.Metrics.AdditionalMetrics.TranslatedFlow.Daddr)) && + !model.AllZeroIP(model.IP(fr.Metrics.AdditionalMetrics.TranslatedFlow.Saddr)) { + out["ZoneId"] = fr.Metrics.AdditionalMetrics.TranslatedFlow.ZoneId + out["XlatSrcPort"] = fr.Metrics.AdditionalMetrics.TranslatedFlow.Sport + out["XlatDstPort"] = fr.Metrics.AdditionalMetrics.TranslatedFlow.Dport + out["XlatSrcAddr"] = model.IP(fr.Metrics.AdditionalMetrics.TranslatedFlow.Saddr).String() + out["XlatDstAddr"] = model.IP(fr.Metrics.AdditionalMetrics.TranslatedFlow.Daddr).String() + out["XlatIcmpId"] = fr.Metrics.AdditionalMetrics.TranslatedFlow.IcmpId + } } if fr.TimeFlowRtt != 0 { @@ -137,6 +149,7 @@ func RecordToMap(fr *model.Record) config.GenericMap { if len(fr.NetworkMonitorEventsMD) != 0 { out["NetworkEvents"] = fr.NetworkMonitorEventsMD } + return out } diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_arm64_bpfel.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_arm64_bpfel.go index 3fec6b84e..7a6c49987 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_arm64_bpfel.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_arm64_bpfel.go @@ -12,6 +12,17 @@ import ( "github.com/cilium/ebpf" ) +type BpfAdditionalMetrics struct { + DnsRecord BpfDnsRecordT + PktDrops BpfPktDropsT + FlowRtt uint64 + NetworkEventsIdx uint8 + NetworkEvents [4][8]uint8 + _ [1]byte + TranslatedFlow BpfTranslatedFlowT + _ [6]byte +} + type BpfDirectionT uint32 const ( @@ -27,13 +38,16 @@ type BpfDnsFlowId struct { DstIp [16]uint8 Id uint16 Protocol uint8 + _ [1]byte } type BpfDnsRecordT struct { Id uint16 Flags uint16 + _ [4]byte Latency uint64 Errno uint8 + _ [7]byte } type BpfFilterActionT uint32 @@ -75,35 +89,35 @@ type BpfFilterValueT struct { type BpfFlowId BpfFlowIdT type BpfFlowIdT struct { - EthProtocol uint16 Direction uint8 - SrcMac [6]uint8 - DstMac [6]uint8 SrcIp [16]uint8 DstIp [16]uint8 + _ [1]byte SrcPort uint16 DstPort uint16 TransportProtocol uint8 IcmpType uint8 IcmpCode uint8 + _ [3]byte IfIndex uint32 } type BpfFlowMetrics BpfFlowMetricsT type BpfFlowMetricsT struct { - Packets uint32 - Bytes uint64 - StartMonoTimeTs uint64 - EndMonoTimeTs uint64 - Flags uint16 - Errno uint8 - Dscp uint8 - PktDrops BpfPktDropsT - DnsRecord BpfDnsRecordT - FlowRtt uint64 - NetworkEventsIdx uint8 - NetworkEvents [4][8]uint8 + Lock struct{ Val uint32 } + EthProtocol uint16 + SrcMac [6]uint8 + DstMac [6]uint8 + _ [2]byte + Packets uint32 + Bytes uint64 + StartMonoTimeTs uint64 + EndMonoTimeTs uint64 + Flags uint16 + Errno uint8 + Dscp uint8 + _ [4]byte } type BpfFlowRecordT struct { @@ -115,21 +129,24 @@ type BpfGlobalCountersKeyT uint32 const ( BpfGlobalCountersKeyTHASHMAP_FLOWS_DROPPED BpfGlobalCountersKeyT = 0 - BpfGlobalCountersKeyTFILTER_REJECT BpfGlobalCountersKeyT = 1 - BpfGlobalCountersKeyTFILTER_ACCEPT BpfGlobalCountersKeyT = 2 - BpfGlobalCountersKeyTFILTER_NOMATCH BpfGlobalCountersKeyT = 3 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR BpfGlobalCountersKeyT = 4 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_GROUPID_MISMATCH BpfGlobalCountersKeyT = 5 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_UPDATE_MAP_FLOWS BpfGlobalCountersKeyT = 6 - BpfGlobalCountersKeyTNETWORK_EVENTS_GOOD BpfGlobalCountersKeyT = 7 - BpfGlobalCountersKeyTMAX_COUNTERS BpfGlobalCountersKeyT = 8 + BpfGlobalCountersKeyTHASHMAP_FAIL_UPDATE_DNS BpfGlobalCountersKeyT = 1 + BpfGlobalCountersKeyTFILTER_REJECT BpfGlobalCountersKeyT = 2 + BpfGlobalCountersKeyTFILTER_ACCEPT BpfGlobalCountersKeyT = 3 + BpfGlobalCountersKeyTFILTER_NOMATCH BpfGlobalCountersKeyT = 4 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR BpfGlobalCountersKeyT = 5 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_GROUPID_MISMATCH BpfGlobalCountersKeyT = 6 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_UPDATE_MAP_FLOWS BpfGlobalCountersKeyT = 7 + BpfGlobalCountersKeyTNETWORK_EVENTS_GOOD BpfGlobalCountersKeyT = 8 + BpfGlobalCountersKeyTMAX_COUNTERS BpfGlobalCountersKeyT = 9 ) type BpfPktDropsT struct { Packets uint32 + _ [4]byte Bytes uint64 LatestFlags uint16 LatestState uint8 + _ [1]byte LatestDropCause uint32 } @@ -149,6 +166,16 @@ const ( BpfTcpFlagsTRST_ACK_FLAG BpfTcpFlagsT = 1024 ) +type BpfTranslatedFlowT struct { + Saddr [16]uint8 + Daddr [16]uint8 + Sport uint16 + Dport uint16 + ZoneId uint16 + IcmpId uint8 + _ [1]byte +} + // LoadBpf returns the embedded CollectionSpec for Bpf. func LoadBpf() (*ebpf.CollectionSpec, error) { reader := bytes.NewReader(_BpfBytes) @@ -202,18 +229,20 @@ type BpfProgramSpecs struct { TcxEgressPcaParse *ebpf.ProgramSpec `ebpf:"tcx_egress_pca_parse"` TcxIngressFlowParse *ebpf.ProgramSpec `ebpf:"tcx_ingress_flow_parse"` TcxIngressPcaParse *ebpf.ProgramSpec `ebpf:"tcx_ingress_pca_parse"` + TrackNatManipPkt *ebpf.ProgramSpec `ebpf:"track_nat_manip_pkt"` } // BpfMapSpecs contains maps before they are loaded into the kernel. // // It can be passed ebpf.CollectionSpec.Assign. type BpfMapSpecs struct { - AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` - DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` - DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` - FilterMap *ebpf.MapSpec `ebpf:"filter_map"` - GlobalCounters *ebpf.MapSpec `ebpf:"global_counters"` - PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` + AdditionalFlowMetrics *ebpf.MapSpec `ebpf:"additional_flow_metrics"` + AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` + DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` + DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` + FilterMap *ebpf.MapSpec `ebpf:"filter_map"` + GlobalCounters *ebpf.MapSpec `ebpf:"global_counters"` + PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` } // BpfObjects contains all objects after they have been loaded into the kernel. @@ -235,16 +264,18 @@ func (o *BpfObjects) Close() error { // // It can be passed to LoadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. type BpfMaps struct { - AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` - DirectFlows *ebpf.Map `ebpf:"direct_flows"` - DnsFlows *ebpf.Map `ebpf:"dns_flows"` - FilterMap *ebpf.Map `ebpf:"filter_map"` - GlobalCounters *ebpf.Map `ebpf:"global_counters"` - PacketRecord *ebpf.Map `ebpf:"packet_record"` + AdditionalFlowMetrics *ebpf.Map `ebpf:"additional_flow_metrics"` + AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` + DirectFlows *ebpf.Map `ebpf:"direct_flows"` + DnsFlows *ebpf.Map `ebpf:"dns_flows"` + FilterMap *ebpf.Map `ebpf:"filter_map"` + GlobalCounters *ebpf.Map `ebpf:"global_counters"` + PacketRecord *ebpf.Map `ebpf:"packet_record"` } func (m *BpfMaps) Close() error { return _BpfClose( + m.AdditionalFlowMetrics, m.AggregatedFlows, m.DirectFlows, m.DnsFlows, @@ -270,6 +301,7 @@ type BpfPrograms struct { TcxEgressPcaParse *ebpf.Program `ebpf:"tcx_egress_pca_parse"` TcxIngressFlowParse *ebpf.Program `ebpf:"tcx_ingress_flow_parse"` TcxIngressPcaParse *ebpf.Program `ebpf:"tcx_ingress_pca_parse"` + TrackNatManipPkt *ebpf.Program `ebpf:"track_nat_manip_pkt"` } func (p *BpfPrograms) Close() error { @@ -286,6 +318,7 @@ func (p *BpfPrograms) Close() error { p.TcxEgressPcaParse, p.TcxIngressFlowParse, p.TcxIngressPcaParse, + p.TrackNatManipPkt, ) } diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_arm64_bpfel.o b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_arm64_bpfel.o index 983545e61..0cf2fe54a 100644 Binary files a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_arm64_bpfel.o and b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_arm64_bpfel.o differ diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_powerpc_bpfel.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_powerpc_bpfel.go index b75d4d539..abaa611ed 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_powerpc_bpfel.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_powerpc_bpfel.go @@ -12,6 +12,17 @@ import ( "github.com/cilium/ebpf" ) +type BpfAdditionalMetrics struct { + DnsRecord BpfDnsRecordT + PktDrops BpfPktDropsT + FlowRtt uint64 + NetworkEventsIdx uint8 + NetworkEvents [4][8]uint8 + _ [1]byte + TranslatedFlow BpfTranslatedFlowT + _ [6]byte +} + type BpfDirectionT uint32 const ( @@ -27,13 +38,16 @@ type BpfDnsFlowId struct { DstIp [16]uint8 Id uint16 Protocol uint8 + _ [1]byte } type BpfDnsRecordT struct { Id uint16 Flags uint16 + _ [4]byte Latency uint64 Errno uint8 + _ [7]byte } type BpfFilterActionT uint32 @@ -75,35 +89,35 @@ type BpfFilterValueT struct { type BpfFlowId BpfFlowIdT type BpfFlowIdT struct { - EthProtocol uint16 Direction uint8 - SrcMac [6]uint8 - DstMac [6]uint8 SrcIp [16]uint8 DstIp [16]uint8 + _ [1]byte SrcPort uint16 DstPort uint16 TransportProtocol uint8 IcmpType uint8 IcmpCode uint8 + _ [3]byte IfIndex uint32 } type BpfFlowMetrics BpfFlowMetricsT type BpfFlowMetricsT struct { - Packets uint32 - Bytes uint64 - StartMonoTimeTs uint64 - EndMonoTimeTs uint64 - Flags uint16 - Errno uint8 - Dscp uint8 - PktDrops BpfPktDropsT - DnsRecord BpfDnsRecordT - FlowRtt uint64 - NetworkEventsIdx uint8 - NetworkEvents [4][8]uint8 + Lock struct{ Val uint32 } + EthProtocol uint16 + SrcMac [6]uint8 + DstMac [6]uint8 + _ [2]byte + Packets uint32 + Bytes uint64 + StartMonoTimeTs uint64 + EndMonoTimeTs uint64 + Flags uint16 + Errno uint8 + Dscp uint8 + _ [4]byte } type BpfFlowRecordT struct { @@ -115,21 +129,24 @@ type BpfGlobalCountersKeyT uint32 const ( BpfGlobalCountersKeyTHASHMAP_FLOWS_DROPPED BpfGlobalCountersKeyT = 0 - BpfGlobalCountersKeyTFILTER_REJECT BpfGlobalCountersKeyT = 1 - BpfGlobalCountersKeyTFILTER_ACCEPT BpfGlobalCountersKeyT = 2 - BpfGlobalCountersKeyTFILTER_NOMATCH BpfGlobalCountersKeyT = 3 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR BpfGlobalCountersKeyT = 4 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_GROUPID_MISMATCH BpfGlobalCountersKeyT = 5 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_UPDATE_MAP_FLOWS BpfGlobalCountersKeyT = 6 - BpfGlobalCountersKeyTNETWORK_EVENTS_GOOD BpfGlobalCountersKeyT = 7 - BpfGlobalCountersKeyTMAX_COUNTERS BpfGlobalCountersKeyT = 8 + BpfGlobalCountersKeyTHASHMAP_FAIL_UPDATE_DNS BpfGlobalCountersKeyT = 1 + BpfGlobalCountersKeyTFILTER_REJECT BpfGlobalCountersKeyT = 2 + BpfGlobalCountersKeyTFILTER_ACCEPT BpfGlobalCountersKeyT = 3 + BpfGlobalCountersKeyTFILTER_NOMATCH BpfGlobalCountersKeyT = 4 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR BpfGlobalCountersKeyT = 5 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_GROUPID_MISMATCH BpfGlobalCountersKeyT = 6 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_UPDATE_MAP_FLOWS BpfGlobalCountersKeyT = 7 + BpfGlobalCountersKeyTNETWORK_EVENTS_GOOD BpfGlobalCountersKeyT = 8 + BpfGlobalCountersKeyTMAX_COUNTERS BpfGlobalCountersKeyT = 9 ) type BpfPktDropsT struct { Packets uint32 + _ [4]byte Bytes uint64 LatestFlags uint16 LatestState uint8 + _ [1]byte LatestDropCause uint32 } @@ -149,6 +166,16 @@ const ( BpfTcpFlagsTRST_ACK_FLAG BpfTcpFlagsT = 1024 ) +type BpfTranslatedFlowT struct { + Saddr [16]uint8 + Daddr [16]uint8 + Sport uint16 + Dport uint16 + ZoneId uint16 + IcmpId uint8 + _ [1]byte +} + // LoadBpf returns the embedded CollectionSpec for Bpf. func LoadBpf() (*ebpf.CollectionSpec, error) { reader := bytes.NewReader(_BpfBytes) @@ -202,18 +229,20 @@ type BpfProgramSpecs struct { TcxEgressPcaParse *ebpf.ProgramSpec `ebpf:"tcx_egress_pca_parse"` TcxIngressFlowParse *ebpf.ProgramSpec `ebpf:"tcx_ingress_flow_parse"` TcxIngressPcaParse *ebpf.ProgramSpec `ebpf:"tcx_ingress_pca_parse"` + TrackNatManipPkt *ebpf.ProgramSpec `ebpf:"track_nat_manip_pkt"` } // BpfMapSpecs contains maps before they are loaded into the kernel. // // It can be passed ebpf.CollectionSpec.Assign. type BpfMapSpecs struct { - AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` - DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` - DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` - FilterMap *ebpf.MapSpec `ebpf:"filter_map"` - GlobalCounters *ebpf.MapSpec `ebpf:"global_counters"` - PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` + AdditionalFlowMetrics *ebpf.MapSpec `ebpf:"additional_flow_metrics"` + AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` + DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` + DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` + FilterMap *ebpf.MapSpec `ebpf:"filter_map"` + GlobalCounters *ebpf.MapSpec `ebpf:"global_counters"` + PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` } // BpfObjects contains all objects after they have been loaded into the kernel. @@ -235,16 +264,18 @@ func (o *BpfObjects) Close() error { // // It can be passed to LoadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. type BpfMaps struct { - AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` - DirectFlows *ebpf.Map `ebpf:"direct_flows"` - DnsFlows *ebpf.Map `ebpf:"dns_flows"` - FilterMap *ebpf.Map `ebpf:"filter_map"` - GlobalCounters *ebpf.Map `ebpf:"global_counters"` - PacketRecord *ebpf.Map `ebpf:"packet_record"` + AdditionalFlowMetrics *ebpf.Map `ebpf:"additional_flow_metrics"` + AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` + DirectFlows *ebpf.Map `ebpf:"direct_flows"` + DnsFlows *ebpf.Map `ebpf:"dns_flows"` + FilterMap *ebpf.Map `ebpf:"filter_map"` + GlobalCounters *ebpf.Map `ebpf:"global_counters"` + PacketRecord *ebpf.Map `ebpf:"packet_record"` } func (m *BpfMaps) Close() error { return _BpfClose( + m.AdditionalFlowMetrics, m.AggregatedFlows, m.DirectFlows, m.DnsFlows, @@ -270,6 +301,7 @@ type BpfPrograms struct { TcxEgressPcaParse *ebpf.Program `ebpf:"tcx_egress_pca_parse"` TcxIngressFlowParse *ebpf.Program `ebpf:"tcx_ingress_flow_parse"` TcxIngressPcaParse *ebpf.Program `ebpf:"tcx_ingress_pca_parse"` + TrackNatManipPkt *ebpf.Program `ebpf:"track_nat_manip_pkt"` } func (p *BpfPrograms) Close() error { @@ -286,6 +318,7 @@ func (p *BpfPrograms) Close() error { p.TcxEgressPcaParse, p.TcxIngressFlowParse, p.TcxIngressPcaParse, + p.TrackNatManipPkt, ) } diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_powerpc_bpfel.o b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_powerpc_bpfel.o index b2b546195..087ea3c7e 100644 Binary files a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_powerpc_bpfel.o and b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_powerpc_bpfel.o differ diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_s390_bpfeb.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_s390_bpfeb.go index 1a2f37054..f4d675f49 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_s390_bpfeb.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_s390_bpfeb.go @@ -12,6 +12,17 @@ import ( "github.com/cilium/ebpf" ) +type BpfAdditionalMetrics struct { + DnsRecord BpfDnsRecordT + PktDrops BpfPktDropsT + FlowRtt uint64 + NetworkEventsIdx uint8 + NetworkEvents [4][8]uint8 + _ [1]byte + TranslatedFlow BpfTranslatedFlowT + _ [6]byte +} + type BpfDirectionT uint32 const ( @@ -27,13 +38,16 @@ type BpfDnsFlowId struct { DstIp [16]uint8 Id uint16 Protocol uint8 + _ [1]byte } type BpfDnsRecordT struct { Id uint16 Flags uint16 + _ [4]byte Latency uint64 Errno uint8 + _ [7]byte } type BpfFilterActionT uint32 @@ -75,35 +89,35 @@ type BpfFilterValueT struct { type BpfFlowId BpfFlowIdT type BpfFlowIdT struct { - EthProtocol uint16 Direction uint8 - SrcMac [6]uint8 - DstMac [6]uint8 SrcIp [16]uint8 DstIp [16]uint8 + _ [1]byte SrcPort uint16 DstPort uint16 TransportProtocol uint8 IcmpType uint8 IcmpCode uint8 + _ [3]byte IfIndex uint32 } type BpfFlowMetrics BpfFlowMetricsT type BpfFlowMetricsT struct { - Packets uint32 - Bytes uint64 - StartMonoTimeTs uint64 - EndMonoTimeTs uint64 - Flags uint16 - Errno uint8 - Dscp uint8 - PktDrops BpfPktDropsT - DnsRecord BpfDnsRecordT - FlowRtt uint64 - NetworkEventsIdx uint8 - NetworkEvents [4][8]uint8 + Lock struct{ Val uint32 } + EthProtocol uint16 + SrcMac [6]uint8 + DstMac [6]uint8 + _ [2]byte + Packets uint32 + Bytes uint64 + StartMonoTimeTs uint64 + EndMonoTimeTs uint64 + Flags uint16 + Errno uint8 + Dscp uint8 + _ [4]byte } type BpfFlowRecordT struct { @@ -115,21 +129,24 @@ type BpfGlobalCountersKeyT uint32 const ( BpfGlobalCountersKeyTHASHMAP_FLOWS_DROPPED BpfGlobalCountersKeyT = 0 - BpfGlobalCountersKeyTFILTER_REJECT BpfGlobalCountersKeyT = 1 - BpfGlobalCountersKeyTFILTER_ACCEPT BpfGlobalCountersKeyT = 2 - BpfGlobalCountersKeyTFILTER_NOMATCH BpfGlobalCountersKeyT = 3 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR BpfGlobalCountersKeyT = 4 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_GROUPID_MISMATCH BpfGlobalCountersKeyT = 5 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_UPDATE_MAP_FLOWS BpfGlobalCountersKeyT = 6 - BpfGlobalCountersKeyTNETWORK_EVENTS_GOOD BpfGlobalCountersKeyT = 7 - BpfGlobalCountersKeyTMAX_COUNTERS BpfGlobalCountersKeyT = 8 + BpfGlobalCountersKeyTHASHMAP_FAIL_UPDATE_DNS BpfGlobalCountersKeyT = 1 + BpfGlobalCountersKeyTFILTER_REJECT BpfGlobalCountersKeyT = 2 + BpfGlobalCountersKeyTFILTER_ACCEPT BpfGlobalCountersKeyT = 3 + BpfGlobalCountersKeyTFILTER_NOMATCH BpfGlobalCountersKeyT = 4 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR BpfGlobalCountersKeyT = 5 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_GROUPID_MISMATCH BpfGlobalCountersKeyT = 6 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_UPDATE_MAP_FLOWS BpfGlobalCountersKeyT = 7 + BpfGlobalCountersKeyTNETWORK_EVENTS_GOOD BpfGlobalCountersKeyT = 8 + BpfGlobalCountersKeyTMAX_COUNTERS BpfGlobalCountersKeyT = 9 ) type BpfPktDropsT struct { Packets uint32 + _ [4]byte Bytes uint64 LatestFlags uint16 LatestState uint8 + _ [1]byte LatestDropCause uint32 } @@ -149,6 +166,16 @@ const ( BpfTcpFlagsTRST_ACK_FLAG BpfTcpFlagsT = 1024 ) +type BpfTranslatedFlowT struct { + Saddr [16]uint8 + Daddr [16]uint8 + Sport uint16 + Dport uint16 + ZoneId uint16 + IcmpId uint8 + _ [1]byte +} + // LoadBpf returns the embedded CollectionSpec for Bpf. func LoadBpf() (*ebpf.CollectionSpec, error) { reader := bytes.NewReader(_BpfBytes) @@ -202,18 +229,20 @@ type BpfProgramSpecs struct { TcxEgressPcaParse *ebpf.ProgramSpec `ebpf:"tcx_egress_pca_parse"` TcxIngressFlowParse *ebpf.ProgramSpec `ebpf:"tcx_ingress_flow_parse"` TcxIngressPcaParse *ebpf.ProgramSpec `ebpf:"tcx_ingress_pca_parse"` + TrackNatManipPkt *ebpf.ProgramSpec `ebpf:"track_nat_manip_pkt"` } // BpfMapSpecs contains maps before they are loaded into the kernel. // // It can be passed ebpf.CollectionSpec.Assign. type BpfMapSpecs struct { - AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` - DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` - DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` - FilterMap *ebpf.MapSpec `ebpf:"filter_map"` - GlobalCounters *ebpf.MapSpec `ebpf:"global_counters"` - PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` + AdditionalFlowMetrics *ebpf.MapSpec `ebpf:"additional_flow_metrics"` + AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` + DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` + DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` + FilterMap *ebpf.MapSpec `ebpf:"filter_map"` + GlobalCounters *ebpf.MapSpec `ebpf:"global_counters"` + PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` } // BpfObjects contains all objects after they have been loaded into the kernel. @@ -235,16 +264,18 @@ func (o *BpfObjects) Close() error { // // It can be passed to LoadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. type BpfMaps struct { - AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` - DirectFlows *ebpf.Map `ebpf:"direct_flows"` - DnsFlows *ebpf.Map `ebpf:"dns_flows"` - FilterMap *ebpf.Map `ebpf:"filter_map"` - GlobalCounters *ebpf.Map `ebpf:"global_counters"` - PacketRecord *ebpf.Map `ebpf:"packet_record"` + AdditionalFlowMetrics *ebpf.Map `ebpf:"additional_flow_metrics"` + AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` + DirectFlows *ebpf.Map `ebpf:"direct_flows"` + DnsFlows *ebpf.Map `ebpf:"dns_flows"` + FilterMap *ebpf.Map `ebpf:"filter_map"` + GlobalCounters *ebpf.Map `ebpf:"global_counters"` + PacketRecord *ebpf.Map `ebpf:"packet_record"` } func (m *BpfMaps) Close() error { return _BpfClose( + m.AdditionalFlowMetrics, m.AggregatedFlows, m.DirectFlows, m.DnsFlows, @@ -270,6 +301,7 @@ type BpfPrograms struct { TcxEgressPcaParse *ebpf.Program `ebpf:"tcx_egress_pca_parse"` TcxIngressFlowParse *ebpf.Program `ebpf:"tcx_ingress_flow_parse"` TcxIngressPcaParse *ebpf.Program `ebpf:"tcx_ingress_pca_parse"` + TrackNatManipPkt *ebpf.Program `ebpf:"track_nat_manip_pkt"` } func (p *BpfPrograms) Close() error { @@ -286,6 +318,7 @@ func (p *BpfPrograms) Close() error { p.TcxEgressPcaParse, p.TcxIngressFlowParse, p.TcxIngressPcaParse, + p.TrackNatManipPkt, ) } diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_s390_bpfeb.o b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_s390_bpfeb.o index 89ab5f025..d69946175 100644 Binary files a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_s390_bpfeb.o and b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_s390_bpfeb.o differ diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_x86_bpfel.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_x86_bpfel.go index 60983c2d4..41d1cacb4 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_x86_bpfel.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_x86_bpfel.go @@ -12,6 +12,17 @@ import ( "github.com/cilium/ebpf" ) +type BpfAdditionalMetrics struct { + DnsRecord BpfDnsRecordT + PktDrops BpfPktDropsT + FlowRtt uint64 + NetworkEventsIdx uint8 + NetworkEvents [4][8]uint8 + _ [1]byte + TranslatedFlow BpfTranslatedFlowT + _ [6]byte +} + type BpfDirectionT uint32 const ( @@ -27,13 +38,16 @@ type BpfDnsFlowId struct { DstIp [16]uint8 Id uint16 Protocol uint8 + _ [1]byte } type BpfDnsRecordT struct { Id uint16 Flags uint16 + _ [4]byte Latency uint64 Errno uint8 + _ [7]byte } type BpfFilterActionT uint32 @@ -75,35 +89,35 @@ type BpfFilterValueT struct { type BpfFlowId BpfFlowIdT type BpfFlowIdT struct { - EthProtocol uint16 Direction uint8 - SrcMac [6]uint8 - DstMac [6]uint8 SrcIp [16]uint8 DstIp [16]uint8 + _ [1]byte SrcPort uint16 DstPort uint16 TransportProtocol uint8 IcmpType uint8 IcmpCode uint8 + _ [3]byte IfIndex uint32 } type BpfFlowMetrics BpfFlowMetricsT type BpfFlowMetricsT struct { - Packets uint32 - Bytes uint64 - StartMonoTimeTs uint64 - EndMonoTimeTs uint64 - Flags uint16 - Errno uint8 - Dscp uint8 - PktDrops BpfPktDropsT - DnsRecord BpfDnsRecordT - FlowRtt uint64 - NetworkEventsIdx uint8 - NetworkEvents [4][8]uint8 + Lock struct{ Val uint32 } + EthProtocol uint16 + SrcMac [6]uint8 + DstMac [6]uint8 + _ [2]byte + Packets uint32 + Bytes uint64 + StartMonoTimeTs uint64 + EndMonoTimeTs uint64 + Flags uint16 + Errno uint8 + Dscp uint8 + _ [4]byte } type BpfFlowRecordT struct { @@ -115,21 +129,24 @@ type BpfGlobalCountersKeyT uint32 const ( BpfGlobalCountersKeyTHASHMAP_FLOWS_DROPPED BpfGlobalCountersKeyT = 0 - BpfGlobalCountersKeyTFILTER_REJECT BpfGlobalCountersKeyT = 1 - BpfGlobalCountersKeyTFILTER_ACCEPT BpfGlobalCountersKeyT = 2 - BpfGlobalCountersKeyTFILTER_NOMATCH BpfGlobalCountersKeyT = 3 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR BpfGlobalCountersKeyT = 4 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_GROUPID_MISMATCH BpfGlobalCountersKeyT = 5 - BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_UPDATE_MAP_FLOWS BpfGlobalCountersKeyT = 6 - BpfGlobalCountersKeyTNETWORK_EVENTS_GOOD BpfGlobalCountersKeyT = 7 - BpfGlobalCountersKeyTMAX_COUNTERS BpfGlobalCountersKeyT = 8 + BpfGlobalCountersKeyTHASHMAP_FAIL_UPDATE_DNS BpfGlobalCountersKeyT = 1 + BpfGlobalCountersKeyTFILTER_REJECT BpfGlobalCountersKeyT = 2 + BpfGlobalCountersKeyTFILTER_ACCEPT BpfGlobalCountersKeyT = 3 + BpfGlobalCountersKeyTFILTER_NOMATCH BpfGlobalCountersKeyT = 4 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR BpfGlobalCountersKeyT = 5 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_GROUPID_MISMATCH BpfGlobalCountersKeyT = 6 + BpfGlobalCountersKeyTNETWORK_EVENTS_ERR_UPDATE_MAP_FLOWS BpfGlobalCountersKeyT = 7 + BpfGlobalCountersKeyTNETWORK_EVENTS_GOOD BpfGlobalCountersKeyT = 8 + BpfGlobalCountersKeyTMAX_COUNTERS BpfGlobalCountersKeyT = 9 ) type BpfPktDropsT struct { Packets uint32 + _ [4]byte Bytes uint64 LatestFlags uint16 LatestState uint8 + _ [1]byte LatestDropCause uint32 } @@ -149,6 +166,16 @@ const ( BpfTcpFlagsTRST_ACK_FLAG BpfTcpFlagsT = 1024 ) +type BpfTranslatedFlowT struct { + Saddr [16]uint8 + Daddr [16]uint8 + Sport uint16 + Dport uint16 + ZoneId uint16 + IcmpId uint8 + _ [1]byte +} + // LoadBpf returns the embedded CollectionSpec for Bpf. func LoadBpf() (*ebpf.CollectionSpec, error) { reader := bytes.NewReader(_BpfBytes) @@ -202,18 +229,20 @@ type BpfProgramSpecs struct { TcxEgressPcaParse *ebpf.ProgramSpec `ebpf:"tcx_egress_pca_parse"` TcxIngressFlowParse *ebpf.ProgramSpec `ebpf:"tcx_ingress_flow_parse"` TcxIngressPcaParse *ebpf.ProgramSpec `ebpf:"tcx_ingress_pca_parse"` + TrackNatManipPkt *ebpf.ProgramSpec `ebpf:"track_nat_manip_pkt"` } // BpfMapSpecs contains maps before they are loaded into the kernel. // // It can be passed ebpf.CollectionSpec.Assign. type BpfMapSpecs struct { - AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` - DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` - DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` - FilterMap *ebpf.MapSpec `ebpf:"filter_map"` - GlobalCounters *ebpf.MapSpec `ebpf:"global_counters"` - PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` + AdditionalFlowMetrics *ebpf.MapSpec `ebpf:"additional_flow_metrics"` + AggregatedFlows *ebpf.MapSpec `ebpf:"aggregated_flows"` + DirectFlows *ebpf.MapSpec `ebpf:"direct_flows"` + DnsFlows *ebpf.MapSpec `ebpf:"dns_flows"` + FilterMap *ebpf.MapSpec `ebpf:"filter_map"` + GlobalCounters *ebpf.MapSpec `ebpf:"global_counters"` + PacketRecord *ebpf.MapSpec `ebpf:"packet_record"` } // BpfObjects contains all objects after they have been loaded into the kernel. @@ -235,16 +264,18 @@ func (o *BpfObjects) Close() error { // // It can be passed to LoadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. type BpfMaps struct { - AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` - DirectFlows *ebpf.Map `ebpf:"direct_flows"` - DnsFlows *ebpf.Map `ebpf:"dns_flows"` - FilterMap *ebpf.Map `ebpf:"filter_map"` - GlobalCounters *ebpf.Map `ebpf:"global_counters"` - PacketRecord *ebpf.Map `ebpf:"packet_record"` + AdditionalFlowMetrics *ebpf.Map `ebpf:"additional_flow_metrics"` + AggregatedFlows *ebpf.Map `ebpf:"aggregated_flows"` + DirectFlows *ebpf.Map `ebpf:"direct_flows"` + DnsFlows *ebpf.Map `ebpf:"dns_flows"` + FilterMap *ebpf.Map `ebpf:"filter_map"` + GlobalCounters *ebpf.Map `ebpf:"global_counters"` + PacketRecord *ebpf.Map `ebpf:"packet_record"` } func (m *BpfMaps) Close() error { return _BpfClose( + m.AdditionalFlowMetrics, m.AggregatedFlows, m.DirectFlows, m.DnsFlows, @@ -270,6 +301,7 @@ type BpfPrograms struct { TcxEgressPcaParse *ebpf.Program `ebpf:"tcx_egress_pca_parse"` TcxIngressFlowParse *ebpf.Program `ebpf:"tcx_ingress_flow_parse"` TcxIngressPcaParse *ebpf.Program `ebpf:"tcx_ingress_pca_parse"` + TrackNatManipPkt *ebpf.Program `ebpf:"track_nat_manip_pkt"` } func (p *BpfPrograms) Close() error { @@ -286,6 +318,7 @@ func (p *BpfPrograms) Close() error { p.TcxEgressPcaParse, p.TcxIngressFlowParse, p.TcxIngressPcaParse, + p.TrackNatManipPkt, ) } diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_x86_bpfel.o b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_x86_bpfel.o index 426917b9a..d598f0dac 100644 Binary files a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_x86_bpfel.o and b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/bpf_x86_bpfel.o differ diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/gen.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/gen.go index a21e44a88..3ec45b49c 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/gen.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf/gen.go @@ -1,4 +1,4 @@ package ebpf // $BPF_CLANG and $BPF_CFLAGS are set by the Makefile. -//go:generate bpf2go -cc $BPF_CLANG -cflags $BPF_CFLAGS -target amd64,arm64,ppc64le,s390x -type flow_metrics_t -type flow_id_t -type flow_record_t -type pkt_drops_t -type dns_record_t -type global_counters_key_t -type direction_t -type filter_action_t -type tcp_flags_t Bpf ../../bpf/flows.c -- -I../../bpf/headers +//go:generate bpf2go -cc $BPF_CLANG -cflags $BPF_CFLAGS -target amd64,arm64,ppc64le,s390x -type flow_metrics_t -type flow_id_t -type flow_record_t -type pkt_drops_t -type dns_record_t -type global_counters_key_t -type direction_t -type filter_action_t -type tcp_flags_t -type translated_flow_t Bpf ../../bpf/flows.c -- -I../../bpf/headers diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/model/flow_content.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/model/flow_content.go new file mode 100644 index 000000000..2fe8ce220 --- /dev/null +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/model/flow_content.go @@ -0,0 +1,107 @@ +package model + +import "github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf" + +type BpfFlowContent struct { + *ebpf.BpfFlowMetrics + AdditionalMetrics *ebpf.BpfAdditionalMetrics +} + +type BpfFlowContents []BpfFlowContent + +func (a *BpfFlowContents) Accumulate() BpfFlowContent { + res := BpfFlowContent{} + for _, p := range *a { + res.AccumulateBase(p.BpfFlowMetrics) + res.AccumulateAdditional(p.AdditionalMetrics) + } + return res +} + +func (p *BpfFlowContent) AccumulateBase(other *ebpf.BpfFlowMetrics) { + p.BpfFlowMetrics = AccumulateBase(p.BpfFlowMetrics, other) +} + +func AccumulateBase(p *ebpf.BpfFlowMetrics, other *ebpf.BpfFlowMetrics) *ebpf.BpfFlowMetrics { + if other == nil { + return p + } + if p == nil { + return other + } + // time == 0 if the value has not been yet set + if p.StartMonoTimeTs == 0 || (p.StartMonoTimeTs > other.StartMonoTimeTs && other.StartMonoTimeTs != 0) { + p.StartMonoTimeTs = other.StartMonoTimeTs + } + if p.EndMonoTimeTs == 0 || p.EndMonoTimeTs < other.EndMonoTimeTs { + p.EndMonoTimeTs = other.EndMonoTimeTs + } + p.Bytes += other.Bytes + p.Packets += other.Packets + p.Flags |= other.Flags + if other.EthProtocol != 0 { + p.EthProtocol = other.EthProtocol + } + if allZerosMac(p.SrcMac) { + p.SrcMac = other.SrcMac + } + if allZerosMac(p.DstMac) { + p.DstMac = other.DstMac + } + if other.Dscp != 0 { + p.Dscp = other.Dscp + } + return p +} + +func (p *BpfFlowContent) AccumulateAdditional(other *ebpf.BpfAdditionalMetrics) { + if other == nil { + return + } + if p.AdditionalMetrics == nil { + p.AdditionalMetrics = other + return + } + // DNS + p.AdditionalMetrics.DnsRecord.Flags |= other.DnsRecord.Flags + if other.DnsRecord.Id != 0 { + p.AdditionalMetrics.DnsRecord.Id = other.DnsRecord.Id + } + if p.AdditionalMetrics.DnsRecord.Errno != other.DnsRecord.Errno { + p.AdditionalMetrics.DnsRecord.Errno = other.DnsRecord.Errno + } + if p.AdditionalMetrics.DnsRecord.Latency < other.DnsRecord.Latency { + p.AdditionalMetrics.DnsRecord.Latency = other.DnsRecord.Latency + } + // Drop statistics + p.AdditionalMetrics.PktDrops.Bytes += other.PktDrops.Bytes + p.AdditionalMetrics.PktDrops.Packets += other.PktDrops.Packets + p.AdditionalMetrics.PktDrops.LatestFlags |= other.PktDrops.LatestFlags + if other.PktDrops.LatestDropCause != 0 { + p.AdditionalMetrics.PktDrops.LatestDropCause = other.PktDrops.LatestDropCause + } + // RTT + if p.AdditionalMetrics.FlowRtt < other.FlowRtt { + p.AdditionalMetrics.FlowRtt = other.FlowRtt + } + // Network events + for _, md := range other.NetworkEvents { + if !AllZerosMetaData(md) && !networkEventsMDExist(p.AdditionalMetrics.NetworkEvents, md) { + copy(p.AdditionalMetrics.NetworkEvents[p.AdditionalMetrics.NetworkEventsIdx][:], md[:]) + p.AdditionalMetrics.NetworkEventsIdx = (p.AdditionalMetrics.NetworkEventsIdx + 1) % MaxNetworkEvents + } + } + // Packet Translations + if !AllZeroIP(IP(other.TranslatedFlow.Saddr)) && !AllZeroIP(IP(other.TranslatedFlow.Daddr)) { + p.AdditionalMetrics.TranslatedFlow = other.TranslatedFlow + } +} + +func allZerosMac(s [6]uint8) bool { + for _, v := range s { + if v != 0 { + return false + } + } + return true +} diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/model/record.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/model/record.go index ed0cc4f3d..8f6b83230 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/model/record.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/model/record.go @@ -22,8 +22,8 @@ const MacLen = 6 // IPv4Type / IPv6Type value as defined in IEEE 802: https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml const ( IPv6Type = 0x86DD - networkEventsMaxEventsMD = 8 - maxNetworkEvents = 4 + NetworkEventsMaxEventsMD = 8 + MaxNetworkEvents = 4 ) type HumanBytes uint64 @@ -41,7 +41,9 @@ type RawRecord ebpf.BpfFlowRecordT // Record contains accumulated metrics from a flow type Record struct { - RawRecord + ID ebpf.BpfFlowId + Metrics BpfFlowContent + // TODO: redundant field from RecordMetrics. Reorganize structs TimeFlowStart time.Time TimeFlowEnd time.Time @@ -65,7 +67,7 @@ type Record struct { func NewRecord( key ebpf.BpfFlowId, - metrics *ebpf.BpfFlowMetrics, + metrics *BpfFlowContent, currentTime time.Time, monotonicCurrentTime uint64, ) *Record { @@ -73,71 +75,25 @@ func NewRecord( endDelta := time.Duration(monotonicCurrentTime - metrics.EndMonoTimeTs) var record = Record{ - RawRecord: RawRecord{ - Id: key, - Metrics: *metrics, - }, + ID: key, + Metrics: *metrics, TimeFlowStart: currentTime.Add(-startDelta), TimeFlowEnd: currentTime.Add(-endDelta), } - if metrics.FlowRtt != 0 { - record.TimeFlowRtt = time.Duration(metrics.FlowRtt) - } - if metrics.DnsRecord.Latency != 0 { - record.DNSLatency = time.Duration(metrics.DnsRecord.Latency) + if metrics.AdditionalMetrics != nil { + if metrics.AdditionalMetrics.FlowRtt != 0 { + record.TimeFlowRtt = time.Duration(metrics.AdditionalMetrics.FlowRtt) + } + if metrics.AdditionalMetrics.DnsRecord.Latency != 0 { + record.DNSLatency = time.Duration(metrics.AdditionalMetrics.DnsRecord.Latency) + } } record.DupList = make([]map[string]uint8, 0) record.NetworkMonitorEventsMD = make([]config.GenericMap, 0) return &record } -func Accumulate(r *ebpf.BpfFlowMetrics, src *ebpf.BpfFlowMetrics) { - // time == 0 if the value has not been yet set - if r.StartMonoTimeTs == 0 || (r.StartMonoTimeTs > src.StartMonoTimeTs && src.StartMonoTimeTs != 0) { - r.StartMonoTimeTs = src.StartMonoTimeTs - } - if r.EndMonoTimeTs == 0 || r.EndMonoTimeTs < src.EndMonoTimeTs { - r.EndMonoTimeTs = src.EndMonoTimeTs - } - r.Bytes += src.Bytes - r.Packets += src.Packets - r.Flags |= src.Flags - // Accumulate Drop statistics - r.PktDrops.Bytes += src.PktDrops.Bytes - r.PktDrops.Packets += src.PktDrops.Packets - r.PktDrops.LatestFlags |= src.PktDrops.LatestFlags - if src.PktDrops.LatestDropCause != 0 { - r.PktDrops.LatestDropCause = src.PktDrops.LatestDropCause - } - // Accumulate DNS - r.DnsRecord.Flags |= src.DnsRecord.Flags - if src.DnsRecord.Id != 0 { - r.DnsRecord.Id = src.DnsRecord.Id - } - if r.DnsRecord.Errno != src.DnsRecord.Errno { - r.DnsRecord.Errno = src.DnsRecord.Errno - } - if r.DnsRecord.Latency < src.DnsRecord.Latency { - r.DnsRecord.Latency = src.DnsRecord.Latency - } - // Accumulate RTT - if r.FlowRtt < src.FlowRtt { - r.FlowRtt = src.FlowRtt - } - // Accumulate DSCP - if src.Dscp != 0 { - r.Dscp = src.Dscp - } - - for _, md := range src.NetworkEvents { - if !AllZerosMetaData(md) && !networkEventsMDExist(r.NetworkEvents, md) { - copy(r.NetworkEvents[r.NetworkEventsIdx][:], md[:]) - r.NetworkEventsIdx = (r.NetworkEventsIdx + 1) % maxNetworkEvents - } - } -} - -func networkEventsMDExist(events [maxNetworkEvents][networkEventsMaxEventsMD]uint8, md [networkEventsMaxEventsMD]uint8) bool { +func networkEventsMDExist(events [MaxNetworkEvents][NetworkEventsMaxEventsMD]uint8, md [NetworkEventsMaxEventsMD]uint8) bool { for _, e := range events { if reflect.DeepEqual(e, md) { return true @@ -184,7 +140,7 @@ func ReadFrom(reader io.Reader) (*RawRecord, error) { return &fr, err } -func AllZerosMetaData(s [networkEventsMaxEventsMD]uint8) bool { +func AllZerosMetaData(s [NetworkEventsMaxEventsMD]uint8) bool { for _, v := range s { if v != 0 { return false @@ -192,3 +148,10 @@ func AllZerosMetaData(s [networkEventsMaxEventsMD]uint8) bool { } return true } + +func AllZeroIP(ip net.IP) bool { + if ip.Equal(net.IPv4zero) || ip.Equal(net.IPv6zero) { + return true + } + return false +} diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/pbflow/flow.pb.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/pbflow/flow.pb.go index 57781b2e9..56341051a 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/pbflow/flow.pb.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/pbflow/flow.pb.go @@ -288,6 +288,7 @@ type Record struct { DnsErrno uint32 `protobuf:"varint,25,opt,name=dns_errno,json=dnsErrno,proto3" json:"dns_errno,omitempty"` DupList []*DupMapEntry `protobuf:"bytes,26,rep,name=dup_list,json=dupList,proto3" json:"dup_list,omitempty"` NetworkEventsMetadata []*NetworkEvent `protobuf:"bytes,27,rep,name=network_events_metadata,json=networkEventsMetadata,proto3" json:"network_events_metadata,omitempty"` + Xlat *Xlat `protobuf:"bytes,28,opt,name=xlat,proto3" json:"xlat,omitempty"` } func (x *Record) Reset() { @@ -509,6 +510,13 @@ func (x *Record) GetNetworkEventsMetadata() []*NetworkEvent { return nil } +func (x *Record) GetXlat() *Xlat { + if x != nil { + return x.Xlat + } + return nil +} + type DataLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -765,6 +773,91 @@ func (x *Transport) GetProtocol() uint32 { return 0 } +type Xlat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SrcAddr *IP `protobuf:"bytes,1,opt,name=src_addr,json=srcAddr,proto3" json:"src_addr,omitempty"` + DstAddr *IP `protobuf:"bytes,2,opt,name=dst_addr,json=dstAddr,proto3" json:"dst_addr,omitempty"` + SrcPort uint32 `protobuf:"varint,3,opt,name=src_port,json=srcPort,proto3" json:"src_port,omitempty"` + DstPort uint32 `protobuf:"varint,4,opt,name=dst_port,json=dstPort,proto3" json:"dst_port,omitempty"` + ZoneId uint32 `protobuf:"varint,5,opt,name=zone_id,json=zoneId,proto3" json:"zone_id,omitempty"` + IcmpId uint32 `protobuf:"varint,7,opt,name=icmp_id,json=icmpId,proto3" json:"icmp_id,omitempty"` +} + +func (x *Xlat) Reset() { + *x = Xlat{} + mi := &file_proto_flow_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Xlat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Xlat) ProtoMessage() {} + +func (x *Xlat) ProtoReflect() protoreflect.Message { + mi := &file_proto_flow_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Xlat.ProtoReflect.Descriptor instead. +func (*Xlat) Descriptor() ([]byte, []int) { + return file_proto_flow_proto_rawDescGZIP(), []int{9} +} + +func (x *Xlat) GetSrcAddr() *IP { + if x != nil { + return x.SrcAddr + } + return nil +} + +func (x *Xlat) GetDstAddr() *IP { + if x != nil { + return x.DstAddr + } + return nil +} + +func (x *Xlat) GetSrcPort() uint32 { + if x != nil { + return x.SrcPort + } + return 0 +} + +func (x *Xlat) GetDstPort() uint32 { + if x != nil { + return x.DstPort + } + return 0 +} + +func (x *Xlat) GetZoneId() uint32 { + if x != nil { + return x.ZoneId + } + return 0 +} + +func (x *Xlat) GetIcmpId() uint32 { + if x != nil { + return x.IcmpId + } + return 0 +} + var File_proto_flow_proto protoreflect.FileDescriptor var file_proto_flow_proto_rawDesc = []byte{ @@ -792,7 +885,7 @@ var file_proto_flow_proto_rawDesc = []byte{ 0x76, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8a, 0x09, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xac, 0x09, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x2f, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, @@ -865,35 +958,49 @@ var file_proto_flow_proto_rawDesc = []byte{ 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x15, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x3c, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x6e, 0x6b, 0x12, - 0x17, 0x0a, 0x07, 0x73, 0x72, 0x63, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x73, 0x72, 0x63, 0x4d, 0x61, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x73, 0x74, 0x5f, - 0x6d, 0x61, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x64, 0x73, 0x74, 0x4d, 0x61, - 0x63, 0x22, 0x6b, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x25, 0x0a, 0x08, - 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, - 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x50, 0x52, 0x07, 0x73, 0x72, 0x63, 0x41, - 0x64, 0x64, 0x72, 0x12, 0x25, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, - 0x50, 0x52, 0x07, 0x64, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x73, - 0x63, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, 0x73, 0x63, 0x70, 0x22, 0x3d, - 0x0a, 0x02, 0x49, 0x50, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x07, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, - 0x76, 0x36, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, - 0x42, 0x0b, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0x5d, 0x0a, - 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x72, - 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x72, - 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x72, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2a, 0x24, 0x0a, 0x09, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x47, - 0x52, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x47, 0x52, 0x45, 0x53, 0x53, - 0x10, 0x01, 0x32, 0x3e, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, - 0x31, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x04, 0x78, 0x6c, 0x61, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x58, 0x6c, 0x61, 0x74, 0x52, + 0x04, 0x78, 0x6c, 0x61, 0x74, 0x22, 0x3c, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x6e, + 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x72, 0x63, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x73, 0x72, 0x63, 0x4d, 0x61, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x73, + 0x74, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x64, 0x73, 0x74, + 0x4d, 0x61, 0x63, 0x22, 0x6b, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x25, + 0x0a, 0x08, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x50, 0x52, 0x07, 0x73, 0x72, + 0x63, 0x41, 0x64, 0x64, 0x72, 0x12, 0x25, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x49, 0x50, 0x52, 0x07, 0x64, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x73, 0x63, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, 0x73, 0x63, 0x70, + 0x22, 0x3d, 0x0a, 0x02, 0x49, 0x50, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x14, 0x0a, 0x04, + 0x69, 0x70, 0x76, 0x36, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, + 0x76, 0x36, 0x42, 0x0b, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, + 0x5d, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x72, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x73, 0x72, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x73, 0x74, 0x50, 0x6f, + 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0xbc, + 0x01, 0x0a, 0x04, 0x58, 0x6c, 0x61, 0x74, 0x12, 0x25, 0x0a, 0x08, 0x73, 0x72, 0x63, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x49, 0x50, 0x52, 0x07, 0x73, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x12, 0x25, + 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x50, 0x52, 0x07, 0x64, 0x73, + 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x72, 0x63, 0x5f, 0x70, 0x6f, 0x72, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x72, 0x63, 0x50, 0x6f, 0x72, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x64, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x7a, + 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x7a, 0x6f, + 0x6e, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x63, 0x6d, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x63, 0x6d, 0x70, 0x49, 0x64, 0x2a, 0x24, 0x0a, + 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, + 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x10, 0x01, 0x32, 0x3e, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x31, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, + 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -909,7 +1016,7 @@ func file_proto_flow_proto_rawDescGZIP() []byte { } var file_proto_flow_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_proto_flow_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_proto_flow_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_proto_flow_proto_goTypes = []any{ (Direction)(0), // 0: pbflow.Direction (*CollectorReply)(nil), // 1: pbflow.CollectorReply @@ -921,34 +1028,38 @@ var file_proto_flow_proto_goTypes = []any{ (*Network)(nil), // 7: pbflow.Network (*IP)(nil), // 8: pbflow.IP (*Transport)(nil), // 9: pbflow.Transport - nil, // 10: pbflow.NetworkEvent.EventsEntry - (*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 12: google.protobuf.Duration + (*Xlat)(nil), // 10: pbflow.Xlat + nil, // 11: pbflow.NetworkEvent.EventsEntry + (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 13: google.protobuf.Duration } var file_proto_flow_proto_depIdxs = []int32{ 5, // 0: pbflow.Records.entries:type_name -> pbflow.Record 0, // 1: pbflow.DupMapEntry.direction:type_name -> pbflow.Direction - 10, // 2: pbflow.NetworkEvent.events:type_name -> pbflow.NetworkEvent.EventsEntry + 11, // 2: pbflow.NetworkEvent.events:type_name -> pbflow.NetworkEvent.EventsEntry 0, // 3: pbflow.Record.direction:type_name -> pbflow.Direction - 11, // 4: pbflow.Record.time_flow_start:type_name -> google.protobuf.Timestamp - 11, // 5: pbflow.Record.time_flow_end:type_name -> google.protobuf.Timestamp + 12, // 4: pbflow.Record.time_flow_start:type_name -> google.protobuf.Timestamp + 12, // 5: pbflow.Record.time_flow_end:type_name -> google.protobuf.Timestamp 6, // 6: pbflow.Record.data_link:type_name -> pbflow.DataLink 7, // 7: pbflow.Record.network:type_name -> pbflow.Network 9, // 8: pbflow.Record.transport:type_name -> pbflow.Transport 8, // 9: pbflow.Record.agent_ip:type_name -> pbflow.IP - 12, // 10: pbflow.Record.dns_latency:type_name -> google.protobuf.Duration - 12, // 11: pbflow.Record.time_flow_rtt:type_name -> google.protobuf.Duration + 13, // 10: pbflow.Record.dns_latency:type_name -> google.protobuf.Duration + 13, // 11: pbflow.Record.time_flow_rtt:type_name -> google.protobuf.Duration 3, // 12: pbflow.Record.dup_list:type_name -> pbflow.DupMapEntry 4, // 13: pbflow.Record.network_events_metadata:type_name -> pbflow.NetworkEvent - 8, // 14: pbflow.Network.src_addr:type_name -> pbflow.IP - 8, // 15: pbflow.Network.dst_addr:type_name -> pbflow.IP - 2, // 16: pbflow.Collector.Send:input_type -> pbflow.Records - 1, // 17: pbflow.Collector.Send:output_type -> pbflow.CollectorReply - 17, // [17:18] is the sub-list for method output_type - 16, // [16:17] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 10, // 14: pbflow.Record.xlat:type_name -> pbflow.Xlat + 8, // 15: pbflow.Network.src_addr:type_name -> pbflow.IP + 8, // 16: pbflow.Network.dst_addr:type_name -> pbflow.IP + 8, // 17: pbflow.Xlat.src_addr:type_name -> pbflow.IP + 8, // 18: pbflow.Xlat.dst_addr:type_name -> pbflow.IP + 2, // 19: pbflow.Collector.Send:input_type -> pbflow.Records + 1, // 20: pbflow.Collector.Send:output_type -> pbflow.CollectorReply + 20, // [20:21] is the sub-list for method output_type + 19, // [19:20] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_proto_flow_proto_init() } @@ -966,7 +1077,7 @@ func file_proto_flow_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_flow_proto_rawDesc, NumEnums: 1, - NumMessages: 10, + NumMessages: 11, NumExtensions: 0, NumServices: 1, }, diff --git a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/pbflow/proto.go b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/pbflow/proto.go index 147c51d35..68389755d 100644 --- a/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/pbflow/proto.go +++ b/vendor/github.com/netobserv/netobserv-ebpf-agent/pkg/pbflow/proto.go @@ -39,22 +39,22 @@ func FlowsToPB(inputRecords []*model.Record, maxLen int, s *ovnobserv.SampleDeco // into a protobuf-encoded message ready to be sent to the collector via kafka func FlowToPB(fr *model.Record, s *ovnobserv.SampleDecoder) *Record { var pbflowRecord = Record{ - EthProtocol: uint32(fr.Id.EthProtocol), - Direction: Direction(fr.Id.Direction), + EthProtocol: uint32(fr.Metrics.EthProtocol), + Direction: Direction(fr.ID.Direction), DataLink: &DataLink{ - SrcMac: macToUint64(&fr.Id.SrcMac), - DstMac: macToUint64(&fr.Id.DstMac), + SrcMac: macToUint64(&fr.Metrics.SrcMac), + DstMac: macToUint64(&fr.Metrics.DstMac), }, Network: &Network{ Dscp: uint32(fr.Metrics.Dscp), }, Transport: &Transport{ - Protocol: uint32(fr.Id.TransportProtocol), - SrcPort: uint32(fr.Id.SrcPort), - DstPort: uint32(fr.Id.DstPort), + Protocol: uint32(fr.ID.TransportProtocol), + SrcPort: uint32(fr.ID.SrcPort), + DstPort: uint32(fr.ID.DstPort), }, - IcmpType: uint32(fr.Id.IcmpType), - IcmpCode: uint32(fr.Id.IcmpCode), + IcmpType: uint32(fr.ID.IcmpType), + IcmpCode: uint32(fr.ID.IcmpCode), Bytes: fr.Metrics.Bytes, TimeFlowStart: ×tamppb.Timestamp{ Seconds: fr.TimeFlowStart.Unix(), @@ -64,23 +64,31 @@ func FlowToPB(fr *model.Record, s *ovnobserv.SampleDecoder) *Record { Seconds: fr.TimeFlowEnd.Unix(), Nanos: int32(fr.TimeFlowEnd.Nanosecond()), }, - Packets: uint64(fr.Metrics.Packets), - Duplicate: fr.Duplicate, - AgentIp: agentIP(fr.AgentIP), - Flags: uint32(fr.Metrics.Flags), - Interface: fr.Interface, - PktDropBytes: fr.Metrics.PktDrops.Bytes, - PktDropPackets: uint64(fr.Metrics.PktDrops.Packets), - PktDropLatestFlags: uint32(fr.Metrics.PktDrops.LatestFlags), - PktDropLatestState: uint32(fr.Metrics.PktDrops.LatestState), - PktDropLatestDropCause: fr.Metrics.PktDrops.LatestDropCause, - DnsId: uint32(fr.Metrics.DnsRecord.Id), - DnsFlags: uint32(fr.Metrics.DnsRecord.Flags), - DnsErrno: uint32(fr.Metrics.DnsRecord.Errno), - TimeFlowRtt: durationpb.New(fr.TimeFlowRtt), + Packets: uint64(fr.Metrics.Packets), + Duplicate: fr.Duplicate, + AgentIp: agentIP(fr.AgentIP), + Flags: uint32(fr.Metrics.Flags), + Interface: fr.Interface, + TimeFlowRtt: durationpb.New(fr.TimeFlowRtt), } - if fr.Metrics.DnsRecord.Latency != 0 { - pbflowRecord.DnsLatency = durationpb.New(fr.DNSLatency) + if fr.Metrics.AdditionalMetrics != nil { + pbflowRecord.PktDropBytes = fr.Metrics.AdditionalMetrics.PktDrops.Bytes + pbflowRecord.PktDropPackets = uint64(fr.Metrics.AdditionalMetrics.PktDrops.Packets) + pbflowRecord.PktDropLatestFlags = uint32(fr.Metrics.AdditionalMetrics.PktDrops.LatestFlags) + pbflowRecord.PktDropLatestState = uint32(fr.Metrics.AdditionalMetrics.PktDrops.LatestState) + pbflowRecord.PktDropLatestDropCause = fr.Metrics.AdditionalMetrics.PktDrops.LatestDropCause + pbflowRecord.DnsId = uint32(fr.Metrics.AdditionalMetrics.DnsRecord.Id) + pbflowRecord.DnsFlags = uint32(fr.Metrics.AdditionalMetrics.DnsRecord.Flags) + pbflowRecord.DnsErrno = uint32(fr.Metrics.AdditionalMetrics.DnsRecord.Errno) + if fr.Metrics.AdditionalMetrics.DnsRecord.Latency != 0 { + pbflowRecord.DnsLatency = durationpb.New(fr.DNSLatency) + } + pbflowRecord.Xlat = &Xlat{ + SrcPort: uint32(fr.Metrics.AdditionalMetrics.TranslatedFlow.Sport), + DstPort: uint32(fr.Metrics.AdditionalMetrics.TranslatedFlow.Dport), + ZoneId: uint32(fr.Metrics.AdditionalMetrics.TranslatedFlow.ZoneId), + IcmpId: uint32(fr.Metrics.AdditionalMetrics.TranslatedFlow.IcmpId), + } } if len(fr.DupList) != 0 { pbflowRecord.DupList = make([]*DupMapEntry, 0) @@ -93,17 +101,25 @@ func FlowToPB(fr *model.Record, s *ovnobserv.SampleDecoder) *Record { } } } - if fr.Id.EthProtocol == model.IPv6Type { - pbflowRecord.Network.SrcAddr = &IP{IpFamily: &IP_Ipv6{Ipv6: fr.Id.SrcIp[:]}} - pbflowRecord.Network.DstAddr = &IP{IpFamily: &IP_Ipv6{Ipv6: fr.Id.DstIp[:]}} + if fr.Metrics.EthProtocol == model.IPv6Type { + pbflowRecord.Network.SrcAddr = &IP{IpFamily: &IP_Ipv6{Ipv6: fr.ID.SrcIp[:]}} + pbflowRecord.Network.DstAddr = &IP{IpFamily: &IP_Ipv6{Ipv6: fr.ID.DstIp[:]}} + if fr.Metrics.AdditionalMetrics != nil { + pbflowRecord.Xlat.SrcAddr = &IP{IpFamily: &IP_Ipv6{Ipv6: fr.Metrics.AdditionalMetrics.TranslatedFlow.Saddr[:]}} + pbflowRecord.Xlat.DstAddr = &IP{IpFamily: &IP_Ipv6{Ipv6: fr.Metrics.AdditionalMetrics.TranslatedFlow.Daddr[:]}} + } } else { - pbflowRecord.Network.SrcAddr = &IP{IpFamily: &IP_Ipv4{Ipv4: model.IntEncodeV4(fr.Id.SrcIp)}} - pbflowRecord.Network.DstAddr = &IP{IpFamily: &IP_Ipv4{Ipv4: model.IntEncodeV4(fr.Id.DstIp)}} + pbflowRecord.Network.SrcAddr = &IP{IpFamily: &IP_Ipv4{Ipv4: model.IntEncodeV4(fr.ID.SrcIp)}} + pbflowRecord.Network.DstAddr = &IP{IpFamily: &IP_Ipv4{Ipv4: model.IntEncodeV4(fr.ID.DstIp)}} + if fr.Metrics.AdditionalMetrics != nil { + pbflowRecord.Xlat.SrcAddr = &IP{IpFamily: &IP_Ipv4{Ipv4: model.IntEncodeV4(fr.Metrics.AdditionalMetrics.TranslatedFlow.Saddr)}} + pbflowRecord.Xlat.DstAddr = &IP{IpFamily: &IP_Ipv4{Ipv4: model.IntEncodeV4(fr.Metrics.AdditionalMetrics.TranslatedFlow.Daddr)}} + } } - if s != nil { + if s != nil && fr.Metrics.AdditionalMetrics != nil { seen := make(map[string]bool) pbflowRecord.NetworkEventsMetadata = make([]*NetworkEvent, 0) - for _, metadata := range fr.Metrics.NetworkEvents { + for _, metadata := range fr.Metrics.AdditionalMetrics.NetworkEvents { var pbEvent NetworkEvent if !model.AllZerosMetaData(metadata) { if md, err := s.DecodeCookie8Bytes(metadata); err == nil { @@ -146,25 +162,27 @@ func PBToFlow(pb *Record) *model.Record { return nil } out := model.Record{ - RawRecord: model.RawRecord{ - Id: ebpf.BpfFlowId{ - Direction: uint8(pb.Direction), - EthProtocol: uint16(pb.EthProtocol), - TransportProtocol: uint8(pb.Transport.Protocol), - SrcMac: macToUint8(pb.DataLink.GetSrcMac()), - DstMac: macToUint8(pb.DataLink.GetDstMac()), - SrcIp: ipToIPAddr(pb.Network.GetSrcAddr()), - DstIp: ipToIPAddr(pb.Network.GetDstAddr()), - SrcPort: uint16(pb.Transport.SrcPort), - DstPort: uint16(pb.Transport.DstPort), - IcmpType: uint8(pb.IcmpType), - IcmpCode: uint8(pb.IcmpCode), + ID: ebpf.BpfFlowId{ + Direction: uint8(pb.Direction), + TransportProtocol: uint8(pb.Transport.Protocol), + SrcIp: ipToIPAddr(pb.Network.GetSrcAddr()), + DstIp: ipToIPAddr(pb.Network.GetDstAddr()), + SrcPort: uint16(pb.Transport.SrcPort), + DstPort: uint16(pb.Transport.DstPort), + IcmpType: uint8(pb.IcmpType), + IcmpCode: uint8(pb.IcmpCode), + }, + Metrics: model.BpfFlowContent{ + BpfFlowMetrics: &ebpf.BpfFlowMetrics{ + EthProtocol: uint16(pb.EthProtocol), + SrcMac: macToUint8(pb.DataLink.GetSrcMac()), + DstMac: macToUint8(pb.DataLink.GetDstMac()), + Bytes: pb.Bytes, + Packets: uint32(pb.Packets), + Flags: uint16(pb.Flags), + Dscp: uint8(pb.Network.Dscp), }, - Metrics: ebpf.BpfFlowMetrics{ - Bytes: pb.Bytes, - Packets: uint32(pb.Packets), - Flags: uint16(pb.Flags), - Dscp: uint8(pb.Network.Dscp), + AdditionalMetrics: &ebpf.BpfAdditionalMetrics{ PktDrops: ebpf.BpfPktDropsT{ Bytes: pb.PktDropBytes, Packets: uint32(pb.PktDropPackets), @@ -178,6 +196,14 @@ func PBToFlow(pb *Record) *model.Record { Errno: uint8(pb.DnsErrno), Latency: uint64(pb.DnsLatency.AsDuration()), }, + TranslatedFlow: ebpf.BpfTranslatedFlowT{ + Saddr: ipToIPAddr(pb.Xlat.GetSrcAddr()), + Daddr: ipToIPAddr(pb.Xlat.GetDstAddr()), + Sport: uint16(pb.Xlat.GetSrcPort()), + Dport: uint16(pb.Xlat.GetDstPort()), + ZoneId: uint16(pb.Xlat.GetZoneId()), + IcmpId: uint8(pb.Xlat.GetIcmpId()), + }, }, }, TimeFlowStart: pb.TimeFlowStart.AsTime(), @@ -206,6 +232,7 @@ func PBToFlow(pb *Record) *model.Record { } protoLog.Debugf("decoded Network events monitor metadata: %v", out.NetworkMonitorEventsMD) } + return &out } diff --git a/vendor/modules.txt b/vendor/modules.txt index 6c8d95fb0..6b0746ba8 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -313,7 +313,7 @@ github.com/netobserv/loki-client-go/pkg/labelutil github.com/netobserv/loki-client-go/pkg/logproto github.com/netobserv/loki-client-go/pkg/metric github.com/netobserv/loki-client-go/pkg/urlutil -# github.com/netobserv/netobserv-ebpf-agent v1.7.0-community.0.20241126155236-02d1817b5770 +# github.com/netobserv/netobserv-ebpf-agent v1.7.0-community.0.20241213131924-a76ccd3fceb0 ## explicit; go 1.22.3 github.com/netobserv/netobserv-ebpf-agent/pkg/decode github.com/netobserv/netobserv-ebpf-agent/pkg/ebpf