X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=VNFs%2FDPPD-PROX%2Frx_pkt.c;h=075069c809d1d301025a83699be710eb757498bf;hb=2a7b2ff862fb75e8e3b34b58eb09dd4de8a6a28d;hp=bd06b2676ee477d75ba779103705b26efad1be8c;hpb=96b22a70386a9f8bde6a63eb383ebb7587fe4045;p=samplevnf.git diff --git a/VNFs/DPPD-PROX/rx_pkt.c b/VNFs/DPPD-PROX/rx_pkt.c index bd06b267..075069c8 100644 --- a/VNFs/DPPD-PROX/rx_pkt.c +++ b/VNFs/DPPD-PROX/rx_pkt.c @@ -77,7 +77,7 @@ static void next_port_pow2(struct rx_params_hw *rx_params_hw) static inline void dump_l3(struct task_base *tbase, struct rte_mbuf *mbuf) { if (unlikely(tbase->aux->task_rt_dump.n_print_rx)) { - if (tbase->aux->task_rt_dump.input->reply == NULL) { + if ((tbase->aux->task_rt_dump.input == NULL) || (tbase->aux->task_rt_dump.input->reply == NULL)) { plogdx_info(mbuf, "RX: "); } else { struct input *input = tbase->aux->task_rt_dump.input; @@ -145,7 +145,7 @@ static uint16_t rx_pkt_hw_param(struct task_base *tbase, struct rte_mbuf ***mbuf } if (skip) - TASK_STATS_ADD_DROP_HANDLED(&tbase->aux->stats, skip); + TASK_STATS_ADD_RX_NON_DP(&tbase->aux->stats, skip); if (likely(nb_rx > 0)) { TASK_STATS_ADD_RX(&tbase->aux->stats, nb_rx); return nb_rx - skip; @@ -201,7 +201,7 @@ static inline uint16_t rx_pkt_hw1_param(struct task_base *tbase, struct rte_mbuf } if (skip) - TASK_STATS_ADD_DROP_HANDLED(&tbase->aux->stats, skip); + TASK_STATS_ADD_RX_NON_DP(&tbase->aux->stats, skip); if (likely(nb_rx > 0)) { TASK_STATS_ADD_RX(&tbase->aux->stats, nb_rx); return nb_rx - skip; @@ -408,7 +408,7 @@ uint16_t rx_pkt_dump(struct task_base *tbase, struct rte_mbuf ***mbufs) uint32_t n_dump = tbase->aux->task_rt_dump.n_print_rx; n_dump = ret < n_dump? ret : n_dump; - if (tbase->aux->task_rt_dump.input->reply == NULL) { + if ((tbase->aux->task_rt_dump.input == NULL) || (tbase->aux->task_rt_dump.input->reply == NULL)) { for (uint32_t i = 0; i < n_dump; ++i) { plogdx_info((*mbufs)[i], "RX: "); } @@ -453,12 +453,13 @@ uint16_t rx_pkt_trace(struct task_base *tbase, struct rte_mbuf ***mbufs) if (ret) { uint32_t n_trace = tbase->aux->task_rt_dump.n_trace; n_trace = ret < n_trace? ret : n_trace; + n_trace = n_trace <= MAX_RING_BURST ? n_trace : MAX_RING_BURST; for (uint32_t i = 0; i < n_trace; ++i) { uint8_t *pkt = rte_pktmbuf_mtod((*mbufs)[i], uint8_t *); - rte_memcpy(tbase->aux->task_rt_dump.pkt_cpy[tbase->aux->task_rt_dump.cur_trace + i], pkt, sizeof(tbase->aux->task_rt_dump.pkt_cpy[i])); - tbase->aux->task_rt_dump.pkt_cpy_len[tbase->aux->task_rt_dump.cur_trace + i] = rte_pktmbuf_pkt_len((*mbufs)[i]); - tbase->aux->task_rt_dump.pkt_mbuf_addr[tbase->aux->task_rt_dump.cur_trace + i] = (*mbufs)[i]; + rte_memcpy(tbase->aux->task_rt_dump.pkt_cpy[i], pkt, sizeof(tbase->aux->task_rt_dump.pkt_cpy[i])); + tbase->aux->task_rt_dump.pkt_cpy_len[i] = rte_pktmbuf_pkt_len((*mbufs)[i]); + tbase->aux->task_rt_dump.pkt_mbuf_addr[i] = (*mbufs)[i]; } tbase->aux->task_rt_dump.cur_trace += n_trace; @@ -475,7 +476,10 @@ uint16_t rx_pkt_distr(struct task_base *tbase, struct rte_mbuf ***mbufs) { uint16_t ret = call_prev_rx_pkt(tbase, mbufs); - tbase->aux->rx_bucket[ret]++; + if (likely(ret < RX_BUCKET_SIZE)) + tbase->aux->rx_bucket[ret]++; + else + tbase->aux->rx_bucket[RX_BUCKET_SIZE - 1]++; return ret; } @@ -504,36 +508,3 @@ uint16_t rx_pkt_tsc(struct task_base *tbase, struct rte_mbuf ***mbufs) return ret; } - -uint16_t rx_pkt_all(struct task_base *tbase, struct rte_mbuf ***mbufs) -{ - uint16_t tot = 0; - uint16_t ret = 0; - struct rte_mbuf **new_mbufs; - struct rte_mbuf **dst = tbase->aux->all_mbufs; - - /* In case we receive less than MAX_PKT_BURST packets in one - iteration, do no perform any copying of mbuf pointers. Use - the buffer itself instead. */ - ret = call_prev_rx_pkt(tbase, &new_mbufs); - if (ret < MAX_PKT_BURST/2) { - *mbufs = new_mbufs; - return ret; - } - - memcpy(dst + tot, new_mbufs, ret * sizeof(*dst)); - tot += ret; - *mbufs = dst; - - do { - ret = call_prev_rx_pkt(tbase, &new_mbufs); - memcpy(dst + tot, new_mbufs, ret * sizeof(*dst)); - tot += ret; - } while (ret == MAX_PKT_BURST/2 && tot < MAX_RX_PKT_ALL - MAX_PKT_BURST); - - if (tot >= MAX_RX_PKT_ALL - MAX_PKT_BURST) { - plog_err("Could not receive all packets - buffer full\n"); - } - - return tot; -}