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 (13952B)


      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  * This file contains multicast definitions.
      8  */
      9 
     10 #ifndef _SHR_MULTICAST_H
     11 #define _SHR_MULTICAST_H
     12 #include <shared/types.h>
     13 #include <shared/gport.h>
     14 
     15 #define _SHR_MULTICAST_TYPE_L2           1
     16 #define _SHR_MULTICAST_TYPE_L3           2
     17 #define _SHR_MULTICAST_TYPE_VPLS         3
     18 #define _SHR_MULTICAST_TYPE_SUBPORT      4
     19 #define _SHR_MULTICAST_TYPE_MIM          5
     20 #define _SHR_MULTICAST_TYPE_WLAN         6
     21 #define _SHR_MULTICAST_TYPE_VLAN         7
     22 #define _SHR_MULTICAST_TYPE_TRILL        8
     23 #define _SHR_MULTICAST_TYPE_NIV          9
     24 #define _SHR_MULTICAST_TYPE_EGRESS_OBJECT 10
     25 #define _SHR_MULTICAST_TYPE_L2GRE  11
     26 #define _SHR_MULTICAST_TYPE_VXLAN  12
     27 #define _SHR_MULTICAST_TYPE_PORTS_GROUP 13 
     28 #define _SHR_MULTICAST_TYPE_EXTENDER    14 
     29 #define _SHR_MULTICAST_TYPE_FLOW        15
     30 #define _SHR_MULTICAST_TYPE_ING_BMP     16
     31 #define _SHR_MULTICAST_TYPE_EGR_BMP     17
     32 
     33 #define _SHR_MULTICAST_TYPE_SHIFT        24
     34 #define _SHR_MULTICAST_TYPE_MASK         0xff
     35 
     36 #define _SHR_MULTICAST_ID_SHIFT          0
     37 #define _SHR_MULTICAST_ID_MASK           0xffffff
     38 
     39 /* BCM_MULTICAST_IS_SET */
     40 #define _SHR_MULTICAST_IS_SET(_group_)    \
     41         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) != 0)
     42 
     43 #define _SHR_MULTICAST_GROUP_SET(_group_, _type_, _id_) \
     44     ((_group_) = ((_type_) << _SHR_MULTICAST_TYPE_SHIFT)  | \
     45      (((_id_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
     46 
     47 #define _SHR_MULTICAST_ID_GET(_group_) \
     48     (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK)
     49 
     50 #define _SHR_MULTICAST_TYPE_GET(_group_) \
     51     (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) & _SHR_MULTICAST_TYPE_MASK)
     52 
     53 /* BCM_MULTICAST_IS_XXXX */
     54 #define _SHR_MULTICAST_IS_L2(_group_)    \
     55         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_L2)
     56 
     57 #define _SHR_MULTICAST_IS_L3(_group_)    \
     58         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_L3)
     59 
     60 #define _SHR_MULTICAST_IS_VPLS(_group_)    \
     61         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_VPLS)
     62 
     63 #define _SHR_MULTICAST_IS_SUBPORT(_group_)    \
     64         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_SUBPORT)
     65 
     66 #define _SHR_MULTICAST_IS_MIM(_group_)    \
     67         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_MIM)
     68 
     69 #define _SHR_MULTICAST_IS_WLAN(_group_)    \
     70         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_WLAN)
     71 
     72 #define _SHR_MULTICAST_IS_VLAN(_group_)    \
     73         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_VLAN)
     74 
     75 #define _SHR_MULTICAST_IS_TRILL(_group_)    \
     76         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_TRILL)
     77 
     78 #define _SHR_MULTICAST_IS_NIV(_group_)    \
     79         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_NIV)
     80 
     81 #define _SHR_MULTICAST_IS_EGRESS_OBJECT(_group_)    \
     82         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_EGRESS_OBJECT)
     83 
     84 #define _SHR_MULTICAST_IS_L2GRE(_group_)    \
     85         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_L2GRE)
     86 
     87 #define _SHR_MULTICAST_IS_VXLAN(_group_)    \
     88         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_VXLAN)
     89 
     90 #define _SHR_MULTICAST_IS_FLOW(_group_)    \
     91         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_FLOW)
     92 
     93 #define _SHR_MULTICAST_IS_PORTS_GROUP(_group_)    \
     94         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_PORTS_GROUP)
     95 
     96 #define _SHR_MULTICAST_IS_EXTENDER(_group_)    \
     97         (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) == _SHR_MULTICAST_TYPE_EXTENDER)
     98 
     99 /* BCM_MULTICAST_XXXX_SET */
    100 #define _SHR_MULTICAST_L2_SET(_group_, _mc_index_)   \
    101     ((_group_) = ((_SHR_MULTICAST_TYPE_L2) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    102      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    103 
    104 #define _SHR_MULTICAST_L3_SET(_group_, _mc_index_)   \
    105     ((_group_) = ((_SHR_MULTICAST_TYPE_L3) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    106      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    107 
    108 #define _SHR_MULTICAST_VPLS_SET(_group_, _mc_index_)   \
    109     ((_group_) = ((_SHR_MULTICAST_TYPE_VPLS) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    110      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    111 
    112 #define _SHR_MULTICAST_SUBPORT_SET(_group_, _mc_index_)   \
    113     ((_group_) = ((_SHR_MULTICAST_TYPE_SUBPORT) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    114      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    115 
    116 #define _SHR_MULTICAST_MIM_SET(_group_, _mc_index_)   \
    117     ((_group_) = ((_SHR_MULTICAST_TYPE_MIM) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    118      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    119 
    120 #define _SHR_MULTICAST_WLAN_SET(_group_, _mc_index_)   \
    121     ((_group_) = ((_SHR_MULTICAST_TYPE_WLAN) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    122      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    123 
    124 #define _SHR_MULTICAST_VLAN_SET(_group_, _mc_index_)   \
    125     ((_group_) = ((_SHR_MULTICAST_TYPE_VLAN) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    126      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    127 
    128 #define _SHR_MULTICAST_TRILL_SET(_group_, _mc_index_)   \
    129     ((_group_) = ((_SHR_MULTICAST_TYPE_TRILL) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    130      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    131 
    132 #define _SHR_MULTICAST_NIV_SET(_group_, _mc_index_)   \
    133     ((_group_) = ((_SHR_MULTICAST_TYPE_NIV) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    134      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    135 
    136 #define _SHR_MULTICAST_EGRESS_OBJECT_SET(_group_, _mc_index_)   \
    137     ((_group_) = ((_SHR_MULTICAST_TYPE_EGRESS_OBJECT) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    138      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    139 
    140 #define _SHR_MULTICAST_L2GRE_SET(_group_, _mc_index_)   \
    141     ((_group_) = ((_SHR_MULTICAST_TYPE_L2GRE) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    142      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    143 
    144 #define _SHR_MULTICAST_VXLAN_SET(_group_, _mc_index_)   \
    145     ((_group_) = ((_SHR_MULTICAST_TYPE_VXLAN) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    146      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    147 
    148 #define _SHR_MULTICAST_FLOW_SET(_group_, _mc_index_)   \
    149     ((_group_) = ((_SHR_MULTICAST_TYPE_FLOW) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    150      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    151 
    152 #define _SHR_MULTICAST_PORTS_GROUP_SET(_group_, _mc_index_)   \
    153     ((_group_) = ((_SHR_MULTICAST_TYPE_PORTS_GROUP) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    154      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    155 
    156 #define _SHR_MULTICAST_EXTENDER_SET(_group_, _mc_index_)   \
    157     ((_group_) = ((_SHR_MULTICAST_TYPE_EXTENDER) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    158      (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    159 
    160 /* BCM_MULTICAST_XXXX_GET */
    161 #define _SHR_MULTICAST_L2_GET(_group_) \
    162     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_L2) ? \
    163             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    164 
    165 #define _SHR_MULTICAST_L3_GET(_group_) \
    166     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_L3) ? \
    167             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    168 
    169 #define _SHR_MULTICAST_VPLS_GET(_group_) \
    170     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_VPLS) ? \
    171             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    172 
    173 #define _SHR_MULTICAST_SUBPORT_GET(_group_) \
    174     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_SUBPORT) ? \
    175             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    176 
    177 #define _SHR_MULTICAST_MIM_GET(_group_) \
    178     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_MIM) ? \
    179             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    180 
    181 #define _SHR_MULTICAST_WLAN_GET(_group_) \
    182     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_WLAN) ? \
    183             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    184 
    185 #define _SHR_MULTICAST_VLAN_GET(_group_) \
    186     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_VLAN) ? \
    187             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    188 
    189 #define _SHR_MULTICAST_TRILL_GET(_group_) \
    190     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_TRILL) ? \
    191             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    192 
    193 #define _SHR_MULTICAST_NIV_GET(_group_) \
    194     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_NIV) ? \
    195             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    196 
    197 #define _SHR_MULTICAST_EGRESS_OBJECT_GET(_group_) \
    198     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_EGRESS_OBJECT) ? \
    199             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    200 
    201 #define _SHR_MULTICAST_L2GRE_GET(_group_) \
    202     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_L2GRE) ? \
    203             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    204 
    205 #define _SHR_MULTICAST_VXLAN_GET(_group_) \
    206     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_VXLAN) ? \
    207             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    208 
    209 #define _SHR_MULTICAST_FLOW_GET(_group_) \
    210     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_FLOW) ? \
    211             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    212 
    213 #define _SHR_MULTICAST_PORTS_GROUP_GET(_group_) \
    214     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_PORTS_GROUP) ? \
    215             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    216 
    217 #define _SHR_MULTICAST_EXTENDER_GET(_group_) \
    218     ((_SHR_MULTICAST_TYPE(_group_) == _SHR_MULTICAST_TYPE_EXTENDER) ? \
    219             (((_group_) >> _SHR_MULTICAST_ID_SHIFT) & _SHR_MULTICAST_ID_MASK) : -1)
    220 
    221 /* BCM_MULTICAST_XXXX_GET */
    222 #define _SHR_MULTICAST_L2(_mc_index_)    \
    223          (((_SHR_MULTICAST_TYPE_L2) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    224              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    225 
    226 #define _SHR_MULTICAST_L3(_mc_index_)    \
    227          (((_SHR_MULTICAST_TYPE_L3) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    228              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    229 
    230 #define _SHR_MULTICAST_VPLS(_mc_index_)    \
    231          (((_SHR_MULTICAST_TYPE_VPLS) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    232              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    233 
    234 #define _SHR_MULTICAST_SUBPORT(_mc_index_)    \
    235          (((_SHR_MULTICAST_TYPE_SUBPORT) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    236              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    237 
    238 #define _SHR_MULTICAST_MIM(_mc_index_)    \
    239          (((_SHR_MULTICAST_TYPE_MIM) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    240              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    241 
    242 #define _SHR_MULTICAST_WLAN(_mc_index_)    \
    243          (((_SHR_MULTICAST_TYPE_WLAN) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    244              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    245 
    246 #define _SHR_MULTICAST_VLAN(_mc_index_)    \
    247          (((_SHR_MULTICAST_TYPE_VLAN) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    248              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    249 
    250 #define _SHR_MULTICAST_TRILL(_mc_index_)    \
    251          (((_SHR_MULTICAST_TYPE_TRILL) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    252              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    253 
    254 #define _SHR_MULTICAST_NIV(_mc_index_)    \
    255          (((_SHR_MULTICAST_TYPE_NIV) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    256              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    257 
    258 #define _SHR_MULTICAST_EGRESS_OBJECT(_mc_index_)    \
    259          (((_SHR_MULTICAST_TYPE_EGRESS_OBJECT) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    260              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    261 
    262 #define _SHR_MULTICAST_L2GRE(_mc_index_)    \
    263          (((_SHR_MULTICAST_TYPE_L2GRE) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    264              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    265 
    266 #define _SHR_MULTICAST_VXLAN(_mc_index_)    \
    267          (((_SHR_MULTICAST_TYPE_VXLAN) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    268              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    269 
    270 #define _SHR_MULTICAST_FLOW(_mc_index_)    \
    271          (((_SHR_MULTICAST_TYPE_FLOW) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    272              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    273 
    274 #define _SHR_MULTICAST_PORTS_GROUP(_mc_index_)    \
    275          (((_SHR_MULTICAST_TYPE_PORTS_GROUP) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    276              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    277 
    278 #define _SHR_MULTICAST_EXTENDER(_mc_index_)    \
    279          (((_SHR_MULTICAST_TYPE_EXTENDER) << _SHR_MULTICAST_TYPE_SHIFT)  | \
    280              (((_mc_index_) & _SHR_MULTICAST_ID_MASK) << _SHR_MULTICAST_ID_SHIFT))
    281 
    282 /* BCM_MULTICAST_TYPE */
    283 #define _SHR_MULTICAST_TYPE(_group_) \
    284     (((_group_) >> _SHR_MULTICAST_TYPE_SHIFT) & _SHR_MULTICAST_TYPE_MASK)
    285 
    286 /*
    287  * Multicast replication structure and flags
    288  */
    289 typedef struct { /* the structure represents a multicast replication */
    290     uint32 flags;       /* information on the replication */
    291     _shr_gport_t port;   /* destination */
    292     _shr_if_t encap1;    /* first encapsulation. */
    293     _shr_if_t encap2;    /* second encapsulation. */
    294 } _shr_multicast_replication_t;
    295 
    296 /* values for the flags field of _shr_multicast_replication_t */
    297 #define _SHR_MUTICAST_REPLICATION_ENCAP2_VALID 1   /* determines if encap2 is used. */
    298 #define _SHR_MUTICAST_REPLICATION_ENCAP1_L3_INTF 2 /* when encap2 is used, determines if encap1 is a routing interface or not. */
    299 
    300 #endif /* _SHR_MULTICAST_H */