Skip to content

Commit

Permalink
new PktAcqBreakLoop callback in TmModule to terminate blocking functi…
Browse files Browse the repository at this point in the history
…ons in packet acquisition loop
  • Loading branch information
cardigliano committed Oct 20, 2015
1 parent 9635d21 commit 4c7d0ae
Show file tree
Hide file tree
Showing 14 changed files with 49 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/source-af-packet.c
Expand Up @@ -271,6 +271,7 @@ void TmModuleReceiveAFPRegister (void)
tmm_modules[TMM_RECEIVEAFP].ThreadInit = ReceiveAFPThreadInit;
tmm_modules[TMM_RECEIVEAFP].Func = NULL;
tmm_modules[TMM_RECEIVEAFP].PktAcqLoop = ReceiveAFPLoop;
tmm_modules[TMM_RECEIVEAFP].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVEAFP].ThreadExitPrintStats = ReceiveAFPThreadExitStats;
tmm_modules[TMM_RECEIVEAFP].ThreadDeinit = NULL;
tmm_modules[TMM_RECEIVEAFP].RegisterTests = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-erf-dag.c
Expand Up @@ -138,6 +138,7 @@ TmModuleReceiveErfDagRegister(void)
tmm_modules[TMM_RECEIVEERFDAG].ThreadInit = ReceiveErfDagThreadInit;
tmm_modules[TMM_RECEIVEERFDAG].Func = NULL;
tmm_modules[TMM_RECEIVEERFDAG].PktAcqLoop = ReceiveErfDagLoop;
tmm_modules[TMM_RECEIVEERFDAG].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVEERFDAG].ThreadExitPrintStats =
ReceiveErfDagThreadExitStats;
tmm_modules[TMM_RECEIVEERFDAG].ThreadDeinit = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-erf-file.c
Expand Up @@ -81,6 +81,7 @@ TmModuleReceiveErfFileRegister(void)
tmm_modules[TMM_RECEIVEERFFILE].ThreadInit = ReceiveErfFileThreadInit;
tmm_modules[TMM_RECEIVEERFFILE].Func = NULL;
tmm_modules[TMM_RECEIVEERFFILE].PktAcqLoop = ReceiveErfFileLoop;
tmm_modules[TMM_RECEIVEERFFILE].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVEERFFILE].ThreadExitPrintStats =
ReceiveErfFileThreadExitStats;
tmm_modules[TMM_RECEIVEERFFILE].ThreadDeinit = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-ipfw.c
Expand Up @@ -158,6 +158,7 @@ void TmModuleReceiveIPFWRegister (void)
tmm_modules[TMM_RECEIVEIPFW].ThreadInit = ReceiveIPFWThreadInit;
tmm_modules[TMM_RECEIVEIPFW].Func = NULL;
tmm_modules[TMM_RECEIVEIPFW].PktAcqLoop = ReceiveIPFWLoop;
tmm_modules[TMM_RECEIVEIPFW].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVEIPFW].ThreadExitPrintStats = ReceiveIPFWThreadExitStats;
tmm_modules[TMM_RECEIVEIPFW].ThreadDeinit = ReceiveIPFWThreadDeinit;
tmm_modules[TMM_RECEIVEIPFW].cap_flags = SC_CAP_NET_ADMIN | SC_CAP_NET_RAW |
Expand Down
1 change: 1 addition & 0 deletions src/source-mpipe.c
Expand Up @@ -173,6 +173,7 @@ void TmModuleReceiveMpipeRegister (void)
tmm_modules[TMM_RECEIVEMPIPE].ThreadInit = ReceiveMpipeThreadInit;
tmm_modules[TMM_RECEIVEMPIPE].Func = NULL;
tmm_modules[TMM_RECEIVEMPIPE].PktAcqLoop = ReceiveMpipeLoop;
tmm_modules[TMM_RECEIVEMPIPE].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVEMPIPE].ThreadExitPrintStats = ReceiveMpipeThreadExitStats;
tmm_modules[TMM_RECEIVEMPIPE].ThreadDeinit = NULL;
tmm_modules[TMM_RECEIVEMPIPE].RegisterTests = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-napatech.c
Expand Up @@ -110,6 +110,7 @@ void TmModuleNapatechStreamRegister(void)
tmm_modules[TMM_RECEIVENAPATECH].ThreadInit = NapatechStreamThreadInit;
tmm_modules[TMM_RECEIVENAPATECH].Func = NULL;
tmm_modules[TMM_RECEIVENAPATECH].PktAcqLoop = NapatechStreamLoop;
tmm_modules[TMM_RECEIVENAPATECH].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVENAPATECH].ThreadExitPrintStats = NapatechStreamThreadExitStats;
tmm_modules[TMM_RECEIVENAPATECH].ThreadDeinit = NapatechStreamThreadDeinit;
tmm_modules[TMM_RECEIVENAPATECH].RegisterTests = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-netmap.c
Expand Up @@ -1069,6 +1069,7 @@ void TmModuleReceiveNetmapRegister(void)
tmm_modules[TMM_RECEIVENETMAP].ThreadInit = ReceiveNetmapThreadInit;
tmm_modules[TMM_RECEIVENETMAP].Func = NULL;
tmm_modules[TMM_RECEIVENETMAP].PktAcqLoop = ReceiveNetmapLoop;
tmm_modules[TMM_RECEIVENETMAP].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVENETMAP].ThreadExitPrintStats = ReceiveNetmapThreadExitStats;
tmm_modules[TMM_RECEIVENETMAP].ThreadDeinit = ReceiveNetmapThreadDeinit;
tmm_modules[TMM_RECEIVENETMAP].RegisterTests = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-nflog.c
Expand Up @@ -117,6 +117,7 @@ void TmModuleReceiveNFLOGRegister (void)
tmm_modules[TMM_RECEIVENFLOG].ThreadInit = ReceiveNFLOGThreadInit;
tmm_modules[TMM_RECEIVENFLOG].Func = NULL;
tmm_modules[TMM_RECEIVENFLOG].PktAcqLoop = ReceiveNFLOGLoop;
tmm_modules[TMM_RECEIVENFLOG].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVENFLOG].ThreadExitPrintStats = ReceiveNFLOGThreadExitStats;
tmm_modules[TMM_RECEIVENFLOG].ThreadDeinit = ReceiveNFLOGThreadDeinit;
tmm_modules[TMM_RECEIVENFLOG].RegisterTests = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-nfq.c
Expand Up @@ -186,6 +186,7 @@ void TmModuleReceiveNFQRegister (void)
tmm_modules[TMM_RECEIVENFQ].ThreadInit = ReceiveNFQThreadInit;
tmm_modules[TMM_RECEIVENFQ].Func = NULL;
tmm_modules[TMM_RECEIVENFQ].PktAcqLoop = ReceiveNFQLoop;
tmm_modules[TMM_RECEIVENFQ].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVENFQ].ThreadExitPrintStats = ReceiveNFQThreadExitStats;
tmm_modules[TMM_RECEIVENFQ].ThreadDeinit = ReceiveNFQThreadDeinit;
tmm_modules[TMM_RECEIVENFQ].RegisterTests = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-pcap-file.c
Expand Up @@ -114,6 +114,7 @@ void TmModuleReceivePcapFileRegister (void)
tmm_modules[TMM_RECEIVEPCAPFILE].ThreadInit = ReceivePcapFileThreadInit;
tmm_modules[TMM_RECEIVEPCAPFILE].Func = NULL;
tmm_modules[TMM_RECEIVEPCAPFILE].PktAcqLoop = ReceivePcapFileLoop;
tmm_modules[TMM_RECEIVEPCAPFILE].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVEPCAPFILE].ThreadExitPrintStats = ReceivePcapFileThreadExitStats;
tmm_modules[TMM_RECEIVEPCAPFILE].ThreadDeinit = ReceivePcapFileThreadDeinit;
tmm_modules[TMM_RECEIVEPCAPFILE].RegisterTests = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/source-pcap.c
Expand Up @@ -128,6 +128,7 @@ void TmModuleReceivePcapRegister (void)
tmm_modules[TMM_RECEIVEPCAP].ThreadInit = ReceivePcapThreadInit;
tmm_modules[TMM_RECEIVEPCAP].Func = NULL;
tmm_modules[TMM_RECEIVEPCAP].PktAcqLoop = ReceivePcapLoop;
tmm_modules[TMM_RECEIVEPCAP].PktAcqBreakLoop = NULL;
tmm_modules[TMM_RECEIVEPCAP].ThreadExitPrintStats = ReceivePcapThreadExitStats;
tmm_modules[TMM_RECEIVEPCAP].ThreadDeinit = NULL;
tmm_modules[TMM_RECEIVEPCAP].RegisterTests = NULL;
Expand Down
33 changes: 30 additions & 3 deletions src/source-pfring.c
Expand Up @@ -62,6 +62,7 @@
#endif /* __SC_CUDA_SUPPORT__ */

