xref: /f-stack/dpdk/app/test/test_meter.c (revision 4418919f)
1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
2*4418919fSjohnjiang  * Copyright(c) 2010-2014 Intel Corporation
3*4418919fSjohnjiang  */
4*4418919fSjohnjiang 
5*4418919fSjohnjiang #include <stdlib.h>
6*4418919fSjohnjiang #include <stdio.h>
7*4418919fSjohnjiang #include <string.h>
8*4418919fSjohnjiang #include <stdint.h>
9*4418919fSjohnjiang #include <unistd.h>
10*4418919fSjohnjiang 
11*4418919fSjohnjiang #include "test.h"
12*4418919fSjohnjiang 
13*4418919fSjohnjiang #include <rte_cycles.h>
14*4418919fSjohnjiang #include <rte_meter.h>
15*4418919fSjohnjiang 
16*4418919fSjohnjiang #define mlog(format, ...) do{\
17*4418919fSjohnjiang 		printf("Line %d:",__LINE__);\
18*4418919fSjohnjiang 		printf(format, ##__VA_ARGS__);\
19*4418919fSjohnjiang 		printf("\n");\
20*4418919fSjohnjiang 	}while(0);
21*4418919fSjohnjiang 
22*4418919fSjohnjiang #define melog(format, ...) do{\
23*4418919fSjohnjiang 		printf("Line %d:",__LINE__);\
24*4418919fSjohnjiang 		printf(format, ##__VA_ARGS__);\
25*4418919fSjohnjiang 		printf(" failed!\n");\
26*4418919fSjohnjiang 		return -1;\
27*4418919fSjohnjiang 	}while(0);
28*4418919fSjohnjiang 
29*4418919fSjohnjiang #define TM_TEST_SRTCM_CIR_DF 46000000
30*4418919fSjohnjiang #define TM_TEST_SRTCM_CBS_DF 2048
31*4418919fSjohnjiang #define TM_TEST_SRTCM_EBS_DF 4096
32*4418919fSjohnjiang 
33*4418919fSjohnjiang #define TM_TEST_TRTCM_CIR_DF 46000000
34*4418919fSjohnjiang #define TM_TEST_TRTCM_PIR_DF 69000000
35*4418919fSjohnjiang #define TM_TEST_TRTCM_EIR_DF 69000000
36*4418919fSjohnjiang #define TM_TEST_TRTCM_CBS_DF 2048
37*4418919fSjohnjiang #define TM_TEST_TRTCM_PBS_DF 4096
38*4418919fSjohnjiang #define TM_TEST_TRTCM_EBS_DF 4096
39*4418919fSjohnjiang 
40*4418919fSjohnjiang static struct rte_meter_srtcm_params sparams =
41*4418919fSjohnjiang 				{.cir = TM_TEST_SRTCM_CIR_DF,
42*4418919fSjohnjiang 				 .cbs = TM_TEST_SRTCM_CBS_DF,
43*4418919fSjohnjiang 				 .ebs = TM_TEST_SRTCM_EBS_DF,};
44*4418919fSjohnjiang 
45*4418919fSjohnjiang static struct	rte_meter_trtcm_params tparams=
46*4418919fSjohnjiang 				{.cir = TM_TEST_TRTCM_CIR_DF,
47*4418919fSjohnjiang 				 .pir = TM_TEST_TRTCM_PIR_DF,
48*4418919fSjohnjiang 				 .cbs = TM_TEST_TRTCM_CBS_DF,
49*4418919fSjohnjiang 				 .pbs = TM_TEST_TRTCM_PBS_DF,};
50*4418919fSjohnjiang 
51*4418919fSjohnjiang static struct rte_meter_trtcm_rfc4115_params rfc4115params =
52*4418919fSjohnjiang 				{.cir = TM_TEST_TRTCM_CIR_DF,
53*4418919fSjohnjiang 				 .eir = TM_TEST_TRTCM_EIR_DF,
54*4418919fSjohnjiang 				 .cbs = TM_TEST_TRTCM_CBS_DF,
55*4418919fSjohnjiang 				 .ebs = TM_TEST_TRTCM_EBS_DF,};
56*4418919fSjohnjiang 
57*4418919fSjohnjiang /**
58*4418919fSjohnjiang  * functional test for rte_meter_srtcm_config
59*4418919fSjohnjiang  */
60*4418919fSjohnjiang static inline int
tm_test_srtcm_config(void)61*4418919fSjohnjiang tm_test_srtcm_config(void)
62*4418919fSjohnjiang {
63*4418919fSjohnjiang #define SRTCM_CFG_MSG "srtcm_config"
64*4418919fSjohnjiang 	struct rte_meter_srtcm_profile sp;
65*4418919fSjohnjiang 	struct  rte_meter_srtcm_params sparams1;
66*4418919fSjohnjiang 
67*4418919fSjohnjiang 	/* invalid parameter test */
68*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(NULL, NULL) == 0)
69*4418919fSjohnjiang 		melog(SRTCM_CFG_MSG);
70*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, NULL) == 0)
71*4418919fSjohnjiang 		melog(SRTCM_CFG_MSG);
72*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(NULL, &sparams) == 0)
73*4418919fSjohnjiang 		melog(SRTCM_CFG_MSG);
74*4418919fSjohnjiang 
75*4418919fSjohnjiang 	/* cbs and ebs can't both be zero */
76*4418919fSjohnjiang 	sparams1 = sparams;
77*4418919fSjohnjiang 	sparams1.cbs = 0;
78*4418919fSjohnjiang 	sparams1.ebs = 0;
79*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams1) == 0)
80*4418919fSjohnjiang 		melog(SRTCM_CFG_MSG);
81*4418919fSjohnjiang 
82*4418919fSjohnjiang 	/* cir should never be 0 */
83*4418919fSjohnjiang 	sparams1 = sparams;
84*4418919fSjohnjiang 	sparams1.cir = 0;
85*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams1) == 0)
86*4418919fSjohnjiang 		melog(SRTCM_CFG_MSG);
87*4418919fSjohnjiang 
88*4418919fSjohnjiang 	/* one of ebs and cbs can be zero, should be successful */
89*4418919fSjohnjiang 	sparams1 = sparams;
90*4418919fSjohnjiang 	sparams1.ebs = 0;
91*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams1) != 0)
92*4418919fSjohnjiang 		melog(SRTCM_CFG_MSG);
93*4418919fSjohnjiang 
94*4418919fSjohnjiang 	sparams1 = sparams;
95*4418919fSjohnjiang 	sparams1.cbs = 0;
96*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams1) != 0)
97*4418919fSjohnjiang 		melog(SRTCM_CFG_MSG);
98*4418919fSjohnjiang 
99*4418919fSjohnjiang 	/* usual parameter, should be successful */
100*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
101*4418919fSjohnjiang 		melog(SRTCM_CFG_MSG);
102*4418919fSjohnjiang 
103*4418919fSjohnjiang 	return 0;
104*4418919fSjohnjiang 
105*4418919fSjohnjiang }
106*4418919fSjohnjiang 
107*4418919fSjohnjiang /**
108*4418919fSjohnjiang  * functional test for rte_meter_trtcm_config
109*4418919fSjohnjiang  */
110*4418919fSjohnjiang static inline int
tm_test_trtcm_config(void)111*4418919fSjohnjiang tm_test_trtcm_config(void)
112*4418919fSjohnjiang {
113*4418919fSjohnjiang 	struct rte_meter_trtcm_profile tp;
114*4418919fSjohnjiang 	struct  rte_meter_trtcm_params tparams1;
115*4418919fSjohnjiang #define TRTCM_CFG_MSG "trtcm_config"
116*4418919fSjohnjiang 
117*4418919fSjohnjiang 	/* invalid parameter test */
118*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(NULL, NULL) == 0)
119*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG);
120*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, NULL) == 0)
121*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG);
122*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(NULL, &tparams) == 0)
123*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG);
124*4418919fSjohnjiang 
125*4418919fSjohnjiang 	/* cir, cbs, pir and pbs never be zero */
126*4418919fSjohnjiang 	tparams1 = tparams;
127*4418919fSjohnjiang 	tparams1.cir = 0;
128*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
129*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG);
130*4418919fSjohnjiang 
131*4418919fSjohnjiang 	tparams1 = tparams;
132*4418919fSjohnjiang 	tparams1.cbs = 0;
133*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
134*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG);
135*4418919fSjohnjiang 
136*4418919fSjohnjiang 	tparams1 = tparams;
137*4418919fSjohnjiang 	tparams1.pbs = 0;
138*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
139*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG);
140*4418919fSjohnjiang 
141*4418919fSjohnjiang 	tparams1 = tparams;
142*4418919fSjohnjiang 	tparams1.pir = 0;
143*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
144*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG);
145*4418919fSjohnjiang 
146*4418919fSjohnjiang 	/* pir should be greater or equal to cir */
147*4418919fSjohnjiang 	tparams1 = tparams;
148*4418919fSjohnjiang 	tparams1.pir = tparams1.cir - 1;
149*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
150*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG" pir < cir test");
151*4418919fSjohnjiang 
152*4418919fSjohnjiang 	/* usual parameter, should be successful */
153*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
154*4418919fSjohnjiang 		melog(TRTCM_CFG_MSG);
155*4418919fSjohnjiang 
156*4418919fSjohnjiang 	return 0;
157*4418919fSjohnjiang }
158*4418919fSjohnjiang 
159*4418919fSjohnjiang /**
160*4418919fSjohnjiang  * functional test for rte_meter_trtcm_rfc4115_config
161*4418919fSjohnjiang  */
162*4418919fSjohnjiang static inline int
tm_test_trtcm_rfc4115_config(void)163*4418919fSjohnjiang tm_test_trtcm_rfc4115_config(void)
164*4418919fSjohnjiang {
165*4418919fSjohnjiang 	struct rte_meter_trtcm_rfc4115_profile tp;
166*4418919fSjohnjiang 	struct  rte_meter_trtcm_rfc4115_params rfc4115params1;
167*4418919fSjohnjiang #define TRTCM_RFC4115_CFG_MSG "trtcm_rfc4115_config"
168*4418919fSjohnjiang 
169*4418919fSjohnjiang 	/* invalid parameter test */
170*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(NULL, NULL) == 0)
171*4418919fSjohnjiang 		melog(TRTCM_RFC4115_CFG_MSG);
172*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, NULL) == 0)
173*4418919fSjohnjiang 		melog(TRTCM_RFC4115_CFG_MSG);
174*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(NULL, &rfc4115params) == 0)
175*4418919fSjohnjiang 		melog(TRTCM_RFC4115_CFG_MSG);
176*4418919fSjohnjiang 
177*4418919fSjohnjiang 	/*
178*4418919fSjohnjiang 	 * cbs and pbs should be none-zero if cir and eir are none-zero
179*4418919fSjohnjiang 	 * respectively
180*4418919fSjohnjiang 	 */
181*4418919fSjohnjiang 	rfc4115params1 = rfc4115params;
182*4418919fSjohnjiang 	rfc4115params1.cbs = 0;
183*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params1) == 0)
184*4418919fSjohnjiang 		melog(TRTCM_RFC4115_CFG_MSG);
185*4418919fSjohnjiang 
186*4418919fSjohnjiang 	rfc4115params1 = rfc4115params;
187*4418919fSjohnjiang 	rfc4115params1.ebs = 0;
188*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params1) == 0)
189*4418919fSjohnjiang 		melog(TRTCM_RFC4115_CFG_MSG);
190*4418919fSjohnjiang 
191*4418919fSjohnjiang 	/* usual parameter, should be successful */
192*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
193*4418919fSjohnjiang 		melog(TRTCM_RFC4115_CFG_MSG);
194*4418919fSjohnjiang 
195*4418919fSjohnjiang 	return 0;
196*4418919fSjohnjiang }
197*4418919fSjohnjiang 
198*4418919fSjohnjiang /**
199*4418919fSjohnjiang  * functional test for rte_meter_srtcm_color_blind_check
200*4418919fSjohnjiang  */
201*4418919fSjohnjiang static inline int
tm_test_srtcm_color_blind_check(void)202*4418919fSjohnjiang tm_test_srtcm_color_blind_check(void)
203*4418919fSjohnjiang {
204*4418919fSjohnjiang #define SRTCM_BLIND_CHECK_MSG "srtcm_blind_check"
205*4418919fSjohnjiang 	struct rte_meter_srtcm_profile sp;
206*4418919fSjohnjiang 	struct rte_meter_srtcm sm;
207*4418919fSjohnjiang 	uint64_t time;
208*4418919fSjohnjiang 	uint64_t hz = rte_get_tsc_hz();
209*4418919fSjohnjiang 
210*4418919fSjohnjiang 	/* Test green */
211*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
212*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG);
213*4418919fSjohnjiang 	if (rte_meter_srtcm_config(&sm, &sp) != 0)
214*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG);
215*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
216*4418919fSjohnjiang 	if (rte_meter_srtcm_color_blind_check(
217*4418919fSjohnjiang 		&sm, &sp, time, TM_TEST_SRTCM_CBS_DF - 1)
218*4418919fSjohnjiang 		!= RTE_COLOR_GREEN)
219*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG" GREEN");
220*4418919fSjohnjiang 
221*4418919fSjohnjiang 	/* Test yellow */
222*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
223*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG);
224*4418919fSjohnjiang 	if (rte_meter_srtcm_config(&sm, &sp) != 0)
225*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG);
226*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
227*4418919fSjohnjiang 	if (rte_meter_srtcm_color_blind_check(
228*4418919fSjohnjiang 		&sm, &sp, time, TM_TEST_SRTCM_CBS_DF + 1)
229*4418919fSjohnjiang 		!= RTE_COLOR_YELLOW)
230*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG" YELLOW");
231*4418919fSjohnjiang 
232*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
233*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG);
234*4418919fSjohnjiang 	if (rte_meter_srtcm_config(&sm, &sp) != 0)
235*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG);
236*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
237*4418919fSjohnjiang 	if (rte_meter_srtcm_color_blind_check(
238*4418919fSjohnjiang 		&sm, &sp, time, (uint32_t)sp.ebs - 1) != RTE_COLOR_YELLOW)
239*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG" YELLOW");
240*4418919fSjohnjiang 
241*4418919fSjohnjiang 	/* Test red */
242*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
243*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG);
244*4418919fSjohnjiang 	if (rte_meter_srtcm_config(&sm, &sp) != 0)
245*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG);
246*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
247*4418919fSjohnjiang 	if (rte_meter_srtcm_color_blind_check(
248*4418919fSjohnjiang 		&sm, &sp, time, TM_TEST_SRTCM_EBS_DF + 1)
249*4418919fSjohnjiang 		!= RTE_COLOR_RED)
250*4418919fSjohnjiang 		melog(SRTCM_BLIND_CHECK_MSG" RED");
251*4418919fSjohnjiang 
252*4418919fSjohnjiang 	return 0;
253*4418919fSjohnjiang 
254*4418919fSjohnjiang }
255*4418919fSjohnjiang 
256*4418919fSjohnjiang /**
257*4418919fSjohnjiang  * functional test for rte_meter_trtcm_color_blind_check
258*4418919fSjohnjiang  */
259*4418919fSjohnjiang static inline int
tm_test_trtcm_color_blind_check(void)260*4418919fSjohnjiang tm_test_trtcm_color_blind_check(void)
261*4418919fSjohnjiang {
262*4418919fSjohnjiang #define TRTCM_BLIND_CHECK_MSG "trtcm_blind_check"
263*4418919fSjohnjiang 
264*4418919fSjohnjiang 	uint64_t time;
265*4418919fSjohnjiang 	struct rte_meter_trtcm_profile tp;
266*4418919fSjohnjiang 	struct rte_meter_trtcm tm;
267*4418919fSjohnjiang 	uint64_t hz = rte_get_tsc_hz();
268*4418919fSjohnjiang 
269*4418919fSjohnjiang 	/* Test green */
270*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
271*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG);
272*4418919fSjohnjiang 	if (rte_meter_trtcm_config(&tm, &tp) != 0)
273*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG);
274*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
275*4418919fSjohnjiang 	if (rte_meter_trtcm_color_blind_check(
276*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_CBS_DF - 1)
277*4418919fSjohnjiang 		!= RTE_COLOR_GREEN)
278*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG" GREEN");
279*4418919fSjohnjiang 
280*4418919fSjohnjiang 	/* Test yellow */
281*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
282*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG);
283*4418919fSjohnjiang 	if (rte_meter_trtcm_config(&tm, &tp) != 0)
284*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG);
285*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
286*4418919fSjohnjiang 	if (rte_meter_trtcm_color_blind_check(
287*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_CBS_DF + 1)
288*4418919fSjohnjiang 		!= RTE_COLOR_YELLOW)
289*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG" YELLOW");
290*4418919fSjohnjiang 
291*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
292*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG);
293*4418919fSjohnjiang 	if (rte_meter_trtcm_config(&tm, &tp) != 0)
294*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG);
295*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
296*4418919fSjohnjiang 	if (rte_meter_trtcm_color_blind_check(
297*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_PBS_DF - 1)
298*4418919fSjohnjiang 		!= RTE_COLOR_YELLOW)
299*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG" YELLOW");
300*4418919fSjohnjiang 
301*4418919fSjohnjiang 	/* Test red */
302*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
303*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG);
304*4418919fSjohnjiang 	if (rte_meter_trtcm_config(&tm, &tp) != 0)
305*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG);
306*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
307*4418919fSjohnjiang 	if (rte_meter_trtcm_color_blind_check(
308*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_PBS_DF + 1)
309*4418919fSjohnjiang 		!= RTE_COLOR_RED)
310*4418919fSjohnjiang 		melog(TRTCM_BLIND_CHECK_MSG" RED");
311*4418919fSjohnjiang 
312*4418919fSjohnjiang 	return 0;
313*4418919fSjohnjiang }
314*4418919fSjohnjiang 
315*4418919fSjohnjiang /**
316*4418919fSjohnjiang  * functional test for rte_meter_trtcm_rfc4115_color_blind_check
317*4418919fSjohnjiang  */
318*4418919fSjohnjiang static inline int
tm_test_trtcm_rfc4115_color_blind_check(void)319*4418919fSjohnjiang tm_test_trtcm_rfc4115_color_blind_check(void)
320*4418919fSjohnjiang {
321*4418919fSjohnjiang #define TRTCM_RFC4115_BLIND_CHECK_MSG "trtcm_rfc4115_blind_check"
322*4418919fSjohnjiang 
323*4418919fSjohnjiang 	uint64_t time;
324*4418919fSjohnjiang 	struct rte_meter_trtcm_rfc4115_profile tp;
325*4418919fSjohnjiang 	struct rte_meter_trtcm_rfc4115 tm;
326*4418919fSjohnjiang 	uint64_t hz = rte_get_tsc_hz();
327*4418919fSjohnjiang 
328*4418919fSjohnjiang 	/* Test green */
329*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
330*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG);
331*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_config(&tm, &tp) != 0)
332*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG);
333*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
334*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_color_blind_check(
335*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_CBS_DF - 1)
336*4418919fSjohnjiang 		!= RTE_COLOR_GREEN)
337*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG" GREEN");
338*4418919fSjohnjiang 
339*4418919fSjohnjiang 	/* Test yellow */
340*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
341*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG);
342*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_config(&tm, &tp) != 0)
343*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG);
344*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
345*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_color_blind_check(
346*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_CBS_DF + 1)
347*4418919fSjohnjiang 		!= RTE_COLOR_YELLOW)
348*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG" YELLOW");
349*4418919fSjohnjiang 
350*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
351*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG);
352*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_config(&tm, &tp) != 0)
353*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG);
354*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
355*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_color_blind_check(
356*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_EBS_DF - 1)
357*4418919fSjohnjiang 		!= RTE_COLOR_YELLOW)
358*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG" YELLOW");
359*4418919fSjohnjiang 
360*4418919fSjohnjiang 	/* Test red */
361*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
362*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG);
363*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_config(&tm, &tp) != 0)
364*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG);
365*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
366*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_color_blind_check(
367*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_EBS_DF + 1)
368*4418919fSjohnjiang 		!= RTE_COLOR_RED)
369*4418919fSjohnjiang 		melog(TRTCM_RFC4115_BLIND_CHECK_MSG" RED");
370*4418919fSjohnjiang 
371*4418919fSjohnjiang 	return 0;
372*4418919fSjohnjiang }
373*4418919fSjohnjiang 
374*4418919fSjohnjiang 
375*4418919fSjohnjiang /**
376*4418919fSjohnjiang  * @in[4] : the flags packets carries.
377*4418919fSjohnjiang  * @in[4] : the flags function expect to return.
378*4418919fSjohnjiang  * It will do blind check at the time of 1 second from beginning.
379*4418919fSjohnjiang  * At the time, it will use packets length of cbs -1, cbs + 1,
380*4418919fSjohnjiang  * ebs -1 and ebs +1 with flag in[0], in[1], in[2] and in[3] to do
381*4418919fSjohnjiang  * aware check, expect flag out[0], out[1], out[2] and out[3]
382*4418919fSjohnjiang  */
383*4418919fSjohnjiang 
384*4418919fSjohnjiang static inline int
tm_test_srtcm_aware_check(enum rte_color in[4],enum rte_color out[4])385*4418919fSjohnjiang tm_test_srtcm_aware_check
386*4418919fSjohnjiang (enum rte_color in[4], enum rte_color out[4])
387*4418919fSjohnjiang {
388*4418919fSjohnjiang #define SRTCM_AWARE_CHECK_MSG "srtcm_aware_check"
389*4418919fSjohnjiang 	struct rte_meter_srtcm_profile sp;
390*4418919fSjohnjiang 	struct rte_meter_srtcm sm;
391*4418919fSjohnjiang 	uint64_t time;
392*4418919fSjohnjiang 	uint64_t hz = rte_get_tsc_hz();
393*4418919fSjohnjiang 
394*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
395*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG);
396*4418919fSjohnjiang 	if (rte_meter_srtcm_config(&sm, &sp) != 0)
397*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG);
398*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
399*4418919fSjohnjiang 	if (rte_meter_srtcm_color_aware_check(
400*4418919fSjohnjiang 		&sm, &sp, time, TM_TEST_SRTCM_CBS_DF - 1, in[0]) != out[0])
401*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[0], out[0]);
402*4418919fSjohnjiang 
403*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
404*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG);
405*4418919fSjohnjiang 	if (rte_meter_srtcm_config(&sm, &sp) != 0)
406*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG);
407*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
408*4418919fSjohnjiang 	if (rte_meter_srtcm_color_aware_check(
409*4418919fSjohnjiang 		&sm, &sp, time, TM_TEST_SRTCM_CBS_DF + 1, in[1]) != out[1])
410*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[1], out[1]);
411*4418919fSjohnjiang 
412*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
413*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG);
414*4418919fSjohnjiang 	if (rte_meter_srtcm_config(&sm, &sp) != 0)
415*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG);
416*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
417*4418919fSjohnjiang 	if (rte_meter_srtcm_color_aware_check(
418*4418919fSjohnjiang 		&sm, &sp, time, TM_TEST_SRTCM_EBS_DF - 1, in[2]) != out[2])
419*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[2], out[2]);
420*4418919fSjohnjiang 
421*4418919fSjohnjiang 	if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
422*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG);
423*4418919fSjohnjiang 	if (rte_meter_srtcm_config(&sm, &sp) != 0)
424*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG);
425*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
426*4418919fSjohnjiang 	if (rte_meter_srtcm_color_aware_check(
427*4418919fSjohnjiang 		&sm, &sp, time, TM_TEST_SRTCM_EBS_DF + 1, in[3]) != out[3])
428*4418919fSjohnjiang 		melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[3], out[3]);
429*4418919fSjohnjiang 
430*4418919fSjohnjiang 	return 0;
431*4418919fSjohnjiang }
432*4418919fSjohnjiang 
433*4418919fSjohnjiang 
434*4418919fSjohnjiang /**
435*4418919fSjohnjiang  * functional test for rte_meter_srtcm_color_aware_check
436*4418919fSjohnjiang  */
437*4418919fSjohnjiang static inline int
tm_test_srtcm_color_aware_check(void)438*4418919fSjohnjiang tm_test_srtcm_color_aware_check(void)
439*4418919fSjohnjiang {
440*4418919fSjohnjiang 	enum rte_color in[4], out[4];
441*4418919fSjohnjiang 
442*4418919fSjohnjiang 	/**
443*4418919fSjohnjiang 	  * test 4 points that will produce green, yellow, yellow, red flag
444*4418919fSjohnjiang 	  * if using blind check
445*4418919fSjohnjiang 	  */
446*4418919fSjohnjiang 
447*4418919fSjohnjiang 	/* previouly have a green, test points should keep unchanged */
448*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_GREEN;
449*4418919fSjohnjiang 	out[0] = RTE_COLOR_GREEN;
450*4418919fSjohnjiang 	out[1] = RTE_COLOR_YELLOW;
451*4418919fSjohnjiang 	out[2] = RTE_COLOR_YELLOW;
452*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
453*4418919fSjohnjiang 	if (tm_test_srtcm_aware_check(in, out) != 0)
454*4418919fSjohnjiang 		return -1;
455*4418919fSjohnjiang 
456*4418919fSjohnjiang 	/**
457*4418919fSjohnjiang 	  * previously have a yellow, green & yellow = yellow
458*4418919fSjohnjiang 	  * yellow & red = red
459*4418919fSjohnjiang 	  */
460*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_YELLOW;
461*4418919fSjohnjiang 	out[0] = RTE_COLOR_YELLOW;
462*4418919fSjohnjiang 	out[1] = RTE_COLOR_YELLOW;
463*4418919fSjohnjiang 	out[2] = RTE_COLOR_YELLOW;
464*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
465*4418919fSjohnjiang 	if (tm_test_srtcm_aware_check(in, out) != 0)
466*4418919fSjohnjiang 		return -1;
467*4418919fSjohnjiang 
468*4418919fSjohnjiang 	/**
469*4418919fSjohnjiang 	  * previously have a red, red & green = red
470*4418919fSjohnjiang 	  * red & yellow = red
471*4418919fSjohnjiang 	  */
472*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_RED;
473*4418919fSjohnjiang 	out[0] = RTE_COLOR_RED;
474*4418919fSjohnjiang 	out[1] = RTE_COLOR_RED;
475*4418919fSjohnjiang 	out[2] = RTE_COLOR_RED;
476*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
477*4418919fSjohnjiang 	if (tm_test_srtcm_aware_check(in, out) != 0)
478*4418919fSjohnjiang 		return -1;
479*4418919fSjohnjiang 
480*4418919fSjohnjiang 	return 0;
481*4418919fSjohnjiang }
482*4418919fSjohnjiang 
483*4418919fSjohnjiang /**
484*4418919fSjohnjiang  * @in[4] : the flags packets carries.
485*4418919fSjohnjiang  * @in[4] : the flags function expect to return.
486*4418919fSjohnjiang  * It will do blind check at the time of 1 second from beginning.
487*4418919fSjohnjiang  * At the time, it will use packets length of cbs -1, cbs + 1,
488*4418919fSjohnjiang  * ebs -1 and ebs +1 with flag in[0], in[1], in[2] and in[3] to do
489*4418919fSjohnjiang  * aware check, expect flag out[0], out[1], out[2] and out[3]
490*4418919fSjohnjiang  */
491*4418919fSjohnjiang static inline int
tm_test_trtcm_aware_check(enum rte_color in[4],enum rte_color out[4])492*4418919fSjohnjiang tm_test_trtcm_aware_check
493*4418919fSjohnjiang (enum rte_color in[4], enum rte_color out[4])
494*4418919fSjohnjiang {
495*4418919fSjohnjiang #define TRTCM_AWARE_CHECK_MSG "trtcm_aware_check"
496*4418919fSjohnjiang 	struct rte_meter_trtcm_profile tp;
497*4418919fSjohnjiang 	struct rte_meter_trtcm tm;
498*4418919fSjohnjiang 	uint64_t time;
499*4418919fSjohnjiang 	uint64_t hz = rte_get_tsc_hz();
500*4418919fSjohnjiang 
501*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
502*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
503*4418919fSjohnjiang 	if (rte_meter_trtcm_config(&tm, &tp) != 0)
504*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
505*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
506*4418919fSjohnjiang 	if (rte_meter_trtcm_color_aware_check(
507*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_CBS_DF - 1, in[0]) != out[0])
508*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[0], out[0]);
509*4418919fSjohnjiang 
510*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
511*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
512*4418919fSjohnjiang 	if (rte_meter_trtcm_config(&tm, &tp) != 0)
513*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
514*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
515*4418919fSjohnjiang 	if (rte_meter_trtcm_color_aware_check(
516*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_CBS_DF + 1, in[1]) != out[1])
517*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[1], out[1]);
518*4418919fSjohnjiang 
519*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
520*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
521*4418919fSjohnjiang 	if (rte_meter_trtcm_config(&tm, &tp) != 0)
522*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
523*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
524*4418919fSjohnjiang 	if (rte_meter_trtcm_color_aware_check(
525*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_PBS_DF - 1, in[2]) != out[2])
526*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[2], out[2]);
527*4418919fSjohnjiang 
528*4418919fSjohnjiang 	if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
529*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
530*4418919fSjohnjiang 	if (rte_meter_trtcm_config(&tm, &tp) != 0)
531*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
532*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
533*4418919fSjohnjiang 	if (rte_meter_trtcm_color_aware_check(
534*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_PBS_DF + 1, in[3]) != out[3])
535*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[3], out[3]);
536*4418919fSjohnjiang 
537*4418919fSjohnjiang 	return 0;
538*4418919fSjohnjiang }
539*4418919fSjohnjiang 
540*4418919fSjohnjiang 
541*4418919fSjohnjiang /**
542*4418919fSjohnjiang  * functional test for rte_meter_trtcm_color_aware_check
543*4418919fSjohnjiang  */
544*4418919fSjohnjiang 
545*4418919fSjohnjiang static inline int
tm_test_trtcm_color_aware_check(void)546*4418919fSjohnjiang tm_test_trtcm_color_aware_check(void)
547*4418919fSjohnjiang {
548*4418919fSjohnjiang 	enum rte_color in[4], out[4];
549*4418919fSjohnjiang 	/**
550*4418919fSjohnjiang 	  * test 4 points that will produce green, yellow, yellow, red flag
551*4418919fSjohnjiang 	  * if using blind check
552*4418919fSjohnjiang 	  */
553*4418919fSjohnjiang 
554*4418919fSjohnjiang 	/* previouly have a green, test points should keep unchanged */
555*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_GREEN;
556*4418919fSjohnjiang 	out[0] = RTE_COLOR_GREEN;
557*4418919fSjohnjiang 	out[1] = RTE_COLOR_YELLOW;
558*4418919fSjohnjiang 	out[2] = RTE_COLOR_YELLOW;
559*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
560*4418919fSjohnjiang 	if (tm_test_trtcm_aware_check(in, out) != 0)
561*4418919fSjohnjiang 		return -1;
562*4418919fSjohnjiang 
563*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_YELLOW;
564*4418919fSjohnjiang 	out[0] = RTE_COLOR_YELLOW;
565*4418919fSjohnjiang 	out[1] = RTE_COLOR_YELLOW;
566*4418919fSjohnjiang 	out[2] = RTE_COLOR_YELLOW;
567*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
568*4418919fSjohnjiang 	if (tm_test_trtcm_aware_check(in, out) != 0)
569*4418919fSjohnjiang 		return -1;
570*4418919fSjohnjiang 
571*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_RED;
572*4418919fSjohnjiang 	out[0] = RTE_COLOR_RED;
573*4418919fSjohnjiang 	out[1] = RTE_COLOR_RED;
574*4418919fSjohnjiang 	out[2] = RTE_COLOR_RED;
575*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
576*4418919fSjohnjiang 	if (tm_test_trtcm_aware_check(in, out) != 0)
577*4418919fSjohnjiang 		return -1;
578*4418919fSjohnjiang 
579*4418919fSjohnjiang 	return 0;
580*4418919fSjohnjiang }
581*4418919fSjohnjiang 
582*4418919fSjohnjiang /**
583*4418919fSjohnjiang  * @in[4] : the flags packets carries.
584*4418919fSjohnjiang  * @in[4] : the flags function expect to return.
585*4418919fSjohnjiang  * It will do blind check at the time of 1 second from beginning.
586*4418919fSjohnjiang  * At the time, it will use packets length of cbs -1, cbs + 1,
587*4418919fSjohnjiang  * ebs -1 and ebs +1 with flag in[0], in[1], in[2] and in[3] to do
588*4418919fSjohnjiang  * aware check, expect flag out[0], out[1], out[2] and out[3]
589*4418919fSjohnjiang  */
590*4418919fSjohnjiang static inline int
tm_test_trtcm_rfc4115_aware_check(enum rte_color in[4],enum rte_color out[4])591*4418919fSjohnjiang tm_test_trtcm_rfc4115_aware_check
592*4418919fSjohnjiang (enum rte_color in[4], enum rte_color out[4])
593*4418919fSjohnjiang {
594*4418919fSjohnjiang #define TRTCM_RFC4115_AWARE_CHECK_MSG "trtcm_rfc4115_aware_check"
595*4418919fSjohnjiang 	struct rte_meter_trtcm_rfc4115_profile tp;
596*4418919fSjohnjiang 	struct rte_meter_trtcm_rfc4115 tm;
597*4418919fSjohnjiang 	uint64_t time;
598*4418919fSjohnjiang 	uint64_t hz = rte_get_tsc_hz();
599*4418919fSjohnjiang 
600*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
601*4418919fSjohnjiang 		melog(TRTCM_AWARE_CHECK_MSG);
602*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_config(&tm, &tp) != 0)
603*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG);
604*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
605*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_color_aware_check(
606*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_CBS_DF - 1, in[0]) != out[0])
607*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG" %u:%u", in[0], out[0]);
608*4418919fSjohnjiang 
609*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
610*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG);
611*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_config(&tm, &tp) != 0)
612*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG);
613*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
614*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_color_aware_check(
615*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_CBS_DF + 1, in[1]) != out[1])
616*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG" %u:%u", in[1], out[1]);
617*4418919fSjohnjiang 
618*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
619*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG);
620*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_config(&tm, &tp) != 0)
621*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG);
622*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
623*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_color_aware_check(
624*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_EBS_DF - 1, in[2]) != out[2])
625*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG" %u:%u", in[2], out[2]);
626*4418919fSjohnjiang 
627*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_profile_config(&tp, &rfc4115params) != 0)
628*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG);
629*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_config(&tm, &tp) != 0)
630*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG);
631*4418919fSjohnjiang 	time = rte_get_tsc_cycles() + hz;
632*4418919fSjohnjiang 	if (rte_meter_trtcm_rfc4115_color_aware_check(
633*4418919fSjohnjiang 		&tm, &tp, time, TM_TEST_TRTCM_EBS_DF + 1, in[3]) != out[3])
634*4418919fSjohnjiang 		melog(TRTCM_RFC4115_AWARE_CHECK_MSG" %u:%u", in[3], out[3]);
635*4418919fSjohnjiang 
636*4418919fSjohnjiang 	return 0;
637*4418919fSjohnjiang }
638*4418919fSjohnjiang 
639*4418919fSjohnjiang /**
640*4418919fSjohnjiang  * functional test for rte_meter_trtcm_rfc4115_color_aware_check
641*4418919fSjohnjiang  */
642*4418919fSjohnjiang static inline int
tm_test_trtcm_rfc4115_color_aware_check(void)643*4418919fSjohnjiang tm_test_trtcm_rfc4115_color_aware_check(void)
644*4418919fSjohnjiang {
645*4418919fSjohnjiang 	enum rte_color in[4], out[4];
646*4418919fSjohnjiang 	/**
647*4418919fSjohnjiang 	  * test 4 points that will produce green, yellow, yellow, red flag
648*4418919fSjohnjiang 	  * if using blind check
649*4418919fSjohnjiang 	  */
650*4418919fSjohnjiang 
651*4418919fSjohnjiang 	/* previouly have a green, test points should keep unchanged */
652*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_GREEN;
653*4418919fSjohnjiang 	out[0] = RTE_COLOR_GREEN;
654*4418919fSjohnjiang 	out[1] = RTE_COLOR_YELLOW;
655*4418919fSjohnjiang 	out[2] = RTE_COLOR_YELLOW;
656*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
657*4418919fSjohnjiang 	if (tm_test_trtcm_rfc4115_aware_check(in, out) != 0)
658*4418919fSjohnjiang 		return -1;
659*4418919fSjohnjiang 
660*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_YELLOW;
661*4418919fSjohnjiang 	out[0] = RTE_COLOR_YELLOW;
662*4418919fSjohnjiang 	out[1] = RTE_COLOR_YELLOW;
663*4418919fSjohnjiang 	out[2] = RTE_COLOR_YELLOW;
664*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
665*4418919fSjohnjiang 	if (tm_test_trtcm_rfc4115_aware_check(in, out) != 0)
666*4418919fSjohnjiang 		return -1;
667*4418919fSjohnjiang 
668*4418919fSjohnjiang 	in[0] = in[1] = in[2] = in[3] = RTE_COLOR_RED;
669*4418919fSjohnjiang 	out[0] = RTE_COLOR_RED;
670*4418919fSjohnjiang 	out[1] = RTE_COLOR_RED;
671*4418919fSjohnjiang 	out[2] = RTE_COLOR_RED;
672*4418919fSjohnjiang 	out[3] = RTE_COLOR_RED;
673*4418919fSjohnjiang 	if (tm_test_trtcm_rfc4115_aware_check(in, out) != 0)
674*4418919fSjohnjiang 		return -1;
675*4418919fSjohnjiang 
676*4418919fSjohnjiang 	return 0;
677*4418919fSjohnjiang }
678*4418919fSjohnjiang 
679*4418919fSjohnjiang /**
680*4418919fSjohnjiang  * test main entrance for library meter
681*4418919fSjohnjiang  */
682*4418919fSjohnjiang static int
test_meter(void)683*4418919fSjohnjiang test_meter(void)
684*4418919fSjohnjiang {
685*4418919fSjohnjiang 	if (tm_test_srtcm_config() != 0)
686*4418919fSjohnjiang 		return -1;
687*4418919fSjohnjiang 
688*4418919fSjohnjiang 	if (tm_test_trtcm_config() != 0)
689*4418919fSjohnjiang 		return -1;
690*4418919fSjohnjiang 
691*4418919fSjohnjiang 	if (tm_test_trtcm_rfc4115_config() != 0)
692*4418919fSjohnjiang 		return -1;
693*4418919fSjohnjiang 
694*4418919fSjohnjiang 	if (tm_test_srtcm_color_blind_check() != 0)
695*4418919fSjohnjiang 		return -1;
696*4418919fSjohnjiang 
697*4418919fSjohnjiang 	if (tm_test_trtcm_color_blind_check() != 0)
698*4418919fSjohnjiang 		return -1;
699*4418919fSjohnjiang 
700*4418919fSjohnjiang 	if (tm_test_trtcm_rfc4115_color_blind_check() != 0)
701*4418919fSjohnjiang 		return -1;
702*4418919fSjohnjiang 
703*4418919fSjohnjiang 	if (tm_test_srtcm_color_aware_check() != 0)
704*4418919fSjohnjiang 		return -1;
705*4418919fSjohnjiang 
706*4418919fSjohnjiang 	if (tm_test_trtcm_color_aware_check() != 0)
707*4418919fSjohnjiang 		return -1;
708*4418919fSjohnjiang 
709*4418919fSjohnjiang 	if (tm_test_trtcm_rfc4115_color_aware_check() != 0)
710*4418919fSjohnjiang 		return -1;
711*4418919fSjohnjiang 
712*4418919fSjohnjiang 	return 0;
713*4418919fSjohnjiang 
714*4418919fSjohnjiang }
715*4418919fSjohnjiang 
716*4418919fSjohnjiang REGISTER_TEST_COMMAND(meter_autotest, test_meter);
717