diff --git a/plugins/pfring/source-pfring.c b/plugins/pfring/source-pfring.c index 6b444b2ece..5eaefc61f4 100644 --- a/plugins/pfring/source-pfring.c +++ b/plugins/pfring/source-pfring.c @@ -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) { diff --git a/src/decode.c b/src/decode.c index 6dd6701bfb..1a1b76ea89 100644 --- a/src/decode.c +++ b/src/decode.c @@ -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"); } diff --git a/src/decode.h b/src/decode.h index 1f0be7cc22..5226812053 100644 --- a/src/decode.h +++ b/src/decode.h @@ -619,7 +619,7 @@ typedef struct Packet_ uint8_t *ext_pkt; /* Incoming interface */ - struct LiveDevice_ *livedev; + uint16_t livedev_id; PacketAlerts alerts; diff --git a/src/detect-engine.c b/src/detect-engine.c index 382462641a..e229d0137b 100644 --- a/src/detect-engine.c +++ b/src/detect-engine.c @@ -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; diff --git a/src/flow-hash.c b/src/flow-hash.c index c98a02efc0..34d8cfe215 100644 --- a/src/flow-hash.c +++ b/src/flow-hash.c @@ -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) diff --git a/src/flow-timeout.c b/src/flow-timeout.c index 99ed4262a9..48cfc08236 100644 --- a/src/flow-timeout.c +++ b/src/flow-timeout.c @@ -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); diff --git a/src/flow-util.c b/src/flow-util.c index 6808b852e8..b8ccba37b6 100644 --- a/src/flow-util.c +++ b/src/flow-util.c @@ -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); diff --git a/src/output-json.c b/src/output-json.c index cce5e1e39d..f1a4a29cec 100644 --- a/src/output-json.c +++ b/src/output-json.c @@ -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 */ diff --git a/src/packet.c b/src/packet.c index 67df4d6f1b..e84760671a 100644 --- a/src/packet.c +++ b/src/packet.c @@ -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) diff --git a/src/respond-reject-libnet11.c b/src/respond-reject-libnet11.c index 97d779bf8a..755e9d3554 100644 --- a/src/respond-reject-libnet11.c +++ b/src/respond-reject-libnet11.c @@ -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); diff --git a/src/source-af-packet.c b/src/source-af-packet.c index 114d4907b3..df341b6389 100644 --- a/src/source-af-packet.c +++ b/src/source-af-packet.c @@ -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; diff --git a/src/source-af-xdp.c b/src/source-af-xdp.c index 65d4e3b868..c95a5ede2b 100644 --- a/src/source-af-xdp.c +++ b/src/source-af-xdp.c @@ -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; diff --git a/src/source-dpdk.c b/src/source-dpdk.c index ee7fd25760..7cffebb9d0 100644 --- a/src/source-dpdk.c +++ b/src/source-dpdk.c @@ -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); diff --git a/src/source-netmap.c b/src/source-netmap.c index a4cc78182a..5ebfed1012 100644 --- a/src/source-netmap.c +++ b/src/source-netmap.c @@ -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++; diff --git a/src/source-pcap.c b/src/source-pcap.c index 950abd967d..73ab2fb219 100644 --- a/src/source-pcap.c +++ b/src/source-pcap.c @@ -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); diff --git a/src/stream-tcp.c b/src/stream-tcp.c index a2218c0e23..02edeb3627 100644 --- a/src/stream-tcp.c +++ b/src/stream-tcp.c @@ -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); diff --git a/src/util-ebpf.c b/src/util-ebpf.c index 2ebd65a635..9af7dfc5a2 100644 --- a/src/util-ebpf.c +++ b/src/util-ebpf.c @@ -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;