util-ebpf: optimization on flow storage queries

pull/3952/head
Eric Leblond 6 years ago committed by Victor Julien
parent 288f335aa5
commit aeb2bd3aa1

@ -574,7 +574,8 @@ void EBPFBypassFree(void *data)
* \return true if entries have activity, false if not * \return true if entries have activity, false if not
*/ */
static bool EBPFBypassCheckHalfFlow(Flow *f, EBPFBypassData *eb, void *key, static bool EBPFBypassCheckHalfFlow(Flow *f, FlowBypassInfo *fc,
EBPFBypassData *eb, void *key,
int index) int index)
{ {
int i; int i;
@ -597,10 +598,6 @@ static bool EBPFBypassCheckHalfFlow(Flow *f, EBPFBypassData *eb, void *key,
pkts_cnt += BPF_PERCPU(values_array, i).packets; pkts_cnt += BPF_PERCPU(values_array, i).packets;
bytes_cnt += BPF_PERCPU(values_array, i).bytes; bytes_cnt += BPF_PERCPU(values_array, i).bytes;
} }
FlowBypassInfo *fc = FlowGetStorageById(f, GetFlowBypassInfoID());
if (fc == NULL) {
return false;
}
if (index == 0) { if (index == 0) {
if (pkts_cnt != fc->todstpktcnt) { if (pkts_cnt != fc->todstpktcnt) {
fc->todstpktcnt = pkts_cnt; fc->todstpktcnt = pkts_cnt;
@ -629,8 +626,12 @@ bool EBPFBypassUpdate(Flow *f, void *data, time_t tsec)
if (eb == NULL) { if (eb == NULL) {
return false; return false;
} }
bool activity = EBPFBypassCheckHalfFlow(f, eb, eb->key[0], 0); FlowBypassInfo *fc = FlowGetStorageById(f, GetFlowBypassInfoID());
activity |= EBPFBypassCheckHalfFlow(f, eb, eb->key[1], 1); if (fc == NULL) {
return false;
}
bool activity = EBPFBypassCheckHalfFlow(f, fc, eb, eb->key[0], 0);
activity |= EBPFBypassCheckHalfFlow(f, fc, eb, eb->key[1], 1);
if (!activity) { if (!activity) {
SCLogDebug("Delete entry: %u (%ld)", FLOW_IS_IPV6(f), FlowGetId(f)); SCLogDebug("Delete entry: %u (%ld)", FLOW_IS_IPV6(f), FlowGetId(f));
/* delete the entries if no time update */ /* delete the entries if no time update */

Loading…
Cancel
Save