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