openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

multicast.h (22812B)


      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_MULTICAST_H
     12 #define BCMINT_LTSW_MBCM_MULTICAST_H
     13 
     14 #include <bcm/types.h>
     15 #include <bcm/multicast.h>
     16 
     17 #include <bcm_int/ltsw/multicast_int.h>
     18 
     19 #include <sal/sal_types.h>
     20 
     21 /*!
     22  * \brief Initialize MULTICAST module.
     23  *
     24  * \param [in] unit Unit Number.
     25  *
     26  * \retval SHR_E_NONE No errors.
     27  * \retval !SHR_E_NONE Failure.
     28  */
     29 typedef int (*multicast_init_f)(int unit);
     30 
     31 /*!
     32  * \brief De-initialize MULTICAST module.
     33  *
     34  * \param [in] unit Unit Number.
     35  *
     36  * \retval SHR_E_NONE No errors.
     37  * \retval !SHR_E_NONE Failure.
     38  */
     39 typedef int (*multicast_detach_f)(int unit);
     40 
     41 /*!
     42  * \brief Get the public info of MULTICAST module.
     43  *
     44  * \param [in] unit Unit Number.
     45  * \param [out] mc_pub Returned mc public info.
     46  *
     47  * \retval SHR_E_NONE No errors.
     48  * \retval !SHR_E_NONE Failure.
     49  */
     50 typedef int (*multicast_pub_info_get_f)(
     51     int unit,
     52     bcmint_multicast_pub_info_t *mc_pub);
     53 
     54 /*!
     55  * \brief Create a L2 multicast group.
     56  *
     57  * \param [in] unit Unit Number.
     58  * \param [in] l2mc_id L2 multicast group id.
     59  *
     60  * \retval SHR_E_NONE No errors.
     61  * \retval !SHR_E_NONE Failure.
     62  */
     63 typedef int (*multicast_l2_grp_create_f)(
     64     int unit,
     65     uint32_t l2mc_id);
     66 
     67 /*!
     68  * \brief Destroy a L2 multicast group.
     69  *
     70  * \param [in] unit Unit Number.
     71  * \param [in] l2mc_id L2 multicast group id.
     72  *
     73  * \retval SHR_E_NONE No errors.
     74  * \retval !SHR_E_NONE Failure.
     75  */
     76 typedef int (*multicast_l2_grp_destroy_f)(
     77     int unit,
     78     uint32_t l2mc_id);
     79 
     80 /*!
     81  * \brief Update a L2 multicast group.
     82  *
     83  * \param [in] unit Unit Number.
     84  * \param [in] l2mc_id L2 multicast group id.
     85  * \param [in] opcode Operation code of update.
     86  * \param [in] port_array Port_array of this operation.
     87  * \param [in] port_count Count of ports.
     88  *
     89  * \retval SHR_E_NONE No errors.
     90  * \retval !SHR_E_NONE Failure.
     91  */
     92 typedef int (*multicast_l2_grp_update_f)(
     93     int unit,
     94     uint32_t l2mc_id,
     95     bcmint_multicast_l2_grp_op_code_t opcode,
     96     bcm_port_t *port_array,
     97     uint32_t port_count);
     98 
     99 /*!
    100  * \brief Get egress encap_ids of a L2 multicast group.
    101  *
    102  * \param [in] unit Unit Number.
    103  * \param [in] l2mc_id L2 multicast group id.
    104  * \param [in] port_size Maxium mumber of GPORTS in this group.
    105  * \param [out] port_array Returned egress ports of this group.
    106  * \param [out] encap_id_array Returned list of encap_id.
    107  * \param [out] port_count Returned ports count.
    108  *
    109  * \retval SHR_E_NONE No errors.
    110  * \retval !SHR_E_NONE Failure.
    111  */
    112 typedef int (*multicast_l2_egress_get_f)(
    113     int unit,
    114     uint32_t l2mc_id,
    115     int port_size,
    116     bcm_gport_t *port_array,
    117     bcm_if_t *encap_id_array,
    118     int *port_count);
    119 
    120 /*!
    121  * \brief Create a L3 multicast group.
    122  *
    123  * \param [in] unit Unit Number.
    124  * \param [in] l3mc_id L3 multicast group id.
    125  *
    126  * \retval SHR_E_NONE No errors.
    127  * \retval !SHR_E_NONE Failure.
    128  */
    129 typedef int (*multicast_l3_grp_create_f)(
    130     int unit,
    131     uint32_t l3mc_id);
    132 
    133 /*!
    134  * \brief Destroy a L3 multicast group.
    135  *
    136  * \param [in] unit Unit Number.
    137  * \param [in] l3mc_id L3 multicast group id.
    138  *
    139  * \retval SHR_E_NONE No errors.
    140  * \retval !SHR_E_NONE Failure.
    141  */
    142 typedef int (*multicast_l3_grp_destroy_f)(
    143     int unit,
    144     uint32_t l3mc_id);
    145 
    146 /*!
    147  * \brief Update a L3 multicast group.
    148  *
    149  * \param [in] unit Unit Number.
    150  * \param [in] l3mc_id L3 multicast group id.
    151  * \param [in] opcode Operation code of update.
    152  * \param [in] port Port of this operation.
    153  * \param [in] encap_id_array Encap_id array of the given port.
    154  * \param [in] encap_count Count of encap_id_array.
    155  *
    156  * \retval SHR_E_NONE No errors.
    157  * \retval !SHR_E_NONE Failure.
    158  */
    159 typedef int (*multicast_l3_grp_update_f)(
    160     int unit,
    161     uint32_t l3mc_id,
    162     bcmint_multicast_l3_grp_op_code_t opcode,
    163     bcm_port_t port,
    164     bcm_if_t *encap_id_array,
    165     uint32_t encap_count);
    166 
    167 /*!
    168  * \brief Get egress encap_ids of a L3 multicast group.
    169  *
    170  * \param [in] unit Unit Number.
    171  * \param [in] l3mc_id L3 multicast group id.
    172  * \param [in] port_size Maxium mumber of GPORTS in this group.
    173  * \param [out] port_array Returned egress ports of this group.
    174  * \param [out] encap_id_array Returned list of encap_id.
    175  * \param [out] port_count Returned ports count.
    176  *
    177  * \retval SHR_E_NONE No errors.
    178  * \retval !SHR_E_NONE Failure.
    179  */
    180 typedef int (*multicast_l3_egress_get_f)(
    181     int unit,
    182     uint32_t l3mc_id,
    183     int port_size,
    184     bcm_gport_t *port_array,
    185     bcm_if_t *encap_id_array,
    186     int *port_count);
    187 
    188 /*!
    189  * \brief Create a multicast encap_id based on encapsulation info.
    190  *
    191  * \param [in] unit Unit Number.
    192  * \param [in] mc_encap Multicast encapsulation info.
    193  * \param [out] encap_id Returned encap_id.
    194  *
    195  * \retval SHR_E_NONE No errors.
    196  * \retval !SHR_E_NONE Failure.
    197  */
    198 typedef int (*multicast_encap_create_f)(
    199     int unit,
    200     bcm_multicast_encap_t *mc_encap,
    201     bcm_if_t *encap_id);
    202 
    203 /*!
    204  * \brief Destroy a multicast encap_id.
    205  *
    206  * \param [in] unit Unit Number.
    207  * \param [in] encap_id Multicast encap_id.
    208  *
    209  * \retval SHR_E_NONE No errors.
    210  * \retval !SHR_E_NONE Failure.
    211  */
    212 typedef int (*multicast_encap_destroy_f)(
    213     int unit,
    214     bcm_if_t encap_id);
    215 
    216 /*!
    217  * \brief Get multicast encapsulation info from encap_id.
    218  *
    219  * \param [in] unit Unit Number.
    220  * \param [in] encap_id Multicast encap_id.
    221  * \param [out] mc_encap Returned multicast encapsulation info.
    222  *
    223  * \retval SHR_E_NONE No errors.
    224  * \retval !SHR_E_NONE Failure.
    225  */
    226 typedef int (*multicast_encap_get_f)(
    227     int unit,
    228     bcm_if_t encap_id,
    229     bcm_multicast_encap_t *mc_encap);
    230 
    231 /*!
    232  * \brief Recover encap info of encap_id.
    233  *
    234  * \param [in] unit Unit Number.
    235  * \param [in] encap_id Multicast encap_id.
    236  *
    237  * \retval SHR_E_NONE No errors.
    238  * \retval !SHR_E_NONE Failure.
    239  */
    240 typedef int (*multicast_encap_recover_f)(
    241     int unit,
    242     bcm_if_t encap_id);
    243 
    244 /*!
    245  * \brief Get L2 multicast group id for default VLAN.
    246  *
    247  * \param [in] unit Unit Number.
    248  * \param [out] grp_id L2 group HW index.
    249  *
    250  * \retval SHR_E_NONE No errors.
    251  * \retval !SHR_E_NONE Failure.
    252  */
    253 typedef int (*multicast_def_vlan_grp_id_get_f)(
    254     int unit,
    255     uint32_t *grp_id);
    256 
    257 /*!
    258  * \brief Update member ports of default vlan multicast group.
    259  *
    260  * \param [in] unit Unit Number.
    261  *
    262  * \retval SHR_E_NONE No errors.
    263  * \retval !SHR_E_NONE Failure.
    264  */
    265 typedef int (*multicast_def_vlan_grp_update_f)(int unit);
    266 
    267 /*!
    268  * \brief Enable/disable to egress both L2 and L3 packet copies on a same egress port.
    269  *
    270  * \param [in] unit Unit Number.
    271  * \param [in] enable Enable/disable
    272  *
    273  * \retval SHR_E_NONE No errors.
    274  * \retval !SHR_E_NONE Failure.
    275  */
    276 typedef int (*multicast_l2_l3_combined_set_f)(
    277     int unit,
    278     bool enable);
    279 
    280 /*!
    281  * \brief Get multicast l2 l3 combined mode.
    282  *
    283  * \param [in] unit Unit Number.
    284  * \param [out] enable TRUE: Combined mode is enabled. FALSE: Combined mode is disabled.
    285  *
    286  * \retval SHR_E_NONE No errors.
    287  * \retval !SHR_E_NONE Failure.
    288  */
    289 typedef int (*multicast_l2_l3_combined_get_f)(
    290     int unit,
    291     bool *enable);
    292 
    293 /*!
    294  * \brief Set a multicast group mapping.
    295  *
    296  * \param [in] unit Unit Number.
    297  * \param [in] mc_index_from Multicast group index to map from
    298  * \param [in] mc_index_to Multicast group index to map to
    299  *
    300  * \retval SHR_E_NONE No errors.
    301  * \retval !SHR_E_NONE Failure.
    302  */
    303 typedef int (*multicast_remap_group_set_f)(
    304     int unit,
    305     int mc_index_from,
    306     int mc_index_to);
    307 
    308 /*!
    309  * \brief Get a multicast group mapping.
    310  *
    311  * \param [in] unit Unit Number.
    312  * \param [in] mc_index_from Multicast group index to map from
    313  * \param [out] mc_index_to Multicast group index to map to
    314  *
    315  * \retval SHR_E_NONE No errors.
    316  * \retval !SHR_E_NONE Failure.
    317  */
    318 typedef int (*multicast_remap_group_get_f)(
    319     int unit,
    320     int mc_index_from,
    321     int *mc_index_to);
    322 
    323 /*!
    324  * \brief Get the Encap ID for Egress_object.
    325  *
    326  * \param [in] unit Unit Number.
    327  * \param [in] group Multicast group ID.
    328  * \param [in] intf Egress Object ID.
    329  * \param [out] encap_id Returned encap_id.
    330  *
    331  * \retval SHR_E_NONE No errors.
    332  * \retval !SHR_E_NONE Failure.
    333  */
    334 typedef int (*multicast_egress_object_encap_get_f)(
    335     int unit,
    336     bcm_multicast_t group,
    337     bcm_if_t intf,
    338     bcm_if_t *encap_id);
    339 
    340 /*!
    341  * \brief Set maximum transmission unit.
    342  *
    343  * \param [in] unit Unit Number.
    344  * \param [in] mc_index Multicast group ID.
    345  * \param [in] mtu Maximum transmission unit to set.
    346  *
    347  * \retval SHR_E_NONE No errors.
    348  * \retval !SHR_E_NONE Failure.
    349  */
    350 typedef int (*multicast_mtu_set_f)(
    351     int unit,
    352     int mc_index,
    353     int mtu);
    354 
    355 /*!
    356  * \brief Get maximum transmission unit.
    357  *
    358  * \param [in] unit Unit Number.
    359  * \param [in] mc_index Multicast group ID.
    360  * \param [out] mtu Maximum transmission unit to set.
    361  *
    362  * \retval SHR_E_NONE No errors.
    363  * \retval !SHR_E_NONE Failure.
    364  */
    365 typedef int (*multicast_mtu_get_f)(
    366     int unit,
    367     int mc_index,
    368     int *mtu);
    369 
    370 /*!
    371  * \brief Initialize replication per-port configuration in the runtime.
    372  *
    373  * \param [in] unit Unit Number.
    374  * \param [in] port Port of this operation.
    375  *
    376  * \retval SHR_E_NONE No errors.
    377  * \retval !SHR_E_NONE Failure.
    378  */
    379 typedef int (*multicast_repl_port_attach_f)(
    380     int unit,
    381     bcm_port_t port);
    382 
    383 /*!
    384  * \brief Clear replication per-port configuration in the runtime.
    385  *
    386  * \param [in] unit Unit Number.
    387  * \param [in] port Port of this operation.
    388  *
    389  * \retval SHR_E_NONE No errors.
    390  * \retval !SHR_E_NONE Failure.
    391  */
    392 typedef int (*multicast_repl_port_detach_f)(
    393     int unit,
    394     bcm_port_t port);
    395 
    396 /*!
    397  * \brief Init l2mc index table management for vlan flooding.
    398  *
    399  * \param [in] unit Unit Number.
    400  *
    401  * \retval SHR_E_NONE No errors.
    402  * \retval !SHR_E_NONE Failure.
    403  */
    404 typedef int (*multicast_vlan_flood_init_f)(int unit);
    405 
    406 /*!
    407  * \brief Multicast driver structure.
    408  */
    409 typedef struct mbcm_ltsw_multicast_drv_s {
    410 
    411     /*! Initialize MULTICAST module. */
    412     multicast_init_f multicast_init;
    413 
    414     /*! De-initialize MULTICAST module. */
    415     multicast_detach_f multicast_detach;
    416 
    417     /*! Get the public info of MULTICAST module. */
    418     multicast_pub_info_get_f multicast_pub_info_get;
    419 
    420     /*! Create a L2 multicast group. */
    421     multicast_l2_grp_create_f multicast_l2_grp_create;
    422 
    423     /*! Destroy a L2 multicast group. */
    424     multicast_l2_grp_destroy_f multicast_l2_grp_destroy;
    425 
    426     /*! Update a L2 multicast group. */
    427     multicast_l2_grp_update_f multicast_l2_grp_update;
    428 
    429     /*! Get egress encap_ids of a L2 multicast group. */
    430     multicast_l2_egress_get_f multicast_l2_egress_get;
    431 
    432     /*! Create a L3 multicast group. */
    433     multicast_l3_grp_create_f multicast_l3_grp_create;
    434 
    435     /*! Destroy a L3 multicast group. */
    436     multicast_l3_grp_destroy_f multicast_l3_grp_destroy;
    437 
    438     /*! Update a L3 multicast group. */
    439     multicast_l3_grp_update_f multicast_l3_grp_update;
    440 
    441     /*! Get egress encap_ids of a L3 multicast group. */
    442     multicast_l3_egress_get_f multicast_l3_egress_get;
    443 
    444     /*! Create a multicast encap_id based on encapsulation info. */
    445     multicast_encap_create_f multicast_encap_create;
    446 
    447     /*! Destroy a multicast encap_id. */
    448     multicast_encap_destroy_f multicast_encap_destroy;
    449 
    450     /*! Get multicast encapsulation info from encap_id. */
    451     multicast_encap_get_f multicast_encap_get;
    452 
    453     /*! Recover encap info of encap_id. */
    454     multicast_encap_recover_f multicast_encap_recover;
    455 
    456     /*! Get L2 multicast group id for default VLAN. */
    457     multicast_def_vlan_grp_id_get_f multicast_def_vlan_grp_id_get;
    458 
    459     /*! Update member ports of default vlan multicast group. */
    460     multicast_def_vlan_grp_update_f multicast_def_vlan_grp_update;
    461 
    462     /*! Enable/disable to egress both L2 and L3 packet copies on a same egress port. */
    463     multicast_l2_l3_combined_set_f multicast_l2_l3_combined_set;
    464 
    465     /*! Get multicast l2 l3 combined mode. */
    466     multicast_l2_l3_combined_get_f multicast_l2_l3_combined_get;
    467 
    468     /*! Set a multicast group mapping. */
    469     multicast_remap_group_set_f multicast_remap_group_set;
    470 
    471     /*! Get a multicast group mapping. */
    472     multicast_remap_group_get_f multicast_remap_group_get;
    473 
    474     /*! Get the Encap ID for Egress_object. */
    475     multicast_egress_object_encap_get_f multicast_egress_object_encap_get;
    476 
    477     /*! Set maximum transmission unit. */
    478     multicast_mtu_set_f multicast_mtu_set;
    479 
    480     /*! Get maximum transmission unit. */
    481     multicast_mtu_get_f multicast_mtu_get;
    482 
    483     /*! Initialize replication per-port configuration in the runtime. */
    484     multicast_repl_port_attach_f multicast_repl_port_attach;
    485 
    486     /*! Clear replication per-port configuration in the runtime. */
    487     multicast_repl_port_detach_f multicast_repl_port_detach;
    488 
    489     /*! Init l2mc index table management for vlan flooding. */
    490     multicast_vlan_flood_init_f multicast_vlan_flood_init;
    491 
    492 } mbcm_ltsw_multicast_drv_t;
    493 
    494 /*!
    495  * \brief Set the MULTICAST driver of the device.
    496  *
    497  * \param [in] unit Unit Number.
    498  * \param [in] drv Multicast driver to set.
    499  *
    500  * \retval SHR_E_NONE No errors.
    501  * \retval !SHR_E_NONE Failure.
    502  */
    503 extern int
    504 mbcm_ltsw_multicast_drv_set(
    505     int unit,
    506     mbcm_ltsw_multicast_drv_t *drv);
    507 
    508 /*!
    509  * \brief Initialize MULTICAST module.
    510  *
    511  * \param [in] unit Unit Number.
    512  *
    513  * \retval SHR_E_NONE No errors.
    514  * \retval !SHR_E_NONE Failure.
    515  */
    516 extern int
    517 mbcm_ltsw_multicast_init(int unit);
    518 
    519 /*!
    520  * \brief De-initialize MULTICAST module.
    521  *
    522  * \param [in] unit Unit Number.
    523  *
    524  * \retval SHR_E_NONE No errors.
    525  * \retval !SHR_E_NONE Failure.
    526  */
    527 extern int
    528 mbcm_ltsw_multicast_detach(int unit);
    529 
    530 /*!
    531  * \brief Get the public info of MULTICAST module.
    532  *
    533  * \param [in] unit Unit Number.
    534  * \param [out] mc_pub Returned mc public info.
    535  *
    536  * \retval SHR_E_NONE No errors.
    537  * \retval !SHR_E_NONE Failure.
    538  */
    539 extern int
    540 mbcm_ltsw_multicast_pub_info_get(
    541     int unit,
    542     bcmint_multicast_pub_info_t *mc_pub);
    543 
    544 /*!
    545  * \brief Create a L2 multicast group.
    546  *
    547  * \param [in] unit Unit Number.
    548  * \param [in] l2mc_id L2 multicast group id.
    549  *
    550  * \retval SHR_E_NONE No errors.
    551  * \retval !SHR_E_NONE Failure.
    552  */
    553 extern int
    554 mbcm_ltsw_multicast_l2_grp_create(
    555     int unit,
    556     uint32_t l2mc_id);
    557 
    558 /*!
    559  * \brief Destroy a L2 multicast group.
    560  *
    561  * \param [in] unit Unit Number.
    562  * \param [in] l2mc_id L2 multicast group id.
    563  *
    564  * \retval SHR_E_NONE No errors.
    565  * \retval !SHR_E_NONE Failure.
    566  */
    567 extern int
    568 mbcm_ltsw_multicast_l2_grp_destroy(
    569     int unit,
    570     uint32_t l2mc_id);
    571 
    572 /*!
    573  * \brief Update a L2 multicast group.
    574  *
    575  * \param [in] unit Unit Number.
    576  * \param [in] l2mc_id L2 multicast group id.
    577  * \param [in] opcode Operation code of update.
    578  * \param [in] port_array Port_array of this operation.
    579  * \param [in] port_count Count of ports.
    580  *
    581  * \retval SHR_E_NONE No errors.
    582  * \retval !SHR_E_NONE Failure.
    583  */
    584 extern int
    585 mbcm_ltsw_multicast_l2_grp_update(
    586     int unit,
    587     uint32_t l2mc_id,
    588     bcmint_multicast_l2_grp_op_code_t opcode,
    589     bcm_port_t *port_array,
    590     uint32_t port_count);
    591 
    592 /*!
    593  * \brief Get egress encap_ids of a L2 multicast group.
    594  *
    595  * \param [in] unit Unit Number.
    596  * \param [in] l2mc_id L2 multicast group id.
    597  * \param [in] port_size Maxium mumber of GPORTS in this group.
    598  * \param [out] port_array Returned egress ports of this group.
    599  * \param [out] encap_id_array Returned list of encap_id.
    600  * \param [out] port_count Returned ports count.
    601  *
    602  * \retval SHR_E_NONE No errors.
    603  * \retval !SHR_E_NONE Failure.
    604  */
    605 extern int
    606 mbcm_ltsw_multicast_l2_egress_get(
    607     int unit,
    608     uint32_t l2mc_id,
    609     int port_size,
    610     bcm_gport_t *port_array,
    611     bcm_if_t *encap_id_array,
    612     int *port_count);
    613 
    614 /*!
    615  * \brief Create a L3 multicast group.
    616  *
    617  * \param [in] unit Unit Number.
    618  * \param [in] l3mc_id L3 multicast group id.
    619  *
    620  * \retval SHR_E_NONE No errors.
    621  * \retval !SHR_E_NONE Failure.
    622  */
    623 extern int
    624 mbcm_ltsw_multicast_l3_grp_create(
    625     int unit,
    626     uint32_t l3mc_id);
    627 
    628 /*!
    629  * \brief Destroy a L3 multicast group.
    630  *
    631  * \param [in] unit Unit Number.
    632  * \param [in] l3mc_id L3 multicast group id.
    633  *
    634  * \retval SHR_E_NONE No errors.
    635  * \retval !SHR_E_NONE Failure.
    636  */
    637 extern int
    638 mbcm_ltsw_multicast_l3_grp_destroy(
    639     int unit,
    640     uint32_t l3mc_id);
    641 
    642 /*!
    643  * \brief Update a L3 multicast group.
    644  *
    645  * \param [in] unit Unit Number.
    646  * \param [in] l3mc_id L3 multicast group id.
    647  * \param [in] opcode Operation code of update.
    648  * \param [in] port Port of this operation.
    649  * \param [in] encap_id_array Encap_id array of the given port.
    650  * \param [in] encap_count Count of encap_id_array.
    651  *
    652  * \retval SHR_E_NONE No errors.
    653  * \retval !SHR_E_NONE Failure.
    654  */
    655 extern int
    656 mbcm_ltsw_multicast_l3_grp_update(
    657     int unit,
    658     uint32_t l3mc_id,
    659     bcmint_multicast_l3_grp_op_code_t opcode,
    660     bcm_port_t port,
    661     bcm_if_t *encap_id_array,
    662     uint32_t encap_count);
    663 
    664 /*!
    665  * \brief Get egress encap_ids of a L3 multicast group.
    666  *
    667  * \param [in] unit Unit Number.
    668  * \param [in] l3mc_id L3 multicast group id.
    669  * \param [in] port_size Maxium mumber of GPORTS in this group.
    670  * \param [out] port_array Returned egress ports of this group.
    671  * \param [out] encap_id_array Returned list of encap_id.
    672  * \param [out] port_count Returned ports count.
    673  *
    674  * \retval SHR_E_NONE No errors.
    675  * \retval !SHR_E_NONE Failure.
    676  */
    677 extern int
    678 mbcm_ltsw_multicast_l3_egress_get(
    679     int unit,
    680     uint32_t l3mc_id,
    681     int port_size,
    682     bcm_gport_t *port_array,
    683     bcm_if_t *encap_id_array,
    684     int *port_count);
    685 
    686 /*!
    687  * \brief Create a multicast encap_id based on encapsulation info.
    688  *
    689  * \param [in] unit Unit Number.
    690  * \param [in] mc_encap Multicast encapsulation info.
    691  * \param [out] encap_id Returned encap_id.
    692  *
    693  * \retval SHR_E_NONE No errors.
    694  * \retval !SHR_E_NONE Failure.
    695  */
    696 extern int
    697 mbcm_ltsw_multicast_encap_create(
    698     int unit,
    699     bcm_multicast_encap_t *mc_encap,
    700     bcm_if_t *encap_id);
    701 
    702 /*!
    703  * \brief Destroy a multicast encap_id.
    704  *
    705  * \param [in] unit Unit Number.
    706  * \param [in] encap_id Multicast encap_id.
    707  *
    708  * \retval SHR_E_NONE No errors.
    709  * \retval !SHR_E_NONE Failure.
    710  */
    711 extern int
    712 mbcm_ltsw_multicast_encap_destroy(
    713     int unit,
    714     bcm_if_t encap_id);
    715 
    716 /*!
    717  * \brief Get multicast encapsulation info from encap_id.
    718  *
    719  * \param [in] unit Unit Number.
    720  * \param [in] encap_id Multicast encap_id.
    721  * \param [out] mc_encap Returned multicast encapsulation info.
    722  *
    723  * \retval SHR_E_NONE No errors.
    724  * \retval !SHR_E_NONE Failure.
    725  */
    726 extern int
    727 mbcm_ltsw_multicast_encap_get(
    728     int unit,
    729     bcm_if_t encap_id,
    730     bcm_multicast_encap_t *mc_encap);
    731 
    732 /*!
    733  * \brief Recover encap info of encap_id.
    734  *
    735  * \param [in] unit Unit Number.
    736  * \param [in] encap_id Multicast encap_id.
    737  *
    738  * \retval SHR_E_NONE No errors.
    739  * \retval !SHR_E_NONE Failure.
    740  */
    741 extern int
    742 mbcm_ltsw_multicast_encap_recover(
    743     int unit,
    744     bcm_if_t encap_id);
    745 
    746 /*!
    747  * \brief Get L2 multicast group id for default VLAN.
    748  *
    749  * \param [in] unit Unit Number.
    750  * \param [out] grp_id L2 group HW index.
    751  *
    752  * \retval SHR_E_NONE No errors.
    753  * \retval !SHR_E_NONE Failure.
    754  */
    755 extern int
    756 mbcm_ltsw_multicast_def_vlan_grp_id_get(
    757     int unit,
    758     uint32_t *grp_id);
    759 
    760 /*!
    761  * \brief Update member ports of default vlan multicast group.
    762  *
    763  * \param [in] unit Unit Number.
    764  *
    765  * \retval SHR_E_NONE No errors.
    766  * \retval !SHR_E_NONE Failure.
    767  */
    768 extern int
    769 mbcm_ltsw_multicast_def_vlan_grp_update(int unit);
    770 
    771 /*!
    772  * \brief Enable/disable to egress both L2 and L3 packet copies on a same egress port.
    773  *
    774  * \param [in] unit Unit Number.
    775  * \param [in] enable Enable/disable
    776  *
    777  * \retval SHR_E_NONE No errors.
    778  * \retval !SHR_E_NONE Failure.
    779  */
    780 extern int
    781 mbcm_ltsw_multicast_l2_l3_combined_set(
    782     int unit,
    783     bool enable);
    784 
    785 /*!
    786  * \brief Get multicast l2 l3 combined mode.
    787  *
    788  * \param [in] unit Unit Number.
    789  * \param [out] enable TRUE: Combined mode is enabled. FALSE: Combined mode is disabled.
    790  *
    791  * \retval SHR_E_NONE No errors.
    792  * \retval !SHR_E_NONE Failure.
    793  */
    794 extern int
    795 mbcm_ltsw_multicast_l2_l3_combined_get(
    796     int unit,
    797     bool *enable);
    798 
    799 /*!
    800  * \brief Set a multicast group mapping.
    801  *
    802  * \param [in] unit Unit Number.
    803  * \param [in] mc_index_from Multicast group index to map from
    804  * \param [in] mc_index_to Multicast group index to map to
    805  *
    806  * \retval SHR_E_NONE No errors.
    807  * \retval !SHR_E_NONE Failure.
    808  */
    809 extern int
    810 mbcm_ltsw_multicast_remap_group_set(
    811     int unit,
    812     int mc_index_from,
    813     int mc_index_to);
    814 
    815 /*!
    816  * \brief Get a multicast group mapping.
    817  *
    818  * \param [in] unit Unit Number.
    819  * \param [in] mc_index_from Multicast group index to map from
    820  * \param [out] mc_index_to Multicast group index to map to
    821  *
    822  * \retval SHR_E_NONE No errors.
    823  * \retval !SHR_E_NONE Failure.
    824  */
    825 extern int
    826 mbcm_ltsw_multicast_remap_group_get(
    827     int unit,
    828     int mc_index_from,
    829     int *mc_index_to);
    830 
    831 /*!
    832  * \brief Get the Encap ID for Egress_object.
    833  *
    834  * \param [in] unit Unit Number.
    835  * \param [in] group Multicast group ID.
    836  * \param [in] intf Egress Object ID.
    837  * \param [out] encap_id Returned encap_id.
    838  *
    839  * \retval SHR_E_NONE No errors.
    840  * \retval !SHR_E_NONE Failure.
    841  */
    842 extern int
    843 mbcm_ltsw_multicast_egress_object_encap_get(
    844     int unit,
    845     bcm_multicast_t group,
    846     bcm_if_t intf,
    847     bcm_if_t *encap_id);
    848 
    849 /*!
    850  * \brief Set maximum transmission unit.
    851  *
    852  * \param [in] unit Unit Number.
    853  * \param [in] mc_index Multicast group ID.
    854  * \param [in] mtu Maximum transmission unit to set.
    855  *
    856  * \retval SHR_E_NONE No errors.
    857  * \retval !SHR_E_NONE Failure.
    858  */
    859 extern int
    860 mbcm_ltsw_multicast_mtu_set(
    861     int unit,
    862     int mc_index,
    863     int mtu);
    864 
    865 /*!
    866  * \brief Get maximum transmission unit.
    867  *
    868  * \param [in] unit Unit Number.
    869  * \param [in] mc_index Multicast group ID.
    870  * \param [out] mtu Maximum transmission unit to set.
    871  *
    872  * \retval SHR_E_NONE No errors.
    873  * \retval !SHR_E_NONE Failure.
    874  */
    875 extern int
    876 mbcm_ltsw_multicast_mtu_get(
    877     int unit,
    878     int mc_index,
    879     int *mtu);
    880 
    881 /*!
    882  * \brief Initialize replication per-port configuration in the runtime.
    883  *
    884  * \param [in] unit Unit Number.
    885  * \param [in] port Port of this operation.
    886  *
    887  * \retval SHR_E_NONE No errors.
    888  * \retval !SHR_E_NONE Failure.
    889  */
    890 extern int
    891 mbcm_ltsw_multicast_repl_port_attach(
    892     int unit,
    893     bcm_port_t port);
    894 
    895 /*!
    896  * \brief Clear replication per-port configuration in the runtime.
    897  *
    898  * \param [in] unit Unit Number.
    899  * \param [in] port Port of this operation.
    900  *
    901  * \retval SHR_E_NONE No errors.
    902  * \retval !SHR_E_NONE Failure.
    903  */
    904 extern int
    905 mbcm_ltsw_multicast_repl_port_detach(
    906     int unit,
    907     bcm_port_t port);
    908 
    909 /*!
    910  * \brief Init l2mc index table management for vlan flooding.
    911  *
    912  * \param [in] unit Unit Number.
    913  *
    914  * \retval SHR_E_NONE No errors.
    915  * \retval !SHR_E_NONE Failure.
    916  */
    917 extern int
    918 mbcm_ltsw_multicast_vlan_flood_init(int unit);
    919 
    920 #endif /* BCMINT_LTSW_MBCM_MULTICAST_H */