summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnand B Jyoti <anand.b.jyoti@intel.com>2017-07-12 08:12:31 +0530
committerAnand B Jyoti <anand.b.jyoti@intel.com>2017-07-12 08:12:31 +0530
commit8b92d721853117a67574ed3f3950cc1ae27a887a (patch)
treef56bd1ace9c2480b48b705d17bfd68bb2cb67e81
parent726de49600fb35ca00d460cb5e2ec400979a6546 (diff)
vFW: ARPICMP packets shouldn't be processed by vFW
JIRA: SAMPLEVNF-52 The stats counters are wrong when ARPICMP pkts are received by VFW pipeline in case of HWLB mode as the vFW is trying to process these pkts. The ARPICMP pkts shouldn't be processed by VFW pipeline, as these packets are processed by ARPICMP pipeline in case of HWLB. Change-Id: Iefe947a9f63fd4943f37900582656a9a4f957f5d Signed-off-by: Anand B Jyoti <anand.b.jyoti@intel.com>
-rw-r--r--VNFs/vFW/pipeline/pipeline_vfw_be.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/VNFs/vFW/pipeline/pipeline_vfw_be.c b/VNFs/vFW/pipeline/pipeline_vfw_be.c
index 7c532ed3..97508a77 100644
--- a/VNFs/vFW/pipeline/pipeline_vfw_be.c
+++ b/VNFs/vFW/pipeline/pipeline_vfw_be.c
@@ -599,9 +599,18 @@ rte_vfw_ipv4_packet_filter_and_process(struct rte_mbuf **pkts,
/* remove this packet from remaining list */
pkts_to_process &= ~pkt_mask;
- if (enable_hwlb)
- if (!check_arp_icmp(pkt, vfw_pipe))
- discard = 1;
+ if (enable_hwlb) {
+ if (!check_arp_icmp(pkt, vfw_pipe)) {
+ /* make next packet data the current */
+ pkts_to_process = next_pkts_to_process;
+ pos = next_pos;
+ pkt = next_pkt;
+ ihdr4 = next_iphdr;
+ pkt_mask = 1LLU << pos;
+ valid_packets &= ~pkt_mask;
+ continue;
+ }
+ }
uint32_t packet_length = rte_pktmbuf_pkt_len(pkt);
@@ -749,9 +758,18 @@ rte_vfw_ipv6_packet_filter_and_process(struct rte_mbuf **pkts,
/* remove this packet from remaining list */
pkts_to_process &= ~pkt_mask;
- if (enable_hwlb)
- if (!check_arp_icmp(pkt, vfw_pipe))
- discard = 1;
+ if (enable_hwlb) {
+ if (!check_arp_icmp(pkt, vfw_pipe)) {
+ /* make next packet data the current */
+ pkts_to_process = next_pkts_to_process;
+ pos = next_pos;
+ pkt = next_pkt;
+ ihdr6 = next_iphdr;
+ pkt_mask = 1LLU << pos;
+ valid_packets &= ~pkt_mask;
+ continue;
+ }
+ }
uint32_t packet_length = rte_pktmbuf_pkt_len(pkt);