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

srv6.h (10518B)


      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_SRV6_H__
     11 #define __BCM_SRV6_H__
     12 
     13 #include <bcm/types.h>
     14 
     15 /* SRv6 SID initiator flags */
     16 #define BCM_SRV6_SID_INITIATOR_WITH_ID      (1 << 0)   /* if set, the tunnel_id
     17                                                           will be given by user
     18                                                           as input, otherwise
     19                                                           output from
     20                                                           alloc_manager */
     21 #define BCM_SRV6_SID_INITIATOR_REPLACE      (1 << 1)   /* Replace existing
     22                                                           entry, update existing
     23                                                           Tunnel */
     24 #define BCM_SRV6_SID_INITIATOR_VIRTUAL_EGRESS_POINTED (1 << 2)   /* Indicate SRv6 SID
     25                                                           encapsulation is
     26                                                           pointed from EEDB only
     27                                                           and not from FWD or
     28                                                           ACL DBs */
     29 
     30 /* SRv6 SRH base initiator flags */
     31 #define BCM_SRV6_SRH_BASE_INITIATOR_WITH_ID (1 << 0)   /* if set, the tunnel_id
     32                                                           will be given by user
     33                                                           as input, otherwise
     34                                                           output from
     35                                                           alloc_manager */
     36 #define BCM_SRV6_SRH_BASE_INITIATOR_REPLACE (1 << 1)   /* Replace existing
     37                                                           entry, update existing
     38                                                           Tunnel */
     39 #define BCM_SRV6_SRH_BASE_INITIATOR_STAT_ENABLE (1 << 2)   /* if set, SRv6 SRH Base
     40                                                           supports statistics */
     41 #define BCM_SRV6_SRH_BASE_INITIATOR_EXTENDED_ENCAP (1 << 3)   /* SRH Base object is
     42                                                           used at first pass of
     43                                                           two pass encapsulation
     44                                                           flow, without
     45                                                           encapsulating the SRv6
     46                                                           base header */
     47 #define BCM_SRV6_SRH_BASE_INITIATOR_UNIFIED (1 << 4)   /* if set, SRH Base
     48                                                           header is built to
     49                                                           represent an
     50                                                           Unified-SID SRv6
     51                                                           tunnel */
     52 #define BCM_SRV6_SRH_BASE_INITIATOR_VLAN_TRANSLATION (1 << 5)   /* if set, SRv6
     53                                                           encapsulation provides
     54                                                           L2 VLAN information
     55                                                           for header above */
     56 #define BCM_SRV6_SRH_BASE_INITIATOR_T_INSERT (1 << 6)   /* if set, encapsulation
     57                                                           of the SRv6 function
     58                                                           T.Insert is performed */
     59 
     60 /* SRv6 extension terminator mapping flags */
     61 #define BCM_SRV6_EXTENSION_TERMINATOR_REPLACE (1 << 0)   /* Replace existing entry */
     62 
     63 /* 
     64  * Structure that is used in SRv6 SID initiator APIs, for managing device
     65  * behavior at SRv6 Tunnel Encapsulation
     66  */
     67 typedef struct bcm_srv6_sid_initiator_info_s {
     68     uint32 flags;                       /* BCM_SRV6_SID_INITIATOR_XXX */
     69     bcm_gport_t tunnel_id;              /* Tunnel SRv6 SID initiator object ID */
     70     bcm_ip6_t sid;                      /* SID to encapsulate */
     71     bcm_encap_access_t encap_access;    /* Encapsulation Access stage */
     72     bcm_if_t next_encap_id;             /* Next pointer interface ID, can be
     73                                            next SID initiator or
     74                                            next-encapsulation interface */
     75 } bcm_srv6_sid_initiator_info_t;
     76 
     77 /* 
     78  * Structure that is used in SRv6 SRH Base initiator APIs, for managing
     79  * device behavior at SRv6 Tunnel Encapsulation
     80  */
     81 typedef struct bcm_srv6_srh_base_initiator_info_s {
     82     uint32 flags;                       /* BCM_SRV6_SRH_BASE_INITIATOR_XXX */
     83     bcm_gport_t tunnel_id;              /* Tunnel SRv6 SRH base object ID */
     84     int nof_sids;                       /* Number of SIDs in the SID list */
     85     int qos_map_id;                     /* QOS map identifier */
     86     int ttl;                            /* Tunnel header TTL */
     87     int dscp;                           /* Tunnel header DSCP value */
     88     bcm_qos_egress_model_t egress_qos_model; /* Egress qos and ttl model */
     89     bcm_if_t next_encap_id;             /* Next encapsulation ID */
     90     int nof_additional_sids_extended_encap; /* Number of SIDs encapsulated in 1st
     91                                            pass of extended encapsulation, to be
     92                                            used to update total extension length */
     93 } bcm_srv6_srh_base_initiator_info_t;
     94 
     95 /* Structure for additional info for SRv6 SID initiator traverse */
     96 typedef struct bcm_srv6_sid_initiator_traverse_info_s {
     97     uint32 flags;           /* BCM_SRV6_SID_INITIATOR_XXX */
     98     uint32 traverse_flags;  /* BCM_SRV6_SID_INITIATOR_TRAVERSE_XXX */
     99 } bcm_srv6_sid_initiator_traverse_info_t;
    100 
    101 /* Structure for additional info for SRv6 SID initiator traverse */
    102 typedef struct bcm_srv6_srh_base_initiator_traverse_info_s {
    103     uint32 flags;           /* BCM_SRV6_SRH_BASE_INITIATOR_XXX */
    104     uint32 traverse_flags;  /* BCM_SRV6_SRH_BASE_INITIATOR_TRAVERSE_XXX */
    105 } bcm_srv6_srh_base_initiator_traverse_info_t;
    106 
    107 /* 
    108  * Structure that is used in SRv6 extension terminator APIs. Relevant in
    109  * 2-pass ESR USP case only.
    110  */
    111 typedef struct bcm_srv6_extension_terminator_mapping_s {
    112     uint32 flags;           /* BCM_SRV6_EXTENSION_TERMINATOR_XXX */
    113     int nof_sids;           /* Number of SIDs in SRv6 packet */
    114     bcm_gport_t encap_id;   /* Encapsulation id */
    115     bcm_gport_t port;       /* Gport destination */
    116 } bcm_srv6_extension_terminator_mapping_t;
    117 
    118 /* 
    119  * Structure for additional info for SRv6 extension terminator mapping
    120  * traverse
    121  */
    122 typedef struct bcm_srv6_extension_terminator_traverse_info_s {
    123     uint32 flags;           /* BCM_SRV6_EXTENSION_TERMINATOR_XXX */
    124     uint32 traverse_flags;  /* BCM_SRV6_EXTENSION_TERMINATOR_TRAVERSE_XXX */
    125 } bcm_srv6_extension_terminator_traverse_info_t;
    126 
    127 #ifndef BCM_HIDE_DISPATCHABLE
    128 
    129 /* Create/Get/Delete/Traverse SID list objects */
    130 extern int bcm_srv6_sid_initiator_create(
    131     int unit, 
    132     bcm_srv6_sid_initiator_info_t *info);
    133 
    134 /* Create/Get/Delete/Traverse SID list objects */
    135 extern int bcm_srv6_sid_initiator_get(
    136     int unit, 
    137     bcm_srv6_sid_initiator_info_t *info);
    138 
    139 /* Create/Get/Delete/Traverse SID list objects */
    140 extern int bcm_srv6_sid_initiator_delete(
    141     int unit, 
    142     bcm_srv6_sid_initiator_info_t *info);
    143 
    144 #endif /* BCM_HIDE_DISPATCHABLE */
    145 
    146 /* Srv6 callback function prototype */
    147 typedef int (*bcm_srv6_sid_initiator_traverse_cb)(
    148     int unit, 
    149     bcm_srv6_sid_initiator_info_t *info, 
    150     void *user_data);
    151 
    152 #ifndef BCM_HIDE_DISPATCHABLE
    153 
    154 /* Create/Get/Delete/Traverse SID list objects */
    155 extern int bcm_srv6_sid_initiator_traverse(
    156     int unit, 
    157     bcm_srv6_sid_initiator_traverse_info_t additional_info, 
    158     bcm_srv6_sid_initiator_traverse_cb cb, 
    159     void *user_data);
    160 
    161 /* Create/Get/Delete/Traverse SRv6 SRH Base properties */
    162 extern int bcm_srv6_srh_base_initiator_create(
    163     int unit, 
    164     bcm_srv6_srh_base_initiator_info_t *info);
    165 
    166 /* Create/Get/Delete/Traverse SRv6 SRH Base properties */
    167 extern int bcm_srv6_srh_base_initiator_get(
    168     int unit, 
    169     bcm_srv6_srh_base_initiator_info_t *info);
    170 
    171 /* Create/Get/Delete/Traverse SRv6 SRH Base properties */
    172 extern int bcm_srv6_srh_base_initiator_delete(
    173     int unit, 
    174     bcm_srv6_srh_base_initiator_info_t *info);
    175 
    176 #endif /* BCM_HIDE_DISPATCHABLE */
    177 
    178 /* Srv6 callback function prototype */
    179 typedef int (*bcm_srv6_srh_base_initiator_traverse_cb)(
    180     int unit, 
    181     bcm_srv6_srh_base_initiator_info_t *info, 
    182     void *user_data);
    183 
    184 #ifndef BCM_HIDE_DISPATCHABLE
    185 
    186 /* Create/Get/Delete/Traverse SRv6 SRH Base properties */
    187 extern int bcm_srv6_srh_base_initiator_traverse(
    188     int unit, 
    189     bcm_srv6_srh_base_initiator_traverse_info_t additional_info, 
    190     bcm_srv6_srh_base_initiator_traverse_cb cb, 
    191     void *user_data);
    192 
    193 /* 
    194  * Create/Get/Delete/Traverse port and encap_id, that were mapped by the
    195  * nof_sids
    196  */
    197 extern int bcm_srv6_extension_terminator_add(
    198     int unit, 
    199     bcm_srv6_extension_terminator_mapping_t *info);
    200 
    201 /* 
    202  * Create/Get/Delete/Traverse port and encap_id, that were mapped by the
    203  * nof_sids
    204  */
    205 extern int bcm_srv6_extension_terminator_get(
    206     int unit, 
    207     bcm_srv6_extension_terminator_mapping_t *info);
    208 
    209 /* 
    210  * Create/Get/Delete/Traverse port and encap_id, that were mapped by the
    211  * nof_sids
    212  */
    213 extern int bcm_srv6_extension_terminator_delete(
    214     int unit, 
    215     bcm_srv6_extension_terminator_mapping_t *info);
    216 
    217 #endif /* BCM_HIDE_DISPATCHABLE */
    218 
    219 /* Srv6 user call back function */
    220 typedef int (*bcm_srv6_extension_terminator_traverse_cb)(
    221     int unit, 
    222     bcm_srv6_extension_terminator_mapping_t *info, 
    223     void *user_data);
    224 
    225 #ifndef BCM_HIDE_DISPATCHABLE
    226 
    227 /* 
    228  * Create/Get/Delete/Traverse port and encap_id, that were mapped by the
    229  * nof_sids
    230  */
    231 extern int bcm_srv6_extension_terminator_traverse(
    232     int unit, 
    233     bcm_srv6_extension_terminator_traverse_info_t additional_info, 
    234     bcm_srv6_extension_terminator_traverse_cb cb, 
    235     void *user_data);
    236 
    237 #endif /* BCM_HIDE_DISPATCHABLE */
    238 
    239 /* Initialize a bcm_srv6_srh_base_initiator_info_t structure. */
    240 extern void bcm_srv6_srh_base_initiator_info_t_init(
    241     bcm_srv6_srh_base_initiator_info_t *info);
    242 
    243 /* Initialize a bcm_srv6_sid_initiator_info_t structure. */
    244 extern void bcm_srv6_sid_initiator_info_t_init(
    245     bcm_srv6_sid_initiator_info_t *info);
    246 
    247 /* Initialize a bcm_srv6_extension_terminator_mapping_t structure. */
    248 extern void bcm_srv6_extension_terminator_mapping_t_init(
    249     bcm_srv6_extension_terminator_mapping_t *info);
    250 
    251 #endif /* __BCM_SRV6_H__ */