collector.h (10503B)
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-2020 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_IFA2_IPFIX = 4 154 } _bcm_collector_export_app_t; 155 156 157 /* Internal data structure to store per collector information 158 */ 159 typedef struct _bcm_collector_info_s { 160 /* Software ID of the collector */ 161 bcm_collector_t collector_id; 162 /* Collector information structure */ 163 bcm_collector_info_t collector_info; 164 165 /* Num users for this collectors */ 166 int ref_count; 167 168 _bcm_collector_export_app_t user; 169 } _bcm_collector_info_t; 170 171 172 /* Global data structures extern declarations */ 173 extern _bcm_collector_global_info_t *collector_global_info[BCM_MAX_NUM_UNITS]; 174 175 /* Utility functions */ 176 extern void _bcm_esw_collector_sw_dump(int unit); 177 178 /* Gets the COLLECTOR_GLOBAL_INFO struct for the unit */ 179 #define COLLECTOR_GLOBAL_INFO_GET(_u) collector_global_info[(_u)] 180 181 /* Collector module APIs */ 182 extern int _bcm_xgs5_collector_udp_header_get(int unit, 183 bcm_collector_info_t *collector_info, 184 shr_udp_header_t *udp); 185 extern int _bcm_xgs5_collector_ipv4_header_get(int unit, uint8 protocol, 186 uint8 tos, uint8 ttl, 187 bcm_ip_t src_ip_addr, bcm_ip_t dst_ip_addr, 188 shr_ipv4_header_t *ip); 189 extern int _bcm_xgs5_collector_ip_headers_get(int unit, 190 bcm_collector_info_t *collector_info, 191 uint16 *etype, 192 shr_ipv4_header_t *ipv4); 193 extern int _bcm_xgs5_collector_l2_header_get(int unit, 194 bcm_collector_info_t *collector_info, 195 uint16 etype, shr_l2_header_t *l2); 196 extern int _bcm_xgs5_collector_init(int unit); 197 extern int _bcm_xgs5_collector_detach(int unit); 198 extern int _bcm_xgs5_collector_create(int unit, 199 uint32 options, 200 bcm_collector_t *id, 201 bcm_collector_info_t *collector_info); 202 extern int _bcm_xgs5_collector_get(int unit, 203 bcm_collector_t id, 204 bcm_collector_info_t *collector_info); 205 extern int _bcm_xgs5_collector_destroy(int unit, bcm_collector_t id); 206 extern int _bcm_xgs5_collector_ids_get_all(int unit, int max_size, 207 bcm_collector_t *collector_list, 208 int *list_size); 209 extern int _bcm_xgs5_collector_export_profile_create(int unit, 210 uint32 options, int *id, 211 bcm_collector_export_profile_t *export_profile_info); 212 extern int _bcm_xgs5_collector_export_profile_get(int unit, int id, 213 bcm_collector_export_profile_t *export_profile_info); 214 extern int _bcm_xgs5_collector_export_profile_ids_get_all(int unit, 215 int max_size, 216 int *collector_list, 217 int *list_size); 218 extern int _bcm_xgs5_collector_export_profile_destroy(int unit, int id); 219 220 extern int _bcm_xgs5_collector_export_record_register( 221 int unit, 222 bcm_collector_t collector_id, 223 bcm_collector_callback_options_t callback_options, 224 bcm_collector_export_record_cb_f callback_fn, 225 void *userdata); 226 extern int _bcm_xgs5_collector_export_record_unregister( 227 int unit, 228 bcm_collector_t collector_id, 229 bcm_collector_callback_options_t callback_options, 230 bcm_collector_export_record_cb_f callback_fn); 231 232 extern int _bcm_esw_collector_sync(int unit); 233 extern int _bcm_xgs5_collector_sync(int unit); 234 extern void _bcm_esw_collector_sw_dump(int unit); 235 extern void _bcm_xgs5_collector_sw_dump(int unit); 236 extern int _bcm_esw_collector_export_profile_ref_count_update(int unit, 237 int id, 238 int update); 239 extern int _bcm_xgs5_collector_export_profile_ref_count_update(int unit, 240 int id, 241 int update); 242 extern int _bcm_esw_collector_ref_count_update(int unit, 243 bcm_collector_t id, 244 int update); 245 extern int _bcm_xgs5_collector_ref_count_update(int unit, 246 bcm_collector_t id, 247 int update); 248 extern int _bcm_esw_collector_user_update(int unit, 249 bcm_collector_t id, 250 _bcm_collector_export_app_t user); 251 extern int _bcm_xgs5_collector_user_update(int unit, 252 bcm_collector_t id, 253 _bcm_collector_export_app_t user); 254 extern uint8 _bcm_esw_collector_check_user_is_other(int unit, 255 bcm_collector_t id, 256 _bcm_collector_export_app_t my_user); 257 extern uint8 _bcm_xgs5_collector_check_user_is_other(int unit, 258 bcm_collector_t id, 259 _bcm_collector_export_app_t my_user); 260 extern int _bcm_esw_collector_ref_count_get(int unit, 261 bcm_collector_t id); 262 extern int _bcm_xgs5_collector_ref_count_get(int unit, 263 bcm_collector_t id); 264 #endif /* BCM_COLLECTOR_SUPPORT */ 265 extern int _bcm_esw_collector_sync(int unit); 266 267 #endif /* !_BCM_INT_COLLECTOR_H_ */