diff --git a/apis/flowcollector/v1beta1/flowcollector_types.go b/apis/flowcollector/v1beta1/flowcollector_types.go index 5683a712a..820d06eb9 100644 --- a/apis/flowcollector/v1beta1/flowcollector_types.go +++ b/apis/flowcollector/v1beta1/flowcollector_types.go @@ -249,6 +249,10 @@ type EBPFFlowFilter struct { // ICMPCode defines the ICMP code to filter flows by. // +optional ICMPCode *int `json:"icmpCode,omitempty"` + + // `pktDrops`, to filter flows with packet drops + // +optional + PktDrops *bool `json:"pktDrops,omitempty"` } // `FlowCollectorEBPF` defines a FlowCollector that uses eBPF to collect the flows information diff --git a/apis/flowcollector/v1beta1/zz_generated.conversion.go b/apis/flowcollector/v1beta1/zz_generated.conversion.go index d606c634f..d46dbe91c 100644 --- a/apis/flowcollector/v1beta1/zz_generated.conversion.go +++ b/apis/flowcollector/v1beta1/zz_generated.conversion.go @@ -498,6 +498,7 @@ func autoConvert_v1beta1_EBPFFlowFilter_To_v1beta2_EBPFFlowFilter(in *EBPFFlowFi out.PeerIP = in.PeerIP out.ICMPType = (*int)(unsafe.Pointer(in.ICMPType)) out.ICMPCode = (*int)(unsafe.Pointer(in.ICMPCode)) + out.PktDrops = (*bool)(unsafe.Pointer(in.PktDrops)) return nil } @@ -519,6 +520,7 @@ func autoConvert_v1beta2_EBPFFlowFilter_To_v1beta1_EBPFFlowFilter(in *v1beta2.EB out.PeerIP = in.PeerIP out.ICMPCode = (*int)(unsafe.Pointer(in.ICMPCode)) out.ICMPType = (*int)(unsafe.Pointer(in.ICMPType)) + out.PktDrops = (*bool)(unsafe.Pointer(in.PktDrops)) return nil } diff --git a/apis/flowcollector/v1beta1/zz_generated.deepcopy.go b/apis/flowcollector/v1beta1/zz_generated.deepcopy.go index 9fea5bb51..2bc3a04b9 100644 --- a/apis/flowcollector/v1beta1/zz_generated.deepcopy.go +++ b/apis/flowcollector/v1beta1/zz_generated.deepcopy.go @@ -143,6 +143,11 @@ func (in *EBPFFlowFilter) DeepCopyInto(out *EBPFFlowFilter) { *out = new(int) **out = **in } + if in.PktDrops != nil { + in, out := &in.PktDrops, &out.PktDrops + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EBPFFlowFilter. diff --git a/apis/flowcollector/v1beta2/flowcollector_types.go b/apis/flowcollector/v1beta2/flowcollector_types.go index 27256500c..8dfea7ac3 100644 --- a/apis/flowcollector/v1beta2/flowcollector_types.go +++ b/apis/flowcollector/v1beta2/flowcollector_types.go @@ -273,6 +273,10 @@ type EBPFFlowFilter struct { // `icmpType`, for ICMP traffic, defines the ICMP type to filter flows by. // +optional ICMPType *int `json:"icmpType,omitempty"` + + // `pktDrops`, to filter flows with packet drops + // +optional + PktDrops *bool `json:"pktDrops,omitempty"` } // `FlowCollectorEBPF` defines a FlowCollector that uses eBPF to collect the flows information diff --git a/apis/flowcollector/v1beta2/zz_generated.deepcopy.go b/apis/flowcollector/v1beta2/zz_generated.deepcopy.go index efd6da675..f4dc8658f 100644 --- a/apis/flowcollector/v1beta2/zz_generated.deepcopy.go +++ b/apis/flowcollector/v1beta2/zz_generated.deepcopy.go @@ -302,6 +302,11 @@ func (in *EBPFFlowFilter) DeepCopyInto(out *EBPFFlowFilter) { *out = new(int) **out = **in } + if in.PktDrops != nil { + in, out := &in.PktDrops, &out.PktDrops + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EBPFFlowFilter. diff --git a/bundle/manifests/flows.netobserv.io_flowcollectors.yaml b/bundle/manifests/flows.netobserv.io_flowcollectors.yaml index b095a89dd..dac8798d1 100644 --- a/bundle/manifests/flows.netobserv.io_flowcollectors.yaml +++ b/bundle/manifests/flows.netobserv.io_flowcollectors.yaml @@ -199,6 +199,10 @@ spec: PeerIP defines the IP address to filter flows by. Example: 10.10.10.10 type: string + pktDrops: + description: '`pktDrops`, to filter flows with packet + drops' + type: boolean ports: anyOf: - type: integer @@ -3792,6 +3796,10 @@ spec: `peerIP` defines the IP address to filter flows by. Example: `10.10.10.10`. type: string + pktDrops: + description: '`pktDrops`, to filter flows with packet + drops' + type: boolean ports: anyOf: - type: integer diff --git a/config/crd/bases/flows.netobserv.io_flowcollectors.yaml b/config/crd/bases/flows.netobserv.io_flowcollectors.yaml index ba0500585..ce5d63409 100644 --- a/config/crd/bases/flows.netobserv.io_flowcollectors.yaml +++ b/config/crd/bases/flows.netobserv.io_flowcollectors.yaml @@ -178,6 +178,9 @@ spec: PeerIP defines the IP address to filter flows by. Example: 10.10.10.10 type: string + pktDrops: + description: '`pktDrops`, to filter flows with packet drops' + type: boolean ports: anyOf: - type: integer @@ -3499,6 +3502,9 @@ spec: `peerIP` defines the IP address to filter flows by. Example: `10.10.10.10`. type: string + pktDrops: + description: '`pktDrops`, to filter flows with packet drops' + type: boolean ports: anyOf: - type: integer diff --git a/controllers/ebpf/agent_controller.go b/controllers/ebpf/agent_controller.go index 3dffad04a..f83d84600 100644 --- a/controllers/ebpf/agent_controller.go +++ b/controllers/ebpf/agent_controller.go @@ -81,6 +81,7 @@ const ( envFilterICMPCode = "FILTER_ICMP_CODE" envFilterPeerIPAddress = "FILTER_PEER_IP" envFilterTCPFlags = "FILTER_TCP_FLAGS" + envFilterPktDrops = "FILTER_DROPS" envListSeparator = "," ) @@ -573,6 +574,9 @@ func (c *AgentController) configureFlowFilter(filter *flowslatest.EBPFFlowFilter }) } + if filter.PktDrops != nil && *filter.PktDrops { + config = append(config, corev1.EnvVar{Name: envFilterPktDrops, Value: "true"}) + } return config } diff --git a/docs/FlowCollector.md b/docs/FlowCollector.md index fdeee6571..f87848390 100644 --- a/docs/FlowCollector.md +++ b/docs/FlowCollector.md @@ -496,6 +496,13 @@ To filter two ports, use a "port1,port2" in string format. For example, `ports: Example: 10.10.10.10
false + + pktDrops + boolean + + `pktDrops`, to filter flows with packet drops
+ + false ports int or string @@ -7911,6 +7918,13 @@ To filter two ports, use a "port1,port2" in string format. For example, `ports: Example: `10.10.10.10`.
false + + pktDrops + boolean + + `pktDrops`, to filter flows with packet drops
+ + false ports int or string