X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fip_pipeline%2Fpipeline%2Fpipeline_flow_classification_be.c;h=8a762bc70d7a42ac87b1bfa401d2e14327712195;hb=99c12dcca65d;hp=c528dfb4bb3888c9ad00370b1d610e3750c4c9d0;hpb=1a33c5ea2f45cde3273ba278e953b8b21c0302d0;p=dpdk.git diff --git a/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c b/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c index c528dfb4bb..8a762bc70d 100644 --- a/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c +++ b/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c @@ -1,7 +1,7 @@ /*- * BSD LICENSE * - * Copyright(c) 2010-2015 Intel Corporation. All rights reserved. + * Copyright(c) 2010-2016 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -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; } @@ -462,7 +475,6 @@ static void *pipeline_fc_init(struct pipeline_params *params, .arg_create = pipeline_port_out_params_convert( ¶ms->port_out[i]), .f_action = NULL, - .f_action_bulk = NULL, .arg_ah = NULL, }; @@ -487,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, }; @@ -498,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, }; @@ -628,27 +642,6 @@ pipeline_fc_free(void *pipeline) return 0; } -static int -pipeline_fc_track(void *pipeline, - __rte_unused uint32_t port_in, - uint32_t *port_out) -{ - struct pipeline *p = (struct pipeline *) pipeline; - - /* Check input arguments */ - if ((p == NULL) || - (port_in >= p->n_ports_in) || - (port_out == NULL)) - return -1; - - if (p->n_ports_in == 1) { - *port_out = 0; - return 0; - } - - return -1; -} - static int pipeline_fc_timer(void *pipeline) { @@ -793,5 +786,4 @@ struct pipeline_be_ops pipeline_flow_classification_be_ops = { .f_free = pipeline_fc_free, .f_run = NULL, .f_timer = pipeline_fc_timer, - .f_track = pipeline_fc_track, };