diff mbox

[API-NEXT,PATCHv4,4/4] example: classifier: modifications for pmr create api

Message ID 1454519727-31240-5-git-send-email-bala.manoharan@linaro.org
State New
Headers show

Commit Message

Balasubramanian Manoharan Feb. 3, 2016, 5:15 p.m. UTC
Changes for packet match rule create function.

Signed-off-by: Balasubramanian Manoharan <bala.manoharan@linaro.org>
---
 example/classifier/odp_classifier.c | 38 ++++++++++++++++++++-----------------
 1 file changed, 21 insertions(+), 17 deletions(-)
diff mbox

Patch

diff --git a/example/classifier/odp_classifier.c b/example/classifier/odp_classifier.c
index 57a58d9..8e0a200 100644
--- a/example/classifier/odp_classifier.c
+++ b/example/classifier/odp_classifier.c
@@ -87,8 +87,8 @@  static void swap_pkt_addrs(odp_packet_t pkt_tbl[], unsigned len);
 static void parse_args(int argc, char *argv[], appl_args_t *appl_args);
 static void print_info(char *progname, appl_args_t *appl_args);
 static void usage(char *progname);
-static void configure_cos(odp_pktio_t pktio, appl_args_t *args);
-static void configure_default_cos(odp_pktio_t pktio, appl_args_t *args);
+static void configure_cos(odp_cos_t default_cos, appl_args_t *args);
+static odp_cos_t configure_default_cos(odp_pktio_t pktio, appl_args_t *args);
 static int convert_str_to_pmr_enum(char *token, odp_pmr_term_t *term,
 				   uint32_t *offset);
 static int parse_pmr_policy(appl_args_t *appl_args, char *argv[], char *optarg);
@@ -355,7 +355,7 @@  static void *pktio_receive_thread(void *arg)
 	return NULL;
 }
 
-static void configure_default_cos(odp_pktio_t pktio, appl_args_t *args)
+static odp_cos_t configure_default_cos(odp_pktio_t pktio, appl_args_t *args)
 {
 	odp_queue_param_t qparam;
 	const char *queue_name = "DefaultQueue";
@@ -417,9 +417,10 @@  static void configure_default_cos(odp_pktio_t pktio, appl_args_t *args)
 	odp_atomic_init_u64(&stats[args->policy_count].queue_pkt_count, 0);
 	odp_atomic_init_u64(&stats[args->policy_count].pool_pkt_count, 0);
 	args->policy_count++;
+	return cos_default;
 }
 
-static void configure_cos(odp_pktio_t pktio, appl_args_t *args)
+static void configure_cos(odp_cos_t default_cos, appl_args_t *args)
 {
 	char cos_name[ODP_COS_NAME_LEN];
 	char queue_name[ODP_QUEUE_NAME_LEN];
@@ -433,15 +434,6 @@  static void configure_cos(odp_pktio_t pktio, appl_args_t *args)
 	for (i = 0; i < args->policy_count; i++) {
 		stats = &args->stats[i];
 
-		const odp_pmr_match_t match = {
-			.term = stats->rule.term,
-			.val = &stats->rule.val,
-			.mask = &stats->rule.mask,
-			.val_sz = stats->rule.val_sz,
-			.offset = stats->rule.offset
-		};
-
-		stats->pmr = odp_pmr_create(&match);
 		odp_queue_param_init(&qparam);
 		qparam.type       = ODP_QUEUE_TYPE_SCHED;
 		qparam.sched.prio = i % odp_schedule_num_prio();
@@ -480,7 +472,17 @@  static void configure_cos(odp_pktio_t pktio, appl_args_t *args)
 		cls_param.drop_policy = ODP_COS_DROP_POOL;
 		stats->cos = odp_cls_cos_create(cos_name, &cls_param);
 
-		if (0 > odp_pktio_pmr_cos(stats->pmr, pktio, stats->cos)) {
+		const odp_pmr_match_t match = {
+			.term = stats->rule.term,
+			.val = &stats->rule.val,
+			.mask = &stats->rule.mask,
+			.val_sz = stats->rule.val_sz,
+			.offset = stats->rule.offset
+		};
+
+		stats->pmr = odp_cls_pmr_create(&match, 1, default_cos,
+						stats->cos);
+		if (stats->pmr == ODP_PMR_INVAL) {
 			EXAMPLE_ERR("odp_pktio_pmr_cos failed");
 			exit(EXIT_FAILURE);
 		}
@@ -505,6 +507,7 @@  int main(int argc, char *argv[])
 	odp_pool_param_t params;
 	odp_pktio_t pktio;
 	appl_args_t *args;
+	odp_cos_t default_cos;
 	odp_queue_t inq;
 	odp_shm_t shm;
 
@@ -576,10 +579,10 @@  int main(int argc, char *argv[])
 	/* create pktio per interface */
 	pktio = create_pktio(args->if_name, pool);
 
-	configure_cos(pktio, args);
-
 	/* configure default Cos */
-	configure_default_cos(pktio, args);
+	default_cos = configure_default_cos(pktio, args);
+
+	configure_cos(default_cos, args);
 
 	if (odp_pktio_start(pktio)) {
 		EXAMPLE_ERR("Error: unable to start pktio.\n");
@@ -606,6 +609,7 @@  int main(int argc, char *argv[])
 	print_cls_statistics(args);
 
 	for (i = 0; i < args->policy_count; i++) {
+		odp_cls_pmr_destroy(args->stats[i].pmr);
 		odp_cos_destroy(args->stats[i].cos);
 		odp_pool_destroy(args->stats[i].pool);
 		odp_queue_destroy(args->stats[i].queue);