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