util-device: break into public and private definitions

util-device.h exposes some details that are particularly problematic
for C++, even when wrapped in 'extern "C"'. To address this, break the
header into public and private parts. The public part exposes
LiveDevice as an opaque data structure, while the private header has
the actual definition.

The idea is that only Suricata C source files should include the
private header, it should not be re-included in any other header
file. And this is the header library users should use, however we
don't enforce it with tecnical means, a library user could still
include the private header, but the clue there is in the name.
pull/13125/head
Jason Ish 12 months ago committed by Victor Julien
parent 12fdd6b802
commit 9d5158594f

@ -24,6 +24,7 @@
#include "threadvars.h"
#include "action-globals.h"
#include "packet.h"
#include "util-device.h"
static int worker_id = 1;
@ -123,7 +124,7 @@ static void *SimpleWorker(void *arg)
goto done;
}
(void)SC_ATOMIC_ADD(device->pkts, 1);
LiveDevicePktsIncr(device);
count++;
}

@ -21,7 +21,7 @@
#include "decode.h"
#include "source-napatech.h"
#include "runmode-napatech.h"
#include "util-device.h"
#include "util-device-private.h"
void InitCapturePlugin(const char *args, int plugin_slot, int receive_slot, int decode_slot)
{

@ -39,7 +39,7 @@
#include "util-byte.h"
#include "util-affinity.h"
#include "util-runmodes.h"
#include "util-device.h"
#include "util-device-private.h"
static const char *default_mode = "workers";

@ -26,7 +26,7 @@
#include "suricata-plugin.h"
#include "suricata.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-cpu.h"
#include "util-byte.h"
#include "util-conf.h"

@ -153,15 +153,15 @@ static inline void PfringDumpCounters(PfringThreadVars *ptv)
* to the interface counter */
uint64_t th_pkts = StatsGetLocalCounterValue(ptv->tv, ptv->capture_kernel_packets);
uint64_t th_drops = StatsGetLocalCounterValue(ptv->tv, ptv->capture_kernel_drops);
SC_ATOMIC_ADD(ptv->livedev->pkts, pfring_s.recv - th_pkts);
SC_ATOMIC_ADD(ptv->livedev->drop, pfring_s.drop - th_drops);
LiveDevicePktsAdd(ptv->livedev, pfring_s.recv - th_pkts);
LiveDeviceDropAdd(ptv->livedev, pfring_s.drop - th_drops);
StatsSetUI64(ptv->tv, ptv->capture_kernel_packets, pfring_s.recv);
StatsSetUI64(ptv->tv, ptv->capture_kernel_drops, pfring_s.drop);
#ifdef HAVE_PF_RING_FLOW_OFFLOAD
if (ptv->flags & PFRING_FLAGS_BYPASS) {
uint64_t th_bypassed = StatsGetLocalCounterValue(ptv->tv, ptv->capture_bypassed);
SC_ATOMIC_ADD(ptv->livedev->bypassed, pfring_s.shunt - th_bypassed);
LiveDeviceBypassedAdd(ptv->livedev, pfring_s.shunt - th_bypassed);
StatsSetUI64(ptv->tv, ptv->capture_bypassed, pfring_s.shunt);
}
#endif
@ -234,8 +234,8 @@ static inline void PfringProcessPacket(void *user, struct pfring_pkthdr *h, Pack
p->flags |= PKT_IGNORE_CHECKSUM;
break;
case CHECKSUM_VALIDATION_AUTO:
if (ChecksumAutoModeCheck(ptv->pkts, SC_ATOMIC_GET(ptv->livedev->pkts),
SC_ATOMIC_GET(ptv->livedev->invalid_checksums))) {
if (ChecksumAutoModeCheck(ptv->pkts, LiveDevicePktsGet(ptv->livedev),
LiveDeviceInvalidChecksumsGet(ptv->livedev))) {
ptv->checksum_mode = CHECKSUM_VALIDATION_DISABLE;
p->flags |= PKT_IGNORE_CHECKSUM;
}

@ -486,6 +486,7 @@ noinst_HEADERS = \
util-debug.h \
util-detect.h \
util-device.h \
util-device-private.h \
util-dpdk.h \
util-dpdk-bonding.h \
util-dpdk-common.h \

@ -47,7 +47,7 @@
#include "util-spm-bm.h"
#include "util-unittest.h"
#include "util-unittest-helper.h"
#include "util-device.h"
#include "util-device-private.h"
static int DetectBypassMatch(DetectEngineThreadCtx *, Packet *,
const Signature *, const SigMatchCtx *);

@ -77,7 +77,7 @@
#include "util-magic.h"
#include "util-signal.h"
#include "util-spm.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-var-name.h"
#include "util-path.h"
#include "util-profiling.h"

@ -25,6 +25,7 @@
#include "suricata-common.h"
#include "device-storage.h"
#include "util-device-private.h"
#include "util-storage.h"
#include "util-unittest.h"

@ -43,7 +43,7 @@
#include "util-time.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-hash-lookup3.h"

@ -44,7 +44,7 @@
#include "stream-tcp.h"
#include "stream-tcp-cache.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-debug.h"

@ -41,7 +41,7 @@
#include "output.h"
#include "util-privs.h"
#include "util-buffer.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-proto-name.h"
#include "util-logopenfile.h"
#include "util-time.h"

@ -41,7 +41,7 @@
#include "output.h"
#include "util-privs.h"
#include "util-buffer.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-proto-name.h"
#include "util-logopenfile.h"
#include "util-time.h"

@ -54,7 +54,7 @@
#include "util-buffer.h"
#include "util-logopenfile.h"
#include "util-log-redis.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-validate.h"
#include "flow-var.h"

@ -46,7 +46,7 @@
#include "action-globals.h"
#include "respond-reject.h"
#include "respond-reject-libnet11.h"
#include "util-device.h"
#include "util-device-private.h"
#ifdef HAVE_LIBNET11

@ -50,7 +50,7 @@
#include "util-time.h"
#include "util-cpu.h"
#include "util-affinity.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-runmodes.h"
#include "util-ioctl.h"
#include "util-ebpf.h"

@ -49,7 +49,7 @@
#include "util-time.h"
#include "util-cpu.h"
#include "util-affinity.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-runmodes.h"
#include "util-ioctl.h"
#include "util-ebpf.h"

@ -39,7 +39,7 @@
#include "util-byte.h"
#include "util-cpu.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-dpdk.h"
#include "util-dpdk-bonding.h"
#include "util-dpdk-common.h"

@ -39,7 +39,7 @@
#include "util-affinity.h"
#include "util-runmodes.h"
#include "source-ipfw.h"
#include "util-device.h"
#include "util-device-private.h"
const char *RunModeIpsIPFWGetDefaultMode(void)
{

@ -27,7 +27,7 @@
#include "runmode-nflog.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-runmodes.h"
#include "util-misc.h"

@ -37,7 +37,7 @@
#include "util-cpu.h"
#include "util-affinity.h"
#include "util-runmodes.h"
#include "util-device.h"
#include "util-device-private.h"
const char *RunModeIpsNFQGetDefaultMode(void)
{

@ -24,7 +24,7 @@
#include "util-debug.h"
#include "util-time.h"
#include "util-cpu.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-runmodes.h"
#include "util-misc.h"
#include "util-byte.h"

@ -33,7 +33,7 @@
#include "util-affinity.h"
#include "util-cpu.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-runmodes.h"
#include "util-time.h"

@ -56,7 +56,7 @@
#include "counters.h"
#include "suricata-plugin.h"
#include "util-device.h"
#include "util-device-private.h"
int debuglog_enabled = 0;
bool threading_set_cpu_affinity = false;

@ -46,7 +46,7 @@
#include "util-cpu.h"
#include "util-datalink.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-ebpf.h"
#include "util-error.h"
#include "util-privs.h"

@ -44,7 +44,7 @@
#include "util-cpu.h"
#include "util-datalink.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-ebpf.h"
#include "util-error.h"
#include "util-privs.h"

@ -41,6 +41,7 @@
#include "tm-threads.h"
#include "tmqh-packetpool.h"
#include "util-privs.h"
#include "util-device-private.h"
#include "action-globals.h"
#ifndef HAVE_DPDK

@ -32,7 +32,7 @@
#include "util-privs.h"
#include "util-datalink.h"
#include "util-device.h"
#include "util-device-private.h"
#include "tmqh-packetpool.h"
#include "source-erf-dag.h"

@ -39,7 +39,7 @@
#include "util-byte.h"
#include "util-privs.h"
#include "util-datalink.h"
#include "util-device.h"
#include "util-device-private.h"
#include "runmodes.h"
#ifndef IPFW

@ -25,7 +25,7 @@
#include "suricata-common.h"
#include "source-lib.h"
#include "util-device.h"
#include "util-device-private.h"
/* Set time to the first packet timestamp when replaying a PCAP. */
static bool time_set = false;

@ -27,7 +27,7 @@
#define SURICATA_SOURCE_LIB_H
#include "tm-threads.h"
#include "util-device.h"
#include "util-device-private.h"
/** \brief register a "Decode" module for suricata as a library.
*

@ -42,6 +42,7 @@
#include "util-privs.h"
#include "util-validate.h"
#include "util-datalink.h"
#include "util-device-private.h"
#include "source-netmap.h"

@ -36,7 +36,7 @@
#include "runmodes.h"
#include "util-error.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-datalink.h"
#ifndef HAVE_NFLOG

@ -48,7 +48,7 @@
#include "util-byte.h"
#include "util-cpu.h"
#include "util-privs.h"
#include "util-device.h"
#include "util-device-private.h"
#include "runmodes.h"

@ -38,7 +38,7 @@
#include "util-error.h"
#include "util-privs.h"
#include "util-datalink.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-optimize.h"
#include "util-checksum.h"
#include "util-ioctl.h"

@ -31,7 +31,7 @@
#include "packet.h"
#include "util-byte.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-error.h"
#include "util-ioctl.h"
#include "util-privs.h"

@ -46,7 +46,7 @@
#include "util-host-os-info.h"
#include "util-unittest-helper.h"
#include "util-byte.h"
#include "util-device.h"
#include "util-device-private.h"
#include "stream-tcp.h"
#include "stream-tcp-private.h"

@ -48,7 +48,7 @@
#include "util-unittest.h"
#include "util-print.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "stream-tcp-private.h"
#include "stream-tcp.h"

@ -117,7 +117,7 @@
#include "util-coredump-config.h"
#include "util-cpu.h"
#include "util-daemon.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-dpdk.h"
#include "util-ebpf.h"
#include "util-exception-policy.h"

@ -35,7 +35,7 @@
#include "util-conf.h"
#include "util-privs.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-ebpf.h"
#include "util-signal.h"
#include "util-buffer.h"

@ -0,0 +1,56 @@
/* Copyright (C) 2011-2025 Open Information Security Foundation
*
* You can copy, redistribute or modify this Program under the terms of
* the GNU General Public License version 2 as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
/* Suricata private header, should only be included by Suricata source
* files. */
#ifndef SURICATA_UTIL_DEVICE_PRIVATE_H
#define SURICATA_UTIL_DEVICE_PRIVATE_H
#include "util-device.h"
#include "queue.h"
#include "util-storage.h"
#include "util-dpdk-common.h"
#define MAX_DEVNAME 10
/** storage for live device names */
typedef struct LiveDevice_ {
char *dev; /**< the device (e.g. "eth0") */
char dev_short[MAX_DEVNAME + 1];
int mtu; /* MTU of the device */
bool tenant_id_set;
uint16_t id;
SC_ATOMIC_DECLARE(uint64_t, pkts);
SC_ATOMIC_DECLARE(uint64_t, drop);
SC_ATOMIC_DECLARE(uint64_t, bypassed);
SC_ATOMIC_DECLARE(uint64_t, invalid_checksums);
TAILQ_ENTRY(LiveDevice_) next;
uint32_t tenant_id; /**< tenant id in multi-tenancy */
uint32_t offload_orig; /**< original offload settings to restore @exit */
#ifdef HAVE_DPDK
// DPDK resources that needs to be cleaned after workers are stopped and devices closed
DPDKDeviceResources *dpdk_vars;
#endif
/** storage handle as a flex array member */
Storage storage[];
} LiveDevice;
#endif /* SURICATA_UTIL_DEVICE_PRIVATE_H */

@ -17,7 +17,7 @@
#include "suricata-common.h"
#include "conf.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-ioctl.h"
#include "util-misc.h"
#include "util-dpdk.h"
@ -42,7 +42,7 @@ static TAILQ_HEAD(, LiveDevice_) live_devices =
TAILQ_HEAD_INITIALIZER(live_devices);
typedef struct LiveDeviceName_ {
char *dev; /**< the device (e.g. "eth0") */
char *dev; /**< the device (e.g. "eth0") */
TAILQ_ENTRY(LiveDeviceName_) next;
} LiveDeviceName;
@ -613,3 +613,33 @@ TmEcode LiveDeviceGetBypassedStats(json_t *cmd, json_t *answer, void *data)
SCReturnInt(TM_ECODE_FAILED);
}
#endif
uint64_t LiveDevicePktsGet(LiveDevice *dev)
{
return SC_ATOMIC_GET(dev->pkts);
}
void LiveDevicePktsIncr(LiveDevice *dev)
{
(void)SC_ATOMIC_ADD(dev->pkts, 1);
}
void LiveDevicePktsAdd(LiveDevice *dev, uint64_t n)
{
(void)SC_ATOMIC_ADD(dev->pkts, n);
}
void LiveDeviceDropAdd(LiveDevice *dev, uint64_t n)
{
(void)SC_ATOMIC_ADD(dev->drop, n);
}
void LiveDeviceBypassedAdd(LiveDevice *dev, uint64_t n)
{
(void)SC_ATOMIC_ADD(dev->bypassed, n);
}
uint64_t LiveDeviceInvalidChecksumsGet(LiveDevice *dev)
{
return SC_ATOMIC_GET(dev->invalid_checksums);
}

@ -1,4 +1,4 @@
/* Copyright (C) 2011-2016 Open Information Security Foundation
/* Copyright (C) 2011-2025 Open Information Security Foundation
*
* You can copy, redistribute or modify this Program under the terms of
* the GNU General Public License version 2 as published by the Free
@ -23,10 +23,6 @@ extern "C"
{
#endif
#include "queue.h"
#include "util-storage.h"
#include "util-dpdk-common.h"
#define OFFLOAD_FLAG_SG (1<<0)
#define OFFLOAD_FLAG_TSO (1<<1)
#define OFFLOAD_FLAG_GSO (1<<2)
@ -40,32 +36,12 @@ void LiveSetOffloadDisable(void);
void LiveSetOffloadWarn(void);
int LiveGetOffload(void);
#define MAX_DEVNAME 10
/** storage for live device names */
typedef struct LiveDevice_ {
char *dev; /**< the device (e.g. "eth0") */
char dev_short[MAX_DEVNAME + 1];
int mtu; /* MTU of the device */
bool tenant_id_set;
uint16_t id;
SC_ATOMIC_DECLARE(uint64_t, pkts);
SC_ATOMIC_DECLARE(uint64_t, drop);
SC_ATOMIC_DECLARE(uint64_t, bypassed);
SC_ATOMIC_DECLARE(uint64_t, invalid_checksums);
TAILQ_ENTRY(LiveDevice_) next;
uint32_t tenant_id; /**< tenant id in multi-tenancy */
uint32_t offload_orig; /**< original offload settings to restore @exit */
#ifdef HAVE_DPDK
// DPDK resources that needs to be cleaned after workers are stopped and devices closed
DPDKDeviceResources *dpdk_vars;
#endif
/** storage handle as a flex array member */
Storage storage[];
} LiveDevice;
/**
* \brief Public definition of LiveDevice.
*
* The private definition can be found in util-device-private.h.
*/
typedef struct LiveDevice_ LiveDevice;
void LiveDevRegisterExtension(void);
@ -95,6 +71,13 @@ TmEcode LiveDeviceIfaceList(json_t *cmd, json_t *server_msg, void *data);
TmEcode LiveDeviceGetBypassedStats(json_t *cmd, json_t *answer, void *data);
#endif
uint64_t LiveDevicePktsGet(LiveDevice *dev);
void LiveDevicePktsIncr(LiveDevice *dev);
void LiveDevicePktsAdd(LiveDevice *dev, uint64_t n);
void LiveDeviceDropAdd(LiveDevice *dev, uint64_t n);
void LiveDeviceBypassedAdd(LiveDevice *dev, uint64_t n);
uint64_t LiveDeviceInvalidChecksumsGet(LiveDevice *dev);
#ifdef __cplusplus
}
#endif

@ -21,9 +21,11 @@
* \author Lukas Sismis <lukas.sismis@gmail.com>
*/
#include "suricata-common.h"
#include "suricata.h"
#include "util-dpdk.h"
#include "util-debug.h"
#include "util-device-private.h"
void DPDKCleanupEAL(void)
{

@ -43,7 +43,7 @@
#include "util-ebpf.h"
#include "util-affinity.h"
#include "util-cpu.h"
#include "util-device.h"
#include "util-device-private.h"
#include "device-storage.h"
#include "flow-storage.h"

@ -24,6 +24,7 @@
#include "suricata-common.h"
#include "util-ioctl.h"
#include "util-device-private.h"
#include "conf.h"
#include "decode.h"
#include "decode-sll.h"

@ -42,7 +42,7 @@
#include "util-time.h"
#include "util-cpu.h"
#include "util-affinity.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-runmodes.h"

@ -53,7 +53,7 @@
#include "suricata-common.h"
#include "util-debug.h"
#include "util-device.h"
#include "util-device-private.h"
#include "util-mem.h"
#include "util-unittest.h"

Loading…
Cancel
Save