refactoring perf stats code

remotes/origin/master-1.0.x
Anoop Saldanha 16 years ago committed by Victor Julien
parent fdf8943dfb
commit ceb7e495ae

@ -380,7 +380,7 @@ void *AppLayerDetectProtoThread(void *td)
}
if (TmThreadsCheckFlag(tv, THV_KILL)) {
PerfUpdateCounterArray(tv->pca, &tv->pctx, 0);
SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0);
run = 0;
}
}

File diff suppressed because it is too large Load Diff

@ -9,55 +9,71 @@
struct ThreadVars_;
/* Time interval for syncing the local counters with the global ones */
#define WUT_TTS 3
#define SC_PERF_WUT_TTS 3
/* Time interval at which the mgmt thread o/p the stats */
#define MGMTT_TTS 8
#define SC_PERF_MGMTT_TTS 8
/* Type of counter */
/**
* \brief Data type for different kind of Perf counters that can be registered
*/
enum {
TYPE_UINT64,
TYPE_DOUBLE,
TYPE_STR,
TYPE_MAX,
SC_PERF_TYPE_UINT64,
SC_PERF_TYPE_DOUBLE,
SC_PERF_TYPE_STR,
SC_PERF_TYPE_MAX,
};
/* Qualifier for the counter */
/**
* \brief Different kinds of qualifier that can be used to modify the behaviour
* of the Perf counter to be registered
*/
enum {
TYPE_Q_NORMAL = 0x01,
TYPE_Q_AVERAGE = 0x02,
TYPE_Q_MAXIMUM = 0x04,
TYPE_Q_TIMEBASED = 0x08,
TYPE_Q_MAX = 0x10,
SC_PERF_TYPE_Q_NORMAL = 0x01,
SC_PERF_TYPE_Q_AVERAGE = 0x02,
SC_PERF_TYPE_Q_MAXIMUM = 0x04,
SC_PERF_TYPE_Q_TIMEBASED = 0x08,
SC_PERF_TYPE_Q_MAX = 0x10,
};
/* Output interfaces */
/**
* \brief Different output interfaces made available by the Perf counter API
*/
enum {
IFACE_FILE,
IFACE_CONSOLE,
IFACE_NETWORK,
IFACE_SYSLOG,
SC_PERF_IFACE_FILE,
SC_PERF_IFACE_CONSOLE,
SC_PERF_IFACE_SYSLOG,
SC_PERF_IFACE_MAX,
};
typedef struct PerfCounterName_ {
/**
* \brief Name of the counter. Basically like a primary key for a counter
*/
typedef struct SCPerfCounterName_ {
char *cname;
char *tm_name;
pthread_t tid;
} PerfCounterName;
} SCPerfCounterName;
typedef struct PerfCounterValue_ {
/**
* \brief Holds the counter value, type, and the size of the type
*/
typedef struct SCPerfCounterValue_ {
void *cvalue;
uint32_t size;
uint32_t type;
} PerfCounterValue;
} SCPerfCounterValue;
/* Container to hold the counter variable */
typedef struct PerfCounter_ {
PerfCounterName *name;
PerfCounterValue *value;
/**
* \brief Container to hold the counter variable
*/
typedef struct SCPerfCounter_ {
SCPerfCounterName *name;
SCPerfCounterValue *value;
/* local id for this counter in this tm */
uint16_t id;
/* description of this counter */
char *desc;
/* no of times the local counter has been synced with this counter */
@ -70,25 +86,36 @@ typedef struct PerfCounter_ {
int type_q;
/* the next perfcounter for this tv's tm instance */
struct PerfCounter_ *next;
} PerfCounter;
struct SCPerfCounter_ *next;
} SCPerfCounter;
/* Holds the Perf Context for a ThreadVars instance */
typedef struct PerfContext_ {
PerfCounter *head;
/**
* \brief Holds the Perf Context for a ThreadVars instance
*/
typedef struct SCPerfContext_ {
/* pointer to the head of a list of counters assigned under this context */
SCPerfCounter *head;
/* flag set by the wakeup thread, to inform the client threads to sync */
uint32_t perf_flag;
/* holds the total no of counters already assigned for this perf context */
uint16_t curr_id;
/* mutex to prevent simultaneous access during update_counter/output_stat */
pthread_mutex_t m;
} PerfContext;
} SCPerfContext;
/**
* \brief Node elements used by the SCPerfCounterArray(PCA) Node
*/
typedef struct SCPCAElem_ {
/* pointer to the PerfCounter that corresponds to this PCAElem */
SCPerfCounter *pc;
/* PerfCounterArray(PCA) Node*/
typedef struct PCAElem_ {
PerfCounter *pc;
/* counter id of the above counter(pc) */
uint16_t id;
union {
uint64_t ui64_cnt;
double d_cnt;
@ -99,106 +126,95 @@ typedef struct PCAElem_ {
/* indicates the times syncs has overflowed */
uint64_t wrapped_syncs;
} PCAElem;
} SCPCAElem;
/* The PerfCounterArray */
typedef struct PerfCounterArray_ {
/**
* \brief The SCPerfCounterArray used to hold the local version of the counters
* registered
*/
typedef struct SCPerfCounterArray_ {
/* points to the array holding PCAElems */
PCAElem *head;
SCPCAElem *head;
/* no of PCAElems in head */
uint32_t size;
} PerfCounterArray;
} SCPerfCounterArray;
/* Holds multiple instances of the same TM together, used when the stats
* have to be clubbed based on TM, before being sent out*/
typedef struct PerfClubTMInst_ {
/**
* \brief Holds multiple instances of the same TM together, used when the stats
* have to be clubbed based on TM, before being sent out
*/
typedef struct SCPerfClubTMInst_ {
char *tm_name;
PerfContext **head;
SCPerfContext **head;
uint32_t size;
struct PerfClubTMInst_ *next;
} PerfClubTMInst;
struct SCPerfClubTMInst_ *next;
} SCPerfClubTMInst;
/* Holds the output interface context for the counter api */
typedef struct PerfOPIfaceContext_ {
/**
* \brief Holds the output interface context for the counter api
*/
typedef struct SCPerfOPIfaceContext_ {
/* the iface to be used for output */
uint32_t iface;
/* the file to be used if the output interface used is SC_PERF_IFACE_FILE */
char *file;
/* more interfaces to be supported later. For now just a file */
FILE *fp;
/* indicates whether the counter values from the same threading module
* should be clubbed or not, during output */
uint32_t club_tm;
PerfClubTMInst *pctmi;
SCPerfClubTMInst *pctmi;
pthread_mutex_t pctmi_lock;
} PerfOPIfaceContext;
void PerfInitCounterApi(void);
void PerfInitOPCtx(void);
void PerfSpawnThreads(void);
void * PerfMgmtThread(void *);
void * PerfWakeupThread(void *);
uint16_t PerfTVRegisterCounter(char *, struct ThreadVars_ *, int, char *);
uint16_t PerfTVRegisterAvgCounter(char *, struct ThreadVars_ *, int, char *);
uint16_t PerfTVRegisterMaxCounter(char *, struct ThreadVars_ *, int, char *);
uint16_t PerfTVRegisterIntervalCounter(char *, struct ThreadVars_ *, int, char *);
uint16_t PerfRegisterCounter(char *, char *, int, char *, PerfContext *);
uint16_t PerfRegisterAvgCounter(char *, char *, int, char *, PerfContext *);
uint16_t PerfRegisterMaxCounter(char *, char *, int, char *, PerfContext *);
uint16_t PerfRegisterIntervalCounter(char *, char *, int, char *, PerfContext *);
int PerfCounterDisplay(uint16_t, PerfContext *, int);
inline void PerfCounterIncr(uint16_t, PerfCounterArray *);
inline void PerfCounterAddUI64(uint16_t, PerfCounterArray *, uint64_t);
inline void PerfCounterAddDouble(uint16_t, PerfCounterArray *, double);
inline void PerfCounterSetUI64(uint16_t, PerfCounterArray *, uint64_t);
inline void PerfCounterSetDouble(uint16_t, PerfCounterArray *, double);
int PerfAddToClubbedTMTable(char *, PerfContext *);
PerfCounterArray * PerfGetCounterArrayRange(uint16_t, uint16_t,
PerfContext *);
PerfCounterArray * PerfGetAllCountersArray(PerfContext *);
int PerfUpdateCounter(char *, char *, uint64_t, void *, PerfContext *);
int PerfUpdateCounterArray(PerfCounterArray *, PerfContext *, int);
void PerfOutputCounters(void);
int PerfOutputCounterFileIface(void);
void PerfReleaseResources(void);
void PerfReleaseOPCtx(void);
void PerfReleasePerfCounterS(PerfCounter *);
void PerfReleaseCounter(PerfCounter *);
void PerfReleasePCA(PerfCounterArray *);
void PerfRegisterTests(void);
} SCPerfOPIfaceContext;
/* the initialization functions */
void SCPerfInitCounterApi(void);
void SCPerfSpawnThreads(void);
/* the ThreadVars counter registration functions */
uint16_t SCPerfTVRegisterCounter(char *, struct ThreadVars_ *, int, char *);
uint16_t SCPerfTVRegisterAvgCounter(char *, struct ThreadVars_ *, int, char *);
uint16_t SCPerfTVRegisterMaxCounter(char *, struct ThreadVars_ *, int, char *);
uint16_t SCPerfTVRegisterIntervalCounter(char *, struct ThreadVars_ *, int,
char *, char *);
/* the non-ThreadVars counter registration functions */
uint16_t SCPerfRegisterCounter(char *, char *, int, char *, SCPerfContext *);
uint16_t SCPerfRegisterAvgCounter(char *, char *, int, char *, SCPerfContext *);
uint16_t SCPerfRegisterMaxCounter(char *, char *, int, char *, SCPerfContext *);
uint16_t SCPerfRegisterIntervalCounter(char *, char *, int, char *,
SCPerfContext *, char *);
/* utility functions */
int SCPerfAddToClubbedTMTable(char *, SCPerfContext *);
SCPerfCounterArray *SCPerfGetCounterArrayRange(uint16_t, uint16_t, SCPerfContext *);
SCPerfCounterArray * SCPerfGetAllCountersArray(SCPerfContext *);
int SCPerfCounterDisplay(uint16_t, SCPerfContext *, int);
/* functions used to update local counter values */
inline void SCPerfCounterIncr(uint16_t, SCPerfCounterArray *);
inline void SCPerfCounterAddUI64(uint16_t, SCPerfCounterArray *, uint64_t);
inline void SCPerfCounterAddDouble(uint16_t, SCPerfCounterArray *, double);
inline void SCPerfCounterSetUI64(uint16_t, SCPerfCounterArray *, uint64_t);
inline void SCPerfCounterSetDouble(uint16_t, SCPerfCounterArray *, double);
int SCPerfUpdateCounterArray(SCPerfCounterArray *, SCPerfContext *, int);
void SCPerfOutputCounters(void);
/* functions used to free the resources alloted by the Perf counter API */
void SCPerfReleaseResources(void);
void SCPerfReleaseSCPerfCounterS(SCPerfCounter *);
void SCPerfReleasePCA(SCPerfCounterArray *);
void SCPerfRegisterTests(void);
#endif /* __COUNTERS_H__ */

@ -10,7 +10,7 @@
void DecodeEthernet(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_eth, tv->pca);
SCPerfCounterIncr(dtv->counter_eth, tv->sc_perf_pca);
if (len < ETHERNET_HEADER_LEN) {
DECODER_SET_EVENT(p,ETHERNET_PKT_TOO_SMALL);

@ -21,7 +21,7 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u
uint16_t header_len = GRE_HDR_LEN;
GRESreHdr *gsre = NULL;
PerfCounterIncr(dtv->counter_gre, tv->pca);
SCPerfCounterIncr(dtv->counter_gre, tv->sc_perf_pca);
if(len < GRE_HDR_LEN) {
DECODER_SET_EVENT(p,GRE_PKT_TOO_SMALL);

@ -157,7 +157,7 @@ void DecodePartialIPV4( Packet* p, uint8_t* partial_packet, uint16_t len )
*/
void DecodeICMPV4(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_icmpv4, tv->pca);
SCPerfCounterIncr(dtv->counter_icmpv4, tv->sc_perf_pca);
if (len < ICMPV4_HEADER_LEN) {
DECODER_SET_EVENT(p,ICMPV4_PKT_TOO_SMALL);

@ -202,7 +202,7 @@ void DecodePartialIPV6(Packet *p, uint8_t *partial_packet, uint16_t len )
void DecodeICMPV6(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p,
uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_icmpv6, tv->pca);
SCPerfCounterIncr(dtv->counter_icmpv6, tv->sc_perf_pca);
if (len < ICMPV6_HEADER_LEN) {
SCLogDebug("ICMPV6_PKT_TOO_SMALL");

@ -534,7 +534,7 @@ void DecodeIPV4(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt,
{
int ret;
PerfCounterIncr(dtv->counter_ipv4, tv->pca);
SCPerfCounterIncr(dtv->counter_ipv4, tv->sc_perf_pca);
/* reset the decoder cache flags */
IPV4_CACHE_INIT(p);

@ -365,7 +365,7 @@ void DecodeIPV6(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt,
{
int ret;
PerfCounterIncr(dtv->counter_ipv6, tv->pca);
SCPerfCounterIncr(dtv->counter_ipv6, tv->sc_perf_pca);
IPV6_CACHE_INIT(p);

@ -13,7 +13,7 @@
void DecodePPP(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_ppp, tv->pca);
SCPerfCounterIncr(dtv->counter_ppp, tv->sc_perf_pca);
if(len < PPP_HEADER_LEN) {
DECODER_SET_EVENT(p,PPP_PKT_TOO_SMALL);

@ -22,7 +22,7 @@
*/
void DecodePPPOEDiscovery(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_pppoe, tv->pca);
SCPerfCounterIncr(dtv->counter_pppoe, tv->sc_perf_pca);
if (len < PPPOE_DISCOVERY_HEADER_MIN_LEN) {
DECODER_SET_EVENT(p, PPPOE_PKT_TOO_SMALL);
@ -94,7 +94,7 @@ void DecodePPPOEDiscovery(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint
*/
void DecodePPPOESession(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_pppoe, tv->pca);
SCPerfCounterIncr(dtv->counter_pppoe, tv->sc_perf_pca);
if (len < PPPOE_SESSION_HEADER_LEN) {
DECODER_SET_EVENT(p, PPPOE_PKT_TOO_SMALL);

@ -7,7 +7,7 @@
void DecodeSll(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_sll, tv->pca);
SCPerfCounterIncr(dtv->counter_sll, tv->sc_perf_pca);
if (len < SLL_HEADER_LEN) {
DECODER_SET_EVENT(p,SLL_PKT_TOO_SMALL);

@ -259,7 +259,7 @@ static int DecodeTCPPacket(ThreadVars *tv, Packet *p, uint8_t *pkt, uint16_t len
void DecodeTCP(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_tcp, tv->pca);
SCPerfCounterIncr(dtv->counter_tcp, tv->sc_perf_pca);
if (DecodeTCPPacket(tv, p,pkt,len) < 0) {
p->tcph = NULL;

@ -161,7 +161,7 @@ static int DecodeUDPPacket(ThreadVars *t, Packet *p, uint8_t *pkt, uint16_t len)
void DecodeUDP(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
{
PerfCounterIncr(dtv->counter_udp, tv->pca);
SCPerfCounterIncr(dtv->counter_udp, tv->sc_perf_pca);
if (DecodeUDPPacket(tv, p,pkt,len) < 0) {
p->udph = NULL;

@ -120,9 +120,10 @@ TmEcode DetectEngineThreadCtxInit(ThreadVars *tv, void *initdata, void **data) {
DetectEngineIPOnlyThreadInit(de_ctx,&det_ctx->io_ctx);
/** alert counter setup */
det_ctx->counter_alerts = PerfTVRegisterCounter("detect.alert", tv, TYPE_UINT64, "NULL");
tv->pca = PerfGetAllCountersArray(&tv->pctx);
PerfAddToClubbedTMTable(tv->name, &tv->pctx);
det_ctx->counter_alerts = SCPerfTVRegisterCounter("detect.alert", tv,
SC_PERF_TYPE_UINT64, "NULL");
tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
SCPerfAddToClubbedTMTable(tv->name, &tv->sc_perf_pctx);
*data = (void *)det_ctx;
//printf("DetectEngineThreadCtxInit: data %p det_ctx %p\n", *data, det_ctx);

@ -393,7 +393,7 @@ int main(int argc, char **argv)
CIDRInit();
SigParsePrepare();
//PatternMatchPrepare(mpm_ctx, MPM_B2G);
PerfInitCounterApi();
SCPerfInitCounterApi();
/** \todo we need an api for these */
AppLayerDetectProtoThreadInit();
@ -446,7 +446,7 @@ int main(int argc, char **argv)
ByteRegisterTests();
MpmRegisterTests();
FlowBitRegisterTests();
PerfRegisterTests();
SCPerfRegisterTests();
DecodePPPRegisterTests();
HTTPParserRegisterTests();
TLSParserRegisterTests();
@ -567,7 +567,7 @@ int main(int argc, char **argv)
//AppLayerDetectProtoThreadSpawn();
/* Spawn the perf counter threads. Let these be the last one spawned */
PerfSpawnThreads();
SCPerfSpawnThreads();
/* Check if the alloted queues have at least 1 reader and writer */
TmValidateQueueState();
@ -622,7 +622,7 @@ int main(int argc, char **argv)
SCLogInfo("time elapsed %" PRIuMAX "s", (uintmax_t)(end_time.tv_sec - start_time.tv_sec));
TmThreadKillThreads();
PerfReleaseResources();
SCPerfReleaseResources();
break;
}

@ -576,7 +576,7 @@ void *FlowManagerThread(void *td)
}
if (TmThreadsCheckFlag(th_v, THV_KILL)) {
PerfUpdateCounterArray(th_v->pca, &th_v->pctx, 0);
SCPerfUpdateCounterArray(th_v->sc_perf_pca, &th_v->sc_perf_pctx, 0);
break;
}

@ -461,10 +461,10 @@ TmEcode DecodeNFQ(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq)
printf("DecodeNFQ\n");
#endif
PerfCounterIncr(dtv->counter_pkts, tv->pca);
PerfCounterAddUI64(dtv->counter_bytes, tv->pca, p->pktlen);
PerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->pca, p->pktlen);
PerfCounterSetUI64(dtv->counter_max_pkt_size, tv->pca, p->pktlen);
SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
if (IPV4_GET_RAW_VER(ip4h) == 4) {
#ifdef DEBUG
@ -496,27 +496,40 @@ TmEcode DecodeNFQThreadInit(ThreadVars *tv, void *initdata, void **data)
memset(dtv, 0, sizeof(DecodeThreadVars));
/* register counters */
dtv->counter_pkts = PerfTVRegisterCounter("decoder.pkts", tv, TYPE_UINT64, "NULL");
dtv->counter_bytes = PerfTVRegisterCounter("decoder.bytes", tv, TYPE_UINT64, "NULL");
dtv->counter_ipv4 = PerfTVRegisterCounter("decoder.ipv4", tv, TYPE_UINT64, "NULL");
dtv->counter_ipv6 = PerfTVRegisterCounter("decoder.ipv6", tv, TYPE_UINT64, "NULL");
dtv->counter_eth = PerfTVRegisterCounter("decoder.ethernet", tv, TYPE_UINT64, "NULL");
dtv->counter_sll = PerfTVRegisterCounter("decoder.sll", tv, TYPE_UINT64, "NULL");
dtv->counter_tcp = PerfTVRegisterCounter("decoder.tcp", tv, TYPE_UINT64, "NULL");
dtv->counter_udp = PerfTVRegisterCounter("decoder.udp", tv, TYPE_UINT64, "NULL");
dtv->counter_icmpv4 = PerfTVRegisterCounter("decoder.icmpv4", tv, TYPE_UINT64, "NULL");
dtv->counter_icmpv6 = PerfTVRegisterCounter("decoder.icmpv6", tv, TYPE_UINT64, "NULL");
dtv->counter_ppp = PerfTVRegisterCounter("decoder.ppp", tv, TYPE_UINT64, "NULL");
dtv->counter_pppoe = PerfTVRegisterCounter("decoder.pppoe", tv, TYPE_UINT64, "NULL");
dtv->counter_gre = PerfTVRegisterCounter("decoder.gre", tv, TYPE_UINT64, "NULL");
dtv->counter_avg_pkt_size = PerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
TYPE_DOUBLE, "NULL");
dtv->counter_max_pkt_size = PerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
TYPE_UINT64, "NULL");
tv->pca = PerfGetAllCountersArray(&tv->pctx);
PerfAddToClubbedTMTable(tv->name, &tv->pctx);
dtv->counter_pkts = SCPerfTVRegisterCounter("decoder.pkts", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_bytes = SCPerfTVRegisterCounter("decoder.bytes", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ipv4 = SCPerfTVRegisterCounter("decoder.ipv4", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ipv6 = SCPerfTVRegisterCounter("decoder.ipv6", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_eth = SCPerfTVRegisterCounter("decoder.ethernet", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_sll = SCPerfTVRegisterCounter("decoder.sll", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_tcp = SCPerfTVRegisterCounter("decoder.tcp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_udp = SCPerfTVRegisterCounter("decoder.udp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_icmpv4 = SCPerfTVRegisterCounter("decoder.icmpv4", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_icmpv6 = SCPerfTVRegisterCounter("decoder.icmpv6", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ppp = SCPerfTVRegisterCounter("decoder.ppp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_pppoe = SCPerfTVRegisterCounter("decoder.pppoe", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_gre = SCPerfTVRegisterCounter("decoder.gre", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_avg_pkt_size = SCPerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
SC_PERF_TYPE_DOUBLE, "NULL");
dtv->counter_max_pkt_size = SCPerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
SC_PERF_TYPE_UINT64, "NULL");
tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
SCPerfAddToClubbedTMTable(tv->name, &tv->sc_perf_pctx);
*data = (void *)dtv;

@ -168,10 +168,10 @@ TmEcode DecodePcapFile(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq)
DecodeThreadVars *dtv = (DecodeThreadVars *)data;
/* update counters */
PerfCounterIncr(dtv->counter_pkts, tv->pca);
PerfCounterAddUI64(dtv->counter_bytes, tv->pca, p->pktlen);
PerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->pca, p->pktlen);
PerfCounterSetUI64(dtv->counter_max_pkt_size, tv->pca, p->pktlen);
SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
/* call the decoder */
pcap_g.Decoder(tv, dtv, p, p->pkt, p->pktlen, pq);
@ -190,28 +190,42 @@ TmEcode DecodePcapFileThreadInit(ThreadVars *tv, void *initdata, void **data)
memset(dtv, 0, sizeof(DecodeThreadVars));
/* register counters */
dtv->counter_pkts = PerfTVRegisterCounter("decoder.pkts", tv, TYPE_UINT64, "NULL");
dtv->counter_bytes = PerfTVRegisterCounter("decoder.bytes", tv, TYPE_UINT64, "NULL");
dtv->counter_ipv4 = PerfTVRegisterCounter("decoder.ipv4", tv, TYPE_UINT64, "NULL");
dtv->counter_ipv6 = PerfTVRegisterCounter("decoder.ipv6", tv, TYPE_UINT64, "NULL");
dtv->counter_eth = PerfTVRegisterCounter("decoder.ethernet", tv, TYPE_UINT64, "NULL");
dtv->counter_sll = PerfTVRegisterCounter("decoder.sll", tv, TYPE_UINT64, "NULL");
dtv->counter_tcp = PerfTVRegisterCounter("decoder.tcp", tv, TYPE_UINT64, "NULL");
dtv->counter_udp = PerfTVRegisterCounter("decoder.udp", tv, TYPE_UINT64, "NULL");
dtv->counter_icmpv4 = PerfTVRegisterCounter("decoder.icmpv4", tv, TYPE_UINT64, "NULL");
dtv->counter_icmpv6 = PerfTVRegisterCounter("decoder.icmpv6", tv, TYPE_UINT64, "NULL");
dtv->counter_ppp = PerfTVRegisterCounter("decoder.ppp", tv, TYPE_UINT64, "NULL");
dtv->counter_pppoe = PerfTVRegisterCounter("decoder.pppoe", tv, TYPE_UINT64, "NULL");
dtv->counter_gre = PerfTVRegisterCounter("decoder.gre", tv, TYPE_UINT64, "NULL");
dtv->counter_avg_pkt_size = PerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
TYPE_DOUBLE, "NULL");
dtv->counter_max_pkt_size = PerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
TYPE_UINT64, "NULL");
tv->pca = PerfGetAllCountersArray(&tv->pctx);
PerfAddToClubbedTMTable(tv->name, &tv->pctx);
dtv->counter_pkts = SCPerfTVRegisterCounter("decoder.pkts", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_bytes = SCPerfTVRegisterCounter("decoder.bytes", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ipv4 = SCPerfTVRegisterCounter("decoder.ipv4", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ipv6 = SCPerfTVRegisterCounter("decoder.ipv6", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_eth = SCPerfTVRegisterCounter("decoder.ethernet", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_sll = SCPerfTVRegisterCounter("decoder.sll", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_tcp = SCPerfTVRegisterCounter("decoder.tcp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_udp = SCPerfTVRegisterCounter("decoder.udp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_icmpv4 = SCPerfTVRegisterCounter("decoder.icmpv4", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_icmpv6 = SCPerfTVRegisterCounter("decoder.icmpv6", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ppp = SCPerfTVRegisterCounter("decoder.ppp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_pppoe = SCPerfTVRegisterCounter("decoder.pppoe", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_gre = SCPerfTVRegisterCounter("decoder.gre", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_avg_pkt_size = SCPerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
SC_PERF_TYPE_DOUBLE, "NULL");
dtv->counter_max_pkt_size = SCPerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
SC_PERF_TYPE_UINT64, "NULL");
tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
SCPerfAddToClubbedTMTable(tv->name, &tv->sc_perf_pctx);
*data = (void *)dtv;
return TM_ECODE_OK;
}

@ -289,10 +289,10 @@ TmEcode DecodePcap(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq)
DecodeThreadVars *dtv = (DecodeThreadVars *)data;
/* update counters */
PerfCounterIncr(dtv->counter_pkts, tv->pca);
PerfCounterAddUI64(dtv->counter_bytes, tv->pca, p->pktlen);
PerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->pca, p->pktlen);
PerfCounterSetUI64(dtv->counter_max_pkt_size, tv->pca, p->pktlen);
SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
/* call the decoder */
switch(p->datalink) {
@ -324,28 +324,42 @@ TmEcode DecodePcapThreadInit(ThreadVars *tv, void *initdata, void **data)
memset(dtv, 0, sizeof(DecodeThreadVars));
/* register counters */
dtv->counter_pkts = PerfTVRegisterCounter("decoder.pkts", tv, TYPE_UINT64, "NULL");
dtv->counter_bytes = PerfTVRegisterCounter("decoder.bytes", tv, TYPE_UINT64, "NULL");
dtv->counter_ipv4 = PerfTVRegisterCounter("decoder.ipv4", tv, TYPE_UINT64, "NULL");
dtv->counter_ipv6 = PerfTVRegisterCounter("decoder.ipv6", tv, TYPE_UINT64, "NULL");
dtv->counter_eth = PerfTVRegisterCounter("decoder.ethernet", tv, TYPE_UINT64, "NULL");
dtv->counter_sll = PerfTVRegisterCounter("decoder.sll", tv, TYPE_UINT64, "NULL");
dtv->counter_tcp = PerfTVRegisterCounter("decoder.tcp", tv, TYPE_UINT64, "NULL");
dtv->counter_udp = PerfTVRegisterCounter("decoder.udp", tv, TYPE_UINT64, "NULL");
dtv->counter_icmpv4 = PerfTVRegisterCounter("decoder.icmpv4", tv, TYPE_UINT64, "NULL");
dtv->counter_icmpv6 = PerfTVRegisterCounter("decoder.icmpv6", tv, TYPE_UINT64, "NULL");
dtv->counter_ppp = PerfTVRegisterCounter("decoder.ppp", tv, TYPE_UINT64, "NULL");
dtv->counter_pppoe = PerfTVRegisterCounter("decoder.pppoe", tv, TYPE_UINT64, "NULL");
dtv->counter_gre = PerfTVRegisterCounter("decoder.gre", tv, TYPE_UINT64, "NULL");
dtv->counter_avg_pkt_size = PerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
TYPE_DOUBLE, "NULL");
dtv->counter_max_pkt_size = PerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
TYPE_UINT64, "NULL");
tv->pca = PerfGetAllCountersArray(&tv->pctx);
PerfAddToClubbedTMTable(tv->name, &tv->pctx);
dtv->counter_pkts = SCPerfTVRegisterCounter("decoder.pkts", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_bytes = SCPerfTVRegisterCounter("decoder.bytes", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ipv4 = SCPerfTVRegisterCounter("decoder.ipv4", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ipv6 = SCPerfTVRegisterCounter("decoder.ipv6", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_eth = SCPerfTVRegisterCounter("decoder.ethernet", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_sll = SCPerfTVRegisterCounter("decoder.sll", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_tcp = SCPerfTVRegisterCounter("decoder.tcp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_udp = SCPerfTVRegisterCounter("decoder.udp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_icmpv4 = SCPerfTVRegisterCounter("decoder.icmpv4", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_icmpv6 = SCPerfTVRegisterCounter("decoder.icmpv6", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ppp = SCPerfTVRegisterCounter("decoder.ppp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_pppoe = SCPerfTVRegisterCounter("decoder.pppoe", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_gre = SCPerfTVRegisterCounter("decoder.gre", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_avg_pkt_size = SCPerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
SC_PERF_TYPE_DOUBLE, "NULL");
dtv->counter_max_pkt_size = SCPerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
SC_PERF_TYPE_UINT64, "NULL");
tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
SCPerfAddToClubbedTMTable(tv->name, &tv->sc_perf_pctx);
*data = (void *)dtv;
return TM_ECODE_OK;
}

@ -285,10 +285,10 @@ TmEcode DecodePfring(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq)
DecodeThreadVars *dtv = (DecodeThreadVars *)data;
/* update counters */
PerfCounterIncr(dtv->counter_pkts, tv->pca);
PerfCounterAddUI64(dtv->counter_bytes, tv->pca, p->pktlen);
PerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->pca, p->pktlen);
PerfCounterSetUI64(dtv->counter_max_pkt_size, tv->pca, p->pktlen);
SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
DecodeEthernet(tv, dtv, p,p->pkt, p->pktlen, pq);
@ -315,28 +315,42 @@ TmEcode DecodePfringThreadInit(ThreadVars *tv, void *initdata, void **data)
memset(dtv, 0, sizeof(DecodeThreadVars));
/* register counters */
dtv->counter_pkts = PerfTVRegisterCounter("decoder.pkts", tv, TYPE_UINT64, "NULL");
dtv->counter_bytes = PerfTVRegisterCounter("decoder.bytes", tv, TYPE_UINT64, "NULL");
dtv->counter_ipv4 = PerfTVRegisterCounter("decoder.ipv4", tv, TYPE_UINT64, "NULL");
dtv->counter_ipv6 = PerfTVRegisterCounter("decoder.ipv6", tv, TYPE_UINT64, "NULL");
dtv->counter_eth = PerfTVRegisterCounter("decoder.ethernet", tv, TYPE_UINT64, "NULL");
dtv->counter_sll = PerfTVRegisterCounter("decoder.sll", tv, TYPE_UINT64, "NULL");
dtv->counter_tcp = PerfTVRegisterCounter("decoder.tcp", tv, TYPE_UINT64, "NULL");
dtv->counter_udp = PerfTVRegisterCounter("decoder.udp", tv, TYPE_UINT64, "NULL");
dtv->counter_icmpv4 = PerfTVRegisterCounter("decoder.icmpv4", tv, TYPE_UINT64, "NULL");
dtv->counter_icmpv6 = PerfTVRegisterCounter("decoder.icmpv6", tv, TYPE_UINT64, "NULL");
dtv->counter_ppp = PerfTVRegisterCounter("decoder.ppp", tv, TYPE_UINT64, "NULL");
dtv->counter_pppoe = PerfTVRegisterCounter("decoder.pppoe", tv, TYPE_UINT64, "NULL");
dtv->counter_gre = PerfTVRegisterCounter("decoder.gre", tv, TYPE_UINT64, "NULL");
dtv->counter_avg_pkt_size = PerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
TYPE_DOUBLE, "NULL");
dtv->counter_max_pkt_size = PerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
TYPE_UINT64, "NULL");
tv->pca = PerfGetAllCountersArray(&tv->pctx);
PerfAddToClubbedTMTable(tv->name, &tv->pctx);
dtv->counter_pkts = SCPerfTVRegisterCounter("decoder.pkts", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_bytes = SCPerfTVRegisterCounter("decoder.bytes", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ipv4 = SCPerfTVRegisterCounter("decoder.ipv4", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ipv6 = SCPerfTVRegisterCounter("decoder.ipv6", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_eth = SCPerfTVRegisterCounter("decoder.ethernet", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_sll = SCPerfTVRegisterCounter("decoder.sll", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_tcp = SCPerfTVRegisterCounter("decoder.tcp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_udp = SCPerfTVRegisterCounter("decoder.udp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_icmpv4 = SCPerfTVRegisterCounter("decoder.icmpv4", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_icmpv6 = SCPerfTVRegisterCounter("decoder.icmpv6", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_ppp = SCPerfTVRegisterCounter("decoder.ppp", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_pppoe = SCPerfTVRegisterCounter("decoder.pppoe", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_gre = SCPerfTVRegisterCounter("decoder.gre", tv,
SC_PERF_TYPE_UINT64, "NULL");
dtv->counter_avg_pkt_size = SCPerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
SC_PERF_TYPE_DOUBLE, "NULL");
dtv->counter_max_pkt_size = SCPerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
SC_PERF_TYPE_UINT64, "NULL");
tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
SCPerfAddToClubbedTMTable(tv->name, &tv->sc_perf_pctx);
*data = (void *)dtv;
return TM_ECODE_OK;
}
#endif /* HAVE_PFRING */

@ -284,7 +284,7 @@ static int StreamTcpPacketStateNone(ThreadVars *tv, Packet *p, StreamTcpThread *
if (ssn == NULL)
return -1;
PerfCounterIncr(stt->counter_tcp_sessions, tv->pca);
SCPerfCounterIncr(stt->counter_tcp_sessions, tv->sc_perf_pca);
}
/* set the state */
@ -326,7 +326,7 @@ static int StreamTcpPacketStateNone(ThreadVars *tv, Packet *p, StreamTcpThread *
ssn = StreamTcpNewSession(p);
if (ssn == NULL)
return -1;
PerfCounterIncr(stt->counter_tcp_sessions, tv->pca);
SCPerfCounterIncr(stt->counter_tcp_sessions, tv->sc_perf_pca);
}
/* set the state */
StreamTcpPacketSetState(p, ssn, TCP_SYN_RECV);
@ -387,7 +387,7 @@ static int StreamTcpPacketStateNone(ThreadVars *tv, Packet *p, StreamTcpThread *
ssn = StreamTcpNewSession(p);
if (ssn == NULL)
return -1;
PerfCounterIncr(stt->counter_tcp_sessions, tv->pca);
SCPerfCounterIncr(stt->counter_tcp_sessions, tv->sc_perf_pca);
}
/* set the state */
StreamTcpPacketSetState(p, ssn, TCP_ESTABLISHED);
@ -1495,9 +1495,10 @@ TmEcode StreamTcpThreadInit(ThreadVars *tv, void *initdata, void **data)
*data = (void *)stt;
stt->counter_tcp_sessions = PerfTVRegisterCounter("tcp.sessions", tv, TYPE_UINT64, "NULL");
tv->pca = PerfGetAllCountersArray(&tv->pctx);
PerfAddToClubbedTMTable(tv->name, &tv->pctx);
stt->counter_tcp_sessions = SCPerfTVRegisterCounter("tcp.sessions", tv,
SC_PERF_TYPE_UINT64, "NULL");
tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
SCPerfAddToClubbedTMTable(tv->name, &tv->sc_perf_pctx);
/* init reassembly ctx */
stt->ra_ctx = StreamTcpReassembleInitThreadCtx();

@ -57,8 +57,9 @@ typedef struct ThreadVars_ {
char set_cpu_affinity; /** bool: 0 no, 1 yes */
int cpu_affinity; /** cpu or core number to set affinity to */
PerfContext pctx;
PerfCounterArray *pca;
/* the perf counter context and the perf counter array */
SCPerfContext sc_perf_pctx;
SCPerfCounterArray *sc_perf_pca;
pthread_mutex_t *m;
pthread_cond_t *cond;

@ -135,7 +135,7 @@ void *TmThreadsSlot1NoIn(void *td) {
tv->tmqh_out(tv, p);
if (TmThreadsCheckFlag(tv, THV_KILL)) {
PerfUpdateCounterArray(tv->pca, &tv->pctx, 0);
SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0);
run = 0;
}
}
@ -193,7 +193,7 @@ void *TmThreadsSlot1NoOut(void *td) {
}
if (TmThreadsCheckFlag(tv, THV_KILL)) {
PerfUpdateCounterArray(tv->pca, &tv->pctx, 0);
SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0);
run = 0;
}
}
@ -252,7 +252,7 @@ void *TmThreadsSlot1NoInOut(void *td) {
if (TmThreadsCheckFlag(tv, THV_KILL)) {
//printf("%s: TmThreadsSlot1NoInOut: KILL is set\n", tv->name);
PerfUpdateCounterArray(tv->pca, &tv->pctx, 0);
SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0);
run = 0;
}
}
@ -330,7 +330,7 @@ void *TmThreadsSlot1(void *td) {
if (TmThreadsCheckFlag(tv, THV_KILL)) {
//printf("%s: TmThreadsSlot1: KILL is set\n", tv->name);
PerfUpdateCounterArray(tv->pca, &tv->pctx, 0);
SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0);
run = 0;
}
}
@ -443,7 +443,7 @@ void *TmThreadsSlotVar(void *td) {
if (TmThreadsCheckFlag(tv, THV_KILL)) {
//printf("%s: TmThreadsSlot1: KILL is set\n", tv->name);
PerfUpdateCounterArray(tv->pca, &tv->pctx, 0);
SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0);
run = 0;
}
}

@ -55,8 +55,8 @@ Packet *TmqhInputFlow(ThreadVars *tv)
pthread_cond_wait(&q->cond_q, &q->mutex_q);
}
if (tv->pctx.perf_flag == 1)
PerfUpdateCounterArray(tv->pca, &tv->pctx, 0);
if (tv->sc_perf_pctx.perf_flag == 1)
SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0);
if (q->len > 0) {
Packet *p = PacketDequeue(q);

@ -26,8 +26,8 @@ Packet *TmqhInputSimple(ThreadVars *t)
pthread_cond_wait(&q->cond_q, &q->mutex_q);
}
if (t->pctx.perf_flag == 1)
PerfUpdateCounterArray(t->pca, &t->pctx, 0);
if (t->sc_perf_pctx.perf_flag == 1)
SCPerfUpdateCounterArray(t->sc_perf_pca, &t->sc_perf_pctx, 0);
if (q->len > 0) {
Packet *p = PacketDequeue(q);

@ -23,6 +23,12 @@ typedef enum {
SC_INVALID_IPV4_ADDR,
SC_INVALID_IPV6_ADDR,
SC_ERR_INVALID_SIGNATURE,
SC_ERR_OPENING_FILE,
SC_INITIALIZATION_ERROR,
SC_THREAD_SPAWN_FAILED,
SC_ERR_SYSCALL,
SC_INVALID_ARGUMENTS,
SC_ERR_THREAD_CREATE_ERROR,
} SCError;
const char *SCErrorToString(SCError);

Loading…
Cancel
Save