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