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__ */