packet: store livedev by id

This commit is contained in:
Victor Julien 2026-04-02 16:42:20 +02:00
parent 293662fc2e
commit 32afba47dd
17 changed files with 68 additions and 62 deletions

View file

@ -185,7 +185,7 @@ static inline void PfringProcessPacket(void *user, struct pfring_pkthdr *h, Pack
ptv->bytes += h->caplen;
ptv->pkts++;
p->livedev = ptv->livedev;
p->livedev_id = LiveDeviceGetId(ptv->livedev);
/* PF_RING may fail to set timestamp */
if (h->ts.tv_sec == 0) {

View file

@ -423,7 +423,7 @@ Packet *PacketTunnelPktSetup(ThreadVars *tv, DecodeThreadVars *dtv, Packet *pare
p->ts = parent->ts;
p->datalink = DLT_RAW;
p->tenant_id = parent->tenant_id;
p->livedev = parent->livedev;
p->livedev_id = parent->livedev_id;
/* set the root ptr to the lowest layer */
if (parent->root != NULL) {
@ -506,7 +506,7 @@ Packet *PacketDefragPktSetup(Packet *parent, const uint8_t *pkt, uint32_t len, u
p->tenant_id = parent->tenant_id;
memcpy(&p->vlan_id[0], &parent->vlan_id[0], sizeof(p->vlan_id));
p->vlan_idx = parent->vlan_idx;
p->livedev = parent->livedev;
p->livedev_id = parent->livedev_id;
SCReturnPtr(p, "Packet");
}

View file

@ -619,7 +619,7 @@ typedef struct Packet_
uint8_t *ext_pkt;
/* Incoming interface */
struct LiveDevice_ *livedev;
uint16_t livedev_id;
PacketAlerts alerts;

View file

@ -4516,7 +4516,7 @@ static uint32_t DetectEngineTenantGetIdFromVlanId(const void *ctx, const Packet
static uint32_t DetectEngineTenantGetIdFromLivedev(const void *ctx, const Packet *p)
{
const DetectEngineThreadCtx *det_ctx = ctx;
const LiveDevice *ld = p->livedev;
const LiveDevice *ld = LiveDeviceGetById(p->livedev_id);
if (ld == NULL || det_ctx == NULL)
return 0;

View file

@ -214,7 +214,7 @@ static inline uint32_t FlowGetHash(const Packet *p)
fhk.recur = p->recursion_level & g_recurlvl_mask;
/* g_livedev_mask sets the livedev ids to 0 if livedev.use-for-tracking
* is disabled. */
uint16_t devid = p->livedev ? p->livedev->id : 0;
uint16_t devid = p->livedev_id;
fhk.livedev = devid & g_livedev_mask;
/* g_vlan_mask sets the vlan_ids to 0 if vlan.use-for-tracking
* is disabled. */
@ -239,7 +239,7 @@ static inline uint32_t FlowGetHash(const Packet *p)
fhk.proto = ICMPV4_GET_EMB_PROTO(p);
fhk.recur = p->recursion_level & g_recurlvl_mask;
uint16_t devid = p->livedev ? p->livedev->id : 0;
uint16_t devid = p->livedev_id;
fhk.livedev = devid & g_livedev_mask;
fhk.vlan_id[0] = p->vlan_id[0] & g_vlan_mask;
fhk.vlan_id[1] = p->vlan_id[1] & g_vlan_mask;
@ -256,7 +256,7 @@ static inline uint32_t FlowGetHash(const Packet *p)
fhk.ports[1] = 0xbeef;
fhk.proto = p->proto;
fhk.recur = p->recursion_level & g_recurlvl_mask;
uint16_t devid = p->livedev ? p->livedev->id : 0;
uint16_t devid = p->livedev_id;
fhk.livedev = devid & g_livedev_mask;
fhk.vlan_id[0] = p->vlan_id[0] & g_vlan_mask;
fhk.vlan_id[1] = p->vlan_id[1] & g_vlan_mask;
@ -291,7 +291,7 @@ static inline uint32_t FlowGetHash(const Packet *p)
fhk.ports[pi] = p->dp;
fhk.proto = p->proto;
fhk.recur = p->recursion_level & g_recurlvl_mask;
uint16_t devid = p->livedev ? p->livedev->id : 0;
uint16_t devid = p->livedev_id;
fhk.livedev = devid & g_livedev_mask;
fhk.vlan_id[0] = p->vlan_id[0] & g_vlan_mask;
fhk.vlan_id[1] = p->vlan_id[1] & g_vlan_mask;
@ -403,13 +403,7 @@ static inline bool CmpVlanIds(
((vlan_id1[2] ^ vlan_id2[2]) & g_vlan_mask) == 0;
}
static inline bool CmpLiveDevIds(const LiveDevice *livedev, const uint16_t id)
{
uint16_t devid = livedev ? livedev->id : 0;
return (((devid ^ id) & g_livedev_mask) == 0);
}
static inline bool CmpLiveDevIds2(const uint16_t id1, const uint16_t id2)
static inline bool CmpLiveDevIds(const uint16_t id1, const uint16_t id2)
{
return (((id1 ^ id2) & g_livedev_mask) == 0);
}
@ -425,7 +419,7 @@ static inline bool CmpFlowPacket(const Flow *f, const Packet *p)
return CmpAddrsAndPorts(f_src, f_dst, f->sp, f->dp, p_src, p_dst, p->sp, p->dp) &&
f->proto == p->proto &&
(f->recursion_level == p->recursion_level || g_recurlvl_mask == 0) &&
CmpVlanIds(f->vlan_id, p->vlan_id) && CmpLiveDevIds(p->livedev, f->livedev_id);
CmpVlanIds(f->vlan_id, p->vlan_id) && CmpLiveDevIds(p->livedev_id, f->livedev_id);
}
static inline bool CmpFlowKey(const Flow *f, const FlowKey *k)
@ -437,7 +431,7 @@ static inline bool CmpFlowKey(const Flow *f, const FlowKey *k)
return CmpAddrsAndPorts(f_src, f_dst, f->sp, f->dp, k_src, k_dst, k->sp, k->dp) &&
f->proto == k->proto &&
(f->recursion_level == k->recursion_level || g_recurlvl_mask == 0) &&
CmpVlanIds(f->vlan_id, k->vlan_id) && CmpLiveDevIds2(f->livedev_id, k->livedev_id);
CmpVlanIds(f->vlan_id, k->vlan_id) && CmpLiveDevIds(f->livedev_id, k->livedev_id);
}
static inline bool CmpAddrsAndICMPTypes(const uint32_t src1[4],
@ -464,7 +458,7 @@ static inline bool CmpFlowICMPPacket(const Flow *f, const Packet *p)
p->icmp_s.type, p->icmp_d.type) &&
f->proto == p->proto &&
(f->recursion_level == p->recursion_level || g_recurlvl_mask == 0) &&
CmpVlanIds(f->vlan_id, p->vlan_id) && CmpLiveDevIds(p->livedev, f->livedev_id);
CmpVlanIds(f->vlan_id, p->vlan_id) && CmpLiveDevIds(p->livedev_id, f->livedev_id);
}
/**
@ -488,7 +482,7 @@ static inline int FlowCompareICMPv4(Flow *f, const Packet *p)
f->sp == p->l4.vars.icmpv4.emb_sport && f->dp == p->l4.vars.icmpv4.emb_dport &&
f->proto == ICMPV4_GET_EMB_PROTO(p) &&
(f->recursion_level == p->recursion_level || g_recurlvl_mask == 0) &&
CmpVlanIds(f->vlan_id, p->vlan_id) && CmpLiveDevIds(p->livedev, f->livedev_id)) {
CmpVlanIds(f->vlan_id, p->vlan_id) && CmpLiveDevIds(p->livedev_id, f->livedev_id)) {
return 1;
/* check the less likely case where the ICMP error was a response to
@ -498,7 +492,8 @@ static inline int FlowCompareICMPv4(Flow *f, const Packet *p)
f->dp == p->l4.vars.icmpv4.emb_sport && f->sp == p->l4.vars.icmpv4.emb_dport &&
f->proto == ICMPV4_GET_EMB_PROTO(p) &&
(f->recursion_level == p->recursion_level || g_recurlvl_mask == 0) &&
CmpVlanIds(f->vlan_id, p->vlan_id) && CmpLiveDevIds(p->livedev, f->livedev_id)) {
CmpVlanIds(f->vlan_id, p->vlan_id) &&
CmpLiveDevIds(p->livedev_id, f->livedev_id)) {
return 1;
}
@ -530,7 +525,7 @@ static inline int FlowCompareESP(Flow *f, const Packet *p)
return CmpAddrs(f_src, p_src) && CmpAddrs(f_dst, p_dst) && f->proto == p->proto &&
(f->recursion_level == p->recursion_level || g_recurlvl_mask == 0) &&
CmpVlanIds(f->vlan_id, p->vlan_id) && f->esp.spi == ESP_GET_SPI(PacketGetESP(p)) &&
CmpLiveDevIds(p->livedev, f->livedev_id);
CmpLiveDevIds(p->livedev_id, f->livedev_id);
}
void FlowSetupPacket(Packet *p)

View file

@ -93,7 +93,7 @@ static inline Packet *FlowPseudoPacketSetup(
p->flags |= PKT_PSEUDO_STREAM_END;
memcpy(&p->vlan_id[0], &f->vlan_id[0], sizeof(p->vlan_id));
p->vlan_idx = f->vlan_idx;
p->livedev = LiveDeviceGetById(f->livedev_id);
p->livedev_id = f->livedev_id;
if (f->flags & FLOW_NOPAYLOAD_INSPECTION) {
DecodeSetNoPayloadInspectionFlag(p);

View file

@ -157,8 +157,7 @@ void FlowInit(ThreadVars *tv, Flow *f, const Packet *p)
f->thread_id[0] = (FlowThreadId)tv->id;
LiveDevice *packet_ld = p->livedev;
f->livedev_id = packet_ld ? packet_ld->id : 0;
f->livedev_id = p->livedev_id;
if (PacketIsIPv4(p)) {
const IPV4Hdr *ip4h = PacketGetIPv4(p);

View file

@ -839,8 +839,9 @@ SCJsonBuilder *CreateEveHeader(const Packet *p, enum SCOutputJsonLogDirection di
}
/* input interface */
if (p->livedev) {
SCJbSetString(js, "in_iface", p->livedev->dev);
LiveDevice *dev = LiveDeviceGetById(p->livedev_id);
if (dev) {
SCJbSetString(js, "in_iface", dev->dev);
}
/* pcap_cnt */

View file

@ -74,7 +74,7 @@ void PacketInit(Packet *p)
{
SCSpinInit(&p->persistent.tunnel_lock, 0);
p->alerts.alerts = PacketAlertCreate();
p->livedev = NULL;
p->livedev_id = 0;
}
void PacketReleaseRefs(Packet *p)
@ -150,7 +150,7 @@ void PacketReinit(Packet *p)
p->prev = NULL;
p->tunnel_verdicted = false;
p->root = NULL;
p->livedev = NULL;
p->livedev_id = 0;
PACKET_PROFILING_RESET(p);
p->tenant_id = 0;
p->nb_decoded_layers = 0;
@ -185,7 +185,7 @@ inline void SCPacketSetReleasePacket(Packet *p, void (*ReleasePacket)(Packet *p)
inline void SCPacketSetLiveDevice(Packet *p, LiveDevice *device)
{
p->livedev = device;
p->livedev_id = LiveDeviceGetId(device);
}
inline void SCPacketSetDatalink(Packet *p, int datalink)

View file

@ -99,11 +99,13 @@ static inline libnet_t *GetCtx(const Packet *p, int injection_type)
devname = g_reject_dev;
store_ctx = true;
} else {
devname = p->livedev ? p->livedev->dev : NULL;
LiveDevice *dev = LiveDeviceGetById(p->livedev_id);
devname = dev ? dev->dev : NULL;
}
SCLogDebug("sniffer: devname %s", devname);
} else if (EngineHostModeIsBridge()) {
devname = p->livedev ? p->livedev->dev : NULL;
LiveDevice *dev = LiveDeviceGetById(p->livedev_id);
devname = dev ? dev->dev : NULL;
SCLogDebug("bridge: devname %s", devname);
} else {
SCLogDebug("router: devname %s", devname);

View file

@ -767,7 +767,7 @@ static void AFPReadFromRingSetupPacket(
* acts as an indicator that we've reached a frame that is not yet released by
* us in autofp mode. It will be cleared when the frame gets released to the kernel. */
h.h2->tp_status |= TP_STATUS_USER_BUSY;
p->livedev = ptv->livedev;
p->livedev_id = ptv->livedev->id;
p->datalink = ptv->datalink;
ptv->pkts++;
@ -966,7 +966,7 @@ static inline int AFPParsePacketV3(AFPThreadVars *ptv, struct tpacket_block_desc
AFPReadApplyBypass(ptv, p);
ptv->pkts++;
p->livedev = ptv->livedev;
p->livedev_id = ptv->livedev->id;
p->datalink = ptv->datalink;
if ((ptv->flags & AFP_VLAN_IN_HEADER) &&
@ -2200,6 +2200,7 @@ static int AFPInsertHalfFlow(int mapd, void *key, unsigned int nr_cpus)
static int AFPSetFlowStorage(Packet *p, int map_fd, void *key0, void* key1,
int family)
{
LiveDevice *dev = LiveDeviceGetById(p->livedev_id);
FlowBypassInfo *fc = SCFlowGetStorageById(p->flow, GetFlowBypassInfoID());
if (fc) {
if (fc->bypass_data != NULL) {
@ -2212,7 +2213,7 @@ static int AFPSetFlowStorage(Packet *p, int map_fd, void *key0, void* key1,
if (eb == NULL) {
EBPFDeleteKey(map_fd, key0);
EBPFDeleteKey(map_fd, key1);
LiveDevAddBypassFail(p->livedev, 1, family);
LiveDevAddBypassFail(dev, 1, family);
SCFree(key0);
SCFree(key1);
return 0;
@ -2227,14 +2228,14 @@ static int AFPSetFlowStorage(Packet *p, int map_fd, void *key0, void* key1,
} else {
EBPFDeleteKey(map_fd, key0);
EBPFDeleteKey(map_fd, key1);
LiveDevAddBypassFail(p->livedev, 1, family);
LiveDevAddBypassFail(dev, 1, family);
SCFree(key0);
SCFree(key1);
return 0;
}
LiveDevAddBypassStats(p->livedev, 1, family);
LiveDevAddBypassSuccess(p->livedev, 1, family);
LiveDevAddBypassStats(dev, 1, family);
LiveDevAddBypassSuccess(dev, 1, family);
return 1;
}
@ -2272,6 +2273,7 @@ static int AFPBypassCallback(Packet *p)
if (PacketIsTunnel(p)) {
return 0;
}
LiveDevice *dev = LiveDeviceGetById(p->livedev_id);
if (PacketIsIPv4(p)) {
SCLogDebug("add an IPv4");
if (p->afp_v.v4_map_fd == -1) {
@ -2296,14 +2298,14 @@ static int AFPBypassCallback(Packet *p)
}
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[0],
p->afp_v.nr_cpus) == 0) {
LiveDevAddBypassFail(p->livedev, 1, AF_INET);
LiveDevAddBypassFail(dev, 1, AF_INET);
SCFree(keys[0]);
return 0;
}
keys[1]= SCCalloc(1, sizeof(struct flowv4_keys));
if (keys[1] == NULL) {
EBPFDeleteKey(p->afp_v.v4_map_fd, keys[0]);
LiveDevAddBypassFail(p->livedev, 1, AF_INET);
LiveDevAddBypassFail(dev, 1, AF_INET);
SCFree(keys[0]);
return 0;
}
@ -2318,7 +2320,7 @@ static int AFPBypassCallback(Packet *p)
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[1],
p->afp_v.nr_cpus) == 0) {
EBPFDeleteKey(p->afp_v.v4_map_fd, keys[0]);
LiveDevAddBypassFail(p->livedev, 1, AF_INET);
LiveDevAddBypassFail(dev, 1, AF_INET);
SCFree(keys[0]);
SCFree(keys[1]);
return 0;
@ -2336,7 +2338,7 @@ static int AFPBypassCallback(Packet *p)
struct flowv6_keys *keys[2];
keys[0] = SCCalloc(1, sizeof(struct flowv6_keys));
if (keys[0] == NULL) {
LiveDevAddBypassFail(p->livedev, 1, AF_INET6);
LiveDevAddBypassFail(dev, 1, AF_INET6);
return 0;
}
for (i = 0; i < 4; i++) {
@ -2355,14 +2357,14 @@ static int AFPBypassCallback(Packet *p)
}
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[0],
p->afp_v.nr_cpus) == 0) {
LiveDevAddBypassFail(p->livedev, 1, AF_INET6);
LiveDevAddBypassFail(dev, 1, AF_INET6);
SCFree(keys[0]);
return 0;
}
keys[1]= SCCalloc(1, sizeof(struct flowv6_keys));
if (keys[1] == NULL) {
EBPFDeleteKey(p->afp_v.v6_map_fd, keys[0]);
LiveDevAddBypassFail(p->livedev, 1, AF_INET6);
LiveDevAddBypassFail(dev, 1, AF_INET6);
SCFree(keys[0]);
return 0;
}
@ -2379,7 +2381,7 @@ static int AFPBypassCallback(Packet *p)
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[1],
p->afp_v.nr_cpus) == 0) {
EBPFDeleteKey(p->afp_v.v6_map_fd, keys[0]);
LiveDevAddBypassFail(p->livedev, 1, AF_INET6);
LiveDevAddBypassFail(dev, 1, AF_INET6);
SCFree(keys[0]);
SCFree(keys[1]);
return 0;
@ -2422,11 +2424,12 @@ static int AFPXDPBypassCallback(Packet *p)
if (PacketIsTunnel(p)) {
return 0;
}
LiveDevice *dev = LiveDeviceGetById(p->livedev_id);
if (PacketIsIPv4(p)) {
struct flowv4_keys *keys[2];
keys[0]= SCCalloc(1, sizeof(struct flowv4_keys));
if (keys[0] == NULL) {
LiveDevAddBypassFail(p->livedev, 1, AF_INET);
LiveDevAddBypassFail(dev, 1, AF_INET);
return 0;
}
if (p->afp_v.v4_map_fd == -1) {
@ -2448,14 +2451,14 @@ static int AFPXDPBypassCallback(Packet *p)
}
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[0],
p->afp_v.nr_cpus) == 0) {
LiveDevAddBypassFail(p->livedev, 1, AF_INET);
LiveDevAddBypassFail(dev, 1, AF_INET);
SCFree(keys[0]);
return 0;
}
keys[1]= SCCalloc(1, sizeof(struct flowv4_keys));
if (keys[1] == NULL) {
EBPFDeleteKey(p->afp_v.v4_map_fd, keys[0]);
LiveDevAddBypassFail(p->livedev, 1, AF_INET);
LiveDevAddBypassFail(dev, 1, AF_INET);
SCFree(keys[0]);
return 0;
}
@ -2469,7 +2472,7 @@ static int AFPXDPBypassCallback(Packet *p)
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[1],
p->afp_v.nr_cpus) == 0) {
EBPFDeleteKey(p->afp_v.v4_map_fd, keys[0]);
LiveDevAddBypassFail(p->livedev, 1, AF_INET);
LiveDevAddBypassFail(dev, 1, AF_INET);
SCFree(keys[0]);
SCFree(keys[1]);
return 0;
@ -2504,14 +2507,14 @@ static int AFPXDPBypassCallback(Packet *p)
}
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[0],
p->afp_v.nr_cpus) == 0) {
LiveDevAddBypassFail(p->livedev, 1, AF_INET6);
LiveDevAddBypassFail(dev, 1, AF_INET6);
SCFree(keys[0]);
return 0;
}
keys[1]= SCCalloc(1, sizeof(struct flowv6_keys));
if (keys[1] == NULL) {
EBPFDeleteKey(p->afp_v.v6_map_fd, keys[0]);
LiveDevAddBypassFail(p->livedev, 1, AF_INET6);
LiveDevAddBypassFail(dev, 1, AF_INET6);
SCFree(keys[0]);
return 0;
}
@ -2527,7 +2530,7 @@ static int AFPXDPBypassCallback(Packet *p)
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[1],
p->afp_v.nr_cpus) == 0) {
EBPFDeleteKey(p->afp_v.v6_map_fd, keys[0]);
LiveDevAddBypassFail(p->livedev, 1, AF_INET6);
LiveDevAddBypassFail(dev, 1, AF_INET6);
SCFree(keys[0]);
SCFree(keys[1]);
return 0;

View file

@ -791,7 +791,7 @@ static TmEcode ReceiveAFXDPLoop(ThreadVars *tv, void *data, void *slot)
PKT_SET_SRC(p, PKT_SRC_WIRE);
p->datalink = LINKTYPE_ETHERNET;
p->livedev = ptv->livedev;
p->livedev_id = ptv->livedev->id;
p->ReleasePacket = AFXDPReleasePacket;
p->flags |= PKT_IGNORE_CHECKSUM;

View file

@ -431,7 +431,7 @@ static inline Packet *PacketInitFromMbuf(DPDKThreadVars *ptv, struct rte_mbuf *m
p->dpdk_v.copy_mode = ptv->copy_mode;
p->dpdk_v.out_port_id = ptv->out_port_id;
p->dpdk_v.out_queue_id = ptv->queue_id;
p->livedev = ptv->livedev;
p->livedev_id = ptv->livedev->id;
if (ptv->checksum_mode == CHECKSUM_VALIDATION_DISABLE) {
p->flags |= PKT_IGNORE_CHECKSUM;
@ -643,7 +643,12 @@ static TmEcode ReceiveDPDKThreadInit(ThreadVars *tv, const void *initdata, void
ptv->tv = tv;
ptv->pkts = 0;
ptv->bytes = 0;
ptv->livedev = LiveGetDevice(dpdk_config->iface);
if (unlikely(ptv->livedev == NULL)) {
SCLogError("Unable to allocate memory for livedev %s", dpdk_config->iface);
goto fail;
}
ptv->capture_dpdk_packets = StatsRegisterCounter("capture.packets", &ptv->tv->stats);
ptv->capture_dpdk_rx_errs = StatsRegisterCounter("capture.rx_errors", &ptv->tv->stats);

View file

@ -678,7 +678,7 @@ static void NetmapProcessPacket(NetmapThreadVars *ntv, const struct nm_pkthdr *p
}
PKT_SET_SRC(p, PKT_SRC_WIRE);
p->livedev = ntv->livedev;
p->livedev_id = ntv->livedev->id;
p->datalink = LINKTYPE_ETHERNET;
p->ts = SCTIME_FROM_TIMEVAL(&ph->ts);
ntv->pkts++;

View file

@ -340,7 +340,7 @@ static void PcapCallbackLoop(char *user, struct pcap_pkthdr *h, u_char *pkt)
ptv->pkts++;
ptv->bytes += h->caplen;
(void) SC_ATOMIC_ADD(ptv->livedev->pkts, 1);
p->livedev = ptv->livedev;
p->livedev_id = ptv->livedev->id;
if (unlikely(PacketCopyData(p, pkt, h->caplen))) {
TmqhOutputPacketpool(ptv->tv, p);

View file

@ -5909,8 +5909,9 @@ static inline int StreamTcpValidateChecksum(Packet *p)
if (p->l4.csum != 0) {
ret = 0;
if (p->livedev) {
(void) SC_ATOMIC_ADD(p->livedev->invalid_checksums, 1);
LiveDevice *dev = LiveDeviceGetById(p->livedev_id);
if (dev) {
(void)SC_ATOMIC_ADD(dev->invalid_checksums, 1);
} else if (PcapPacketCntGet(p)) {
PcapIncreaseInvalidChecksum();
}
@ -6935,7 +6936,7 @@ static void StreamTcpPseudoPacketCreateDetectLogFlush(ThreadVars *tv,
np->flags |= PKT_PSEUDO_DETECTLOG_FLUSH;
memcpy(&np->vlan_id[0], &f->vlan_id[0], sizeof(np->vlan_id));
np->vlan_idx = f->vlan_idx;
np->livedev = LiveDeviceGetById(f->livedev_id);
np->livedev_id = f->livedev_id;
if (parent->flags & PKT_NOPACKET_INSPECTION) {
DecodeSetNoPacketInspectionFlag(np);

View file

@ -1055,14 +1055,14 @@ int EBPFUpdateFlow(Flow *f, Packet *p, void *data)
if (ifl == NULL) {
return 0;
}
ifl->dev = p->livedev;
ifl->dev = LiveDeviceGetById(p->livedev_id);
SCFlowSetStorageById(f, g_flow_storage_id, ifl);
return 1;
}
/* Look for packet iface in the list */
BypassedIfaceList *ldev = ifl;
while (ldev) {
if (p->livedev == ldev->dev) {
if (p->livedev_id == LiveDeviceGetId(ldev->dev)) {
return 1;
}
ldev = ldev->next;
@ -1075,7 +1075,7 @@ int EBPFUpdateFlow(Flow *f, Packet *p, void *data)
if (nifl == NULL) {
return 0;
}
nifl->dev = p->livedev;
nifl->dev = LiveDeviceGetById(p->livedev_id);
nifl->next = ifl;
SCFlowSetStorageById(f, g_flow_storage_id, nifl);
return 1;