summaryrefslogtreecommitdiffstats
path: root/VNFs/DPPD-PROX/run.c
diff options
context:
space:
mode:
Diffstat (limited to 'VNFs/DPPD-PROX/run.c')
-rw-r--r--VNFs/DPPD-PROX/run.c50
1 files changed, 39 insertions, 11 deletions
diff --git a/VNFs/DPPD-PROX/run.c b/VNFs/DPPD-PROX/run.c
index 971d7148..3abdb819 100644
--- a/VNFs/DPPD-PROX/run.c
+++ b/VNFs/DPPD-PROX/run.c
@@ -37,6 +37,7 @@
#include "input.h"
#include "input_curses.h"
#include "input_conn.h"
+#include "handle_master.h"
static int needs_refresh;
static uint64_t update_interval;
@@ -127,7 +128,10 @@ static void busy_wait_until(uint64_t deadline)
static void multiplexed_input_stats(uint64_t deadline)
{
- input_proc_until(deadline);
+ if (deadline)
+ input_proc_until(deadline);
+ else
+ input_proc();
if (needs_refresh) {
needs_refresh = 0;
@@ -164,6 +168,7 @@ void __attribute__((noreturn)) run(uint32_t flags)
uint64_t cur_tsc;
uint64_t next_update;
uint64_t stop_tsc = 0;
+ int ret = 0;
const uint64_t update_interval_threshold = usec_to_tsc(1);
if (flags & DSF_LISTEN_TCP)
@@ -209,20 +214,43 @@ void __attribute__((noreturn)) run(uint32_t flags)
cmd_rx_tx_info();
print_warnings();
- while (stop_prox == 0) {
+ struct task_master *task = (struct task_master *)lcore_cfg[prox_cfg.master].tasks_all[0];
+ if (handle_ctrl_plane) {
+ while (stop_prox == 0) {
+ ret = 1;
+ // Run ctrl plane for max 10 msec to let screen and keyboard updates
+ if (prox_cfg.flags & DSF_CTRL_PLANE_ENABLED) {
+ uint64_t ctrl_plane_update = rte_rdtsc() + msec_to_tsc(10);
+ while ((ret) && (rte_rdtsc() < ctrl_plane_update))
+ ret = handle_ctrl_plane(lcore_cfg[prox_cfg.master].tasks_all[0], NULL, 0);
+ }
+ multiplexed_input_stats(0);
+ if (rte_rdtsc() < next_update)
+ continue;
+ next_update += update_interval;
+ stats_update(stats_cons_flags);
+ stats_cons_notify();
+
+ if (stop_tsc && rte_rdtsc() >= stop_tsc) {
+ stop_prox = 1;
+ }
+ }
+ } else {
+ while (stop_prox == 0) {
- if (update_interval < update_interval_threshold)
- busy_wait_until(next_update);
- else
- multiplexed_input_stats(next_update);
+ if (update_interval < update_interval_threshold)
+ busy_wait_until(next_update);
+ else
+ multiplexed_input_stats(next_update);
- next_update += update_interval;
+ next_update += update_interval;
- stats_update(stats_cons_flags);
- stats_cons_notify();
+ stats_update(stats_cons_flags);
+ stats_cons_notify();
- if (stop_tsc && rte_rdtsc() >= stop_tsc) {
- stop_prox = 1;
+ if (stop_tsc && rte_rdtsc() >= stop_tsc) {
+ stop_prox = 1;
+ }
}
}