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

macsec.h (18932B)


      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_MACSEC_H__
     11 #define __BCM_MACSEC_H__
     12 
     13 #if defined(INCLUDE_MACSEC)
     14 
     15 #include <bcm/types.h>
     16 #include <bmacsec.h>
     17 
     18 typedef bmacsec_dev_addr_t bcm_macsec_dev_addr_t;
     19 
     20 typedef enum bcm_macsec_packet_format_e {
     21     BCM_MACSEC_PACKET_FORMAT_ETH_II = BMACSEC_PACKET_FORMAT_ETH_II, 
     22     BCM_MACSEC_PACKET_FORMAT_802_3 = BMACSEC_PACKET_FORMAT_802_3, 
     23     BCM_MACSEC_PACKET_FORMAT_SNAP = BMACSEC_PACKET_FORMAT_SNAP, 
     24     BCM_MACSEC_PACKET_FORMAT_LLC = BMACSEC_PACKET_FORMAT_LLC, 
     25     BCM_MACSEC_PACKET_FORMAT__COUNT = BMACSEC_PACKET_FORMAT__COUNT 
     26 } bcm_macsec_packet_format_t;
     27 
     28 typedef enum bcm_macsec_dir_e {
     29     BCM_MACSEC_DIR_EGRESS = BMACSEC_DIR_EGRESS, 
     30     BCM_MACSEC_DIR_INGRESS = BMACSEC_DIR_INGRESS 
     31 } bcm_macsec_dir_t;
     32 
     33 typedef enum bcm_macsec_core_e {
     34     BCM_MACSEC_CORE_UNKNOWN = BMACSEC_CORE_UNKNOWN, 
     35     BCM_MACSEC_CORE_OCTAL_GIG = BMACSEC_CORE_OCTAL_GIG, 
     36     BCM_MACSEC_CORE_BCM5458X = BMACSEC_CORE_BCM5458X, 
     37     BCM_MACSEC_CORE_BCM5458X_B0 = BMACSEC_CORE_BCM5458X_B0, 
     38     BCM_MACSEC_CORE_BCM8729 = BMACSEC_CORE_BCM8729, 
     39     BCM_MACSEC_CORE_BCM8483X = BMACSEC_CORE_BCM8483X, 
     40     BCM_MACSEC_CORE_BCM8433X = BMACSEC_CORE_BCM8433X, 
     41     BCM_MACSEC_CORE_BCM8484X = BMACSEC_CORE_BCM8484X, 
     42     BCM_MACSEC_CORE_BCM5438X = BMACSEC_CORE_BCM5438X, 
     43     BCM_MACSEC_CORE_BCM84756 = BMACSEC_CORE_BCM84756, 
     44     BCM_MACSEC_CORE_BCM84756_C0 = BMACSEC_CORE_BCM84756_C0, 
     45     BCM_MACSEC_CORE_BCM53084 = BMACSEC_CORE_BCM53084, 
     46     BCM_MACSEC_CORE_BCM84749 = BMACSEC_CORE_BCM84749, 
     47     BCM_MACSEC_CORE_BCM53020 = BMACSEC_CORE_BCM53020 
     48 } bcm_macsec_core_t;
     49 
     50 typedef bmacsec_dev_io_f bcm_macsec_dev_io_t;
     51 
     52 #define BCM_MACSEC_PORT_ENABLE  BMACSEC_PORT_ENABLE 
     53 
     54 #define BCM_MACSEC_PORT_SINGLE_CHANNEL  BMACSEC_PORT_SINGLE_CHANNEL 
     55 
     56 #define BCM_MACSEC_PORT_INGRESS_STORE_FORWARD BMACSEC_PORT_INGRESS_STORE_FORWARD 
     57 
     58 #define BCM_MACSEC_PORT_INGRESS_SECTAG_MISSING_FORWARD BMACSEC_PORT_INGRESS_SECTAG_MISSING_FORWARD 
     59 
     60 #define BCM_MACSEC_PORT_INGRESS_SECTAG_INVALID_FORWARD BMACSEC_PORT_INGRESS_SECTAG_INVALID_FORWARD 
     61 
     62 #define BCM_MACSEC_PORT_INGRESS_SECTAG_PRESERVE BMACSEC_PORT_INGRESS_SECTAG_PRESERVE 
     63 
     64 #define BCM_MACSEC_PORT_INGRESS_SECTAG_REPLACE_VLANID BMACSEC_PORT_INGRESS_SECTAG_REPLACE_VLANID 
     65 
     66 #define BCM_MACSEC_PORT_INGRESS_SECTAG_REPLACE_PN BMACSEC_PORT_INGRESS_SECTAG_REPLACE_PN 
     67 
     68 #define BCM_MACSEC_PORT_EGRESS_SECTAG_MISSING_UNCONTROLLED BMACSEC_PORT_EGRESS_SECTAG_MISSING_UNCONTROLLED 
     69 
     70 #define BCM_MACSEC_PORT_EGRESS_ENCRYPT_DISABLE BMACSEC_PORT_EGRESS_ENCRYPT_DISABLE 
     71 
     72 #define BCM_MACSEC_PORT_SECURE_ASSOC_4  BMACSEC_PORT_SECURE_ASSOC_4 
     73 
     74 #define BCM_MACSEC_PORT_EGRESS_PN_MATCH_ENABLE BMACSEC_PORT_EGRESS_PN_MATCH_ENABLE 
     75 
     76 typedef bmacsec_port_config_t bcm_macsec_port_config_t;
     77 
     78 #ifndef BCM_HIDE_DISPATCHABLE
     79 
     80 /* Set MACSec configuration for the specified port. */
     81 extern int bcm_macsec_port_config_set(
     82     int unit, 
     83     bcm_port_t port, 
     84     bcm_macsec_port_config_t *cfg);
     85 
     86 /* Returns the MACSec configuration for the specified port. */
     87 extern int bcm_macsec_port_config_get(
     88     int unit, 
     89     bcm_port_t port, 
     90     bcm_macsec_port_config_t *cfg);
     91 
     92 #endif /* BCM_HIDE_DISPATCHABLE */
     93 
     94 #define BCM_MACSEC_CAPABILITY_FORMAT_FLOW_MATCH BMACSEC_CAPABILITY_FORMAT_FLOW_MATCH 
     95 
     96 #define BCM_MACSEC_CAPABILITY_PRE_EXPIRE_PN BMACSEC_CAPABILITY_PRE_EXPIRE_PN 
     97 
     98 #define BCM_MACSEC_CAPABILITY_PN_HIGH_MATCH BMACSEC_CAPABILITY_PN_HIGH_MATCH 
     99 
    100 typedef bmacsec_port_capability_t bcm_macsec_port_capability_t;
    101 
    102 #ifndef BCM_HIDE_DISPATCHABLE
    103 
    104 /* Get the port capability for the specified port. */
    105 extern int bcm_macsec_port_capability_get(
    106     int unit, 
    107     bcm_port_t port, 
    108     bcm_macsec_port_capability_t *cap);
    109 
    110 #endif /* BCM_HIDE_DISPATCHABLE */
    111 
    112 /*  Prototype for Port interation callback function. */
    113 typedef int (*bcm_macsec_port_traverse_cb)(
    114     int unit, 
    115     bcm_port_t port, 
    116     bcm_macsec_core_t dev_core, 
    117     bcm_macsec_dev_addr_t dev_addr, 
    118     int dev_port, 
    119     bcm_macsec_dev_io_t devio_f, 
    120     void *user_data);
    121 
    122 #ifndef BCM_HIDE_DISPATCHABLE
    123 
    124 /* 
    125  * bcm_macsec_port_traverse iterates over all the MACSec capable ports in
    126  * the system and
    127  * calls user-provided callback function for each port.
    128  */
    129 extern int bcm_macsec_port_traverse(
    130     int unit, 
    131     bcm_macsec_port_traverse_cb callbk, 
    132     void *user_data);
    133 
    134 #endif /* BCM_HIDE_DISPATCHABLE */
    135 
    136 #define BCM_MACSEC_SECURE_WITH_ID   BMACSEC_SECURE_WITH_ID 
    137 
    138 #define BCM_MACSEC_SECURE_REPLACE   BMACSEC_SECURE_REPLACE 
    139 
    140 #define BCM_MACSEC_SECURE_CONFIDENTIAL  BMACSEC_SECURE_CONFIDENTIAL 
    141 
    142 #define BCM_MACSEC_SECURE_SECTAG_TX_SCI BMACSEC_SECURE_SECTAG_TX_SCI 
    143 
    144 #define BCM_MACSEC_SECURE_SECTAG_ES BMACSEC_SECURE_SECTAG_ES 
    145 
    146 #define BCM_MACSEC_SECURE_SECTAG_SCB    BMACSEC_SECURE_SECTAG_SCB 
    147 
    148 #define BCM_MACSEC_SECURE_CHAN_INGRESS  BMACSEC_SECURE_CHAN_INGRESS 
    149 
    150 #define BCM_MACSEC_SECURE_AUTO_ACTIVATE BMACSEC_SECURE_AUTO_ACTIVATE 
    151 
    152 #define BCM_MACSEC_SECURE_CHANNEL_MATCH_SCI BMACSEC_SECURE_CHANNEL_MATCH_SCI 
    153 
    154 #define BCM_MACSEC_SECURE_CHANNEL_MATCH_MAC_DA BMACSEC_SECURE_CHANNEL_MATCH_MAC_DA 
    155 
    156 #define BCM_MACSEC_SECURE_CHANNEL_MATCH_MAC_SA BMACSEC_SECURE_CHANNEL_MATCH_MAC_SA 
    157 
    158 #define BCM_MACSEC_SECURE_CHANNEL_MATCH_ETHERTYPE BMACSEC_SECURE_CHANNEL_MATCH_ETHERTYPE 
    159 
    160 #define BCM_MACSEC_SECURE_CHANNEL_MATCH_SECTAG_TCI BMACSEC_SECURE_CHANNEL_MATCH_SECTAG_TCI 
    161 
    162 typedef bmacsec_secure_chan_t bcm_macsec_secure_chan_t;
    163 
    164 #ifndef BCM_HIDE_DISPATCHABLE
    165 
    166 /* Create a MACSec secure channel. */
    167 extern int bcm_macsec_secure_chan_create(
    168     int unit, 
    169     bcm_port_t port, 
    170     uint32 flags, 
    171     bcm_macsec_secure_chan_t *chan, 
    172     int *chanId);
    173 
    174 /* 
    175  * Return MACSec secure channel information corresponding to channel
    176  * identified by chanId.
    177  */
    178 extern int bcm_macsec_secure_chan_get(
    179     int unit, 
    180     bcm_port_t port, 
    181     int chanId, 
    182     bcm_macsec_secure_chan_t *chan);
    183 
    184 /* Destroy MACSec secure channel corresponding to chanId. */
    185 extern int bcm_macsec_secure_chan_destroy(
    186     int unit, 
    187     bcm_port_t port, 
    188     int chanId);
    189 
    190 #endif /* BCM_HIDE_DISPATCHABLE */
    191 
    192 /*  MACSEC secure channel traverse callback prototype. */
    193 typedef int (*bcm_macsec_chan_traverse_cb)(
    194     int unit, 
    195     bcm_port_t port, 
    196     bcm_macsec_secure_chan_t *chan, 
    197     int chanId, 
    198     void *user_data);
    199 
    200 #ifndef BCM_HIDE_DISPATCHABLE
    201 
    202 /* Traverse over all the secure channels for the specified port. */
    203 extern int bcm_macsec_secure_chan_traverse(
    204     int unit, 
    205     bcm_port_t port, 
    206     bcm_macsec_chan_traverse_cb calback, 
    207     void *user_data);
    208 
    209 #endif /* BCM_HIDE_DISPATCHABLE */
    210 
    211 typedef enum bcm_macsec_crypto_e {
    212     BCM_MACSEC_CRYPTO_NONE = BMACSEC_CRYPTO_NONE, 
    213     BCM_MACSEC_CRYPTO_AES_128_GCM = BMACSEC_CRYPTO_AES_128_GCM 
    214 } bcm_macsec_crypto_t;
    215 
    216 #define BCM_MACSEC_CRYPTO_AES128GCM_KEY_SIZE BMACSEC_CRYPTO_AES128GCM_KEY_SIZE 
    217 
    218 typedef bmacsec_crypto_aes128_gcm_t bcm_macsec_crypto_aes128_gcm_t;
    219 
    220 typedef enum bcm_macsec_secure_assoc_num_e {
    221     BCM_MACSEC_SECURE_ASSOC_NUM_0 = BMACSEC_SECURE_ASSOC_NUM_0, 
    222     BCM_MACSEC_SECURE_ASSOC_NUM_1 = BMACSEC_SECURE_ASSOC_NUM_1, 
    223     BCM_MACSEC_SECURE_ASSOC_NUM_2 = BMACSEC_SECURE_ASSOC_NUM_2, 
    224     BCM_MACSEC_SECURE_ASSOC_NUM_3 = BMACSEC_SECURE_ASSOC_NUM_3, 
    225     BCM_MACSEC_SECURE_ASSOC_NUM__COUNT = BMACSEC_SECURE_ASSOC_NUM__COUNT 
    226 } bcm_macsec_secure_assoc_num_t;
    227 
    228 #define BCM_MACSEC_ASSOC_ACTIVE BMACSEC_ASSOC_ACTIVE 
    229 
    230 #define BCM_MACSEC_ASSOC_ROLLOVER   BMACSEC_ASSOC_ROLLOVER 
    231 
    232 #define BCM_MACSEC_ASSOC_ENCAP_REDIRECT BMACSEC_ASSOC_ENCAP_REDIRECT 
    233 
    234 #define BCM_MACSEC_ASSOC_SET_NEXT_PN    BMACSEC_ASSOC_SET_NEXT_PN 
    235 
    236 #define BCM_MACSEC_ASSOC_REPLAY_PROTECT BMACSEC_ASSOC_REPLAY_PROTECT 
    237 
    238 typedef bmacsec_secure_assoc_t bcm_macsec_secure_assoc_t;
    239 
    240 #ifndef BCM_HIDE_DISPATCHABLE
    241 
    242 /* Create a MACSec Secure association for the specified secure channel. */
    243 extern int bcm_macsec_secure_assoc_create(
    244     int unit, 
    245     bcm_port_t port, 
    246     uint32 flags, 
    247     int chanId, 
    248     bcm_macsec_secure_assoc_t *assoc, 
    249     int *assocId);
    250 
    251 /* Return MACSec secure association for the specified assocId. */
    252 extern int bcm_macsec_secure_assoc_get(
    253     int unit, 
    254     bcm_port_t port, 
    255     int assocId, 
    256     bcm_macsec_secure_assoc_t *assoc, 
    257     int *chanId);
    258 
    259 /* Destroys MACSec secure association for the specified assocId. */
    260 extern int bcm_macsec_secure_assoc_destroy(
    261     int unit, 
    262     bcm_port_t port, 
    263     int assocId);
    264 
    265 #endif /* BCM_HIDE_DISPATCHABLE */
    266 
    267 /*  Secure assoc traverse callback prototype. */
    268 typedef int (*bcm_macsec_secure_assoc_traverse_cb)(
    269     int unit, 
    270     bcm_port_t port, 
    271     bcm_macsec_secure_assoc_t *chan, 
    272     int chanId, 
    273     int assocId, 
    274     void *user_data);
    275 
    276 #ifndef BCM_HIDE_DISPATCHABLE
    277 
    278 /* 
    279  * Traverse all the secure associations and call the user-provided
    280  * callback function for each secure association.
    281  */
    282 extern int bcm_macsec_secure_assoc_traverse(
    283     int unit, 
    284     bcm_port_t port, 
    285     int chanId, 
    286     bcm_macsec_secure_assoc_traverse_cb cb, 
    287     void *user_data);
    288 
    289 #endif /* BCM_HIDE_DISPATCHABLE */
    290 
    291 typedef bmacsec_flow_match_t bcm_macsec_flow_match_t;
    292 
    293 #define BCM_MACSEC_FLOW_MATCH_UNCONTROLLED  BMACSEC_FLOW_MATCH_UNCONTROLLED 
    294 
    295 #define BCM_MACSEC_FLOW_MATCH_CONTROLLED    BMACSEC_FLOW_MATCH_CONTROLLED 
    296 
    297 #define BCM_MACSEC_FLOW_MATCH_MACSA BMACSEC_FLOW_MATCH_MACSA 
    298 
    299 #define BCM_MACSEC_FLOW_MATCH_MACDA BMACSEC_FLOW_MATCH_MACDA 
    300 
    301 #define BCM_MACSEC_FLOW_MATCH_ETHTYPE   BMACSEC_FLOW_MATCH_ETHTYPE 
    302 
    303 #define BCM_MACSEC_FLOW_MATCH_OUTER_TPID    BMACSEC_FLOW_MATCH_OUTER_TPID 
    304 
    305 #define BCM_MACSEC_FLOW_MATCH_OUTER_VLAN    BMACSEC_FLOW_MATCH_OUTER_VLAN 
    306 
    307 #define BCM_MACSEC_FLOW_MATCH_OUTER_PKT_PRIO BMACSEC_FLOW_MATCH_OUTER_PKT_PRIO 
    308 
    309 #define BCM_MACSEC_FLOW_MATCH_OUTER_PKT_CFI BMACSEC_FLOW_MATCH_OUTER_PKT_CFI 
    310 
    311 #define BCM_MACSEC_FLOW_MATCH_INNER_TPID    BMACSEC_FLOW_MATCH_INNER_TPID 
    312 
    313 #define BCM_MACSEC_FLOW_MATCH_INNER_VLAN    BMACSEC_FLOW_MATCH_INNER_VLAN 
    314 
    315 #define BCM_MACSEC_FLOW_MATCH_INNER_PKT_PRIO BMACSEC_FLOW_MATCH_INNER_PKT_PRIO 
    316 
    317 #define BCM_MACSEC_FLOW_MATCH_INNER_PKT_CFI BMACSEC_FLOW_MATCH_INNER_PKT_CFI 
    318 
    319 #define BCM_MACSEC_FLOW_MATCH_LLC_HEADER    BMACSEC_FLOW_MATCH_LLC_HEADER 
    320 
    321 #define BCM_MACSEC_FLOW_MATCH_SNAP_HEADER   BMACSEC_FLOW_MATCH_SNAP_HEADER 
    322 
    323 #define BCM_MACSEC_FLOW_MATCH_SECTAG_C0 BMACSEC_FLOW_MATCH_SECTAG_C0 
    324 
    325 #define BCM_MACSEC_FLOW_MATCH_SECTAG_C1 BMACSEC_FLOW_MATCH_SECTAG_C1 
    326 
    327 #define BCM_MACSEC_FLOW_MATCH_SECTAG_E0 BMACSEC_FLOW_MATCH_SECTAG_E0 
    328 
    329 #define BCM_MACSEC_FLOW_MATCH_SECTAG_E1 BMACSEC_FLOW_MATCH_SECTAG_E1 
    330 
    331 #define BCM_MACSEC_FLOW_MATCH_DATA  BMACSEC_FLOW_MATCH_DATA 
    332 
    333 #define BCM_MACSEC_FLOW_MATCH_NOT_SHAREABLE BMACSEC_FLOW_MATCH_NOT_SHAREABLE 
    334 
    335 #define BCM_MACSEC_FLOW_MATCH_ERROR_ASSOC_MISS BMACSEC_FLOW_MATCH_ERROR_ASSOC_MISS 
    336 
    337 #define BCM_MACSEC_FLOW_MATCH_ERROR_CHANNEL_MISS BMACSEC_FLOW_MATCH_ERROR_CHANNEL_MISS 
    338 
    339 #define BCM_MACSEC_FLOW_MATCH_ERROR_SECTAG  BMACSEC_FLOW_MATCH_ERROR_SECTAG 
    340 
    341 #define BCM_MACSEC_FLOW_MATCH_ERROR_REPLAY  BMACSEC_FLOW_MATCH_ERROR_REPLAY 
    342 
    343 #define BCM_MACSEC_FLOW_MATCH_SECURE_CHANNEL BMACSEC_FLOW_MATCH_SECURE_CHANNEL 
    344 
    345 #define BCM_MACSEC_FLOW_MATCH_SECTAG_SCI    BMACSEC_FLOW_MATCH_SECTAG_SCI 
    346 
    347 #define BCM_MACSEC_FLOW_MATCH_SECTAG_TCI    BMACSEC_FLOW_MATCH_SECTAG_TCI 
    348 
    349 #define BCM_MACSEC_FLOW_MATCH_SECTAG_SCI_PRESET BMACSEC_FLOW_MATCH_SECTAG_SCI_PRESET 
    350 
    351 typedef bmacsec_flow_action_t bcm_macsec_flow_action_t;
    352 
    353 #define BCM_MACSEC_FLOW_ACTION_DROP BMACSEC_FLOW_ACTION_DROP 
    354 
    355 #define BCM_MACSEC_FLOW_ACTION_UNCONTROLLED_FORWARD BMACSEC_FLOW_ACTION_UNCONTROLLED_FORWARD 
    356 
    357 #define BCM_MACSEC_FLOW_ACTION_CONTROLLED_FORWARD BMACSEC_FLOW_ACTION_CONTROLLED_FORWARD 
    358 
    359 #define BCM_MACSEC_FLOW_ACTION_SECTAG_E_VALUE_0 BMACSEC_FLOW_ACTION_SECTAG_E_VALUE_0 
    360 
    361 #define BCM_MACSEC_FLOW_ACTION_SECTAG_E_VALUE_1 BMACSEC_FLOW_ACTION_SECTAG_E_VALUE_1 
    362 
    363 #define BCM_MACSEC_FLOW_ACTION_SECTAG_C_VALUE_0 BMACSEC_FLOW_ACTION_SECTAG_C_VALUE_0 
    364 
    365 #define BCM_MACSEC_FLOW_ACTION_SECTAG_C_VALUE_1 BMACSEC_FLOW_ACTION_SECTAG_C_VALUE_1 
    366 
    367 #define BCM_MACSEC_FLOW_ACTION_SECTAG_V_VALUE_0 BMACSEC_FLOW_ACTION_SECTAG_V_VALUE_0 
    368 
    369 #define BCM_MACSEC_FLOW_ACTION_SECTAG_V_VALUE_1 BMACSEC_FLOW_ACTION_SECTAG_V_VALUE_1 
    370 
    371 #define BCM_MACSEC_FLOW_ACTION_MAP_SECTAG_CE_BITS BMACSEC_FLOW_ACTION_MAP_SECTAG_CE_BITS 
    372 
    373 #define BCM_MACSEC_FLOW_ACTION_MAP_SPECIALHDR_CE_BITS BMACSEC_FLOW_ACTION_MAP_SPECIALHDR_CE_BITS 
    374 
    375 #define BCM_MACSEC_FLOW_ACTION_MAP_SECTAG_SC_BITS BMACSEC_FLOW_ACTION_MAP_SECTAG_SC_BITS 
    376 
    377 #define BCM_MACSEC_FLOW_ACTION_REMOVE_SPECIALHDR BMACSEC_FLOW_ACTION_REMOVE_SPECIALHDR 
    378 
    379 #define BCM_MACSEC_FLOW_ACTION_SECURE_CHECK_FAIL_DROP BMACSEC_FLOW_ACTION_SECURE_CHECK_FAIL_DROP 
    380 
    381 #define BCM_MACSEC_FLOW_ACTION_SECURE_CHECK_FAIL_FORWARD BMACSEC_FLOW_ACTION_SECURE_CHECK_FAIL_FORWARD 
    382 
    383 #define BCM_MACSEC_FLOW_ACTION_ENCAP_REDIRECT BMACSEC_FLOW_ACTION_ENCAP_REDIRECT 
    384 
    385 #define BCM_MACSEC_FLOW_ACTION_SECURE_CHECK_FAIL_REDIRECT BMACSEC_FLOW_ACTION_SECURE_CHECK_FAIL_REDIRECT 
    386 
    387 #define BCM_MACSEC_FLOW_ACTION_ADD_SPECIALHDR BMACSEC_FLOW_ACTION_ADD_SPECIALHDR 
    388 
    389 #define BCM_MACSEC_FLOW_ACTION_SET_HIT_COUNT BMACSEC_FLOW_ACTION_SET_HIT_COUNT 
    390 
    391 #ifndef BCM_HIDE_DISPATCHABLE
    392 
    393 /* Create/update a MACSec flow object */
    394 extern int bcm_macsec_flow_create(
    395     int unit, 
    396     bcm_port_t port, 
    397     uint32 flags, 
    398     bcm_macsec_flow_match_t *flow, 
    399     bcm_macsec_flow_action_t *action, 
    400     int *flowId);
    401 
    402 /* Destroy the MACSec flow object */
    403 extern int bcm_macsec_flow_destroy(
    404     int unit, 
    405     bcm_port_t port, 
    406     int flowId);
    407 
    408 /* Find and return the MACSec flow. */
    409 extern int bcm_macsec_flow_get(
    410     int unit, 
    411     bcm_port_t port, 
    412     int flowId, 
    413     bcm_macsec_flow_match_t *flow, 
    414     bcm_macsec_flow_action_t *a);
    415 
    416 #endif /* BCM_HIDE_DISPATCHABLE */
    417 
    418 /*  Flow traverse callback prototype. */
    419 typedef int (*bcm_macsec_flow_traverse_cb)(
    420     int unit, 
    421     bcm_port_t port, 
    422     bcm_macsec_flow_match_t *flow, 
    423     bcm_macsec_flow_action_t *action, 
    424     int flowId, 
    425     void *user_data);
    426 
    427 #ifndef BCM_HIDE_DISPATCHABLE
    428 
    429 /* 
    430  * Traverse all flows for the specified port and call user-provided
    431  * callback function for each of the flows.
    432  */
    433 extern int bcm_macsec_flow_traverse(
    434     int unit, 
    435     bcm_port_t port, 
    436     bcm_macsec_flow_traverse_cb callbk, 
    437     void *user_data);
    438 
    439 #endif /* BCM_HIDE_DISPATCHABLE */
    440 
    441 typedef enum bcm_macsec_event_e {
    442     BCM_MACSEC_EVENT_PRE_KEY_EXPIRE = BMACSEC_EVENT_PRE_KEY_EXPIRE, 
    443     BCM_MACSEC_EVENT_KEY_EXPIRED = BMACSEC_EVENT_KEY_EXPIRED, 
    444     BCM_MACSEC_EVENT_KEY_RENEWED = BMACSEC_EVENT_KEY_RENEWED, 
    445     BCM_MACSEC_EVENT_HW_FAILURE = BMACSEC_EVENT_HW_FAILURE, 
    446     BCM_MACSEC_EVENT__COUNT = BMACSEC_EVENT__COUNT 
    447 } bcm_macsec_event_t;
    448 
    449 /*  Prototype for the event callback function. */
    450 typedef int (*bcm_macsec_event_cb)(
    451     int unit, 
    452     bcm_port_t port, 
    453     bcm_macsec_event_t event, 
    454     int chanId, 
    455     int assocId, 
    456     void *user_data);
    457 
    458 #ifndef BCM_HIDE_DISPATCHABLE
    459 
    460 /* Register application event handler function */
    461 extern int bcm_macsec_event_register(
    462     int unit, 
    463     bcm_macsec_event_cb cb, 
    464     void *user_data);
    465 
    466 /* Unregister the application event handler function. */
    467 extern int bcm_macsec_event_unregister(
    468     int unit, 
    469     bcm_macsec_event_cb cb);
    470 
    471 /* Enable or disable event notification for the specified event. */
    472 extern int bcm_macsec_event_enable_set(
    473     int unit, 
    474     bcm_macsec_event_t t, 
    475     int enable);
    476 
    477 /* Get current event notification status for the specified event. */
    478 extern int bcm_macsec_event_enable_get(
    479     int unit, 
    480     bcm_macsec_event_t t, 
    481     int *enable);
    482 
    483 #endif /* BCM_HIDE_DISPATCHABLE */
    484 
    485 typedef enum bcm_macsec_stat_e {
    486     bcm_rxBytes = rxBytes, 
    487     bcm_rxUnicastPkts = rxUnicastPkts, 
    488     bcm_rxMulticastPkts = rxMulticastPkts, 
    489     bcm_rxBroadcastPkts = rxBroadcastPkts, 
    490     bcm_rxDiscardPkts = rxDiscardPkts, 
    491     bcm_rxErrorPkts = rxErrorPkts, 
    492     bcm_rxUntagPkts = rxUntagPkts, 
    493     bcm_rxNotagPkts = rxNotagPkts, 
    494     bcm_rxBadtagPkts = rxBadtagPkts, 
    495     bcm_rxUnknownsciPkts = rxUnknownsciPkts, 
    496     bcm_rxNosciPkts = rxNosciPkts, 
    497     bcm_rxOvErrOverrunPkts = rxOvErrOverrunPkts, 
    498     bcm_rxSAUnusedPkts = rxSAUnusedPkts, 
    499     bcm_rxSANotusingPkts = rxSANotusingPkts, 
    500     bcm_rxSANotValidPkts = rxSANotValidPkts, 
    501     bcm_rxSAInvalidPkts = rxSAInvalidPkts, 
    502     bcm_rxSAOkPkts = rxSAOkPkts, 
    503     bcm_rxSCUnusedPkts = rxSCUnusedPkts, 
    504     bcm_rxNotusinSCPkts = rxNotusinSCPkts, 
    505     bcm_rxSCLatePkts = rxSCLatePkts, 
    506     bcm_rxSCNotValidPkts = rxSCNotValidPkts, 
    507     bcm_rxSCInvalidPkts = rxSCInvalidPkts, 
    508     bcm_rxSCDelayedPkts = rxSCDelayedPkts, 
    509     bcm_rxSCUncheckedPkts = rxSCUncheckedPkts, 
    510     bcm_rxSCOkPkts = rxSCOkPkts, 
    511     bcm_rxSCvalidtBytes = rxSCvalidtBytes, 
    512     bcm_rxSCDCryptoBytes = rxSCDCryptoBytes, 
    513     bcm_txControlledBytes = txControlledBytes, 
    514     bcm_txControlledUnicastPkts = txControlledUnicastPkts, 
    515     bcm_txControlledMulticastPkts = txControlledMulticastPkts, 
    516     bcm_txControlledBroadcastPkts = txControlledBroadcastPkts, 
    517     bcm_txControlledErrorPkts = txControlledErrorPkts, 
    518     bcm_txUncontrolledBytes = txUncontrolledBytes, 
    519     bcm_txUncontrolledUnicastPkts = txUncontrolledUnicastPkts, 
    520     bcm_txUncontrolledMulticastPkts = txUncontrolledMulticastPkts, 
    521     bcm_txUncontrolledBroadcastPkts = txUncontrolledBroadcastPkts, 
    522     bcm_txUncontrolledErrorPkts = txUncontrolledErrorPkts, 
    523     bcm_txUntagPkts = txUntagPkts, 
    524     bcm_txTooLongPkts = txTooLongPkts, 
    525     bcm_txSAProtectedPkts = txSAProtectedPkts, 
    526     bcm_txSACryptoPkts = txSACryptoPkts, 
    527     bcm_txSCProtectedPkts = txSCProtectedPkts, 
    528     bcm_txSCCryptoPkts = txSCCryptoPkts, 
    529     bcm_txSCProtectedBytes = txSCProtectedBytes, 
    530     bcm_txSCCryptoBytes = txSCCryptoBytes, 
    531     bcm_txSAavailablePkts = txSAavailablePkts, 
    532     bcm_rxSAavailablePkts = rxSAavailablePkts, 
    533     bcm_macsec_stat__count = bmacsec_stat__count 
    534 } bcm_macsec_stat_t;
    535 
    536 #ifndef BCM_HIDE_DISPATCHABLE
    537 
    538 /* Clear all the statistics for the specified port. */
    539 extern int bcm_macsec_stat_clear(
    540     int unit, 
    541     bcm_port_t port);
    542 
    543 /* Return the statistics for the specified statistic type. */
    544 extern int bcm_macsec_stat_get(
    545     int unit, 
    546     bcm_port_t port, 
    547     bcm_macsec_stat_t stat, 
    548     int chanId, 
    549     int assocId, 
    550     uint64 *val);
    551 
    552 /* Return the Statistics for the specified statistic type. */
    553 extern int bcm_macsec_stat_get32(
    554     int unit, 
    555     bcm_port_t port, 
    556     bcm_macsec_stat_t stat, 
    557     int chanId, 
    558     int assocId, 
    559     uint32 *val);
    560 
    561 /* Sets the value for specified statistic. */
    562 extern int bcm_macsec_stat_set(
    563     int unit, 
    564     bcm_port_t port, 
    565     bcm_macsec_stat_t stat, 
    566     int chanId, 
    567     int assocId, 
    568     uint64 val);
    569 
    570 /* Sets the value for the specified statistic. */
    571 extern int bcm_macsec_stat_set32(
    572     int unit, 
    573     bcm_port_t port, 
    574     bcm_macsec_stat_t stat, 
    575     int chanId, 
    576     int assocId, 
    577     uint32 val);
    578 
    579 #endif /* defined(INCLUDE_MACSEC) */
    580 
    581 #endif /* BCM_HIDE_DISPATCHABLE */
    582 
    583 #endif /* __BCM_MACSEC_H__ */