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

extender.h (14545B)


      1 /*
      2  * 
      3  * 
      4  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      5  * 
      6  * Copyright 2007-2020 Broadcom Inc. All rights reserved.
      7  *
      8  */
      9 
     10 #ifndef __BCM_EXTENDER_H__
     11 #define __BCM_EXTENDER_H__
     12 
     13 #if defined(INCLUDE_L3)
     14 
     15 #include <bcm/types.h>
     16 
     17 /* extender port match criteria */
     18 typedef enum bcm_extender_port_match_e {
     19     BCM_EXTENDER_PORT_MATCH_PORT_EXTENDED_INVALID = 0, /* Illegal. */
     20     BCM_EXTENDER_PORT_MATCH_PORT_EXTENDED_NONE = 1, /* No source match criteria. */
     21     BCM_EXTENDER_PORT_MATCH_PORT_EXTENDED_PORT_VLAN = 2, /* Match Port + Extender Port VID +
     22                                            VLAN. */
     23     BCM_EXTENDER_PORT_MATCH_PORT_EXTENDED_PORT_VLAN_STACKED = 3, /* Match Port + Extender Port VID + VLAN
     24                                            + CVLAN. */
     25     BCM_EXTENDER_PORT_MATCH_PORT_EXTENDED_PORT_CVLAN = 4, /* Match Port + Extended Port VID +
     26                                            CVLAN. */
     27     BCM_EXTENDER_PORT_MATCH_PORT_EXTENDED_UNTAGGED = 5, /* Match Port + Extender Port VID. */
     28     BCM_EXTENDER_PORT_MATCH_COUNT = 6   /* Must be last. */
     29 } bcm_extender_port_match_t;
     30 
     31 /* BCM_EXTENDER_PORT_* flags. */
     32 #define BCM_EXTENDER_PORT_WITH_ID           0x00000001 /* Create extender port
     33                                                           with specified ID */
     34 #define BCM_EXTENDER_PORT_REPLACE           0x00000002 /* Replace existing entry */
     35 #define BCM_EXTENDER_PORT_MULTICAST         0x00000004 /* Create multicast type */
     36 #define BCM_EXTENDER_PORT_ENCAP_WITH_ID     0x00000008 /* Use the specified
     37                                                           encap id to allocate
     38                                                           and setup
     39                                                           encapsulation. */
     40 #define BCM_EXTENDER_PORT_EGRESS_TRANSPARENT 0x00000010 /* Use the flag to
     41                                                           transmit packets
     42                                                           transparently out of
     43                                                           this extender port. */
     44 #define BCM_EXTENDER_PORT_DROP              0x00000020 /* Drop egress packets. */
     45 #define BCM_EXTENDER_PORT_ID_ASSIGN_DISABLE 0x00000040 /* Matched traffic is not
     46                                                           assigned to the
     47                                                           extender port */
     48 #define BCM_EXTENDER_PORT_INGRESS_WIDE      0x00000080 /* Creates encap id wide
     49                                                           mode */
     50 #define BCM_EXTENDER_PORT_INITIAL_VLAN      0x00000100 /* Create extender port
     51                                                           with Initial VLAN */
     52 #define BCM_EXTENDER_PORT_MATCH_NONE        0x00000200 /* Create extender port
     53                                                           with no matching
     54                                                           criteria */
     55 
     56 /* ETAG PCP and DE fields select. */
     57 typedef enum bcm_extender_pcp_de_select_e {
     58     BCM_EXTENDER_PCP_DE_SELECT_OUTER_TAG = 0, 
     59     BCM_EXTENDER_PCP_DE_SELECT_INNER_TAG = 1, 
     60     BCM_EXTENDER_PCP_DE_SELECT_DEFAULT   = 2, 
     61     BCM_EXTENDER_PCP_DE_SELECT_PHB       = 3 
     62 } bcm_extender_pcp_de_select_t;
     63 
     64 /* Extender port type. */
     65 typedef struct bcm_extender_port_s {
     66     bcm_extender_port_match_t criteria; /* Match criteria. */
     67     uint32 flags;                       /* BCM_EXTENDER_PORT_xxx. */
     68     bcm_gport_t extender_port_id;       /* GPORT identifier. */
     69     bcm_gport_t port;                   /* Physical port / trunk */
     70     uint16 extended_port_vid;           /* Extender port VID. */
     71     bcm_vlan_t match_vlan;              /* Outer VLAN ID to match. */
     72     bcm_vlan_t match_inner_vlan;        /* Inner VLAN ID to match. */
     73     bcm_extender_pcp_de_select_t pcp_de_select; /* Selection of PCP and DE fields for
     74                                            egress ETAG. */
     75     int qos_map_id;                     /* Qos map id for egress etag mapping
     76                                            profile. */
     77     uint8 pcp;                          /* Default PCP field of ETAG. */
     78     uint8 de;                           /* Default DE field of ETAG. */
     79     bcm_if_t encap_id;                  /* Encap identifier. */
     80     bcm_gport_t failover_port_id;       /* Failover id. */
     81     bcm_failover_t failover_id;         /* Failover object index. */
     82     bcm_failover_t ingress_failover_id; /* 1+1 protection. */
     83     bcm_multicast_t failover_mc_group;  /* MC group for 1+1 scheme failover. */
     84     int inlif_counting_profile;         /* In LIF counting profile */
     85     int outlif_counting_profile;        /* Out LIF counting profile */
     86 } bcm_extender_port_t;
     87 
     88 /* BCM_EXTENDER_FORWARD_* flags. */
     89 #define BCM_EXTENDER_FORWARD_REPLACE        0x00000001 /* Replace existing entry */
     90 #define BCM_EXTENDER_FORWARD_MULTICAST      0x00000002 /* Create multicast type */
     91 #define BCM_EXTENDER_FORWARD_UPSTREAM_ONLY  0x00000004 /* If set, the API
     92                                                           configures upstream
     93                                                           (ECID registration)
     94                                                           information only. */
     95 #define BCM_EXTENDER_FORWARD_DOWNSTREAM_ONLY 0x00000008 /* If set, the API
     96                                                           configures downstream
     97                                                           information only. */
     98 #define BCM_EXTENDER_FORWARD_WITH_ID        0x00000010 /* Set
     99                                                           extender_forward_id
    100                                                           value. Used in case of
    101                                                           downstream only */
    102 #define BCM_EXTENDER_FORWARD_COPY_TO_CPU    0x00000020 /* Copy to CPU for
    103                                                           downstream */
    104 
    105 /* Extender forwarding entry type. */
    106 typedef struct bcm_extender_forward_s {
    107     uint32 flags;                       /* BCM_extender_FORWARD_xxx. */
    108     uint16 name_space;                  /* extender Namespace. */
    109     uint16 extended_port_vid;           /* Extended port VID. */
    110     bcm_gport_t dest_port;              /* Destination Gport. */
    111     bcm_multicast_t dest_multicast;     /* Destination Multicast Group. */
    112     bcm_gport_t extender_forward_id;    /* Downstream forwarding id. */
    113     uint32 class_id;                    /* Class id. */
    114 } bcm_extender_forward_t;
    115 
    116 /* BCM_EXTENDER_ENCAP_* flags. */
    117 #define BCM_EXTENDER_ENCAP_WITH_ID  0x00000001 /* Add using the specified
    118                                                   extender_encap_id value */
    119 #define BCM_EXTENDER_ENCAP_REPLACE  0x00000002 /* Replace existing
    120                                                   extender_encap_id entry */
    121 
    122 /* Extender encapsulation entry type. */
    123 typedef struct bcm_extender_encap_s {
    124     uint32 flags;                   /* BCM_EXTENDER_ENCAP_xxx. */
    125     uint16 extended_port_vid;       /* Extended port VID - PCID value. */
    126     bcm_gport_t extender_encap_id;  /* Extender encapsulation id. */
    127 } bcm_extender_encap_t;
    128 
    129 /* BCM_EXTENDER_EGRESS_* flags. */
    130 #define BCM_EXTENDER_EGRESS_MULTICAST       (1 << 0)   /* Create multicast type */
    131 #define BCM_EXTENDER_EGRESS_SERVICE_VLAN_ADD (1 << 1)   /* Add SD-tag */
    132 #define BCM_EXTENDER_EGRESS_SERVICE_VLAN_DELETE (1 << 2)   /* Delete SD-tag */
    133 #define BCM_EXTENDER_EGRESS_SERVICE_VLAN_REPLACE (1 << 3)   /* Replace SD-tag VLAN ID */
    134 #define BCM_EXTENDER_EGRESS_SERVICE_PRI_REPLACE (1 << 4)   /* Replace SD-tag
    135                                                           Priority */
    136 #define BCM_EXTENDER_EGRESS_SERVICE_TPID_REPLACE (1 << 5)   /* Replace SD-tag TPID */
    137 #define BCM_EXTENDER_EGRESS_L3              (1 << 6)   /* Create L3 egress
    138                                                           object */
    139 
    140 /* EXTENDER egress type. */
    141 typedef struct bcm_extender_egress_s {
    142     uint32 flags;                       /* BCM_EXTENDER_EGRESS_xxx. */
    143     bcm_gport_t port;                   /* Physical port / trunk. */
    144     uint16 extended_port_vid;           /* extended port VID field of ETAG. */
    145     bcm_vlan_t match_vlan;              /* Outer VLAN ID to match. */
    146     bcm_extender_pcp_de_select_t pcp_de_select; /* Selection of PCP and DE fields for
    147                                            egress ETAG. */
    148     int qos_map_id;                     /* Qos map id for egress etag mapping
    149                                            profile. */
    150     uint8 pcp;                          /* Default PCP field of ETAG. */
    151     uint8 de;                           /* Default DE field of ETAG. */
    152     bcm_if_t egress_if;                 /* Egress object ID. */
    153     int service_qos_map_id;             /* Egress SD-tag Priority and CFI
    154                                            mapping profile ID. */
    155     uint16 service_tpid;                /* Egress SD-tag TPID. */
    156     bcm_vlan_t service_vlan;            /* Egress SD-tag VLAN ID. */
    157     uint8 service_pri;                  /* Egress SD-tag default Priority. */
    158     uint8 service_cfi;                  /* Egress SD-tag default CFI. */
    159     bcm_if_t intf;                      /* L3 interface. */
    160     uint32 multicast_flags;             /* BCM_L3_MULTICAST flag definitions. */
    161 } bcm_extender_egress_t;
    162 
    163 #ifndef BCM_HIDE_DISPATCHABLE
    164 
    165 /* Initialize the BCM Port Extension module. */
    166 extern int bcm_extender_init(
    167     int unit);
    168 
    169 /* Detach the Port Extension module. */
    170 extern int bcm_extender_cleanup(
    171     int unit);
    172 
    173 #endif /* BCM_HIDE_DISPATCHABLE */
    174 
    175 /* Initialize the Port Extender port structure. */
    176 extern void bcm_extender_port_t_init(
    177     bcm_extender_port_t *extender_port);
    178 
    179 #ifndef BCM_HIDE_DISPATCHABLE
    180 
    181 /* Create a Port Extender port. */
    182 extern int bcm_extender_port_add(
    183     int unit, 
    184     bcm_extender_port_t *extender_port);
    185 
    186 /* Delete a Port Extender port. */
    187 extern int bcm_extender_port_delete(
    188     int unit, 
    189     bcm_gport_t extender_port_id);
    190 
    191 /* Delete all Port Extender ports. */
    192 extern int bcm_extender_port_delete_all(
    193     int unit);
    194 
    195 /* Get information about a Port Extender port. */
    196 extern int bcm_extender_port_get(
    197     int unit, 
    198     bcm_extender_port_t *extender_port);
    199 
    200 #endif /* BCM_HIDE_DISPATCHABLE */
    201 
    202 /* Extender port traverse callback. */
    203 typedef int (*bcm_extender_port_traverse_cb)(
    204     int unit, 
    205     bcm_extender_port_t *extender_port, 
    206     void *user_data);
    207 
    208 #ifndef BCM_HIDE_DISPATCHABLE
    209 
    210 /* Traverse all Port Extender ports. */
    211 extern int bcm_extender_port_traverse(
    212     int unit, 
    213     bcm_extender_port_traverse_cb cb, 
    214     void *user_data);
    215 
    216 #endif /* BCM_HIDE_DISPATCHABLE */
    217 
    218 /* Initialize the forwarding entry structure. */
    219 extern void bcm_extender_forward_t_init(
    220     bcm_extender_forward_t *extender_forward_entry);
    221 
    222 #ifndef BCM_HIDE_DISPATCHABLE
    223 
    224 /* Add a downstream forwarding entry. */
    225 extern int bcm_extender_forward_add(
    226     int unit, 
    227     bcm_extender_forward_t *extender_forward_entry);
    228 
    229 /* Delete a downstream forwarding entry. */
    230 extern int bcm_extender_forward_delete(
    231     int unit, 
    232     bcm_extender_forward_t *extender_forward_entry);
    233 
    234 /* Delete all downstream forwarding entries. */
    235 extern int bcm_extender_forward_delete_all(
    236     int unit);
    237 
    238 /* Get information about a downstream forwarding entry. */
    239 extern int bcm_extender_forward_get(
    240     int unit, 
    241     bcm_extender_forward_t *extender_forward_entry);
    242 
    243 #endif /* BCM_HIDE_DISPATCHABLE */
    244 
    245 /* Extender forwarding entry traverse callback. */
    246 typedef int (*bcm_extender_forward_traverse_cb)(
    247     int unit, 
    248     bcm_extender_forward_t *extender_forward_entry, 
    249     void *user_data);
    250 
    251 #ifndef BCM_HIDE_DISPATCHABLE
    252 
    253 /* Traverse all downstream forwarding entries. */
    254 extern int bcm_extender_forward_traverse(
    255     int unit, 
    256     bcm_extender_forward_traverse_cb cb, 
    257     void *user_data);
    258 
    259 #endif /* BCM_HIDE_DISPATCHABLE */
    260 
    261 /* Initialize the extender encapsulation entry structure. */
    262 extern void bcm_extender_encap_t_init(
    263     bcm_extender_encap_t *extender_encap);
    264 
    265 #ifndef BCM_HIDE_DISPATCHABLE
    266 
    267 /* Create an encapsulation entry. */
    268 extern int bcm_extender_encap_create(
    269     int unit, 
    270     bcm_extender_encap_t *extender_encap);
    271 
    272 /* Destroy extender encapsulation entry. */
    273 extern int bcm_extender_encap_destroy(
    274     int unit, 
    275     bcm_gport_t *extender_encap_id);
    276 
    277 /* Destroy all extender encapsulation entries. */
    278 extern int bcm_extender_encap_destroy_all(
    279     int unit);
    280 
    281 /* Get information extender encapsulation. */
    282 extern int bcm_extender_encap_get(
    283     int unit, 
    284     bcm_extender_encap_t *extender_encap);
    285 
    286 #endif /* BCM_HIDE_DISPATCHABLE */
    287 
    288 /* Extender port encapsulation entry traverse callback. */
    289 typedef int (*bcm_extender_encap_traverse_cb)(
    290     int unit, 
    291     bcm_extender_encap_t *extender_encap, 
    292     void *user_data);
    293 
    294 #ifndef BCM_HIDE_DISPATCHABLE
    295 
    296 /* Traverse all extender encapsulation entries. */
    297 extern int bcm_extender_encap_traverse(
    298     int unit, 
    299     bcm_extender_encap_traverse_cb cb, 
    300     void *user_data);
    301 
    302 #endif /* BCM_HIDE_DISPATCHABLE */
    303 
    304 /* Initialize the Extender egress object structure. */
    305 extern void bcm_extender_egress_t_init(
    306     bcm_extender_egress_t *extender_egress);
    307 
    308 #ifndef BCM_HIDE_DISPATCHABLE
    309 
    310 /* Create a Extender egress object and add it to a Extender port. */
    311 extern int bcm_extender_egress_add(
    312     int unit, 
    313     bcm_gport_t extender_port, 
    314     bcm_extender_egress_t *extender_egress);
    315 
    316 /* Delete a Extender egress object from a Extender port and destroy it. */
    317 extern int bcm_extender_egress_delete(
    318     int unit, 
    319     bcm_gport_t extender_port, 
    320     bcm_extender_egress_t *extender_egress);
    321 
    322 /* 
    323  * Create a set of Extender egress objects and add them to a Extender
    324  * port.
    325  */
    326 extern int bcm_extender_egress_set(
    327     int unit, 
    328     bcm_gport_t extender_port, 
    329     int array_size, 
    330     bcm_extender_egress_t *extender_egress_array);
    331 
    332 /* Get Extender egress objects associated with a Extender port. */
    333 extern int bcm_extender_egress_get(
    334     int unit, 
    335     bcm_gport_t extender_port, 
    336     bcm_extender_egress_t *extender_egress);
    337 
    338 /* Get Extender egress objects associated with a Extender port. */
    339 extern int bcm_extender_egress_get_all(
    340     int unit, 
    341     bcm_gport_t extender_port, 
    342     int array_size, 
    343     bcm_extender_egress_t *extender_egress_array, 
    344     int *count);
    345 
    346 /* Delete all Extender egress objects associated with a Extender port. */
    347 extern int bcm_extender_egress_delete_all(
    348     int unit, 
    349     bcm_gport_t extender_port);
    350 
    351 #endif /* defined(INCLUDE_L3) */
    352 
    353 #endif /* BCM_HIDE_DISPATCHABLE */
    354 
    355 #endif /* __BCM_EXTENDER_H__ */