From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 4533F6A87 for ; Thu, 31 Mar 2016 13:29:37 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP; 31 Mar 2016 04:29:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,422,1455004800"; d="scan'208";a="948730992" Received: from sie-lab-212-033.ir.intel.com (HELO silpixa00383881.ir.intel.com) ([10.237.212.33]) by fmsmga002.fm.intel.com with ESMTP; 31 Mar 2016 04:29:35 -0700 From: Fan Zhang To: dev@dpdk.org Date: Thu, 31 Mar 2016 12:29:34 +0100 Message-Id: <1459423774-10561-1-git-send-email-roy.fan.zhang@intel.com> X-Mailer: git-send-email 2.5.0 Subject: [dpdk-dev] [PATCH] examples/ip_pipeline: fix flow classification pipeline X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 31 Mar 2016 11:29:37 -0000 Fixes: examples/ip_pipeline: config parser clean-up This patch fixes the initialization error in flow classification pipeline. Originally, when there is no key_mask specified in the CFG file, all '0' mask is utilized. Signed-off-by: Fan Zhang Acked-by: Cristian Dumitrescu --- .../pipeline/pipeline_flow_classification_be.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c b/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c index 60e9c39..3da46b0 100644 --- a/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c +++ b/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c @@ -55,6 +55,7 @@ struct pipeline_flow_classification { uint32_t key_offset; uint32_t hash_offset; uint8_t key_mask[PIPELINE_FC_FLOW_KEY_MAX_SIZE]; + uint32_t key_mask_present; uint32_t flow_id_offset; } __rte_cache_aligned; @@ -308,7 +309,7 @@ pipeline_fc_parse_args(struct pipeline_flow_classification *p, "\"%s\" is too long", params->name, arg_name); - snprintf(key_mask_str, mask_str_len, "%s", + snprintf(key_mask_str, sizeof(key_mask_str), "%s", arg_value); continue; @@ -370,11 +371,21 @@ pipeline_fc_parse_args(struct pipeline_flow_classification *p, uint32_t key_size = p->key_size; int status; + PIPELINE_ARG_CHECK(((key_size == 8) || (key_size == 16)), + "Parse error in section \"%s\": entry key_mask " + "only allowed for key_size of 8 or 16 bytes", + params->name); + PIPELINE_ARG_CHECK((strlen(key_mask_str) == (key_size * 2)), "Parse error in section " "\"%s\": key_mask should have exactly %u hex " "digits", params->name, (key_size * 2)); + PIPELINE_ARG_CHECK((hash_offset_present == 0), "Parse " + "error in section \"%s\": entry hash_offset only " + "allowed when key_mask is not present", + params->name); + status = parse_hex_string(key_mask_str, p->key_mask, &p->key_size); @@ -383,6 +394,8 @@ pipeline_fc_parse_args(struct pipeline_flow_classification *p, "key_mask", key_mask_str); } + p->key_mask_present = key_mask_present; + return 0; } @@ -486,7 +499,8 @@ static void *pipeline_fc_init(struct pipeline_params *params, .signature_offset = p_fc->hash_offset, .key_offset = p_fc->key_offset, .f_hash = hash_func[(p_fc->key_size / 8) - 1], - .key_mask = p_fc->key_mask, + .key_mask = (p_fc->key_mask_present) ? + p_fc->key_mask : NULL, .seed = 0, }; @@ -497,7 +511,8 @@ static void *pipeline_fc_init(struct pipeline_params *params, .signature_offset = p_fc->hash_offset, .key_offset = p_fc->key_offset, .f_hash = hash_func[(p_fc->key_size / 8) - 1], - .key_mask = p_fc->key_mask, + .key_mask = (p_fc->key_mask_present) ? + p_fc->key_mask : NULL, .seed = 0, }; -- 2.5.0