return 0;
} else {
SCLogDebug("No new packet, dead flow %ld", FlowGetId(f));
+ if (f->livedev) {
+ if (FLOW_IS_IPV4(f)) {
+ LiveDevAddBypassStats(f->livedev, -1, AF_INET);
+ } else if (FLOW_IS_IPV6(f)) {
+ LiveDevAddBypassStats(f->livedev, -1, AF_INET6);
+ }
+ }
if (counters) {
counters->bypassed_count++;
}
return 0;
}
EBPFUpdateFlow(p->flow, p, NULL);
+ LiveDevAddBypassStats(p->livedev, 1, AF_INET);
return AFPSetFlowStorage(p, p->afp_v.v4_map_fd, keys[0], keys[1]);
}
/* For IPv6 case we don't handle extended header in eBPF */
}
if (p->flow)
EBPFUpdateFlow(p->flow, p, NULL);
+ LiveDevAddBypassStats(p->livedev, 1, AF_INET6);
return AFPSetFlowStorage(p, p->afp_v.v6_map_fd, keys[0], keys[1]);
}
#endif
SCFree(keys[1]);
return 0;
}
+ LiveDevAddBypassStats(p->livedev, 1, AF_INET);
return AFPSetFlowStorage(p, p->afp_v.v4_map_fd, keys[0], keys[1]);
}
/* For IPv6 case we don't handle extended header in eBPF */
SCFree(keys[1]);
return 0;
}
+ LiveDevAddBypassStats(p->livedev, 1, AF_INET6);
return AFPSetFlowStorage(p, p->afp_v.v6_map_fd, keys[0], keys[1]);
}
#endif
}
}
+/**
+ * Modify number of currently bypassed flows for a protocol family
+ *
+ * \param dev pointer to LiveDevice to set stats for
+ * \param cnt number of currently bypassed flows
+ * \param family AF_INET to set IPv4 count or AF_INET6 to set IPv6 count
+ */
+void LiveDevAddBypassStats(LiveDevice *dev, int64_t cnt, int family)
+{
+ BypassInfo *bpfdata = LiveDevGetStorageById(dev, g_bypass_storage_id);
+ if (bpfdata) {
+ if (family == AF_INET) {
+ SC_ATOMIC_ADD(bpfdata->ipv4_hash_count, cnt);
+ } else if (family == AF_INET6) {
+ SC_ATOMIC_ADD(bpfdata->ipv6_hash_count, cnt);
+ }
+ }
+}
+
+
#ifdef BUILD_UNIX_SOCKET
TmEcode LiveDeviceGetBypassedStats(json_t *cmd, json_t *answer, void *data)
{
int LiveRegisterDevice(const char *dev);
int LiveDevUseBypass(LiveDevice *dev);
void LiveDevSetBypassStats(LiveDevice *dev, uint64_t cnt, int family);
+void LiveDevAddBypassStats(LiveDevice *dev, int64_t cnt, int family);
int LiveGetDeviceCount(void);
const char *LiveGetDeviceName(int number);
LiveDevice *LiveGetDevice(const char *dev);