ecn.h (27398B)
1 /* 2 * DO NOT EDIT THIS FILE! 3 * This file is auto-generated. 4 * Edits to this file will be lost when it is regenerated. 5 * 6 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 7 * 8 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 9 */ 10 11 #ifndef BCMINT_LTSW_MBCM_ECN_H 12 #define BCMINT_LTSW_MBCM_ECN_H 13 14 #include <bcm/ecn.h> 15 #include <bcm/types.h> 16 #include <bcm/switch.h> 17 18 #include <sal/sal_types.h> 19 20 /*! 21 * \brief Deinit ECN module. 22 * 23 * \param [in] unit Unit Number. 24 * 25 * \retval SHR_E_NONE No errors. 26 * \retval !SHR_E_NONE Failure. 27 */ 28 typedef int (*ecn_deinit_f)(int unit); 29 30 /*! 31 * \brief Init ECN module. 32 * 33 * \param [in] unit Unit Number. 34 * 35 * \retval SHR_E_NONE No errors. 36 * \retval !SHR_E_NONE Failure. 37 */ 38 typedef int (*ecn_init_f)(int unit); 39 40 /*! 41 * \brief Create MPLS ECN map. 42 * 43 * \param [in] unit Unit Number. 44 * \param [in] flags flags. 45 * \param [out] ecn_map_id ECN map ID. 46 * 47 * \retval SHR_E_NONE No errors. 48 * \retval !SHR_E_NONE Failure. 49 */ 50 typedef int (*ecn_map_create_f)( 51 int unit, 52 uint32_t flags, 53 int *ecn_map_id); 54 55 /*! 56 * \brief Destroy MPLS ECN map. 57 * 58 * \param [in] unit Unit Number. 59 * \param [in] ecn_map_id ECN map ID. 60 * 61 * \retval SHR_E_NONE No errors. 62 * \retval !SHR_E_NONE Failure. 63 */ 64 typedef int (*ecn_map_destroy_f)( 65 int unit, 66 int ecn_map_id); 67 68 /*! 69 * \brief Set MPLS ECN map. 70 * 71 * \param [in] unit Unit Number. 72 * \param [in] options options, not used currently. 73 * \param [in] ecn_map_id ECN map ID. 74 * \param [in] ecn_map ECN mapping values. 75 * 76 * \retval SHR_E_NONE No errors. 77 * \retval !SHR_E_NONE Failure. 78 */ 79 typedef int (*ecn_map_set_f)( 80 int unit, 81 uint32_t options, 82 int ecn_map_id, 83 bcm_ecn_map_t *ecn_map); 84 85 /*! 86 * \brief Get MPLS ECN map. 87 * 88 * \param [in] unit Unit Number. 89 * \param [in] ecn_map_id ECN map ID. 90 * \param [inout] ecn_map ECN mapping values. 91 * 92 * \retval SHR_E_NONE No errors. 93 * \retval !SHR_E_NONE Failure. 94 */ 95 typedef int (*ecn_map_get_f)( 96 int unit, 97 int ecn_map_id, 98 bcm_ecn_map_t *ecn_map); 99 100 /*! 101 * \brief To configure the value of responsive indication based on the IP protocol value. 102 * 103 * \param [in] unit Unit Number. 104 * \param [in] ip_proto IP Protocol value. 105 * \param [in] responsive Responsice indication. 106 * 107 * \retval SHR_E_NONE No errors. 108 * \retval !SHR_E_NONE Failure. 109 */ 110 typedef int (*ecn_responsive_protocol_set_f)( 111 int unit, 112 uint8 ip_proto, 113 int responsive); 114 115 /*! 116 * \brief To get the value of responsive indication based on the IP protocol value. 117 * 118 * \param [in] unit Unit Number. 119 * \param [in] ip_proto IP Protocol value. 120 * \param [inout] responsive Responsice indication. 121 * 122 * \retval SHR_E_NONE No errors. 123 * \retval !SHR_E_NONE Failure. 124 */ 125 typedef int (*ecn_responsive_protocol_get_f)( 126 int unit, 127 uint8 ip_proto, 128 int *responsive); 129 130 /*! 131 * \brief To get an ECN mapping info from a port. 132 * 133 * \param [in] unit Unit Number. 134 * \param [in] port gport. 135 * \param [inout] ecn_map ECN mapping values. 136 * 137 * \retval SHR_E_NONE No errors. 138 * \retval !SHR_E_NONE Failure. 139 */ 140 typedef int (*ecn_port_map_get_f)( 141 int unit, 142 bcm_gport_t port, 143 bcm_ecn_port_map_t *ecn_map); 144 145 /*! 146 * \brief To set an ECN mapping info to a port. 147 * 148 * \param [in] unit Unit Number. 149 * \param [in] port gport. 150 * \param [inout] ecn_map ECN mapping values. 151 * 152 * \retval SHR_E_NONE No errors. 153 * \retval !SHR_E_NONE Failure. 154 */ 155 typedef int (*ecn_port_map_set_f)( 156 int unit, 157 bcm_gport_t port, 158 bcm_ecn_port_map_t *ecn_map); 159 160 /*! 161 * \brief To get an ECN mapping type. 162 * 163 * \param [in] unit Unit Number. 164 * \param [in] flags Indicates the operation by BCM_ECN_TYPE_MAP_XXX flags. 165 * \param [out] map ECN type map structure. 166 * 167 * \retval SHR_E_NONE No errors. 168 * \retval !SHR_E_NONE Failure. 169 */ 170 typedef int (*ecn_type_map_get_f)( 171 int unit, 172 uint32_t flags, 173 bcm_ecn_type_map_t *map); 174 175 /*! 176 * \brief To set an ECN mapping type. 177 * 178 * \param [in] unit Unit Number. 179 * \param [in] flags Indicates the operation by BCM_ECN_TYPE_MAP_XXX flags. 180 * \param [in] map ECN type map structure. 181 * 182 * \retval SHR_E_NONE No errors. 183 * \retval !SHR_E_NONE Failure. 184 */ 185 typedef int (*ecn_type_map_set_f)( 186 int unit, 187 uint32_t flags, 188 bcm_ecn_type_map_t *map); 189 190 /*! 191 * \brief Set latency-based ECN mode. 192 * 193 * \param [in] unit Unit Number. 194 * \param [in] mode mode. 195 * 196 * \retval SHR_E_NONE No errors. 197 * \retval !SHR_E_NONE Failure. 198 */ 199 typedef int (*ecn_latency_based_mode_set_f)( 200 int unit, 201 bcm_switch_latency_ecn_mark_mode_t mode); 202 203 /*! 204 * \brief Get latency-based ECN mode. 205 * 206 * \param [in] unit Unit Number. 207 * \param [out] mode mode. 208 * 209 * \retval SHR_E_NONE No errors. 210 * \retval !SHR_E_NONE Failure. 211 */ 212 typedef int (*ecn_latency_based_mode_get_f)( 213 int unit, 214 bcm_switch_latency_ecn_mark_mode_t *mode); 215 216 /*! 217 * \brief Set latency-based ECN threshold. 218 * 219 * \param [in] unit Unit Number. 220 * \param [in] gport Port number or GPORT identifier. 221 * \param [in] cosq COS queue number. 222 * \param [in] mode mode. 223 * \param [in] threshold threshold. 224 * 225 * \retval SHR_E_NONE No errors. 226 * \retval !SHR_E_NONE Failure. 227 */ 228 typedef int (*ecn_latency_based_threshold_set_f)( 229 int unit, 230 bcm_gport_t gport, 231 bcm_cos_queue_t cosq, 232 bcm_switch_latency_ecn_mark_mode_t mode, 233 uint32_t threshold); 234 235 /*! 236 * \brief Get latency-based ECN threshold. 237 * 238 * \param [in] unit Unit Number. 239 * \param [in] gport Port number or GPORT identifier. 240 * \param [in] cosq COS queue number. 241 * \param [in] mode mode. 242 * \param [out] threshold threshold. 243 * 244 * \retval SHR_E_NONE No errors. 245 * \retval !SHR_E_NONE Failure. 246 */ 247 typedef int (*ecn_latency_based_threshold_get_f)( 248 int unit, 249 bcm_gport_t gport, 250 bcm_cos_queue_t cosq, 251 bcm_switch_latency_ecn_mark_mode_t mode, 252 uint32_t *threshold); 253 254 /*! 255 * \brief Resolve ECN map ID. 256 * 257 * \param [in] unit Unit Number. 258 * \param [in] ecn_map_id ECN map ID. 259 * \param [out] ecn_map_type ECN map type. 260 * \param [out] prof_id ECN map profile ID. 261 * 262 * \retval SHR_E_NONE No errors. 263 * \retval !SHR_E_NONE Failure. 264 */ 265 typedef int (*ecn_map_id_resolve_f)( 266 int unit, 267 int ecn_map_id, 268 int *ecn_map_type, 269 uint32_t *prof_id); 270 271 /*! 272 * \brief Construct ECN map ID. 273 * 274 * \param [in] unit Unit Number. 275 * \param [in] ecn_map_type ECN map type. 276 * \param [in] prof_id ECN map profile ID. 277 * \param [out] ecn_map_id ECN map ID. 278 * 279 * \retval SHR_E_NONE No errors. 280 * \retval !SHR_E_NONE Failure. 281 */ 282 typedef int (*ecn_map_id_construct_f)( 283 int unit, 284 int ecn_map_type, 285 uint32_t prof_id, 286 int *ecn_map_id); 287 288 /*! 289 * \brief To set the mapped internal congestion notification (int_cn) value. 290 * 291 * \param [in] unit Unit Number. 292 * \param [in] map Internal congestion notification map. 293 * 294 * \retval SHR_E_NONE No errors. 295 * \retval !SHR_E_NONE Failure. 296 */ 297 typedef int (*ecn_traffic_map_set_f)( 298 int unit, 299 bcm_ecn_traffic_map_info_t *map); 300 301 /*! 302 * \brief To get the mapped internal congestion notification (int_cn) value. 303 * 304 * \param [in] unit Unit Number. 305 * \param [inout] map Internal congestion notification map. 306 * 307 * \retval SHR_E_NONE No errors. 308 * \retval !SHR_E_NONE Failure. 309 */ 310 typedef int (*ecn_traffic_map_get_f)( 311 int unit, 312 bcm_ecn_traffic_map_info_t *map); 313 314 /*! 315 * \brief To set the ECN enqueue action. 316 * 317 * \param [in] unit Unit Number. 318 * \param [in] ecn_config ECN traffic action configuration. 319 * 320 * \retval SHR_E_NONE No errors. 321 * \retval !SHR_E_NONE Failure. 322 */ 323 typedef int (*ecn_action_enqueue_set_f)( 324 int unit, 325 bcm_ecn_traffic_action_config_t *ecn_config); 326 327 /*! 328 * \brief To get the ECN enqueue action. 329 * 330 * \param [in] unit Unit Number. 331 * \param [inout] ecn_config ECN traffic action configuration. 332 * 333 * \retval SHR_E_NONE No errors. 334 * \retval !SHR_E_NONE Failure. 335 */ 336 typedef int (*ecn_action_enqueue_get_f)( 337 int unit, 338 bcm_ecn_traffic_action_config_t *ecn_config); 339 340 /*! 341 * \brief To set the ECN dequeue action. 342 * 343 * \param [in] unit Unit Number. 344 * \param [in] ecn_config ECN traffic action configuration. 345 * 346 * \retval SHR_E_NONE No errors. 347 * \retval !SHR_E_NONE Failure. 348 */ 349 typedef int (*ecn_action_dequeue_set_f)( 350 int unit, 351 bcm_ecn_traffic_action_config_t *ecn_config); 352 353 /*! 354 * \brief To get the ECN dequeue action. 355 * 356 * \param [in] unit Unit Number. 357 * \param [inout] ecn_config ECN traffic action configuration. 358 * 359 * \retval SHR_E_NONE No errors. 360 * \retval !SHR_E_NONE Failure. 361 */ 362 typedef int (*ecn_action_dequeue_get_f)( 363 int unit, 364 bcm_ecn_traffic_action_config_t *ecn_config); 365 366 /*! 367 * \brief To set the ECN egress action. 368 * 369 * \param [in] unit Unit Number. 370 * \param [in] ecn_config ECN traffic action configuration. 371 * 372 * \retval SHR_E_NONE No errors. 373 * \retval !SHR_E_NONE Failure. 374 */ 375 typedef int (*ecn_action_egress_set_f)( 376 int unit, 377 bcm_ecn_traffic_action_config_t *ecn_config); 378 379 /*! 380 * \brief To get the ECN egress action. 381 * 382 * \param [in] unit Unit Number. 383 * \param [inout] ecn_config ECN traffic action configuration. 384 * 385 * \retval SHR_E_NONE No errors. 386 * \retval !SHR_E_NONE Failure. 387 */ 388 typedef int (*ecn_action_egress_get_f)( 389 int unit, 390 bcm_ecn_traffic_action_config_t *ecn_config); 391 392 /*! 393 * \brief To set the ECN egress action. 394 * 395 * \param [in] unit Unit Number. 396 * \param [in] ecn_config ECN traffic action configuration. 397 * 398 * \retval SHR_E_NONE No errors. 399 * \retval !SHR_E_NONE Failure. 400 */ 401 typedef int (*ecn_action_latency_dequeue_set_f)( 402 int unit, 403 bcm_ecn_traffic_action_config_t *ecn_config); 404 405 /*! 406 * \brief To get the ECN egress action. 407 * 408 * \param [in] unit Unit Number. 409 * \param [inout] ecn_config ECN traffic action configuration. 410 * 411 * \retval SHR_E_NONE No errors. 412 * \retval !SHR_E_NONE Failure. 413 */ 414 typedef int (*ecn_action_latency_dequeue_get_f)( 415 int unit, 416 bcm_ecn_traffic_action_config_t *ecn_config); 417 418 /*! 419 * \brief To set the default responsive value for Non-TCP packets. 420 * 421 * \param [in] unit Unit Number. 422 * \param [in] value Default responsive value. 423 * 424 * \retval SHR_E_NONE No errors. 425 * \retval !SHR_E_NONE Failure. 426 */ 427 typedef int (*ecn_responsive_default_set_f)( 428 int unit, 429 int value); 430 431 /*! 432 * \brief To get the default responsive value for Non-TCP packets. 433 * 434 * \param [in] unit Unit Number. 435 * \param [out] value Returned default responsive value. 436 * 437 * \retval SHR_E_NONE No errors. 438 * \retval !SHR_E_NONE Failure. 439 */ 440 typedef int (*ecn_responsive_default_get_f)( 441 int unit, 442 int *value); 443 444 /*! 445 * \brief Enable or disable one field ECN control table. 446 * 447 * \param [in] unit Unit Number. 448 * \param [in] lt_name ecn_ctrl_name LT name. 449 * \param [in] lt_fld_name ecn_ctrl_fld LT field name. 450 * \param [in] val value set in the field. 451 * 452 * \retval SHR_E_NONE No errors. 453 * \retval !SHR_E_NONE Failure. 454 */ 455 typedef int (*ecn_ctrl_set_f)( 456 int unit, 457 const char *lt_name, 458 const char *lt_fld_name, 459 int val); 460 461 /*! 462 * \brief Get status ECN control table. 463 * 464 * \param [in] unit Unit Number. 465 * \param [in] lt_name ecn_ctrl_name LT name. 466 * \param [in] lt_fld_name ecn_ctrl_fld LT field name. 467 * \param [in] val value get in the field. 468 * 469 * \retval SHR_E_NONE No errors. 470 * \retval !SHR_E_NONE Failure. 471 */ 472 typedef int (*ecn_ctrl_get_f)( 473 int unit, 474 const char *lt_name, 475 const char *lt_fld_name, 476 int *val); 477 478 /*! 479 * \brief Traverse all specified ECN type maps. 480 * 481 * \param [in] unit Unit Number. 482 * \param [in] flags BCM_ECN_TYPE_MAP_XXX flags. 483 * \param [in] cb User callback function. 484 * \param [in] user_data User data to be passed to callback function. 485 * 486 * \retval SHR_E_NONE No errors. 487 * \retval !SHR_E_NONE Failure. 488 */ 489 typedef int (*ecn_type_map_traverse_f)( 490 int unit, 491 uint32_t flags, 492 bcm_ecn_type_map_traverse_cb cb, 493 void *user_data); 494 495 /*! 496 * \brief Setup SFC QoS PHB with regard to ECN module. 497 * 498 * \param [in] unit Unit Number. 499 * 500 * \retval SHR_E_NONE No errors. 501 * \retval !SHR_E_NONE Failure. 502 */ 503 typedef int (*ecn_sfc_qos_phb_setup_f)(int unit); 504 505 /*! 506 * \brief Ecn driver structure. 507 */ 508 typedef struct mbcm_ltsw_ecn_drv_s { 509 510 /*! Deinit ECN module. */ 511 ecn_deinit_f ecn_deinit; 512 513 /*! Init ECN module. */ 514 ecn_init_f ecn_init; 515 516 /*! Create MPLS ECN map. */ 517 ecn_map_create_f ecn_map_create; 518 519 /*! Destroy MPLS ECN map. */ 520 ecn_map_destroy_f ecn_map_destroy; 521 522 /*! Set MPLS ECN map. */ 523 ecn_map_set_f ecn_map_set; 524 525 /*! Get MPLS ECN map. */ 526 ecn_map_get_f ecn_map_get; 527 528 /*! To configure the value of responsive indication based on the IP protocol value. */ 529 ecn_responsive_protocol_set_f ecn_responsive_protocol_set; 530 531 /*! To get the value of responsive indication based on the IP protocol value. */ 532 ecn_responsive_protocol_get_f ecn_responsive_protocol_get; 533 534 /*! To get an ECN mapping info from a port. */ 535 ecn_port_map_get_f ecn_port_map_get; 536 537 /*! To set an ECN mapping info to a port. */ 538 ecn_port_map_set_f ecn_port_map_set; 539 540 /*! To get an ECN mapping type. */ 541 ecn_type_map_get_f ecn_type_map_get; 542 543 /*! To set an ECN mapping type. */ 544 ecn_type_map_set_f ecn_type_map_set; 545 546 /*! Set latency-based ECN mode. */ 547 ecn_latency_based_mode_set_f ecn_latency_based_mode_set; 548 549 /*! Get latency-based ECN mode. */ 550 ecn_latency_based_mode_get_f ecn_latency_based_mode_get; 551 552 /*! Set latency-based ECN threshold. */ 553 ecn_latency_based_threshold_set_f ecn_latency_based_threshold_set; 554 555 /*! Get latency-based ECN threshold. */ 556 ecn_latency_based_threshold_get_f ecn_latency_based_threshold_get; 557 558 /*! Resolve ECN map ID. */ 559 ecn_map_id_resolve_f ecn_map_id_resolve; 560 561 /*! Construct ECN map ID. */ 562 ecn_map_id_construct_f ecn_map_id_construct; 563 564 /*! To set the mapped internal congestion notification (int_cn) value. */ 565 ecn_traffic_map_set_f ecn_traffic_map_set; 566 567 /*! To get the mapped internal congestion notification (int_cn) value. */ 568 ecn_traffic_map_get_f ecn_traffic_map_get; 569 570 /*! To set the ECN enqueue action. */ 571 ecn_action_enqueue_set_f ecn_action_enqueue_set; 572 573 /*! To get the ECN enqueue action. */ 574 ecn_action_enqueue_get_f ecn_action_enqueue_get; 575 576 /*! To set the ECN dequeue action. */ 577 ecn_action_dequeue_set_f ecn_action_dequeue_set; 578 579 /*! To get the ECN dequeue action. */ 580 ecn_action_dequeue_get_f ecn_action_dequeue_get; 581 582 /*! To set the ECN egress action. */ 583 ecn_action_egress_set_f ecn_action_egress_set; 584 585 /*! To get the ECN egress action. */ 586 ecn_action_egress_get_f ecn_action_egress_get; 587 588 /*! To set the ECN egress action. */ 589 ecn_action_latency_dequeue_set_f ecn_action_latency_dequeue_set; 590 591 /*! To get the ECN egress action. */ 592 ecn_action_latency_dequeue_get_f ecn_action_latency_dequeue_get; 593 594 /*! To set the default responsive value for Non-TCP packets. */ 595 ecn_responsive_default_set_f ecn_responsive_default_set; 596 597 /*! To get the default responsive value for Non-TCP packets. */ 598 ecn_responsive_default_get_f ecn_responsive_default_get; 599 600 /*! Enable or disable one field ECN control table. */ 601 ecn_ctrl_set_f ecn_ctrl_set; 602 603 /*! Get status ECN control table. */ 604 ecn_ctrl_get_f ecn_ctrl_get; 605 606 /*! Traverse all specified ECN type maps. */ 607 ecn_type_map_traverse_f ecn_type_map_traverse; 608 609 /*! Setup SFC QoS PHB with regard to ECN module. */ 610 ecn_sfc_qos_phb_setup_f ecn_sfc_qos_phb_setup; 611 612 } mbcm_ltsw_ecn_drv_t; 613 614 /*! 615 * \brief Set the ECN driver of the device. 616 * 617 * \param [in] unit Unit Number. 618 * \param [in] drv Ecn driver to set. 619 * 620 * \retval SHR_E_NONE No errors. 621 * \retval !SHR_E_NONE Failure. 622 */ 623 extern int 624 mbcm_ltsw_ecn_drv_set( 625 int unit, 626 mbcm_ltsw_ecn_drv_t *drv); 627 628 /*! 629 * \brief Deinit ECN module. 630 * 631 * \param [in] unit Unit Number. 632 * 633 * \retval SHR_E_NONE No errors. 634 * \retval !SHR_E_NONE Failure. 635 */ 636 extern int 637 mbcm_ltsw_ecn_deinit(int unit); 638 639 /*! 640 * \brief Init ECN module. 641 * 642 * \param [in] unit Unit Number. 643 * 644 * \retval SHR_E_NONE No errors. 645 * \retval !SHR_E_NONE Failure. 646 */ 647 extern int 648 mbcm_ltsw_ecn_init(int unit); 649 650 /*! 651 * \brief Create MPLS ECN map. 652 * 653 * \param [in] unit Unit Number. 654 * \param [in] flags flags. 655 * \param [out] ecn_map_id ECN map ID. 656 * 657 * \retval SHR_E_NONE No errors. 658 * \retval !SHR_E_NONE Failure. 659 */ 660 extern int 661 mbcm_ltsw_ecn_map_create( 662 int unit, 663 uint32_t flags, 664 int *ecn_map_id); 665 666 /*! 667 * \brief Destroy MPLS ECN map. 668 * 669 * \param [in] unit Unit Number. 670 * \param [in] ecn_map_id ECN map ID. 671 * 672 * \retval SHR_E_NONE No errors. 673 * \retval !SHR_E_NONE Failure. 674 */ 675 extern int 676 mbcm_ltsw_ecn_map_destroy( 677 int unit, 678 int ecn_map_id); 679 680 /*! 681 * \brief Set MPLS ECN map. 682 * 683 * \param [in] unit Unit Number. 684 * \param [in] options options, not used currently. 685 * \param [in] ecn_map_id ECN map ID. 686 * \param [in] ecn_map ECN mapping values. 687 * 688 * \retval SHR_E_NONE No errors. 689 * \retval !SHR_E_NONE Failure. 690 */ 691 extern int 692 mbcm_ltsw_ecn_map_set( 693 int unit, 694 uint32_t options, 695 int ecn_map_id, 696 bcm_ecn_map_t *ecn_map); 697 698 /*! 699 * \brief Get MPLS ECN map. 700 * 701 * \param [in] unit Unit Number. 702 * \param [in] ecn_map_id ECN map ID. 703 * \param [inout] ecn_map ECN mapping values. 704 * 705 * \retval SHR_E_NONE No errors. 706 * \retval !SHR_E_NONE Failure. 707 */ 708 extern int 709 mbcm_ltsw_ecn_map_get( 710 int unit, 711 int ecn_map_id, 712 bcm_ecn_map_t *ecn_map); 713 714 /*! 715 * \brief To configure the value of responsive indication based on the IP protocol value. 716 * 717 * \param [in] unit Unit Number. 718 * \param [in] ip_proto IP Protocol value. 719 * \param [in] responsive Responsice indication. 720 * 721 * \retval SHR_E_NONE No errors. 722 * \retval !SHR_E_NONE Failure. 723 */ 724 extern int 725 mbcm_ltsw_ecn_responsive_protocol_set( 726 int unit, 727 uint8 ip_proto, 728 int responsive); 729 730 /*! 731 * \brief To get the value of responsive indication based on the IP protocol value. 732 * 733 * \param [in] unit Unit Number. 734 * \param [in] ip_proto IP Protocol value. 735 * \param [inout] responsive Responsice indication. 736 * 737 * \retval SHR_E_NONE No errors. 738 * \retval !SHR_E_NONE Failure. 739 */ 740 extern int 741 mbcm_ltsw_ecn_responsive_protocol_get( 742 int unit, 743 uint8 ip_proto, 744 int *responsive); 745 746 /*! 747 * \brief To get an ECN mapping info from a port. 748 * 749 * \param [in] unit Unit Number. 750 * \param [in] port gport. 751 * \param [inout] ecn_map ECN mapping values. 752 * 753 * \retval SHR_E_NONE No errors. 754 * \retval !SHR_E_NONE Failure. 755 */ 756 extern int 757 mbcm_ltsw_ecn_port_map_get( 758 int unit, 759 bcm_gport_t port, 760 bcm_ecn_port_map_t *ecn_map); 761 762 /*! 763 * \brief To set an ECN mapping info to a port. 764 * 765 * \param [in] unit Unit Number. 766 * \param [in] port gport. 767 * \param [inout] ecn_map ECN mapping values. 768 * 769 * \retval SHR_E_NONE No errors. 770 * \retval !SHR_E_NONE Failure. 771 */ 772 extern int 773 mbcm_ltsw_ecn_port_map_set( 774 int unit, 775 bcm_gport_t port, 776 bcm_ecn_port_map_t *ecn_map); 777 778 /*! 779 * \brief To get an ECN mapping type. 780 * 781 * \param [in] unit Unit Number. 782 * \param [in] flags Indicates the operation by BCM_ECN_TYPE_MAP_XXX flags. 783 * \param [out] map ECN type map structure. 784 * 785 * \retval SHR_E_NONE No errors. 786 * \retval !SHR_E_NONE Failure. 787 */ 788 extern int 789 mbcm_ltsw_ecn_type_map_get( 790 int unit, 791 uint32_t flags, 792 bcm_ecn_type_map_t *map); 793 794 /*! 795 * \brief To set an ECN mapping type. 796 * 797 * \param [in] unit Unit Number. 798 * \param [in] flags Indicates the operation by BCM_ECN_TYPE_MAP_XXX flags. 799 * \param [in] map ECN type map structure. 800 * 801 * \retval SHR_E_NONE No errors. 802 * \retval !SHR_E_NONE Failure. 803 */ 804 extern int 805 mbcm_ltsw_ecn_type_map_set( 806 int unit, 807 uint32_t flags, 808 bcm_ecn_type_map_t *map); 809 810 /*! 811 * \brief Set latency-based ECN mode. 812 * 813 * \param [in] unit Unit Number. 814 * \param [in] mode mode. 815 * 816 * \retval SHR_E_NONE No errors. 817 * \retval !SHR_E_NONE Failure. 818 */ 819 extern int 820 mbcm_ltsw_ecn_latency_based_mode_set( 821 int unit, 822 bcm_switch_latency_ecn_mark_mode_t mode); 823 824 /*! 825 * \brief Get latency-based ECN mode. 826 * 827 * \param [in] unit Unit Number. 828 * \param [out] mode mode. 829 * 830 * \retval SHR_E_NONE No errors. 831 * \retval !SHR_E_NONE Failure. 832 */ 833 extern int 834 mbcm_ltsw_ecn_latency_based_mode_get( 835 int unit, 836 bcm_switch_latency_ecn_mark_mode_t *mode); 837 838 /*! 839 * \brief Set latency-based ECN threshold. 840 * 841 * \param [in] unit Unit Number. 842 * \param [in] gport Port number or GPORT identifier. 843 * \param [in] cosq COS queue number. 844 * \param [in] mode mode. 845 * \param [in] threshold threshold. 846 * 847 * \retval SHR_E_NONE No errors. 848 * \retval !SHR_E_NONE Failure. 849 */ 850 extern int 851 mbcm_ltsw_ecn_latency_based_threshold_set( 852 int unit, 853 bcm_gport_t gport, 854 bcm_cos_queue_t cosq, 855 bcm_switch_latency_ecn_mark_mode_t mode, 856 uint32_t threshold); 857 858 /*! 859 * \brief Get latency-based ECN threshold. 860 * 861 * \param [in] unit Unit Number. 862 * \param [in] gport Port number or GPORT identifier. 863 * \param [in] cosq COS queue number. 864 * \param [in] mode mode. 865 * \param [out] threshold threshold. 866 * 867 * \retval SHR_E_NONE No errors. 868 * \retval !SHR_E_NONE Failure. 869 */ 870 extern int 871 mbcm_ltsw_ecn_latency_based_threshold_get( 872 int unit, 873 bcm_gport_t gport, 874 bcm_cos_queue_t cosq, 875 bcm_switch_latency_ecn_mark_mode_t mode, 876 uint32_t *threshold); 877 878 /*! 879 * \brief Resolve ECN map ID. 880 * 881 * \param [in] unit Unit Number. 882 * \param [in] ecn_map_id ECN map ID. 883 * \param [out] ecn_map_type ECN map type. 884 * \param [out] prof_id ECN map profile ID. 885 * 886 * \retval SHR_E_NONE No errors. 887 * \retval !SHR_E_NONE Failure. 888 */ 889 extern int 890 mbcm_ltsw_ecn_map_id_resolve( 891 int unit, 892 int ecn_map_id, 893 int *ecn_map_type, 894 uint32_t *prof_id); 895 896 /*! 897 * \brief Construct ECN map ID. 898 * 899 * \param [in] unit Unit Number. 900 * \param [in] ecn_map_type ECN map type. 901 * \param [in] prof_id ECN map profile ID. 902 * \param [out] ecn_map_id ECN map ID. 903 * 904 * \retval SHR_E_NONE No errors. 905 * \retval !SHR_E_NONE Failure. 906 */ 907 extern int 908 mbcm_ltsw_ecn_map_id_construct( 909 int unit, 910 int ecn_map_type, 911 uint32_t prof_id, 912 int *ecn_map_id); 913 914 /*! 915 * \brief To set the mapped internal congestion notification (int_cn) value. 916 * 917 * \param [in] unit Unit Number. 918 * \param [in] map Internal congestion notification map. 919 * 920 * \retval SHR_E_NONE No errors. 921 * \retval !SHR_E_NONE Failure. 922 */ 923 extern int 924 mbcm_ltsw_ecn_traffic_map_set( 925 int unit, 926 bcm_ecn_traffic_map_info_t *map); 927 928 /*! 929 * \brief To get the mapped internal congestion notification (int_cn) value. 930 * 931 * \param [in] unit Unit Number. 932 * \param [inout] map Internal congestion notification map. 933 * 934 * \retval SHR_E_NONE No errors. 935 * \retval !SHR_E_NONE Failure. 936 */ 937 extern int 938 mbcm_ltsw_ecn_traffic_map_get( 939 int unit, 940 bcm_ecn_traffic_map_info_t *map); 941 942 /*! 943 * \brief To set the ECN enqueue action. 944 * 945 * \param [in] unit Unit Number. 946 * \param [in] ecn_config ECN traffic action configuration. 947 * 948 * \retval SHR_E_NONE No errors. 949 * \retval !SHR_E_NONE Failure. 950 */ 951 extern int 952 mbcm_ltsw_ecn_action_enqueue_set( 953 int unit, 954 bcm_ecn_traffic_action_config_t *ecn_config); 955 956 /*! 957 * \brief To get the ECN enqueue action. 958 * 959 * \param [in] unit Unit Number. 960 * \param [inout] ecn_config ECN traffic action configuration. 961 * 962 * \retval SHR_E_NONE No errors. 963 * \retval !SHR_E_NONE Failure. 964 */ 965 extern int 966 mbcm_ltsw_ecn_action_enqueue_get( 967 int unit, 968 bcm_ecn_traffic_action_config_t *ecn_config); 969 970 /*! 971 * \brief To set the ECN dequeue action. 972 * 973 * \param [in] unit Unit Number. 974 * \param [in] ecn_config ECN traffic action configuration. 975 * 976 * \retval SHR_E_NONE No errors. 977 * \retval !SHR_E_NONE Failure. 978 */ 979 extern int 980 mbcm_ltsw_ecn_action_dequeue_set( 981 int unit, 982 bcm_ecn_traffic_action_config_t *ecn_config); 983 984 /*! 985 * \brief To get the ECN dequeue action. 986 * 987 * \param [in] unit Unit Number. 988 * \param [inout] ecn_config ECN traffic action configuration. 989 * 990 * \retval SHR_E_NONE No errors. 991 * \retval !SHR_E_NONE Failure. 992 */ 993 extern int 994 mbcm_ltsw_ecn_action_dequeue_get( 995 int unit, 996 bcm_ecn_traffic_action_config_t *ecn_config); 997 998 /*! 999 * \brief To set the ECN egress action. 1000 * 1001 * \param [in] unit Unit Number. 1002 * \param [in] ecn_config ECN traffic action configuration. 1003 * 1004 * \retval SHR_E_NONE No errors. 1005 * \retval !SHR_E_NONE Failure. 1006 */ 1007 extern int 1008 mbcm_ltsw_ecn_action_egress_set( 1009 int unit, 1010 bcm_ecn_traffic_action_config_t *ecn_config); 1011 1012 /*! 1013 * \brief To get the ECN egress action. 1014 * 1015 * \param [in] unit Unit Number. 1016 * \param [inout] ecn_config ECN traffic action configuration. 1017 * 1018 * \retval SHR_E_NONE No errors. 1019 * \retval !SHR_E_NONE Failure. 1020 */ 1021 extern int 1022 mbcm_ltsw_ecn_action_egress_get( 1023 int unit, 1024 bcm_ecn_traffic_action_config_t *ecn_config); 1025 1026 /*! 1027 * \brief To set the ECN egress action. 1028 * 1029 * \param [in] unit Unit Number. 1030 * \param [in] ecn_config ECN traffic action configuration. 1031 * 1032 * \retval SHR_E_NONE No errors. 1033 * \retval !SHR_E_NONE Failure. 1034 */ 1035 extern int 1036 mbcm_ltsw_ecn_action_latency_dequeue_set( 1037 int unit, 1038 bcm_ecn_traffic_action_config_t *ecn_config); 1039 1040 /*! 1041 * \brief To get the ECN egress action. 1042 * 1043 * \param [in] unit Unit Number. 1044 * \param [inout] ecn_config ECN traffic action configuration. 1045 * 1046 * \retval SHR_E_NONE No errors. 1047 * \retval !SHR_E_NONE Failure. 1048 */ 1049 extern int 1050 mbcm_ltsw_ecn_action_latency_dequeue_get( 1051 int unit, 1052 bcm_ecn_traffic_action_config_t *ecn_config); 1053 1054 /*! 1055 * \brief To set the default responsive value for Non-TCP packets. 1056 * 1057 * \param [in] unit Unit Number. 1058 * \param [in] value Default responsive value. 1059 * 1060 * \retval SHR_E_NONE No errors. 1061 * \retval !SHR_E_NONE Failure. 1062 */ 1063 extern int 1064 mbcm_ltsw_ecn_responsive_default_set( 1065 int unit, 1066 int value); 1067 1068 /*! 1069 * \brief To get the default responsive value for Non-TCP packets. 1070 * 1071 * \param [in] unit Unit Number. 1072 * \param [out] value Returned default responsive value. 1073 * 1074 * \retval SHR_E_NONE No errors. 1075 * \retval !SHR_E_NONE Failure. 1076 */ 1077 extern int 1078 mbcm_ltsw_ecn_responsive_default_get( 1079 int unit, 1080 int *value); 1081 1082 /*! 1083 * \brief Enable or disable one field ECN control table. 1084 * 1085 * \param [in] unit Unit Number. 1086 * \param [in] lt_name ecn_ctrl_name LT name. 1087 * \param [in] lt_fld_name ecn_ctrl_fld LT field name. 1088 * \param [in] val value set in the field. 1089 * 1090 * \retval SHR_E_NONE No errors. 1091 * \retval !SHR_E_NONE Failure. 1092 */ 1093 extern int 1094 mbcm_ltsw_ecn_ctrl_set( 1095 int unit, 1096 const char *lt_name, 1097 const char *lt_fld_name, 1098 int val); 1099 1100 /*! 1101 * \brief Get status ECN control table. 1102 * 1103 * \param [in] unit Unit Number. 1104 * \param [in] lt_name ecn_ctrl_name LT name. 1105 * \param [in] lt_fld_name ecn_ctrl_fld LT field name. 1106 * \param [in] val value get in the field. 1107 * 1108 * \retval SHR_E_NONE No errors. 1109 * \retval !SHR_E_NONE Failure. 1110 */ 1111 extern int 1112 mbcm_ltsw_ecn_ctrl_get( 1113 int unit, 1114 const char *lt_name, 1115 const char *lt_fld_name, 1116 int *val); 1117 1118 /*! 1119 * \brief Traverse all specified ECN type maps. 1120 * 1121 * \param [in] unit Unit Number. 1122 * \param [in] flags BCM_ECN_TYPE_MAP_XXX flags. 1123 * \param [in] cb User callback function. 1124 * \param [in] user_data User data to be passed to callback function. 1125 * 1126 * \retval SHR_E_NONE No errors. 1127 * \retval !SHR_E_NONE Failure. 1128 */ 1129 extern int 1130 mbcm_ltsw_ecn_type_map_traverse( 1131 int unit, 1132 uint32_t flags, 1133 bcm_ecn_type_map_traverse_cb cb, 1134 void *user_data); 1135 1136 /*! 1137 * \brief Setup SFC QoS PHB with regard to ECN module. 1138 * 1139 * \param [in] unit Unit Number. 1140 * 1141 * \retval SHR_E_NONE No errors. 1142 * \retval !SHR_E_NONE Failure. 1143 */ 1144 extern int 1145 mbcm_ltsw_ecn_sfc_qos_phb_setup(int unit); 1146 1147 #endif /* BCMINT_LTSW_MBCM_ECN_H */