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

collector.h (10458B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * File:        collector.h
      8  * Purpose:     
      9  */
     10 #ifndef _BCM_INT_COLLECTOR_H_
     11 #define _BCM_INT_COLLECTOR_H_
     12 
     13 #if defined(BCM_COLLECTOR_SUPPORT)
     14 
     15 #include <bcm/collector.h>
     16 #include <shared/idxres_fl.h>
     17 #include <soc/shared/shr_pkt.h>
     18 
     19 
     20 /* Maximum number of collector export profiles. */
     21 #define BCM_INT_COLLECTOR_MAX_EXPORT_PROFILES 32
     22 
     23 /* Collector Export profile Start Id */
     24 #define BCM_INT_COLLECTOR_EXPORT_PROFILE_START_ID 0
     25 
     26 /* Collector End Id */
     27 #define BCM_INT_COLLECTOR_EXPORT_PROFILE_END_ID \
     28     (BCM_INT_COLLECTOR_EXPORT_PROFILE_START_ID + \
     29      BCM_INT_COLLECTOR_MAX_EXPORT_PROFILES - 1)
     30 
     31 /* Invalid export profile Id */
     32 #define BCM_INT_COLLECTOR_INVALID_EXPORT_PROFILE_ID (-1)
     33 
     34 /* Default max export length is 1500 bytes */
     35 #define BCM_INT_COLLECTOR_DEF_MAX_EXPORT_LENGTH 1500
     36 
     37 /* Max export length supported is 9K - Jumbo */
     38 #define BCM_INT_COLLECTOR_MAX_EXPORT_LENGTH 9000
     39 
     40 /* Maximum number of collectors. */
     41 #define BCM_INT_COLLECTOR_MAX_COLLECTORS 32
     42 
     43 /* Collector Start Id */
     44 #define BCM_INT_COLLECTOR_COLLECTOR_START_ID 0
     45 
     46 /* Collector End Id */
     47 #define BCM_INT_COLLECTOR_COLLECTOR_END_ID \
     48     (BCM_INT_COLLECTOR_COLLECTOR_START_ID + BCM_INT_COLLECTOR_MAX_COLLECTORS - 1)
     49 
     50 /* Invalid collector Id */
     51 #define BCM_INT_COLLECTOR_INVALID_COLLECTOR_ID (-1)
     52 
     53 /* Default value of export interval. 100 ms */
     54 #define BCM_INT_COLLECTOR_DEF_EXPORT_INTERVAL_MSECS (100)
     55 
     56 /* Minimum length of the collecotor encap
     57  * UDP_HDR  =  8 bytes
     58  * IPv4_HDR = 20 bytes
     59  * ETH_HDR  = 14 bytes
     60  * L2_CRC   =  4 bytes
     61  * 8 + 20 + 14 + 4 = 46
     62  */
     63 #define BCM_INT_COLLECTOR_MIN_ENCAP_LENGTH 46
     64 
     65 /* Minimum export length required */
     66 #define BCM_INT_COLLECTOR_MIN_EXPORT_LENGTH 128
     67 
     68 /*
     69  * Macro:
     70  *     _BCM_COLLECTOR_ALLOC
     71  * Purpose:
     72  *      Generic memory allocation routine.
     73  * Parameters:
     74  *    _ptr_     - Pointer to allocated memory.
     75  *    _ptype_   - Pointer type.
     76  *    _size_    - Size of heap memory to be allocated.
     77  *    _descr_   - Information about this memory allocation.
     78  */
     79 #define _BCM_COLLECTOR_ALLOC(_ptr_,_ptype_,_size_,_descr_)               \
     80             do {                                                         \
     81                 if (NULL == (_ptr_)) {                                   \
     82                    (_ptr_) = (_ptype_ *) sal_alloc((_size_), (_descr_)); \
     83                 }                                                        \
     84                 if((_ptr_) != NULL) {                                    \
     85                     sal_memset((_ptr_), 0, (_size_));                    \
     86                 }  else {                                                \
     87                     LOG_ERROR(BSL_LS_BCM_COLLECTOR, \
     88                               (BSL_META("Collector Error: Allocation"    \
     89                               " failure %s\n"),                          \
     90                                (_descr_)));                              \
     91                 }                                                        \
     92             } while (0)
     93 
     94 #define BCM_INT_COLLECTOR_INFO_FLAGS_FLOW_START_TS (1 << 0)
     95 
     96 /* Internal data structure to store
     97  * collector export profile information.
     98  */
     99 typedef struct _bcm_int_export_profile_info_s {
    100 
    101     /* flags, See BCM_INT_COLLECTOR_INFO_FLAGS_XXX */
    102     uint32 flags;
    103 
    104     /* wire format of export profile */
    105     bcm_collector_wire_format_t wire_format;    
    106 
    107     /* Export interval (usecs) */
    108     uint32 export_interval;
    109 
    110     /* The maximum possible export packet size
    111      * used to send stats info to collector
    112      */
    113     uint16 max_export_pkt_length;
    114 
    115 } _bcm_int_export_profile_info_t;
    116 
    117 /* Internal data structure to store
    118  * collector global information.
    119  */
    120 typedef struct _bcm_collector_global_info_s {
    121 
    122     /* flags, See BCM_INT_COLLECTOR_INFO_FLAGS_XXX */
    123     uint32 flags;
    124 
    125     /* Export profile ID pool */
    126     shr_idxres_list_handle_t export_profile_pool;
    127 
    128     /* Collector ID pool */
    129     shr_idxres_list_handle_t collector_pool;
    130 
    131 } _bcm_collector_global_info_t;
    132 
    133 /* Internal data structure to store collector export profile information
    134  */
    135 typedef struct _bcm_collector_export_profile_info_s {
    136     /* Software ID of the collector export profile*/
    137     int export_profile_id;
    138     /* Collector export profile information structure */
    139     bcm_collector_export_profile_t export_profile_info;
    140 
    141     /* Num users for this export profile */
    142     int ref_count;
    143 } _bcm_collector_export_profile_info_t;
    144 
    145 /* Internal enumeration for the users of common collector
    146  * infrastructure.
    147  */
    148 typedef enum _bcm_collector_export_app_e {
    149     _BCM_COLLECTOR_EXPORT_APP_NONE = 0,
    150     _BCM_COLLECTOR_EXPORT_APP_FT_IPFIX = 1,
    151     _BCM_COLLECTOR_EXPORT_APP_FT_PROTOBUF = 2,
    152     _BCM_COLLECTOR_EXPORT_APP_ST_PROTOBUF = 3,
    153 } _bcm_collector_export_app_t;
    154 
    155 
    156 /* Internal data structure to store per collector information
    157  */
    158 typedef struct _bcm_collector_info_s {
    159     /* Software ID of the collector */
    160     bcm_collector_t collector_id;
    161     /* Collector information structure */
    162     bcm_collector_info_t collector_info;
    163 
    164     /* Num users for this collectors */
    165     int ref_count;
    166 
    167     _bcm_collector_export_app_t user;
    168 } _bcm_collector_info_t;
    169 
    170 
    171 /* Global data structures extern declarations */
    172 extern _bcm_collector_global_info_t *collector_global_info[BCM_MAX_NUM_UNITS];
    173 
    174 /* Utility functions */
    175 extern void _bcm_esw_collector_sw_dump(int unit);
    176 
    177 /* Gets the COLLECTOR_GLOBAL_INFO struct for the unit */
    178 #define COLLECTOR_GLOBAL_INFO_GET(_u) collector_global_info[(_u)]
    179 
    180 /* Collector module APIs */
    181 extern int _bcm_xgs5_collector_udp_header_get(int unit,
    182                 bcm_collector_info_t *collector_info,
    183                 shr_udp_header_t *udp);
    184 extern int _bcm_xgs5_collector_ipv4_header_get(int unit, uint8 protocol,
    185                               uint8 tos, uint8 ttl,
    186                               bcm_ip_t src_ip_addr, bcm_ip_t dst_ip_addr,
    187                               shr_ipv4_header_t *ip);
    188 extern int _bcm_xgs5_collector_ip_headers_get(int unit, 
    189                              bcm_collector_info_t *collector_info,
    190                              uint16 *etype,
    191                              shr_ipv4_header_t *ipv4);
    192 extern int _bcm_xgs5_collector_l2_header_get(int unit, 
    193                            bcm_collector_info_t *collector_info,
    194                            uint16 etype, shr_l2_header_t *l2);
    195 extern int _bcm_xgs5_collector_init(int unit);
    196 extern int _bcm_xgs5_collector_detach(int unit);
    197 extern int _bcm_xgs5_collector_create(int unit,
    198                                 uint32 options,
    199                                 bcm_collector_t *id,
    200                                 bcm_collector_info_t *collector_info);
    201 extern int _bcm_xgs5_collector_get(int unit,
    202                              bcm_collector_t id,
    203                              bcm_collector_info_t *collector_info);
    204 extern int _bcm_xgs5_collector_destroy(int unit, bcm_collector_t id);
    205 extern int _bcm_xgs5_collector_ids_get_all(int unit, int max_size,
    206                            bcm_collector_t *collector_list,
    207                            int *list_size);
    208 extern int _bcm_xgs5_collector_export_profile_create(int unit,
    209                           uint32 options, int *id,
    210                           bcm_collector_export_profile_t *export_profile_info);
    211 extern int _bcm_xgs5_collector_export_profile_get(int unit, int id,
    212                           bcm_collector_export_profile_t *export_profile_info);
    213 extern int _bcm_xgs5_collector_export_profile_ids_get_all(int unit,
    214                            int max_size,
    215                            int *collector_list,
    216                            int *list_size);
    217 extern int _bcm_xgs5_collector_export_profile_destroy(int unit, int id);
    218 
    219 extern int _bcm_xgs5_collector_export_record_register(
    220     int unit,
    221     bcm_collector_t collector_id,
    222     bcm_collector_callback_options_t callback_options,
    223     bcm_collector_export_record_cb_f callback_fn,
    224     void *userdata);
    225 extern int _bcm_xgs5_collector_export_record_unregister(
    226     int unit,
    227     bcm_collector_t collector_id,
    228     bcm_collector_callback_options_t callback_options,
    229     bcm_collector_export_record_cb_f callback_fn);
    230 
    231 extern int _bcm_esw_collector_sync(int unit);
    232 extern int _bcm_xgs5_collector_sync(int unit);
    233 extern void _bcm_esw_collector_sw_dump(int unit);
    234 extern void _bcm_xgs5_collector_sw_dump(int unit);
    235 extern int _bcm_esw_collector_export_profile_ref_count_update(int unit,
    236                                                               int id,
    237                                                               int update);
    238 extern int _bcm_xgs5_collector_export_profile_ref_count_update(int unit,
    239                                                                int id,
    240                                                                int update);
    241 extern int _bcm_esw_collector_ref_count_update(int unit,
    242                                                bcm_collector_t id,
    243                                                int update);
    244 extern int _bcm_xgs5_collector_ref_count_update(int unit,
    245                                                 bcm_collector_t id,
    246                                                 int update);
    247 extern int _bcm_esw_collector_user_update(int unit,
    248                                                bcm_collector_t id,
    249                                                _bcm_collector_export_app_t user);
    250 extern int _bcm_xgs5_collector_user_update(int unit,
    251                                                bcm_collector_t id,
    252                                                _bcm_collector_export_app_t user);
    253 extern uint8 _bcm_esw_collector_check_user_is_other(int unit,
    254                                                     bcm_collector_t id,
    255                                                     _bcm_collector_export_app_t my_user); 
    256 extern uint8 _bcm_xgs5_collector_check_user_is_other(int unit,
    257                                                     bcm_collector_t id,
    258                                                     _bcm_collector_export_app_t my_user); 
    259 extern int _bcm_esw_collector_ref_count_get(int unit,
    260                                                bcm_collector_t id);
    261 extern int _bcm_xgs5_collector_ref_count_get(int unit,
    262                                                 bcm_collector_t id);
    263 #endif /* BCM_COLLECTOR_SUPPORT */
    264 extern int _bcm_esw_collector_sync(int unit);
    265 
    266 #endif  /* !_BCM_INT_COLLECTOR_H_ */