TmEcode ReceivePfringLoop(ThreadVars *tv, void *data, void *slot);
TmEcode PfringBreakLoop(ThreadVars *tv, void *data);
TmEcode ReceivePfringThreadInit(ThreadVars *, void *, void **);
void ReceivePfringThreadExitStats(ThreadVars *, void *);
TmEcode ReceivePfringThreadDeinit(ThreadVars *, void *);
Expand Down Expand Up @@ -169,6 +170,7 @@ void TmModuleReceivePfringRegister (void)
tmm_modules[TMM_RECEIVEPFRING].ThreadInit = ReceivePfringThreadInit;
tmm_modules[TMM_RECEIVEPFRING].Func = NULL;
tmm_modules[TMM_RECEIVEPFRING].PktAcqLoop = ReceivePfringLoop;
tmm_modules[TMM_RECEIVEPFRING].PktAcqBreakLoop = PfringBreakLoop;
tmm_modules[TMM_RECEIVEPFRING].ThreadExitPrintStats = ReceivePfringThreadExitStats;
tmm_modules[TMM_RECEIVEPFRING].ThreadDeinit = ReceivePfringThreadDeinit;
tmm_modules[TMM_RECEIVEPFRING].RegisterTests = NULL;
Expand Down Expand Up @@ -366,6 +368,31 @@ TmEcode ReceivePfringLoop(ThreadVars *tv, void *data, void *slot)
return TM_ECODE_OK;
}

