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)) { if (TmThreadsCheckFlag(tv, THV_KILL)) {
PerfUpdateCounterArray(tv->pca, &tv->pctx, 0); SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0);
run = 0; run = 0;
} }
} }

File diff suppressed because it is too large Load Diff

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

@ -10,7 +10,7 @@
void DecodeEthernet(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq) 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) { if (len < ETHERNET_HEADER_LEN) {
DECODER_SET_EVENT(p,ETHERNET_PKT_TOO_SMALL); 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; uint16_t header_len = GRE_HDR_LEN;
GRESreHdr *gsre = NULL; GRESreHdr *gsre = NULL;
PerfCounterIncr(dtv->counter_gre, tv->pca); SCPerfCounterIncr(dtv->counter_gre, tv->sc_perf_pca);
if(len < GRE_HDR_LEN) { if(len < GRE_HDR_LEN) {
DECODER_SET_EVENT(p,GRE_PKT_TOO_SMALL); 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) 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) { if (len < ICMPV4_HEADER_LEN) {
DECODER_SET_EVENT(p,ICMPV4_PKT_TOO_SMALL); 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, void DecodeICMPV6(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p,
uint8_t *pkt, uint16_t len, PacketQueue *pq) 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) { if (len < ICMPV6_HEADER_LEN) {
SCLogDebug("ICMPV6_PKT_TOO_SMALL"); SCLogDebug("ICMPV6_PKT_TOO_SMALL");

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

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

@ -13,7 +13,7 @@
void DecodePPP(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq) 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) { if(len < PPP_HEADER_LEN) {
DECODER_SET_EVENT(p,PPP_PKT_TOO_SMALL); 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) 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) { if (len < PPPOE_DISCOVERY_HEADER_MIN_LEN) {
DECODER_SET_EVENT(p, PPPOE_PKT_TOO_SMALL); 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) 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) { if (len < PPPOE_SESSION_HEADER_LEN) {
DECODER_SET_EVENT(p, PPPOE_PKT_TOO_SMALL); 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) 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) { if (len < SLL_HEADER_LEN) {
DECODER_SET_EVENT(p,SLL_PKT_TOO_SMALL); 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) 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) { if (DecodeTCPPacket(tv, p,pkt,len) < 0) {
p->tcph = NULL; 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) 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) { if (DecodeUDPPacket(tv, p,pkt,len) < 0) {
p->udph = NULL; p->udph = NULL;

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

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

@ -576,7 +576,7 @@ void *FlowManagerThread(void *td)
} }
if (TmThreadsCheckFlag(th_v, THV_KILL)) { 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; break;
} }

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

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

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

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

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

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

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

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

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

@ -23,6 +23,12 @@ typedef enum {
SC_INVALID_IPV4_ADDR, SC_INVALID_IPV4_ADDR,
SC_INVALID_IPV6_ADDR, SC_INVALID_IPV6_ADDR,
SC_ERR_INVALID_SIGNATURE, 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; } SCError;
const char *SCErrorToString(SCError); const char *SCErrorToString(SCError);

Loading…
Cancel
Save