X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=VNFs%2FDPPD-PROX%2Flconf.c;h=be2486e755dde39a70c4d576b16cdec8e0c17db1;hb=91a44713bf414610246df57478b406a5561b725f;hp=935bac5d3ad9cfcaca19c8404dc06f7cb3e3c893;hpb=2fbaf3b39062ae832ced4b62f823e6191ac79995;p=samplevnf.git diff --git a/VNFs/DPPD-PROX/lconf.c b/VNFs/DPPD-PROX/lconf.c index 935bac5d..be2486e7 100644 --- a/VNFs/DPPD-PROX/lconf.c +++ b/VNFs/DPPD-PROX/lconf.c @@ -1,5 +1,5 @@ /* -// Copyright (c) 2010-2017 Intel Corporation +// Copyright (c) 2010-2020 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -127,6 +127,10 @@ static void msg_stop(struct lcore_cfg *lconf) idx++; } } + // Check that task id is valid and running + if (idx == -1) + return; + lconf->task_is_running[lconf->msg.task_id] = 0; t = lconf->tasks_all[lconf->msg.task_id]; @@ -155,8 +159,14 @@ static void msg_start(struct lcore_cfg *lconf) t->aux->start(t); } lconf->n_tasks_run = lconf->n_tasks_all; + return; } - else if (lconf->n_tasks_run == 0) { + + // Check that task id is valid + if (lconf->msg.task_id >= lconf->n_tasks_all) + return; + + if (lconf->n_tasks_run == 0) { t = lconf->tasks_run[0] = lconf->tasks_all[lconf->msg.task_id]; lconf->n_tasks_run = 1; lconf->task_is_running[lconf->msg.task_id] = 1; @@ -167,9 +177,13 @@ static void msg_start(struct lcore_cfg *lconf) t->aux->start(t); } else { + if (lconf->task_is_running[lconf->msg.task_id]) + return; for (int i = lconf->n_tasks_run - 1; i >= 0; --i) { idx = lconf_get_task_id(lconf, lconf->tasks_run[i]); if (idx == lconf->msg.task_id) { + // We should not come here as checking earlier if task id is running... + plog_warn("Unexpectedly get request to start task %d already running\n", idx); break; } else if (idx > lconf->msg.task_id) { @@ -232,7 +246,7 @@ int lconf_do_flags(struct lcore_cfg *lconf) if (lconf->msg.type == LCONF_MSG_DUMP || lconf->msg.type == LCONF_MSG_DUMP_TX) { t->aux->task_rt_dump.n_print_tx = lconf->msg.val; - if (t->tx_pkt == tx_pkt_l3) { + if ((t->tx_pkt == tx_pkt_l3) || (t->tx_pkt == tx_pkt_ndp)) { if (t->aux->tx_pkt_orig) t->aux->tx_pkt_l2 = t->aux->tx_pkt_orig; t->aux->tx_pkt_orig = t->aux->tx_pkt_l2; @@ -250,11 +264,10 @@ int lconf_do_flags(struct lcore_cfg *lconf) t = lconf->tasks_all[lconf->msg.task_id]; if (lconf->msg.val) { - t->aux->task_rt_dump.n_trace = lconf->msg.val; - if (task_base_get_original_rx_pkt_function(t) != rx_pkt_dummy) { + t->aux->task_rt_dump.n_trace = lconf->msg.val; task_base_add_rx_pkt_function(t, rx_pkt_trace); - if (t->tx_pkt == tx_pkt_l3) { + if ((t->tx_pkt == tx_pkt_l3) || (t->tx_pkt == tx_pkt_ndp)) { if (t->aux->tx_pkt_orig) t->aux->tx_pkt_l2 = t->aux->tx_pkt_orig; t->aux->tx_pkt_orig = t->aux->tx_pkt_l2; @@ -267,7 +280,7 @@ int lconf_do_flags(struct lcore_cfg *lconf) } } else { t->aux->task_rt_dump.n_print_tx = lconf->msg.val; - if (t->tx_pkt == tx_pkt_l3) { + if ((t->tx_pkt == tx_pkt_l3) || (t->tx_pkt == tx_pkt_ndp)) { if (t->aux->tx_pkt_orig) t->aux->tx_pkt_l2 = t->aux->tx_pkt_orig; t->aux->tx_pkt_orig = t->aux->tx_pkt_l2; @@ -293,7 +306,7 @@ int lconf_do_flags(struct lcore_cfg *lconf) for (uint8_t task_id = 0; task_id < lconf->n_tasks_all; ++task_id) { t = lconf->tasks_all[task_id]; - if (t->tx_pkt == tx_pkt_l3) { + if ((t->tx_pkt == tx_pkt_l3) || (t->tx_pkt == tx_pkt_ndp)) { t->aux->tx_pkt_orig = t->aux->tx_pkt_l2; t->aux->tx_pkt_l2 = tx_pkt_distr; } else { @@ -315,7 +328,7 @@ int lconf_do_flags(struct lcore_cfg *lconf) for (uint8_t task_id = 0; task_id < lconf->n_tasks_all; ++task_id) { t = lconf->tasks_all[task_id]; if (t->aux->tx_pkt_orig) { - if (t->tx_pkt == tx_pkt_l3) { + if ((t->tx_pkt == tx_pkt_l3) || (t->tx_pkt == tx_pkt_ndp)) { t->aux->tx_pkt_l2 = t->aux->tx_pkt_orig; t->aux->tx_pkt_orig = NULL; } else { @@ -358,7 +371,7 @@ int lconf_do_flags(struct lcore_cfg *lconf) for (uint8_t task_id = 0; task_id < lconf->n_tasks_all; ++task_id) { t = lconf->tasks_all[task_id]; - if (t->tx_pkt == tx_pkt_l3) { + if ((t->tx_pkt == tx_pkt_l3) || (t->tx_pkt == tx_pkt_ndp)) { t->aux->tx_pkt_orig = t->aux->tx_pkt_l2; t->aux->tx_pkt_l2 = tx_pkt_bw; } else { @@ -372,7 +385,7 @@ int lconf_do_flags(struct lcore_cfg *lconf) for (uint8_t task_id = 0; task_id < lconf->n_tasks_all; ++task_id) { t = lconf->tasks_all[task_id]; if (t->aux->tx_pkt_orig) { - if (t->tx_pkt == tx_pkt_l3) { + if ((t->tx_pkt == tx_pkt_l3) || (t->tx_pkt == tx_pkt_ndp)) { t->aux->tx_pkt_l2 = t->aux->tx_pkt_orig; t->aux->tx_pkt_orig = NULL; } else {