/**
* \brief Stop function for ReceivePfringLoop.
*
* This function forces ReceivePfringLoop to stop the
* execution, exiting the packet capture loop.
*
* \param tv pointer to ThreadVars
* \param data pointer that gets cast into PfringThreadVars for ptv
* \retval TM_ECODE_OK on success
* \retval TM_ECODE_FAILED on failure
*/
TmEcode PfringBreakLoop(ThreadVars *tv, void *data)
{
PfringThreadVars *ptv = (PfringThreadVars *)data;

/* Safety check */
if (ptv->pd == NULL) {
return TM_ECODE_FAILED;
}

pfring_breakloop(ptv->pd);

return TM_ECODE_OK;
}

/**
* \brief Init function for RecievePfring.
*
Expand Down Expand Up @@ -445,11 +472,11 @@ TmEcode ReceivePfringThreadInit(ThreadVars *tv, void *initdata, void **data)
pfconf->DerefFunc(pfconf);
SCFree(ptv);
return TM_ECODE_FAILED;
} else {
pfring_set_application_name(ptv->pd, PROG_NAME);
pfring_version(ptv->pd, &version);
}

pfring_set_application_name(ptv->pd, PROG_NAME);

This comment has been minimized.

Copy link
@regit

regit Oct 20, 2015

Contributor

Please don't mix different things in one commit. This is strictly not related to the announced change.

This comment has been minimized.

Copy link
@cardigliano

cardigliano Oct 21, 2015

Author Contributor

This just makes code more readable, compiled code (aka assembly) is exactly the same.
Do I have to send another pull request for a cosmetic change?

This comment has been minimized.

Copy link
@inliniac

inliniac Oct 21, 2015

Contributor
pfring_version(ptv->pd, &version);

/* We only set cluster info if the number of pfring threads is greater than 1 */
ptv->threads = pfconf->threads;

Expand Down
3 changes: 3 additions & 0 deletions src/tm-modules.h
Expand Up @@ -49,6 +49,9 @@ typedef struct TmModule_ {

TmEcode (*PktAcqLoop)(ThreadVars *, void *, void *);

/** terminates the capture loop in PktAcqLoop */
TmEcode (*PktAcqBreakLoop)(ThreadVars *, void *);

TmEcode (*Management)(ThreadVars *, void *);

/** global Init/DeInit */
Expand Down
6 changes: 5 additions & 1 deletion src/tm-threads.c
Expand Up @@ -1437,10 +1437,11 @@ void TmThreadDisableReceiveThreads(void)
* with all receive threads */
while (tv) {
int disable = 0;
TmModule *tm;
/* obtain the slots for this TV */
TmSlot *slots = tv->tm_slots;
while (slots != NULL) {
TmModule *tm = TmModuleGetById(slots->tm_id);
tm = TmModuleGetById(slots->tm_id);

if (tm->flags & TM_FLAG_RECEIVE_TM) {
disable = 1;
Expand Down Expand Up @@ -1469,6 +1470,9 @@ void TmThreadDisableReceiveThreads(void)
}

/* we found a receive TV. Send it a KILL_PKTACQ signal. */
if (tm->PktAcqBreakLoop != NULL) {
tm->PktAcqBreakLoop(tv, SC_ATOMIC_GET(slots->slot_data));
}
TmThreadsSetFlag(tv, THV_KILL_PKTACQ);

if (tv->inq != NULL) {
Expand Down

0 comments on commit 4c7d0ae

Please sign in to comment.