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