Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
snort: fix snort hang issue when interrupted
[vpp.git]
/
src
/
plugins
/
snort
/
daq_vpp.c
diff --git
a/src/plugins/snort/daq_vpp.c
b/src/plugins/snort/daq_vpp.c
index
090b28a
..
ec89b0c
100644
(file)
--- a/
src/plugins/snort/daq_vpp.c
+++ b/
src/plugins/snort/daq_vpp.c
@@
-113,6
+113,7
@@
typedef struct _vpp_context
daq_vpp_input_mode_t input_mode;
const char *socket_name;
daq_vpp_input_mode_t input_mode;
const char *socket_name;
+ volatile bool interrupted;
} VPP_Context_t;
static VPP_Context_t *global_vpp_ctx = 0;
} VPP_Context_t;
static VPP_Context_t *global_vpp_ctx = 0;
@@
-479,6
+480,16
@@
vpp_daq_start (void *handle)
return DAQ_SUCCESS;
}
return DAQ_SUCCESS;
}
+static int
+vpp_daq_interrupt (void *handle)
+{
+ VPP_Context_t *vc = (VPP_Context_t *) handle;
+
+ vc->interrupted = true;
+
+ return DAQ_SUCCESS;
+}
+
static int
vpp_daq_get_stats (void *handle, DAQ_Stats_t *stats)
{
static int
vpp_daq_get_stats (void *handle, DAQ_Stats_t *stats)
{
@@
-552,6
+563,14
@@
vpp_daq_msg_receive (void *handle, const unsigned max_recv,
uint32_t n_qpairs_left = vc->num_qpairs;
uint32_t n, n_events, n_recv = 0;
uint32_t n_qpairs_left = vc->num_qpairs;
uint32_t n, n_events, n_recv = 0;
+ /* If the receive has been interrupted, break out of loop and return. */
+ if (vc->interrupted)
+ {
+ vc->interrupted = false;
+ *rstat = DAQ_RSTAT_INTERRUPTED;
+ return 0;
+ }
+
/* first, we visit all qpairs. If we find any work there then we can give
* it back immediatelly. To avoid bias towards qpair 0 we remeber what
* next qpair */
/* first, we visit all qpairs. If we find any work there then we can give
* it back immediatelly. To avoid bias towards qpair 0 we remeber what
* next qpair */
@@
-676,7
+695,7
@@
const DAQ_ModuleAPI_t DAQ_MODULE_DATA = {
/* .start = */ vpp_daq_start,
/* .inject = */ NULL,
/* .inject_relative = */ NULL,
/* .start = */ vpp_daq_start,
/* .inject = */ NULL,
/* .inject_relative = */ NULL,
- /* .interrupt = */
NULL
,
+ /* .interrupt = */
vpp_daq_interrupt
,
/* .stop = */ NULL,
/* .ioctl = */ NULL,
/* .get_stats = */ vpp_daq_get_stats,
/* .stop = */ NULL,
/* .ioctl = */ NULL,
/* .get_stats = */ vpp_daq_get_stats,