mirror of
https://github.com/OISF/suricata.git
synced 2026-05-28 04:32:12 -04:00
packet: store livedev by id
This commit is contained in:
parent
293662fc2e
commit
32afba47dd
17 changed files with 68 additions and 62 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -619,7 +619,7 @@ typedef struct Packet_
|
|||
uint8_t *ext_pkt;
|
||||
|
||||
/* Incoming interface */
|
||||
struct LiveDevice_ *livedev;
|
||||
uint16_t livedev_id;
|
||||
|
||||
PacketAlerts alerts;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue