ft_group.h (31194B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * File: ft_group.h 8 * Purpose: Function declarations for flowtracker group. 9 */ 10 11 #ifndef _BCM_INT_FT_GROUP_H_ 12 #define _BCM_INT_FT_GROUP_H_ 13 14 #include <soc/defs.h> 15 #include <sal/core/libc.h> 16 #include <shared/bsl.h> 17 18 #if defined(BCM_FLOWTRACKER_SUPPORT) 19 20 #include <shared/bsl.h> 21 #include <soc/helix5.h> 22 #include <soc/drv.h> 23 #include <bcm/error.h> 24 #include <soc/debug.h> 25 #include <soc/mem.h> 26 #include <soc/profile_mem.h> 27 #include <soc/mspi.h> 28 #include <soc/format.h> 29 #include <bcm/module.h> 30 #include <soc/scache.h> 31 #include <bcm_int/esw/trx.h> 32 #include <bcm/flowtracker.h> 33 #include <bcm_int/esw/flowtracker/ft_alu.h> 34 #include <bcm_int/esw/flowtracker/ft_export.h> 35 36 37 38 #define BCMI_CLEANUP_IF_ERROR(rv) \ 39 do { \ 40 if (BCM_FAILURE(rv)) { \ 41 goto cleanup; \ 42 } \ 43 } while(0); 44 45 #define BCMI_CLEANUP1_IF_ERROR(rv) \ 46 do { \ 47 if (BCM_FAILURE(rv)) { \ 48 goto cleanup1; \ 49 } \ 50 } while(0); 51 52 53 /*|*****************************************************| 54 |*****************************************************| 55 | TCP Flags - Extraction control | 56 | | 57 | This information is present in FTFP | 58 |*****************************************************| 59 |*****************************************************|*/ 60 61 /* 62 * Typedef: 63 * _field_ft_tracking_alu_data_info_t 64 * 65 * Purpose: 66 * ALU Data related tracking information. 67 */ 68 typedef enum bcmi_ft_tcp_flags_e { 69 70 bcmiFtTcpFlagsSYN = 0, 71 bcmiFtTcpFlagsACK = 1, 72 bcmiFtTcpFlagsRST = 2, 73 bcmiFtTcpFlagsPSH = 3, 74 bcmiFtTcpFlagsFIN = 4, 75 bcmiFtTcpFlagsURG = 5, 76 bcmiFtTcpFlagsECE = 6, 77 bcmiFtTcpFlagsCWR = 7 78 } bcmi_ft_tcp_flags_t; 79 80 81 /* Internal group tracking param type. */ 82 typedef enum bcmi_ft_group_param_type_e { 83 bcmiFtGroupParamTypeTracking=0, 84 bcmiFtGroupParamTypeFlowchecker=1, 85 bcmiFtGroupParamTypeCollectorCopy=2, 86 bcmiFtGroupParamTypeMeter=3, 87 bcmiFtGroupParamTypeTsNewLearn=4, 88 bcmiFtGroupParamTypeTsFlowStart=5, 89 bcmiFtGroupParamTypeTsFlowEnd=6, 90 bcmiFtGroupParamTypeTsCheckEvent1=7, 91 bcmiFtGroupParamTypeTsCheckEvent2=8 92 } bcmi_ft_group_param_type_t; 93 94 95 typedef struct bcmi_ft_alu_data_info_s { 96 uint16 param; 97 98 int offset; 99 100 int width; 101 102 } bcmi_ft_alu_data_info_t; 103 104 typedef struct bcmi_ft_state_transtion_s { 105 int tcp_flags[2]; /* For now only 2. SYN+ACK*/ 106 int current_state; 107 int next_state; 108 int new_flow; 109 int bidirectional; 110 int ts_trigger; 111 } bcmi_ft_state_transtion_t; 112 113 /* Timestamp related base structure. */ 114 typedef struct bcmi_ft_group_ts_s { 115 bcm_flowtracker_tracking_param_type_t ts_param; 116 uint32 flag_id; 117 int ts_trigger_bit_sel; 118 soc_field_t ts_field; 119 } bcmi_ft_group_ts_t; 120 121 /* Max 4 timestamps allowed in one group. */ 122 #define BCMI_FT_GROUP_MAX_TS 4 123 #define BCMI_FT_GROUP_MAX_TS_TYPE 5 124 125 /* Internal Group Flags to manage run time timestamps. */ 126 #define BCMI_FT_GROUP_TS_NEW_LEARN (1<<0) 127 #define BCMI_FT_GROUP_TS_FLOW_START (1<<1) 128 #define BCMI_FT_GROUP_TS_FLOW_END (1<<2) 129 #define BCMI_FT_GROUP_TS_CHECK_EVENT1 (1<<3) 130 #define BCMI_FT_GROUP_TS_CHECK_EVENT2 (1<<4) 131 132 extern bcmi_ft_group_ts_t bcmi_ft_group_ts_info[BCMI_FT_GROUP_MAX_TS_TYPE]; 133 134 /* Tracking param trigger type.*/ 135 #define BCMI_FT_TS_TYPE_TP (1<<0) 136 137 /* Flow check trigger type. */ 138 #define BCMI_FT_TS_TYPE_FC (1<<1) 139 140 extern int 141 bcmi_ft_group_ts_triggers_set( 142 int unit, 143 bcm_flowtracker_group_t id, 144 uint32 check_flags, 145 int trigger_type, 146 bcmi_flowtracker_check_set_t reset); 147 148 extern int 149 bcmi_ft_group_check_ts_set( 150 int unit, 151 bcm_flowtracker_group_t id, 152 bcm_flowtracker_check_t flowchecker_id, 153 bcmi_flowtracker_check_set_t reset); 154 155 extern bcmi_ft_group_param_type_t 156 bcmi_ft_group_get_ts_type( 157 int unit, 158 bcm_flowtracker_group_t id, 159 soc_field_t fid); 160 161 extern bcm_flowtracker_tracking_param_type_t 162 bcmi_ft_group_get_tracking_param( 163 int unit, 164 bcmi_ft_group_param_type_t pram_type); 165 166 extern int 167 bcmi_ft_group_timestamp_set( 168 int unit, 169 bcm_flowtracker_group_t id); 170 171 172 /* Groups internal Declarations. */ 173 typedef struct bcmi_ft_group_config_s { 174 /* User tracking params. */ 175 int num_tracking_params; 176 bcm_flowtracker_tracking_param_info_t *list_of_tracking_params; 177 178 /* Ordered tracking params. */ 179 int num_ordered_template_params; 180 bcm_flowtracker_tracking_param_info_t *list_of_ordered_template_params; 181 182 /* Group Class. */ 183 uint32 class_id; 184 185 } bcmi_ft_group_config_t; 186 187 188 /* Hardware extractor info. used by FTFP. extrators for group key and data. */ 189 #if 0 190 typedef struct bcmi_ft_hw_extractor_info_s { 191 int part; 192 int level; 193 int gran; 194 int extraction_num; 195 } bcmi_ft_hw_extractor_info_t; 196 #endif 197 198 typedef enum bcmi_ft_group_key_data_mode_s { 199 bcmiFtGroupModeSingle = 0, 200 bcmiFtGroupModeDouble = 1 201 } bcmi_ft_group_key_data_mode_t; 202 203 204 typedef uint32 bcmi_ft_hw_extractor_info_t; 205 206 /* extraction info. */ 207 typedef struct bcmi_ft_group_extractor_info_s { 208 bcmi_ft_group_key_data_mode_t ft_key_mode; 209 bcmi_ft_group_key_data_mode_t ft_data_mode; 210 int num_ft_key; 211 bcmi_ft_hw_extractor_info_t *ft_key; 212 int num_ft_data; 213 bcmi_ft_hw_extractor_info_t *ft_data; 214 215 } bcmi_ft_group_extractor_info_t; 216 217 218 /* Structure to maintain session profiles. */ 219 /* Populated and used by FTFP sub-module. */ 220 typedef struct bcmi_ft_session_profiles_s { 221 /* Session Key Profile Index. */ 222 uint32 session_key_profile_idx; 223 224 /* Session Data Profile index. */ 225 uint32 session_data_profile_idx; 226 227 /* Session Alu Data Profile index. */ 228 uint32 alu_data_profile_idx; 229 } bcmi_ft_session_profiles_t; 230 231 232 typedef struct bcmi_ft_group_ftfp_data_s { 233 bcm_flowtracker_direction_t direction; 234 int flowtrack; 235 int new_learn; 236 uint32 session_key_type; 237 /* Session key mode. */ 238 bcmi_ft_group_key_data_mode_t session_key_mode; 239 /* FTFP profile information. */ 240 bcmi_ft_session_profiles_t profiles; 241 242 } bcmi_ft_group_ftfp_data_t; 243 244 245 typedef struct bcmi_ft_group_extraction_info_s { 246 int num_data_info; 247 /* Inforamtion needed for ALU allocation scheme. */ 248 bcmi_ft_group_alu_info_t *ft_data_info; 249 250 /* session Key information for the FT. */ 251 int num_key_info; 252 bcmi_ft_group_alu_info_t *ft_key_info; 253 254 /* Hardware extractor inforamtion needed for FT. */ 255 bcmi_ft_group_extractor_info_t ft_ext_info; 256 257 } bcmi_ft_group_extraction_info_t; 258 259 260 /* template info linked list. */ 261 typedef struct bcmi_ft_group_template_info_s { 262 263 /* alu/load flags. */ 264 uint32 flags; 265 266 /* Container offset from start of Session Data PDD */ 267 int cont_offset; 268 269 /* Data shift from start of Container */ 270 int data_shift; 271 272 /* Width of Container */ 273 int cont_width; 274 275 /* Tracking param Type */ 276 bcmi_ft_group_param_type_t param_type; 277 278 /* Tracking param */ 279 bcm_flowtracker_tracking_param_type_t param; 280 281 /* Flowtracker Check */ 282 bcm_flowtracker_check_t check_id; 283 284 /* Index in ALU/Load Engine */ 285 int index; 286 287 /* Hw Engine */ 288 bcmi_ft_alu_load_type_t type; 289 290 } bcmi_ft_group_template_info_t; 291 292 /* The linked list used to form export template */ 293 typedef struct bcmi_ft_group_template_list_s { 294 bcmi_ft_group_template_info_t info; 295 struct bcmi_ft_group_template_list_s *next; 296 }bcmi_ft_group_template_list_t; 297 298 299 #if 0 300 typedef struct bcmi_ft_flowchecker_list_s { 301 bcm_flowtracker_check_t flowchecker_id; 302 struct bcmi_ft_flowchecker_list_s *next; 303 } bcmi_ft_flowchecker_list_t; 304 #endif 305 306 typedef struct bcmi_ft_group_meter_s { 307 uint32 sw_ckbits_sec; 308 uint32 sw_ckbits_burst; 309 } bcmi_ft_group_meter_t; 310 311 typedef struct bcmi_ft_group_info_s { 312 bcmi_ft_group_config_t group_config; 313 bcmi_ft_group_meter_t meter_info; 314 bcmi_ft_flowchecker_list_t *head; 315 bcm_flowtracker_collector_t collector_id; 316 bcm_flowtracker_export_template_t template_id; 317 bcmi_ft_group_extraction_info_t group_ext_info; 318 319 /* flags */ 320 uint32 flags; 321 322 /* Total number of ftfp entries pointing to this group. */ 323 uint32 num_ftfp_entries; 324 325 /* FTFP data in group state. */ 326 bcmi_ft_group_ftfp_data_t ftfp_data; 327 328 /* We will have a pdd profile entry here. */ 329 bsd_policy_action_profile_entry_t pdd_entry; 330 331 /* ALU-32 MEM allocation bitmap. */ 332 uint32 ALU32_MEM_USE[TOTAL_GROUP_ALU32_MEM]; 333 334 /* ALU-16 MEM allocation bitmap. */ 335 uint32 ALU16_MEM_USE[TOTAL_GROUP_ALU16_MEM]; 336 337 /* List for template information. */ 338 bcmi_ft_group_template_list_t *template_head; 339 340 /* Timestamps triggers on this group.*/ 341 uint32 ts_triggers; 342 343 /* Validation status. */ 344 int validated; 345 } bcmi_ft_group_sw_info_t; 346 347 348 349 /* Extractor information. */ 350 typedef struct bcmi_ft_group_element_extraction_info_s { 351 int location; 352 uint32 length; 353 int is_alu_type; 354 bcm_flowtracker_check_t flow_checker_id; 355 bcm_flowtracker_tracking_param_type_t inforamation_element_id; 356 int location_of_update_element; 357 bcm_flowtracker_check_operation_t update_operation; 358 } bcmi_ft_group_element_extraction_info_t; 359 360 361 362 typedef struct bcmi_ft_group_bitmap_s { 363 SHR_BITDCL *ft_group_bitmap; 364 } bcmi_ft_group_bitmap_t; 365 366 extern bcmi_ft_group_sw_info_t **bcmi_ft_group_sw_state[BCM_MAX_NUM_UNITS]; 367 368 369 #define BCMI_FT_GROUP_BITMAP(unit) (bcmi_ft_group_bitmap[unit].ft_group_bitmap) 370 #define BCMI_FT_GROUP(unit, id) (bcmi_ft_group_sw_state[unit][id]) 371 372 #define BCMI_FT_GROUP_CONFIG(unit, id) \ 373 ((BCMI_FT_GROUP(unit, id))->group_config) 374 375 #define BCMI_FT_GROUP_IS_BUSY(unit, id) \ 376 ((BCMI_FT_GROUP(unit, id))->num_ftfp_entries != 0) 377 378 #define BCMI_FT_GROUP_IS_VALIDATED(unit, id) \ 379 ((BCMI_FT_GROUP(unit, id))->validated) 380 381 #define BCMI_FT_GROUP_FTFP_DATA(unit, id) \ 382 ((BCMI_FT_GROUP(unit, id))->ftfp_data) 383 384 #define BCMI_FT_GROUP_TRACK_PARAM(unit, id) \ 385 (((BCMI_FT_GROUP(unit, id))->group_config).list_of_tracking_params) 386 387 #define BCMI_FT_GROUP_TRACK_PARAM_NUM(unit, id) \ 388 (((BCMI_FT_GROUP(unit, id))->group_config).num_tracking_params) 389 390 #define BCMI_FT_GROUP_ORDERED_TRACK_PARAM_NUM(unit, id) \ 391 (((BCMI_FT_GROUP(unit, id))->group_config).num_ordered_template_params) 392 393 #define BCMI_FT_GROUP_ORDERED_TRACK_PARAM(unit, id) \ 394 (((BCMI_FT_GROUP(unit, id))->group_config).list_of_ordered_template_params) 395 396 #define BCMI_FT_GROUP_CHECK_LIST(unit, id) \ 397 ((BCMI_FT_GROUP(unit, id))->head) 398 399 #define BCMI_FT_GROUP_EXT_INFO(unit, id) \ 400 ((BCMI_FT_GROUP(unit, id))->group_ext_info) 401 402 #define BCMI_FT_GROUP_EXT_DATA_INFO(unit, id) \ 403 (((BCMI_FT_GROUP(unit, id))->group_ext_info).ft_data_info) 404 405 #define BCMI_FT_GROUP_EXT_KEY_INFO(unit, id) \ 406 (((BCMI_FT_GROUP(unit, id))->group_ext_info).ft_key_info) 407 408 #define BCMI_FT_GROUP_EXT_HW_INFO(unit, id) \ 409 (((BCMI_FT_GROUP(unit, id))->group_ext_info).ft_ext_info) 410 411 #define BCMI_FT_GROUP_FLOWCHECKER_HEAD(unit, id) \ 412 (BCMI_FT_GROUP(unit, id)->head) 413 414 #define BCMI_FT_GROUP_METER_INFO(unit, id) \ 415 (BCMI_FT_GROUP(unit, id)->meter_info) 416 417 #define BCMI_FT_GROUP_ALU32_MEM_USE(unit, id) \ 418 (BCMI_FT_GROUP(unit, id)->ALU32_MEM_USE) 419 420 #define BCMI_FT_GROUP_ALU16_MEM_USE(unit, id) \ 421 (BCMI_FT_GROUP(unit, id)->ALU16_MEM_USE) 422 423 #define BCMI_FT_GROUP_ALU32_MEM_USE_GET(unit, id, mem_idx) \ 424 (BCMI_FT_GROUP(unit, id)->ALU32_MEM_USE[mem_idx]) 425 426 #define BCMI_FT_GROUP_ALU16_MEM_USE_GET(unit, id, mem_idx) \ 427 (BCMI_FT_GROUP(unit, id)->ALU16_MEM_USE[mem_idx]) 428 429 #define BCMI_FT_GROUP_TS_TRIGGERS(unit, id) \ 430 (BCMI_FT_GROUP(unit, id)->ts_triggers) 431 432 #define BCMI_FT_GROUP_EXT_DATA_OR_TS_TRIGGERS_SET(unit, id) \ 433 ((BCMI_FT_GROUP_EXT_DATA_INFO(unit, id) != NULL) || \ 434 (BCMI_FT_GROUP_TS_TRIGGERS(unit, id) != 0)) 435 436 typedef enum bcmi_ft_group_param_e { 437 bcmiFtGroupParamFtfpEntryNum, 438 bcmiFtGroupParamCount 439 } bcmi_ft_group_params_t; 440 441 442 typedef enum bcmi_ft_group_params_operation_e { 443 bcmiFtGroupParamsOprInc, 444 bcmiFtGroupParamsOprDec, 445 bcmiFtGroupParamsOprUpdate, 446 bcmiFtGroupParamOprCount 447 } bcmi_ft_group_params_operation_t; 448 449 450 451 /* MAximum 4 groups can be flushed one time.*/ 452 #define BCMI_FT_GROUP_FLUSH_MAX_SCALE 4 453 454 typedef struct bcmi_ft_group_flushinfo_s { 455 uint32 group_valid; 456 bcm_flowtracker_group_t group_id; 457 } bcmi_ft_group_flush_info_t; 458 459 460 461 int 462 bcmi_ft_group_is_invalid(int unit, bcm_flowtracker_group_t group_index); 463 464 int 465 bcmi_ft_group_collector_is_valid(int unit, bcm_flowtracker_group_t id); 466 467 int 468 bcmi_ft_flowchecker_is_invalid(int unit, int flowchecker_id); 469 470 int 471 bcmi_ft_group_entry_add_check(int unit, bcm_flowtracker_group_t id); 472 473 int 474 bcmi_ft_group_export_checks_validate(int unit, 475 bcm_flowtracker_group_t id, 476 int num_in_export_elements, 477 bcm_flowtracker_export_element_info_t *in_export_elements); 478 479 /* Options for bcmi_ft_group_check_validate */ 480 #define BCMI_FT_GROUP_CHECK_MATCH_GROUP (1 << 0) 481 #define BCMI_FT_GROUP_CHECK_MATCH_PRIMARY (1 << 1) 482 int 483 bcmi_ft_group_check_validate(int unit, 484 uint32 options, 485 bcm_flowtracker_group_t id, 486 bcm_flowtracker_check_t check_id); 487 488 /* Group Creation/Deletion Methods. */ 489 extern int 490 bcmi_ft_group_create( 491 int unit, 492 uint32 options, 493 bcm_flowtracker_group_t *id, 494 bcm_flowtracker_group_info_t *flow_group_info); 495 496 497 extern int 498 bcmi_ft_group_get( 499 int unit, 500 bcm_flowtracker_group_t id, 501 bcm_flowtracker_group_info_t *flow_group_info); 502 503 extern int 504 bcmi_ft_group_clear( 505 int unit, 506 bcm_flowtracker_group_t id); 507 508 extern int 509 bcmi_ft_group_destroy( 510 int unit, 511 bcm_flowtracker_group_t id); 512 513 extern int 514 bcmi_ft_group_get_all( 515 int unit, 516 int max_size, 517 bcm_flowtracker_group_t *idz, 518 int *list_size); 519 520 extern int 521 bcmi_ft_group_entry_update( 522 int unit, 523 bcm_flowtracker_group_t group_id, 524 bcm_flowtracker_group_info_t *flow_group_info, 525 int create); 526 527 /* Init Routines. */ 528 extern int 529 bcmi_ft_group_state_init(int unit); 530 531 extern void 532 bcmi_ft_group_state_clear(int unit); 533 534 extern int 535 bcmi_ft_group_profile_init(int unit); 536 537 extern int 538 bcmi_ft_flowchecker_init(int unit); 539 540 extern void 541 bcmi_ft_flowchecker_cleanup(int unit); 542 543 extern void 544 bcmi_ft_group_state_clear(int unit); 545 546 547 extern int 548 bcmi_ft_init(int unit); 549 550 extern int 551 bcmi_ft_cleanup(int unit); 552 553 /*|*****************************************************| 554 |*****************************************************| 555 | Start - FTFP utility Methods. | 556 |*****************************************************| 557 |*****************************************************|*/ 558 int 559 bcmi_ft_group_extraction_alu_info_set( 560 int unit, 561 bcm_flowtracker_group_t id, 562 int key_or_data, 563 int num_alu_info, 564 bcmi_ft_group_alu_info_t *alu_info); 565 566 567 int 568 bcmi_ft_group_extraction_alu_info_get( 569 int unit, 570 bcm_flowtracker_group_t id, 571 int key_or_data, 572 int max_alu_info, 573 bcmi_ft_group_alu_info_t *alu_info, 574 int *num_alu_info); 575 576 577 int 578 bcmi_ft_group_extraction_hw_info_set( 579 int unit, 580 bcm_flowtracker_group_t id, 581 int key_or_data, 582 int num_elements, 583 bcmi_ft_hw_extractor_info_t *elements); 584 585 586 int 587 bcmi_ft_group_extraction_hw_info_get( 588 int unit, 589 int key_or_data, 590 bcm_flowtracker_group_t id, 591 int max_elements, 592 bcmi_ft_hw_extractor_info_t *elements, 593 int *num_elements); 594 595 int 596 bcmi_ft_group_extraction_mode_set( 597 int unit, 598 int key_or_data, 599 bcm_flowtracker_group_t id, 600 bcmi_ft_group_key_data_mode_t mode); 601 602 int 603 bcmi_ft_group_extraction_mode_get( 604 int unit, 605 int key_or_data, 606 bcm_flowtracker_group_t id, 607 bcmi_ft_group_key_data_mode_t *mode); 608 609 610 int 611 bcmi_ft_group_session_key_type_set( 612 int unit, 613 bcm_flowtracker_group_t id, 614 uint32 key_type); 615 616 int 617 bcmi_ft_group_session_key_type_get( 618 int unit, 619 bcm_flowtracker_group_t id, 620 uint32 *key_type); 621 622 623 int 624 bcmi_ft_group_ftfp_profiles_get( 625 int unit, 626 bcm_flowtracker_group_t id, 627 bcmi_ft_session_profiles_t *profile_info); 628 629 int 630 bcmi_ft_group_ftfp_profiles_set( 631 int unit, 632 bcm_flowtracker_group_t id, 633 bcmi_ft_session_profiles_t *profile_info); 634 635 int 636 bcmi_ft_group_ftfp_data_get( 637 int unit, 638 bcm_flowtracker_group_t id, 639 bcmi_ft_group_ftfp_data_t *data); 640 641 int 642 bcmi_ft_group_param_retrieve(int unit, 643 bcm_flowtracker_group_t id, 644 bcmi_ft_group_params_t param, 645 int *arg); 646 647 int 648 bcmi_ft_group_param_update(int unit, 649 bcm_flowtracker_group_t id, 650 bcmi_ft_group_params_t param, 651 bcmi_ft_group_params_operation_t opr, 652 int arg); 653 654 /*|*****************************************************| 655 |*****************************************************| 656 | End - FTFP utility Methods. | 657 |*****************************************************| 658 |*****************************************************|*/ 659 660 661 662 /* Flow check utilities. */ 663 664 665 /* Flowtracker Index generation. */ 666 #define BCM_FT_IDX_TYPE_CHECK 1 667 #define BCM_FT_IDX_TYPE_2ND_CHECK 2 668 #define BCM_FT_IDX_TYPE_SHIFT 26 669 #define BCM_FT_IDX_MASK 0x3ffffff 670 671 672 #define BCMI_FT_FLOWCHECKER_INDEX_SET(index, type) \ 673 ((type << BCM_FT_IDX_TYPE_SHIFT) | \ 674 (index)) 675 676 #define BCMI_FT_FLOWCHECKER_INDEX_GET(index) \ 677 ((index) & BCM_FT_IDX_MASK) 678 679 #define BCMI_FT_IDX_IS_CHECK(index) \ 680 ((((index) >> BCM_FT_IDX_TYPE_SHIFT) == BCM_FT_IDX_TYPE_CHECK) || \ 681 (((index) >> BCM_FT_IDX_TYPE_SHIFT) == BCM_FT_IDX_TYPE_2ND_CHECK)) 682 683 #define BCMI_FT_IDX_IS_PRIMARY_CHECK(index) \ 684 (((index) >> BCM_FT_IDX_TYPE_SHIFT) == BCM_FT_IDX_TYPE_CHECK) 685 686 #define BCMI_FT_IDX_IS_2ND_CHECK(index) \ 687 (((index) >> BCM_FT_IDX_TYPE_SHIFT) == BCM_FT_IDX_TYPE_2ND_CHECK) 688 689 690 /* Create Flow check and return software ID. */ 691 int 692 bcmi_ft_check_create( 693 int unit, 694 uint32 options, 695 bcm_flowtracker_check_info_t check_info, 696 bcm_flowtracker_check_t *check_id); 697 698 /* Destroy flow check corresponding to this software ID. */ 699 int 700 bcmi_ft_check_destroy( 701 int unit, 702 bcm_flowtracker_check_t check_id); 703 704 /* Destroy all flow checks not linked to any group. */ 705 int 706 bcmi_ft_check_destroy_all(int unit); 707 708 /* Get information of flow check. */ 709 int 710 bcmi_ft_check_get( 711 int unit, 712 bcm_flowtracker_check_t check_id, 713 bcm_flowtracker_check_info_t *check_info); 714 715 /* Routine to traverse through all the flowcheckers. */ 716 int 717 bcmi_ft_check_traverse( 718 int unit, 719 bcm_flowtracker_check_traverse_cb cb, 720 void *user_data); 721 722 723 extern int 724 bcmi_ft_group_flow_limit_get( 725 int unit, 726 bcm_flowtracker_group_t id, 727 uint32 *flow_limit); 728 729 extern int 730 bcmi_ft_group_flow_limit_set( 731 int unit, 732 bcm_flowtracker_group_t id, 733 uint32 flow_limit); 734 735 736 737 extern int 738 bcmi_ft_group_age_out_get( 739 int unit, 740 bcm_flowtracker_group_t id, 741 uint32 *aging_interval_ms); 742 743 extern int 744 bcmi_ft_group_age_out_set( 745 int unit, 746 bcm_flowtracker_group_t id, 747 uint32 aging_interval_ms); 748 749 extern int 750 bcmi_ft_group_age_export_trigger_set( 751 int unit, 752 bcm_flowtracker_group_t id, 753 uint32 enable); 754 755 extern int 756 bcmi_ft_group_age_export_trigger_get( 757 int unit, 758 bcm_flowtracker_group_t id, 759 uint32 *enable); 760 761 int 762 bcmi_ft_group_profiles_destroy( 763 int unit, 764 bcm_flowtracker_group_t id); 765 766 extern int 767 bcmi_ft_group_hw_install(int unit, bcm_flowtracker_group_t id); 768 769 extern int 770 bcmi_ft_group_hw_uninstall(int unit, bcm_flowtracker_group_t id); 771 772 773 extern int 774 bcmi_ft_flowchecker_get( 775 int unit, 776 bcm_flowtracker_check_t flowchecker_id, 777 bcmi_flowtracker_flowchecker_info_t *flow_check_info); 778 779 /* PDD profile methods. */ 780 int 781 bcmi_ft_group_pdd_policy_profile_add( 782 int unit, 783 bcm_flowtracker_group_t id); 784 785 int 786 bcmi_ft_group_pdd_policy_profile_delete( 787 int unit, 788 bcm_flowtracker_group_t id); 789 790 int 791 bcmi_ft_group_pdd_to_pde_coversion( 792 int unit, 793 bcm_flowtracker_group_t id, 794 bsc_dt_pde_profile_entry_t *pde_entry); 795 796 int 797 bcmi_ft_group_ft_mode_update( 798 int unit, 799 bcm_flowtracker_group_t id); 800 801 802 int 803 bcmi_ft_group_meter_profile_set( 804 int unit, 805 bcm_flowtracker_group_t id, 806 bcm_flowtracker_meter_info_t info); 807 808 int 809 bcmi_ft_group_meter_profile_get( 810 int unit, 811 bcm_flowtracker_group_t id, 812 bcm_flowtracker_meter_info_t *info); 813 814 815 int 816 bcmi_ft_group_collector_copy_set( 817 int unit, 818 bcm_flowtracker_group_t id, 819 bcm_flowtracker_collector_copy_info_t info); 820 821 int 822 bcmi_ft_group_collector_copy_get( 823 int unit, 824 bcm_flowtracker_group_t id, 825 bcm_flowtracker_collector_copy_info_t *info); 826 827 /* Export Triggers. */ 828 int 829 bcmi_ft_group_export_trigger_get( 830 int unit, 831 bcm_flowtracker_group_t id, 832 bcm_flowtracker_export_trigger_info_t *export_trigger_info); 833 int 834 bcmi_ft_group_export_trigger_set( 835 int unit, 836 bcm_flowtracker_group_t id, 837 bcm_flowtracker_export_trigger_info_t *export_trigger_info); 838 839 /* CPU notifications. */ 840 int 841 bcmi_ft_group_cpu_notification_trigger_set( 842 int unit, 843 bcm_flowtracker_group_t id, 844 bcm_flowtracker_cpu_notification_info_t *notifications); 845 846 847 int 848 bcmi_ft_group_cpu_notification_trigger_get( 849 int unit, 850 bcm_flowtracker_group_t id, 851 bcm_flowtracker_cpu_notification_info_t *notifications); 852 853 /* Group Tracking Params. */ 854 extern int 855 bcmi_ft_group_param_element_validate ( 856 int unit, 857 bcm_flowtracker_group_t flow_group_id, 858 int num_tracking_elements, 859 bcm_flowtracker_tracking_param_info_t *list_of_tracking_elements); 860 861 extern int bcmi_ft_group_tracking_param_set( 862 int unit, 863 bcm_flowtracker_group_t id, 864 int num_tracking_elements, 865 bcm_flowtracker_tracking_param_info_t *list_of_tracking_elements); 866 867 extern int 868 bcmi_ft_group_tracking_param_get( 869 int unit, 870 bcm_flowtracker_group_t id, 871 int max_size, 872 bcm_flowtracker_tracking_param_info_t *list_of_tracking_elements, 873 int *num_tracking_elements); 874 875 extern int 876 bcmi_ft_check_action_info_set( 877 int unit, 878 bcm_flowtracker_check_t check_id, 879 bcm_flowtracker_check_action_info_t info); 880 881 extern int 882 bcmi_ft_check_action_info_get( 883 int unit, 884 bcm_flowtracker_check_t check_id, 885 bcm_flowtracker_check_action_info_t *info); 886 887 888 extern int 889 bcmi_ft_check_export_info_get( 890 int unit, 891 bcm_flowtracker_check_t check_id, 892 bcm_flowtracker_check_export_info_t *info); 893 894 extern int 895 bcmi_ft_check_export_info_set( 896 int unit, 897 bcm_flowtracker_check_t check_id, 898 bcm_flowtracker_check_export_info_t info); 899 900 extern int 901 bcmi_ft_group_flowchecker_add( 902 int unit, 903 bcm_flowtracker_group_t id, 904 bcm_flowtracker_check_t flowchecker_id); 905 906 907 extern int 908 bcmi_ft_group_flowchecker_delete( 909 int unit, 910 bcm_flowtracker_group_t id, 911 bcm_flowtracker_check_t flowchecker_id); 912 913 extern int 914 bcmi_flowtracker_check_get_all( 915 int unit, 916 bcm_flowtracker_group_t group_id, 917 int skip_non_primary, 918 int max_checks, 919 bcm_flowtracker_check_t *list_of_check_ids, 920 int *num_checks); 921 922 /* Template list Addition and delettion. */ 923 extern int 924 bcmi_ft_group_template_list_add( 925 int unit, 926 bcmi_ft_group_template_list_t **head, 927 int start, 928 int length, 929 bcmi_ft_group_param_type_t type, 930 bcmi_ft_group_alu_info_t *info); 931 932 933 void 934 bcmi_ft_group_template_list_delete_all( 935 int unit, 936 bcmi_ft_group_template_list_t **head); 937 938 int 939 bcmi_ft_group_template_data_create( 940 int unit, 941 bcm_flowtracker_group_t id, 942 int *load16_indexes, 943 int *load8_indexes); 944 945 946 int 947 bcmi_ft_group_flush_set( 948 int unit, 949 uint32 flags, 950 int num_groups, 951 bcm_flowtracker_group_t *idz); 952 953 int 954 bcmi_flowtracker_group_control_get( 955 int unit, 956 bcm_flowtracker_group_t id, 957 bcm_flowtracker_group_control_type_t type, 958 int *arg); 959 960 961 int 962 bcmi_flowtracker_group_control_set( 963 int unit, 964 bcm_flowtracker_group_t id, 965 bcm_flowtracker_group_control_type_t type, 966 int arg); 967 968 969 int 970 bcmi_ft_group_stat_set( 971 int unit, 972 bcm_flowtracker_group_t id, 973 bcm_flowtracker_group_stat_t *group_stats); 974 975 976 int 977 bcmi_ft_group_stat_get( 978 int unit, 979 bcm_flowtracker_group_t id, 980 bcm_flowtracker_group_stat_t *group_stats); 981 982 /* Number of tracking params for normalization */ 983 #define BCMI_FT_GROUP_NORM_TRACKING_PARAMS 12 984 985 int 986 bcmi_ft_group_norm_tracking_params_info_get( 987 int unit, 988 bcm_flowtracker_group_t id, 989 bcm_flowtracker_tracking_param_info_t **norm_tracking_params_info); 990 991 /*|*****************************************************| 992 |*****************************************************| 993 | Start - Warmboot Methods. | 994 |*****************************************************| 995 |*****************************************************|*/ 996 997 /* Recover PDD entry for group. */ 998 int 999 bcmi_ft_pdd_policy_profile_recover( 1000 int unit, bcm_flowtracker_group_t id); 1001 1002 /* Recover group profiles. */ 1003 int 1004 bcmi_ft_group_profile_recover( 1005 int unit, bcm_flowtracker_group_t id); 1006 1007 int 1008 bcmi_ft_group_alu_load_wb_recover( 1009 int unit, bcm_flowtracker_group_t id, 1010 bcmi_ft_group_alu_info_t *info, 1011 int *load16_indexes, 1012 int *load8_indexes, 1013 bcmi_ft_alu_load_type_t alu_load_type); 1014 1015 int 1016 bcmi_ft_recover(int unit); 1017 1018 1019 int 1020 bcmi_ft_group_sw_reinstall(int unit, bcm_flowtracker_group_t id); 1021 1022 int 1023 bcmi_ft_sync(int unit); 1024 1025 1026 void 1027 bcmi_ft_wb_alloc_size(int unit, int *size); 1028 1029 int 1030 bcmi_ft_warn_boot_alloc(int unit); 1031 1032 1033 int bcmi_ft_warm_boot_alloc(int unit); 1034 1035 /* ESW Layer menthods. */ 1036 extern int 1037 bcm_esw_flowtracker_sync( 1038 int unit); 1039 1040 1041 extern int 1042 bcmi_esw_ft_group_hw_install( 1043 int unit, 1044 bcm_flowtracker_group_t id); 1045 1046 extern int 1047 bcmi_esw_ft_group_hw_uninstall( 1048 int unit, 1049 bcm_flowtracker_group_t id); 1050 1051 extern int 1052 bcmi_esw_ft_group_extraction_mode_set( 1053 int unit, 1054 int key_or_data, 1055 bcm_flowtracker_group_t id, 1056 bcmi_ft_group_key_data_mode_t mode); 1057 1058 extern int 1059 bcmi_ft_group_extraction_mode_get( 1060 int unit, 1061 int key_or_data, 1062 bcm_flowtracker_group_t id, 1063 bcmi_ft_group_key_data_mode_t *mode); 1064 1065 1066 int 1067 bcmi_esw_ft_group_extraction_hw_info_set( 1068 int unit, 1069 bcm_flowtracker_group_t id, 1070 int key_or_data, 1071 int num_elements, 1072 bcmi_ft_hw_extractor_info_t *elements); 1073 1074 extern int 1075 bcmi_esw_ft_group_extraction_hw_info_get( 1076 int unit, 1077 int key_or_data, 1078 bcm_flowtracker_group_t id, 1079 int max_elements, 1080 bcmi_ft_hw_extractor_info_t *elements, 1081 int *num_elements); 1082 1083 1084 extern int 1085 bcmi_esw_ft_group_extraction_alu_info_set( 1086 int unit, 1087 bcm_flowtracker_group_t id, 1088 int key_or_data, 1089 int num_alu_info, 1090 bcmi_ft_group_alu_info_t *alu_info); 1091 1092 extern int 1093 bcmi_esw_ft_group_extraction_alu_info_get( 1094 int unit, 1095 bcm_flowtracker_group_t id, 1096 int key_or_data, 1097 int max_alu_info, 1098 bcmi_ft_group_alu_info_t *alu_info, 1099 int *num_alu_info); 1100 1101 extern int 1102 bcmi_esw_ft_group_param_retrieve(int unit, 1103 bcm_flowtracker_group_t id, 1104 bcmi_ft_group_params_t param, 1105 int *arg); 1106 1107 extern int 1108 bcmi_esw_ft_group_param_update(int unit, 1109 bcm_flowtracker_group_t id, 1110 bcmi_ft_group_params_t param, 1111 bcmi_ft_group_params_operation_t opr, 1112 int arg); 1113 1114 extern int 1115 bcm_esw_flowtracker_group_stat_set(int unit, 1116 bcm_flowtracker_group_t id, 1117 bcm_flowtracker_group_stat_t *group_stat); 1118 1119 /*|*****************************************************| 1120 |*****************************************************| 1121 | END - Warmboot Methods. | 1122 |*****************************************************| 1123 |*****************************************************|*/ 1124 1125 1126 /* Utility Macros. */ 1127 #define CLEANUP_ON_ERROR(rv) \ 1128 do { \ 1129 if (BCM_FAILURE(rv)) { \ 1130 goto cleanup; \ 1131 } \ 1132 } while(0); \ 1133 1134 /* Dump Routine. */ 1135 extern void bcmi_esw_flowtracker_sw_dump(int unit); 1136 1137 extern void 1138 bcmi_ft_state_dump(int unit); 1139 1140 1141 1142 /* Diag functions. */ 1143 extern int 1144 bcmi_ft_table_insert( 1145 int unit, 1146 bcm_ip_t dip, 1147 bcm_ip_t sip, 1148 uint16 l4destport, 1149 uint16 l4srcport, 1150 uint8 proto); 1151 1152 1153 extern int 1154 bcmi_ft_table_lookup( 1155 int unit, 1156 bcm_flowtracker_group_t id, 1157 bcm_ip_t dip, 1158 bcm_ip_t sip, 1159 uint16 l4destport, 1160 uint16 l4srcport, 1161 uint8 proto, 1162 int *index); 1163 1164 1165 extern int 1166 bcmi_ft_group_element_print( 1167 int unit, 1168 bcm_flowtracker_tracking_param_type_t element); 1169 1170 extern int 1171 bcmi_ft_group_state_dump( 1172 int unit, 1173 bcm_flowtracker_group_t id); 1174 1175 extern int 1176 bcmi_ft_group_session_data_dump( 1177 int unit, 1178 bcm_flowtracker_group_t id, 1179 int index); 1180 1181 extern int 1182 bcmi_ft_alu32_dump( 1183 int unit, 1184 int global_index); 1185 1186 extern int 1187 bcmi_ft_alu16_dump( 1188 int unit, 1189 int global_index); 1190 1191 /* Load trigger set methods. */ 1192 int 1193 bcmi_ft_group_alu16_trigger_set( 1194 int unit, 1195 int mem_idx, 1196 int index, 1197 bcm_flowtracker_direction_t direction); 1198 1199 int 1200 bcmi_ft_group_alu32_trigger_set( 1201 int unit, 1202 int mem_idx, 1203 int index, 1204 bcm_flowtracker_direction_t direction); 1205 int 1206 bcmi_ft_group_load8_trigger_set( 1207 int unit, 1208 int mem_idx, 1209 int index, 1210 bcm_flowtracker_direction_t direction); 1211 1212 int 1213 bcmi_ft_group_load16_trigger_set( 1214 int unit, 1215 int mem_idx, 1216 int index, 1217 bcm_flowtracker_direction_t direction); 1218 1219 1220 #endif /* BCM_FLOWTRACKER_SUPPORT */ 1221 1222 #endif /* _BCM_INT_FT_GROUP_H_ */ 1223 1224