/*************************************************************************//** * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ****************************************************************************/ /**************************************************************************//** * @file * Header for EVEL library * * This file implements the EVEL library which is intended to provide a * simple wrapper around the complexity of AT&T's Vendor Event Listener API so * that VNFs can use it without worrying about details of the API transport. * * Zero return value is success (::EVEL_SUCCESS), non-zero is failure and will * be one of ::EVEL_ERR_CODES. *****************************************************************************/ #ifndef EVEL_INCLUDED #define EVEL_INCLUDED #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include "jsmn.h" #include "double_list.h" #include "hashtable.h" /*****************************************************************************/ /* Supported API version. */ /*****************************************************************************/ #define EVEL_API_MAJOR_VERSION 7 #define EVEL_API_MINOR_VERSION 1 #define EVEL_API_PATCH_VERSION 0 /**************************************************************************//** * Error codes * * Error codes for EVEL low level interface *****************************************************************************/ typedef enum { EVEL_SUCCESS, /** The operation was successful. */ EVEL_ERR_GEN_FAIL, /** Non-specific failure. */ EVEL_CURL_LIBRARY_FAIL, /** A cURL library operation failed. */ EVEL_PTHREAD_LIBRARY_FAIL, /** A Posix threads operation failed. */ EVEL_OUT_OF_MEMORY, /** A memory allocation failure occurred. */ EVEL_EVENT_BUFFER_FULL, /** Too many events in the ring-buffer. */ EVEL_EVENT_HANDLER_INACTIVE, /** Attempt to raise event when inactive. */ EVEL_NO_METADATA, /** Failed to retrieve OpenStack metadata. */ EVEL_BAD_METADATA, /** OpenStack metadata invalid format. */ EVEL_BAD_JSON_FORMAT, /** JSON failed to parse correctly. */ EVEL_JSON_KEY_NOT_FOUND, /** Failed to find the specified JSON key. */ EVEL_MAX_ERROR_CODES /** Maximum number of valid error codes. */ } EVEL_ERR_CODES; /**************************************************************************//** * Logging levels * * Variable levels of verbosity in the logging functions. *****************************************************************************/ typedef enum { EVEL_LOG_MIN = 0, EVEL_LOG_WARN = 1, EVEL_LOG_SPAMMY = 30, EVEL_LOG_DEBUG = 40, EVEL_LOG_INFO = 50, EVEL_LOG_ERROR = 60, EVEL_LOG_MAX = 101 } EVEL_LOG_LEVELS; /*****************************************************************************/ /* Maximum string lengths. */ /*****************************************************************************/ #define EVEL_MAX_STRING_LEN 4096 #define EVEL_MAX_JSON_BODY 524288 #define EVEL_MAX_ERROR_STRING_LEN 255 #define EVEL_MAX_URL_LEN 511 /**************************************************************************//** * This value represents there being no restriction on the reporting interval. *****************************************************************************/ static const int EVEL_MEASUREMENT_INTERVAL_UKNOWN = 0; /**************************************************************************//** * How many events can be backed-up before we start dropping events on the * floor. * * @note This value should be tuned in accordance with expected burstiness of * the event load and the expected response time of the ECOMP event * listener so that the probability of the buffer filling is suitably * low. *****************************************************************************/ static const int EVEL_EVENT_BUFFER_DEPTH = 100; /*****************************************************************************/ /* How many different IP Types-of-Service are supported. */ /*****************************************************************************/ #define EVEL_TOS_SUPPORTED 256 /**************************************************************************//** * Event domains for the various events we support. * JSON equivalent field: domain *****************************************************************************/ typedef enum { EVEL_DOMAIN_INTERNAL, /** Internal event, not for external routing. */ EVEL_DOMAIN_BATCH, /** Batch event, composite event. */ EVEL_DOMAIN_HEARTBEAT, /** A Heartbeat event (event header only). */ EVEL_DOMAIN_FAULT, /** A Fault event. */ EVEL_DOMAIN_MEASUREMENT, /** A Measurement for VF Scaling event. */ EVEL_DOMAIN_MOBILE_FLOW, /** A Mobile Flow event. */ EVEL_DOMAIN_REPORT, /** A Measurement for VF Reporting event. */ EVEL_DOMAIN_HEARTBEAT_FIELD,/** A Heartbeat field event. */ EVEL_DOMAIN_SIPSIGNALING, /** A Signaling event. */ EVEL_DOMAIN_STATE_CHANGE, /** A State Change event. */ EVEL_DOMAIN_SYSLOG, /** A Syslog event. */ EVEL_DOMAIN_OTHER, /** Another event. */ EVEL_DOMAIN_THRESHOLD_CROSS, /** A Threshold Crossing Event */ EVEL_DOMAIN_VOICE_QUALITY, /** A Voice Quality Event */ EVEL_DOMAIN_NOTIFICATION, /** A Notification event. */ EVEL_DOMAIN_PNF_REGISTRATION, /** A PNF Registration event. */ EVEL_MAX_DOMAINS /** Maximum number of recognized Event types. */ } EVEL_EVENT_DOMAINS; /**************************************************************************//** * Event priorities. * JSON equivalent field: priority *****************************************************************************/ typedef enum { EVEL_PRIORITY_HIGH, EVEL_PRIORITY_MEDIUM, EVEL_PRIORITY_NORMAL, EVEL_PRIORITY_LOW, EVEL_MAX_PRIORITIES } EVEL_EVENT_PRIORITIES; /**************************************************************************//** * Fault / Threshold severities. * JSON equivalent field: eventSeverity *****************************************************************************/ typedef enum { EVEL_SEVERITY_CRITICAL, EVEL_SEVERITY_MAJOR, EVEL_SEVERITY_MINOR, EVEL_SEVERITY_WARNING, EVEL_SEVERITY_NORMAL, EVEL_MAX_SEVERITIES } EVEL_SEVERITIES; /**************************************************************************//** * Fault source types. * JSON equivalent field: eventSourceType *****************************************************************************/ typedef enum { EVEL_SOURCE_OTHER, EVEL_SOURCE_ROUTER, EVEL_SOURCE_SWITCH, EVEL_SOURCE_HOST, EVEL_SOURCE_CARD, EVEL_SOURCE_PORT, EVEL_SOURCE_SLOT_THRESHOLD, EVEL_SOURCE_PORT_THRESHOLD, EVEL_SOURCE_VIRTUAL_MACHINE, EVEL_SOURCE_VIRTUAL_NETWORK_FUNCTION, /***************************************************************************/ /* START OF VENDOR-SPECIFIC VALUES */ /* */ /* Vendor-specific values should be added here, and handled appropriately */ /* in evel_event.c. */ /***************************************************************************/ /***************************************************************************/ /* END OF VENDOR-SPECIFIC VALUES */ /***************************************************************************/ EVEL_MAX_SOURCE_TYPES } EVEL_SOURCE_TYPES; /**************************************************************************//** * Fault VNF Status. * JSON equivalent field: vfStatus *****************************************************************************/ typedef enum { EVEL_VF_STATUS_ACTIVE, EVEL_VF_STATUS_IDLE, EVEL_VF_STATUS_PREP_TERMINATE, EVEL_VF_STATUS_READY_TERMINATE, EVEL_VF_STATUS_REQ_TERMINATE, EVEL_MAX_VF_STATUSES } EVEL_VF_STATUSES; /**************************************************************************//** * Counter criticalities. * JSON equivalent field: criticality *****************************************************************************/ typedef enum { EVEL_COUNTER_CRITICALITY_CRIT, EVEL_COUNTER_CRITICALITY_MAJ, EVEL_MAX_COUNTER_CRITICALITIES } EVEL_COUNTER_CRITICALITIES; /**************************************************************************//** * Alert actions. * JSON equivalent field: alertAction *****************************************************************************/ typedef enum { EVEL_ALERT_ACTION_CLEAR, EVEL_ALERT_ACTION_CONT, EVEL_ALERT_ACTION_SET, EVEL_MAX_ALERT_ACTIONS } EVEL_ALERT_ACTIONS; /**************************************************************************//** * Alert types. * JSON equivalent field: alertType *****************************************************************************/ typedef enum { EVEL_ALERT_TYPE_CARD, EVEL_ALERT_TYPE_ELEMENT, EVEL_ALERT_TYPE_INTERFACE, EVEL_ALERT_TYPE_SERVICE, EVEL_MAX_ALERT_TYPES } EVEL_ALERT_TYPES; /**************************************************************************//** * Entity state. * JSON equivalent fields: new_state, old_state *****************************************************************************/ typedef enum { EVEL_ENTITY_STATE_IN_SERVICE, EVEL_ENTITY_STATE_MAINTENANCE, EVEL_ENTITY_STATE_OUT_OF_SERVICE, EVEL_MAX_ENTITY_STATES } EVEL_ENTITY_STATE; /**************************************************************************//** * Operational state. * JSON equivalent fields: operationalState, administrativeState *****************************************************************************/ typedef enum { EVEL_OPER_STATE_IN_SERVICE, EVEL_OPER_STATE_OUT_OF_SERVICE, EVEL_MAX_OPER_STATES } EVEL_OPER_STATE; /**************************************************************************//** * Syslog facilities. * JSON equivalent field: syslogFacility *****************************************************************************/ typedef enum { EVEL_SYSLOG_FACILITY_KERNEL, EVEL_SYSLOG_FACILITY_USER, EVEL_SYSLOG_FACILITY_MAIL, EVEL_SYSLOG_FACILITY_SYSTEM_DAEMON, EVEL_SYSLOG_FACILITY_SECURITY_AUTH, EVEL_SYSLOG_FACILITY_INTERNAL, EVEL_SYSLOG_FACILITY_LINE_PRINTER, EVEL_SYSLOG_FACILITY_NETWORK_NEWS, EVEL_SYSLOG_FACILITY_UUCP, EVEL_SYSLOG_FACILITY_CLOCK_DAEMON, EVEL_SYSLOG_FACILITY_SECURITY_AUTH2, EVEL_SYSLOG_FACILITY_FTP_DAEMON, EVEL_SYSLOG_FACILITY_NTP, EVEL_SYSLOG_FACILITY_LOG_AUDIT, EVEL_SYSLOG_FACILITY_LOG_ALERT, EVEL_SYSLOG_FACILITY_CLOCK_DAEMON2, EVEL_SYSLOG_FACILITY_LOCAL0, EVEL_SYSLOG_FACILITY_LOCAL1, EVEL_SYSLOG_FACILITY_LOCAL2, EVEL_SYSLOG_FACILITY_LOCAL3, EVEL_SYSLOG_FACILITY_LOCAL4, EVEL_SYSLOG_FACILITY_LOCAL5, EVEL_SYSLOG_FACILITY_LOCAL6, EVEL_SYSLOG_FACILITY_LOCAL7, EVEL_MAX_SYSLOG_FACILITIES } EVEL_SYSLOG_FACILITIES; /**************************************************************************//** * TCP flags. * JSON equivalent fields: tcpFlagCountList, tcpFlagList *****************************************************************************/ typedef enum { EVEL_TCP_NS, EVEL_TCP_CWR, EVEL_TCP_ECE, EVEL_TCP_URG, EVEL_TCP_ACK, EVEL_TCP_PSH, EVEL_TCP_RST, EVEL_TCP_SYN, EVEL_TCP_FIN, EVEL_MAX_TCP_FLAGS } EVEL_TCP_FLAGS; /**************************************************************************//** * Mobile QCI Classes of Service. * JSON equivalent fields: mobileQciCosCountList, mobileQciCosList *****************************************************************************/ typedef enum { /***************************************************************************/ /* UMTS Classes of Service. */ /***************************************************************************/ EVEL_QCI_COS_UMTS_CONVERSATIONAL, EVEL_QCI_COS_UMTS_STREAMING, EVEL_QCI_COS_UMTS_INTERACTIVE, EVEL_QCI_COS_UMTS_BACKGROUND, /***************************************************************************/ /* LTE Classes of Service. */ /***************************************************************************/ EVEL_QCI_COS_LTE_1, EVEL_QCI_COS_LTE_2, EVEL_QCI_COS_LTE_3, EVEL_QCI_COS_LTE_4, EVEL_QCI_COS_LTE_65, EVEL_QCI_COS_LTE_66, EVEL_QCI_COS_LTE_5, EVEL_QCI_COS_LTE_6, EVEL_QCI_COS_LTE_7, EVEL_QCI_COS_LTE_8, EVEL_QCI_COS_LTE_9, EVEL_QCI_COS_LTE_69, EVEL_QCI_COS_LTE_70, EVEL_MAX_QCI_COS_TYPES } EVEL_QCI_COS_TYPES; /**************************************************************************//** * Service Event endpoint description * JSON equivalent field: endpointDesc *****************************************************************************/ typedef enum { EVEL_SERVICE_ENDPOINT_CALLEE, EVEL_SERVICE_ENDPOINT_CALLER, EVEL_MAX_SERVICE_ENDPOINT_DESC } EVEL_SERVICE_ENDPOINT_DESC; /**************************************************************************//** * Boolean type for EVEL library. *****************************************************************************/ typedef enum { EVEL_FALSE, EVEL_TRUE } EVEL_BOOLEAN; /**************************************************************************//** * Optional parameter holder for double. *****************************************************************************/ typedef struct evel_option_double { double value; EVEL_BOOLEAN is_set; } EVEL_OPTION_DOUBLE; /**************************************************************************//** * Optional parameter holder for string. *****************************************************************************/ typedef struct evel_option_string { char * value; EVEL_BOOLEAN is_set; } EVEL_OPTION_STRING; typedef struct evel_option_state { EVEL_ENTITY_STATE state; EVEL_BOOLEAN is_set; } EVEL_OPTION_STATE; typedef struct evel_option_op_state { EVEL_OPER_STATE state; EVEL_BOOLEAN is_set; } EVEL_OPTION_OP_STATE; /**************************************************************************//** * Optional parameter holder for int. *****************************************************************************/ typedef struct evel_option_int { int value; EVEL_BOOLEAN is_set; } EVEL_OPTION_INT; /**************************************************************************//** * Optional parameter holder for unsigned long long. *****************************************************************************/ typedef struct evel_option_ull { unsigned long long value; EVEL_BOOLEAN is_set; } EVEL_OPTION_ULL; /**************************************************************************//** * Optional parameter holder for time_t. *****************************************************************************/ typedef struct evel_option_time { time_t value; EVEL_BOOLEAN is_set; } EVEL_OPTION_TIME; /**************************************************************************//** * enrichment fields for internal VES Event Listener service use only, * not supplied by event sources *****************************************************************************/ typedef struct internal_header_fields { void *object; EVEL_BOOLEAN is_set; } EVEL_OPTION_INTHEADER_FIELDS; /*****************************************************************************/ /* Supported Common Event Header version. */ /*****************************************************************************/ #define EVEL_HEADER_MAJOR_VERSION 4 #define EVEL_HEADER_MINOR_VERSION 0 #define EVEL_BATCH_MAJOR_VERSION 1 #define EVEL_BATCH_MINOR_VERSION 0 /**************************************************************************//** * Event header. * JSON equivalent field: commonEventHeader *****************************************************************************/ typedef struct event_header { /***************************************************************************/ /* Version */ /***************************************************************************/ int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ EVEL_EVENT_DOMAINS event_domain; char * event_id; char * event_name; char * source_name; char * reporting_entity_name; char * event_listener_version; EVEL_EVENT_PRIORITIES priority; unsigned long long start_epoch_microsec; unsigned long long last_epoch_microsec; int sequence; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_STRING event_type; EVEL_OPTION_STRING source_id; EVEL_OPTION_STRING reporting_entity_id; EVEL_OPTION_INTHEADER_FIELDS internal_field; EVEL_OPTION_STRING nfcnaming_code; EVEL_OPTION_STRING nfnaming_code; EVEL_OPTION_STRING nfVendor_name; EVEL_OPTION_STRING timezone_offset; DLIST batch_events; } EVENT_HEADER; /**************************************************************************//** * Initialize a newly created event header. * * @param header Pointer to the header being initialized. * @param eventname Eventname string * @param eventid Event id : unique id for classification and analysis * @param header Pointer to the header being initialized. *****************************************************************************/ void evel_init_header_nameid(EVENT_HEADER * const header,const char *const eventname, const char *eventid); /**************************************************************************//** * Create a new Batch event. * * @note The mandatory fields on the Batch must be supplied to this factory * function and are immutable once set. Optional fields have explicit * setter functions, but again values may only be set once so that the * Batch has immutable properties. At this time evename and eventid * for batch events are set but not used in json encoding * @returns pointer to the newly manufactured ::EVENT_HEADER. If the event is * not used (i.e. posted) it must be released using ::evel_free_batch. * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_HEADER * evel_new_batch(const char* ev_name, const char *ev_id); /**************************************************************************//** * Add an Event into Batch Event * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param other Pointer to the Batch Event. * @param jsonobj Pointer to additional Event *****************************************************************************/ void evel_batch_add_event(EVENT_HEADER * batchev, EVENT_HEADER *child); /**************************************************************************//** * Free an Batch. * * Free off the Batch supplied. Will free all the contained allocated memory. * * @note It does not free the Batch itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_batch(EVENT_HEADER * event); /*****************************************************************************/ /* Supported Fault version. */ /*****************************************************************************/ #define EVEL_FAULT_MAJOR_VERSION 4 #define EVEL_FAULT_MINOR_VERSION 0 /**************************************************************************//** * Fault. * JSON equivalent field: faultFields *****************************************************************************/ typedef struct event_fault { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ EVEL_SEVERITIES event_severity; EVEL_SOURCE_TYPES event_source_type; char * alarm_condition; char * specific_problem; EVEL_VF_STATUSES vf_status; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_STRING category; EVEL_OPTION_STRING alarm_interface_a; HASHTABLE_T *additional_info; } EVENT_FAULT; /**************************************************************************//** * Fault Additional Info. * JSON equivalent field: alarmAdditionalInformation *****************************************************************************/ typedef struct fault_additional_info { char * name; char * value; } FAULT_ADDL_INFO; /**************************************************************************//** * optional field block for fields specific to heartbeat events *****************************************************************************/ typedef struct event_heartbeat_fields { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ double heartbeat_version; int heartbeat_interval; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ HASHTABLE_T *additional_info; } EVENT_HEARTBEAT_FIELD; /**************************************************************************//** * Create a new Heartbeat fields event. * * @note The mandatory fields on the Heartbeat fields must be supplied to * this factory function and are immutable once set. Optional fields * have explicit setter functions, but again values may only be set * once so that the event has immutable properties. * @param event_name Unique Event Name confirming Domain AsdcModel Description * @param event_id A universal identifier of the event for: troubleshooting correlation, analysis, etc * @param vendor_id The vendor id to encode in the event instance id. * @param event_id The vendor event id to encode in the event instance id. * @returns pointer to the newly manufactured ::EVENT_HEARTBEAT_FIELD. If the event * is not used (i.e. posted) it must be released using * ::evel_free_hrtbt_field. * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_HEARTBEAT_FIELD * evel_new_heartbeat_field(int interval,const char* ev_name, const char *ev_id); /**************************************************************************//** * Add a name/value pair to the Heartbeat fields, under the additionalFields array. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param event Pointer to the Heartbeat fields event. * @param name ASCIIZ string with the field's name. The caller does not * need to preserve the value once the function returns. * @param value ASCIIZ string with the field's value. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_hrtbt_field_addl_field_add(EVENT_HEARTBEAT_FIELD * const event, const char * const name, const char * const value); /**************************************************************************//** * Set the Interval property of the Heartbeat fields event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Heartbeat fields event. * @param product_id The vendor product id to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_hrtbt_interval_set(EVENT_HEARTBEAT_FIELD * const event, const int interval); /**************************************************************************//** * Free a Heartbeat fields event. * * Free off the event supplied. Will free all the contained allocated memory. * * @note It does not free the event itself, since that may be part of a larger * structure. *****************************************************************************/ void evel_free_hrtbt_field(EVENT_HEARTBEAT_FIELD * const event); /*****************************************************************************/ /* Supported PNF Registration version. */ /*****************************************************************************/ #define EVEL_PNF_REGISTRATION_MAJOR_VERSION 2 #define EVEL_PNF_REGISTRATION_MINOR_VERSION 0 /**************************************************************************//** * PNF Registration * JSON equivalent field: pnfRegistrationFields *****************************************************************************/ typedef struct event_PNF_REGISTRATION { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ double version; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_STRING last_service_date; EVEL_OPTION_STRING mac_address; EVEL_OPTION_STRING manufacture_date; EVEL_OPTION_STRING model_number; EVEL_OPTION_STRING oam_v4_ipaddress; EVEL_OPTION_STRING oam_v6_ipaddress; EVEL_OPTION_STRING serial_number; EVEL_OPTION_STRING sw_version; EVEL_OPTION_STRING unit_family; EVEL_OPTION_STRING unit_type; EVEL_OPTION_STRING vendor_name; HASHTABLE_T *additional_fields; } EVENT_PNF_REGISTRATION; /**************************************************************************//** * Create a new PNF Registration event. * * @note The mandatory fields on the PNF Registration must be supplied to the * factory function and are immutable once set. Optional fields have * explicit setter functions, but again values may only be set once * so that the State Change has immutable properties. * * @param event_name Unique Event Name confirming Domain AsdcModel Description * @param event_id A universal identifier of the event for: troubleshooting correlation, analysis, etc * * @returns pointer to the newly manufactured ::EVENT_PNF_REGISTRATION. If the * event is not used it must be released using * ::evel_free_pnf_registration * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_PNF_REGISTRATION * evel_new_pnf_registration(const char* ev_name, const char *ev_id ); /**************************************************************************//** * Free a PNF Registration. * * Free off the PNF Registration supplied. Will free all contained allocated * memory. * * @note It does not free the PNF Registration itself, since that may be part * of a larger structure. *****************************************************************************/ void evel_free_pnf_registration(EVENT_PNF_REGISTRATION * const pnf_registration); /**************************************************************************//** * Add an additional field name/value pair to the PNF Registration * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param pnf_registration Pointer to the ::EVENT_PNF_REGISTRATION. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_pnf_registration_addl_field_add( EVENT_PNF_REGISTRATION * const pnf_registration, const char * const name, const char * const value); /****************************************************************//** * Set the last service date * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param last_service_date The last service date to be set. ASCIIZ * string. The caller does not need to preserve * the value once the function returns. *********************************************************************/ void evel_pnfRegistration_last_service_date_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const last_service_date); /************************************************************************//** * Set the Mac Address * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param mac_address The mac address to be set. ASCIIZ string. The * caller does not need to preserve the value once * the function returns. ***************************************************************************/ void evel_pnfRegistration_mac_address_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const mac_address); /***********************************************************************//** * Set the Manufacture Date * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param manufacture_date The manufacture date to be set. ASCIIZ string. * The caller does not need to preserve the value * once the function returns. ***************************************************************************/ void evel_pnfRegistration_manufacture_date_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const manufacture_date); /***********************************************************************//** * Set the Model Number * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param model_number The model Number to be set. ASCIIZ string. The caller * does not need to preserve the value once the * function returns. ***************************************************************************/ void evel_pnfRegistration_model_number_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const model_number); /***********************************************************************//** * Set the OAM v4 ipaddress * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param oam_v4_ipaddress Set the oam IP address. ASCIIZ string. * The caller does not need * preserve the value once the function returns. *************************************************************************/ void evel_pnfRegistration_oam_v4_ipaddress_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const oam_v4_ipaddress); /**********************************************************************//** * Set the oam v6 ipaddress * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param oam_v6_ipaddress Set the oam IP address. ASCIIZ string. * The caller does not need * preserve the value once the function returns. **************************************************************************/ void evel_pnfRegistration_oam_v6_ipaddress_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const oam_v6_ipaddress); /**********************************************************************//** * Set the Serial Number * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param serial_number The serial number to be set. ASCIIZ string. * The caller does not need to preserve the * value once the function returns. **************************************************************************/ void evel_pnfRegistration_serial_number_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const serial_number); /***********************************************************************//** * Set the Software Version * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param sw_version The SW Version to be set. ASCIIZ string. The caller does * not need to preserve the value once the function returns. ****************************************************************************/ void evel_pnfRegistration_sw_version_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const sw_version); /***********************************************************************//** * Set the Unit Family * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param unit_family The unit family to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. ***************************************************************************/ void evel_pnfRegistration_unit_family_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const unit_family); /**********************************************************************//** * Set the Unit type * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param unit_type The unit type to be set. ASCIIZ string. The caller does * not need to preserve the value once the function returns. ****************************************************************************/ void evel_pnfRegistration_unit_type_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const unit_type); /***********************************************************************//** * Set the Vendor name * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries * to overwrite, just ignoring the update instead. * * @param pnfRegistration Pointer to the pnfRegistration * @param vendor_name The vendor name to be set. ASCIIZ string. The * caller does not need to preserve the value once * the function returns. ***************************************************************************/ void evel_pnfRegistration_vendor_name_set(EVENT_PNF_REGISTRATION * pnfRegistration, const char * const vendor_name); /**************************************************************************//** * tuple which provides the name of a key along with its value and * relative order *****************************************************************************/ typedef struct internal_key { char *keyname; EVEL_OPTION_INT keyorder; EVEL_OPTION_STRING keyvalue; } EVEL_INTERNAL_KEY; /**************************************************************************//** * meta-information about an instance of a jsonObject along with * the actual object instance *****************************************************************************/ typedef struct json_object_instance { char *jsonstring; EVEL_OPTION_ULL objinst_epoch_microsec; DLIST object_keys; /*EVEL_INTERNAL_KEY list */ } EVEL_JSON_OBJECT_INSTANCE; #define MAX_JSON_TOKENS 128 /**************************************************************************//** * Create a new json object instance. * * @note The mandatory fields on the Other must be supplied to this factory * function and are immutable once set. Optional fields have explicit * setter functions, but again values may only be set once so that the * Other has immutable properties. * @param yourjson json string. * @returns pointer to the newly manufactured ::EVEL_JSON_OBJECT_INSTANCE. * not used (i.e. posted) it must be released using ::evel_free_jsonobjectinstance. * @retval NULL Failed to create the json object instance. *****************************************************************************/ EVEL_JSON_OBJECT_INSTANCE * evel_new_jsonobjinstance(const char *const yourjson); /**************************************************************************//** * Free an json object instance. * * Free off the json object instance supplied. * Will free all the contained allocated memory. * *****************************************************************************/ void evel_free_jsonobjinst(EVEL_JSON_OBJECT_INSTANCE * objinst); /**************************************************************************//** * enrichment fields for internal VES Event Listener service use only, * not supplied by event sources *****************************************************************************/ typedef struct json_object { char *object_name; EVEL_OPTION_STRING objectschema; EVEL_OPTION_STRING objectschemaurl; EVEL_OPTION_STRING nfsubscribedobjname; EVEL_OPTION_STRING nfsubscriptionid; DLIST jsonobjectinstances; /* EVEL_JSON_OBJECT_INSTANCE list */ } EVEL_JSON_OBJECT; /**************************************************************************//** * Create a new json object. * * @note The mandatory fields on the Other must be supplied to this factory * function and are immutable once set. Optional fields have explicit * setter functions, but again values may only be set once so that the * Other has immutable properties. * @param name name of the object. * @returns pointer to the newly manufactured ::EVEL_JSON_OBJECT. * not used (i.e. posted) it must be released using ::evel_free_jsonobject. * @retval NULL Failed to create the json object. *****************************************************************************/ EVEL_JSON_OBJECT * evel_new_jsonobject(const char *const name); /**************************************************************************//** * Free an json object. * * Free off the json object instance supplied. * Will free all the contained allocated memory. * *****************************************************************************/ void evel_free_jsonobject(EVEL_JSON_OBJECT * jsobj); /*****************************************************************************/ /* Supported Measurement version. */ /*****************************************************************************/ #define EVEL_MEASUREMENT_MAJOR_VERSION 4 #define EVEL_MEASUREMENT_MINOR_VERSION 0 /**************************************************************************//** * Measurement. * JSON equivalent field: measurementsForVfScalingFields *****************************************************************************/ typedef struct event_measurement { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ double measurement_interval; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ HASHTABLE_T * additional_info; DLIST additional_measurements; // arry of named hashmap DLIST additional_objects; //array of json objects DLIST codec_usage; EVEL_OPTION_INT concurrent_sessions; EVEL_OPTION_INT configured_entities; DLIST cpu_usage; //VES6.0 Added field 14/07/2018 DLIST huge_pages; DLIST loads; DLIST process_stats; DLIST ipmis; DLIST disk_usage; DLIST machine_check_exception; HASHTABLE_T * feature_usage; DLIST filesystem_usage; DLIST latency_distribution; EVEL_OPTION_DOUBLE mean_request_latency; DLIST mem_usage; EVEL_OPTION_INT media_ports_in_use; EVEL_OPTION_DOUBLE request_rate; EVEL_OPTION_INT vnfc_scaling_metric; DLIST nic_performance; } EVENT_MEASUREMENT; typedef struct Measurement_machine_check_exception { char * process_id; EVEL_OPTION_DOUBLE corrected_memory_errors; EVEL_OPTION_DOUBLE corrected_memory_errors_in_1Hr; EVEL_OPTION_DOUBLE uncorrected_memory_errors; EVEL_OPTION_DOUBLE uncorrected_memory_errors_in_1Hr; } MACHINE_CHECK_EXCEPTION; /**************************************************************************//** * Huge Pages. * JSON equivalent field: hugePages *****************************************************************************/ typedef struct measurement_huge_page { char * hugePagesIdentifier; EVEL_OPTION_DOUBLE bytesUsed; EVEL_OPTION_DOUBLE bytesFree; EVEL_OPTION_DOUBLE vmPageNumberUsed; EVEL_OPTION_DOUBLE vmPageNumberFree; EVEL_OPTION_DOUBLE percentUsed; EVEL_OPTION_DOUBLE percentFree; } MEASUREMENT_HUGE_PAGE; /**************************************************************************//** * Process Stats. * JSON equivalent field: processStats *****************************************************************************/ typedef struct measurement_process_stats { char * processIdentifier; EVEL_OPTION_DOUBLE forkRate; EVEL_OPTION_DOUBLE psStateBlocked; EVEL_OPTION_DOUBLE psStatePaging; EVEL_OPTION_DOUBLE psStateRunning; EVEL_OPTION_DOUBLE psStateSleeping; EVEL_OPTION_DOUBLE psStateStopped; EVEL_OPTION_DOUBLE psStateZombie; } MEASUREMENT_PROCESS_STATS; /**************************************************************************//** * Load. * JSON equivalent field: load *****************************************************************************/ typedef struct measurement_load { EVEL_OPTION_DOUBLE shortTerm; EVEL_OPTION_DOUBLE midTerm; EVEL_OPTION_DOUBLE longTerm; } MEASUREMENT_LOAD; /**************************************************************************//** * Convert a ::EVEL_OPTION_OP_STATE to it's string form for JSON encoding. * * @param state The entity state to encode. * * @returns the corresponding string *****************************************************************************/ char * evel_entity_opt_op_state (EVEL_OPTION_OP_STATE * const state); /**************************************************************************//** * Initialize an ::EVEL_OPTION_STATE to a not-set state. * * @param option Pointer to the ::EVEL_OPTION_INT. *****************************************************************************/ void evel_init_option_op_state(EVEL_OPTION_OP_STATE * const option); /**************************************************************************//** * Set the value of an ::EVEL_OPTION_STATE. * * @param option Pointer to the ::EVEL_OPTION_STATE. * @param value The value to set. * @param description Description to be used in logging. *****************************************************************************/ void evel_set_option_op_state(EVEL_OPTION_OP_STATE * const option, const int value, const char * const description); /**************************************************************************//** * Add a huge page to measurement * * @param measurement Pointer to measurement * @param hugePagesIdentifier Huge Page Identifier to add *****************************************************************************/ MEASUREMENT_HUGE_PAGE * evel_measurement_new_huge_page_add( EVENT_MEASUREMENT * measurement, const char * const hugePagesIdentifier ); /**************************************************************************//** * Set bytes used value in a huge page * * @param huge_page Pointer to huge page * @param val bytes used value *****************************************************************************/ void evel_measurement_huge_page_bytesUsed_set(MEASUREMENT_HUGE_PAGE *huge_page, const double val); /**************************************************************************//** * Set bytes free value in a huge page * * @param huge_page Pointer to huge page * @param val bytes free value *****************************************************************************/ void evel_measurement_huge_page_bytesFree_set(MEASUREMENT_HUGE_PAGE *huge_page, const double val); /**************************************************************************//** * Set Number of used VM Pages in numbers in a huge page * * @param huge_page Pointer to huge page * @param val value *****************************************************************************/ void evel_measurement_huge_page_vmPageNumberUsed_set(MEASUREMENT_HUGE_PAGE *huge_page, const double val); /**************************************************************************//** * Set Number of free VM Pages in numbers in a huge page * * @param huge_page Pointer to huge page * @param val value *****************************************************************************/ void evel_measurement_huge_page_vmPageNumberFree_set(MEASUREMENT_HUGE_PAGE *huge_page, const double val); /**************************************************************************//** * Set Number of used hugePages in percent in a huge page * * @param huge_page Pointer to huge page * @param val value *****************************************************************************/ void evel_measurement_huge_page_percentUsed_set(MEASUREMENT_HUGE_PAGE *huge_page, const double val); /**************************************************************************//** * Set umber of free hugePages in percent in a huge page * * @param huge_page Pointer to huge page * @param val value *****************************************************************************/ void evel_measurement_huge_page_percentFree_set(MEASUREMENT_HUGE_PAGE *huge_page, const double val); /**************************************************************************//** * Add an additional value name/value pair to the Measurement. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the measurement. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_measurement_addl_info_add(EVENT_MEASUREMENT * measurement, char * name, char * value); /**************************************************************************//** * Add a json object to jsonObject list. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the ScalingMeasurement * @param jsonobj Pointer to json object *****************************************************************************/ void evel_measurement_addl_object_add(EVENT_MEASUREMENT * measurement, EVEL_JSON_OBJECT *jsonobj); /**************************************************************************//** * CPU Usage. * JSON equivalent field: cpuUsage *****************************************************************************/ typedef struct measurement_cpu_use { char * id; double usage; EVEL_OPTION_DOUBLE idle; EVEL_OPTION_DOUBLE intrpt; EVEL_OPTION_DOUBLE nice; EVEL_OPTION_DOUBLE softirq; EVEL_OPTION_DOUBLE steal; EVEL_OPTION_DOUBLE sys; EVEL_OPTION_DOUBLE user; EVEL_OPTION_DOUBLE wait; /* * Ves6.0 added fields 14/07/2018 */ EVEL_OPTION_DOUBLE cpuCapacityContention; EVEL_OPTION_DOUBLE cpuDemandAvg; EVEL_OPTION_DOUBLE cpuDemandMhz; EVEL_OPTION_DOUBLE cpuDemandPct; EVEL_OPTION_DOUBLE cpuLatencyAvg; EVEL_OPTION_DOUBLE cpuOverheadAvg; EVEL_OPTION_DOUBLE cpuSwapWaitTime; } MEASUREMENT_CPU_USE; /**************************************************************************//** * Disk Usage. * JSON equivalent field: diskUsage *****************************************************************************/ typedef struct measurement_disk_use { char * id; EVEL_OPTION_DOUBLE iotimeavg; EVEL_OPTION_DOUBLE iotimelast; EVEL_OPTION_DOUBLE iotimemax; EVEL_OPTION_DOUBLE iotimemin; EVEL_OPTION_DOUBLE mergereadavg; EVEL_OPTION_DOUBLE mergereadlast; EVEL_OPTION_DOUBLE mergereadmax; EVEL_OPTION_DOUBLE mergereadmin; EVEL_OPTION_DOUBLE mergewriteavg; EVEL_OPTION_DOUBLE mergewritelast; EVEL_OPTION_DOUBLE mergewritemax; EVEL_OPTION_DOUBLE mergewritemin; EVEL_OPTION_DOUBLE octetsreadavg; EVEL_OPTION_DOUBLE octetsreadlast; EVEL_OPTION_DOUBLE octetsreadmax; EVEL_OPTION_DOUBLE octetsreadmin; EVEL_OPTION_DOUBLE octetswriteavg; EVEL_OPTION_DOUBLE octetswritelast; EVEL_OPTION_DOUBLE octetswritemax; EVEL_OPTION_DOUBLE octetswritemin; EVEL_OPTION_DOUBLE opsreadavg; EVEL_OPTION_DOUBLE opsreadlast; EVEL_OPTION_DOUBLE opsreadmax; EVEL_OPTION_DOUBLE opsreadmin; EVEL_OPTION_DOUBLE opswriteavg; EVEL_OPTION_DOUBLE opswritelast; EVEL_OPTION_DOUBLE opswritemax; EVEL_OPTION_DOUBLE opswritemin; EVEL_OPTION_DOUBLE pendingopsavg; EVEL_OPTION_DOUBLE pendingopslast; EVEL_OPTION_DOUBLE pendingopsmax; EVEL_OPTION_DOUBLE pendingopsmin; EVEL_OPTION_DOUBLE timereadavg; EVEL_OPTION_DOUBLE timereadlast; EVEL_OPTION_DOUBLE timereadmax; EVEL_OPTION_DOUBLE timereadmin; EVEL_OPTION_DOUBLE timewriteavg; EVEL_OPTION_DOUBLE timewritelast; EVEL_OPTION_DOUBLE timewritemax; EVEL_OPTION_DOUBLE timewritemin; /* * VES6.0 Added fields 14/07/2018 */ EVEL_OPTION_DOUBLE diskBusResets; EVEL_OPTION_DOUBLE diskCommandsAborted; EVEL_OPTION_DOUBLE diskTime; EVEL_OPTION_DOUBLE diskFlushRequests; EVEL_OPTION_DOUBLE diskFlushTime; EVEL_OPTION_DOUBLE diskCommandsAvg; EVEL_OPTION_DOUBLE diskReadCommandsAvg; EVEL_OPTION_DOUBLE diskWriteCommandsAvg; EVEL_OPTION_DOUBLE diskTotalReadLatencyAvg; EVEL_OPTION_DOUBLE diskTotalWriteLatencyAvg; EVEL_OPTION_DOUBLE diskWeightedIoTimeAvg; EVEL_OPTION_DOUBLE diskWeightedIoTimeLast; EVEL_OPTION_DOUBLE diskWeightedIoTimeMax; EVEL_OPTION_DOUBLE diskWeightedIoTimeMin; } MEASUREMENT_DISK_USE; /**************************************************************************//** * Add an additional Disk usage value name/value pair to the Measurement. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the measurement. * @param id ASCIIZ string with the CPU's identifier. * @param usage Disk utilization. *****************************************************************************/ MEASUREMENT_DISK_USE * evel_measurement_new_disk_use_add(EVENT_MEASUREMENT * measurement, char * id); /**************************************************************************//** * Set milliseconds spent doing input/output operations over 1 sec; treat * this metric as a device load percentage where 1000ms matches 100% load; * provide the average over the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_iotimeavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds spent doing input/output operations over 1 sec; treat * this metric as a device load percentage where 1000ms matches 100% load; * provide the last value within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_iotimelast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds spent doing input/output operations over 1 sec; treat * this metric as a device load percentage where 1000ms matches 100% load; * provide the maximum value within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_iotimemax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds spent doing input/output operations over 1 sec; treat * this metric as a device load percentage where 1000ms matches 100% load; * provide the minimum value within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_iotimemin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of logical read operations that were merged into physical read * operations, e.g., two logical reads were served by one physical disk access; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_mergereadavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of logical read operations that were merged into physical read * operations, e.g., two logical reads were served by one physical disk access; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_mergereadlast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of logical read operations that were merged into physical read * operations, e.g., two logical reads were served by one physical disk access; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_mergereadmax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of logical read operations that were merged into physical read * operations, e.g., two logical reads were served by one physical disk access; * provide the minimum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_mergereadmin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of logical write operations that were merged into physical read * operations, e.g., two logical writes were served by one physical disk access; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_mergewritelast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of logical write operations that were merged into physical read * operations, e.g., two logical writes were served by one physical disk access; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_mergewritemax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of logical write operations that were merged into physical read * operations, e.g., two logical writes were served by one physical disk access; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_mergewriteavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of logical write operations that were merged into physical read * operations, e.g., two logical writes were served by one physical disk access; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_mergewritemin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of octets per second read from a disk or partition; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_octetsreadavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of octets per second read from a disk or partition; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_octetsreadlast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of octets per second read from a disk or partition; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_octetsreadmax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of octets per second read from a disk or partition; * provide the minimum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_octetsreadmin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of octets per second written to a disk or partition; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_octetswriteavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of octets per second written to a disk or partition; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_octetswritelast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of octets per second written to a disk or partition; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_octetswritemax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of octets per second written to a disk or partition; * provide the minimum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_octetswritemin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of read operations per second issued to the disk; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_opsreadavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of read operations per second issued to the disk; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_opsreadlast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of read operations per second issued to the disk; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_opsreadmax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of read operations per second issued to the disk; * provide the minimum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_opsreadmin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of write operations per second issued to the disk; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_opswriteavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of write operations per second issued to the disk; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_opswritelast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of write operations per second issued to the disk; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_opswritemax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set number of write operations per second issued to the disk; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_opswritemin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set queue size of pending I/O operations per second; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_pendingopsavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set queue size of pending I/O operations per second; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_pendingopslast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set queue size of pending I/O operations per second; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_pendingopsmax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set queue size of pending I/O operations per second; * provide the minimum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_pendingopsmin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds a read operation took to complete; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_timereadavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds a read operation took to complete; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_timereadlast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds a read operation took to complete; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_timereadmax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds a read operation took to complete; * provide the minimum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_timereadmin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds a write operation took to complete; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_timewriteavg_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds a write operation took to complete; * provide the last measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_timewritelast_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds a write operation took to complete; * provide the maximum measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_timewritemax_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set milliseconds a write operation took to complete; * provide the average measurement within the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_timewritemin_set(MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Number of bus resets over the measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskBusResets_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Number of disk commands aborted over the measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskCommandsAborted_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Nanoseconds spent on disk cache reads/writes within the measurement * interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskTime_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Total flush requests of the disk cache over the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskFlushRequests_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Milliseconds spent on disk cache flushing over the measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskFlushTime_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Average number of commands per second over the measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskCommandsAvg_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Average number of read commands issued per second to the disk over the * measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskReadCommandsAvg_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Average number of write commands issued per second to the disk over the * measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskWriteCommandsAvg_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Average read time from the perspective of a Guest OS: sum of the Kernel * Read Latency and Physical Device Read Latency in milliseconds over the * measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskTotalReadLatencyAvg_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Average write time from the perspective of a Guest OS: sum of the * Kernel Write Latency and Physical Device Write Latency in milliseconds over * the measurement interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskTotalWriteLatencyAvg_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Measure in ms over 1 sec of both I/O completion time and the backlog * that may be accumulating. Value is the average within the collection * interval. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskWeightedIoTimeAvg_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Measure in ms over 1 sec of both I/O completion time and the backlog * that may be accumulating. Value is the last within the collection interval. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskWeightedIoTimeLast_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Measure in ms over 1 sec of both I/O completion time and the backlog * that may be accumulating. Value is the maximum within the collection * interval. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskWeightedIoTimeMax_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Set Measure in ms over 1 sec of both I/O completion time and the backlog * that may be accumulating. Value is the minimum within the collection * interval. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param disk_use Pointer to the Disk Use. * @param val double *****************************************************************************/ void evel_measurement_disk_use_diskWeightedIoTimeMin_set( MEASUREMENT_DISK_USE * const disk_use, const double val); /**************************************************************************//** * Filesystem Usage. * JSON equivalent field: filesystemUsage *****************************************************************************/ typedef struct measurement_fsys_use { char * filesystem_name; double block_configured; double block_iops; double block_used; double ephemeral_configured; double ephemeral_iops; double ephemeral_used; } MEASUREMENT_FSYS_USE; /**************************************************************************//** * Memory Usage. * JSON equivalent field: memoryUsage *****************************************************************************/ typedef struct measurement_mem_use { char * vmid; double memused; double memfree; EVEL_OPTION_DOUBLE membuffsz; EVEL_OPTION_DOUBLE memcache; EVEL_OPTION_DOUBLE memconfig; EVEL_OPTION_DOUBLE slabrecl; EVEL_OPTION_DOUBLE slabunrecl; /* * VES6.0 Added fields 14/07/2018 */ EVEL_OPTION_DOUBLE memoryDemand; EVEL_OPTION_DOUBLE memoryLatencyAvg; EVEL_OPTION_DOUBLE memorySharedAvg; EVEL_OPTION_DOUBLE memorySwapInAvg; EVEL_OPTION_DOUBLE memorySwapInRateAvg; EVEL_OPTION_DOUBLE memorySwapOutAvg; EVEL_OPTION_DOUBLE memorySwapOutRateAvg; EVEL_OPTION_DOUBLE memorySwapUsedAvg; EVEL_OPTION_DOUBLE percentMemoryUsage; } MEASUREMENT_MEM_USE; /**************************************************************************//** * Add an additional Memory usage value name/value pair to the Measurement. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the measurement. * @param vmidentifier ASCIIZ string with the VM's identifier. * @param memfree Memory Free Size. * @param memused Memory Used * * @return Returns pointer to memory use structure in measurements *****************************************************************************/ MEASUREMENT_MEM_USE * evel_measurement_new_mem_use_add( EVENT_MEASUREMENT * measurement, char *vmidentifier, double memfree, double memused); /**************************************************************************//** * Set kilobytes of memory used for cache * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memcache_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** * Set kilobytes of memory Buffered * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_mem_buffered_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** * Set kilobytes of memory configured in the virtual machine on which the VNFC * reporting * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memconfig_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** * Set the part of the slab that can be reclaimed such as caches measured in * kilobytes * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_slab_reclaimed_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** * Set the part of the slab that cannot be reclaimed such as caches measured * in kilobytes * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_slab_unreclaimable_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** * Set the Host demand in kibibytes * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memoryDemand_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** * Set the memory latency average in Percentage of time the VM is * waiting to access swapped or compressed memory * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memoryLatencyAvg_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** ** Set the shared memory in kilobytes * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memorySharedAvg_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** ** Set the Amount of memory swapped-in from host cache in kibibytes * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memorySwapInAvg_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** ** Set the Rate at which memory is swapped from disk into active memory * during the interval in kilobytes per second * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memorySwapInRateAvg_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** ** Set the Amount of memory swapped-out to host cache in kibibytes * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memorySwapOutAvg_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** ** Set the Rate at which memory is being swapped from active memory to disk * during the current interval in kilobytes per second * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memorySwapOutRateAvg_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** ** Set the Space used for caching swapped pages in the host cache in kibibytes * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_memorySwapUsedAvg_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** ** Set the Percentage of memory usage; value = * (memoryUsed / (memoryUsed + memoryFree) x 100 if denomintor is nonzero, * or 0, if otherwise. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mem_use Pointer to the Memory Use. * @param val double *****************************************************************************/ void evel_measurement_mem_use_percentMemoryUsage_set(MEASUREMENT_MEM_USE * const mem_use, const double val); /**************************************************************************//** * Latency Bucket. * JSON equivalent field: latencyBucketMeasure *****************************************************************************/ typedef struct measurement_latency_bucket { int count; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_DOUBLE high_end; EVEL_OPTION_DOUBLE low_end; } MEASUREMENT_LATENCY_BUCKET; /**************************************************************************//** * Virtual NIC performance. * JSON equivalent field: NicPerformance *****************************************************************************/ typedef struct measurement_nic_performance { /* Indicates whether NicPerformance values are likely inaccurate due to counter overflow or other condtions*/ char * nic_id; char * valuesaresuspect; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_OP_STATE administrativeState; EVEL_OPTION_OP_STATE operationalState; EVEL_OPTION_DOUBLE receivedPercentDiscard; EVEL_OPTION_DOUBLE receivedPercentError; EVEL_OPTION_DOUBLE receivedUtilization; EVEL_OPTION_DOUBLE speed; EVEL_OPTION_DOUBLE transmittedPercentDiscard; EVEL_OPTION_DOUBLE transmittedPercentError; EVEL_OPTION_DOUBLE transmittedUtilization; /*Cumulative count of broadcast packets received as read at the end of the measurement interval*/ EVEL_OPTION_DOUBLE recvd_bcast_packets_acc; /*Count of broadcast packets received within the measurement interval*/ EVEL_OPTION_DOUBLE recvd_bcast_packets_delta; /*Cumulative count of discarded packets received as read at the end of the measurement interval*/ EVEL_OPTION_DOUBLE recvd_discarded_packets_acc; /*Count of discarded packets received within the measurement interval*/ EVEL_OPTION_DOUBLE recvd_discarded_packets_delta; /*Cumulative count of error packets received as read at the end of the measurement interval*/ EVEL_OPTION_DOUBLE recvd_error_packets_acc; /*Count of error packets received within the measurement interval*/ EVEL_OPTION_DOUBLE recvd_error_packets_delta; /*Cumulative count of multicast packets received as read at the end of the measurement interval*/ EVEL_OPTION_DOUBLE recvd_mcast_packets_acc; /*Count of mcast packets received within the measurement interval*/ EVEL_OPTION_DOUBLE recvd_mcast_packets_delta; /*Cumulative count of octets received as read at the end of the measurement interval*/ EVEL_OPTION_DOUBLE recvd_octets_acc; /*Count of octets received within the measurement interval*/ EVEL_OPTION_DOUBLE recvd_octets_delta; /*Cumulative count of all packets received as read at the end of the measurement interval*/ EVEL_OPTION_DOUBLE recvd_total_packets_acc; /*Count of all packets received within the measurement interval*/ EVEL_OPTION_DOUBLE recvd_total_packets_delta; /*Cumulative count of unicast packets received as read at the end of the measurement interval*/ EVEL_OPTION_DOUBLE recvd_ucast_packets_acc; /*Count of unicast packets received within the measurement interval*/ EVEL_OPTION_DOUBLE recvd_ucast_packets_delta; /*Cumulative count of transmitted broadcast packets at the end of the measurement interval*/ EVEL_OPTION_DOUBLE tx_bcast_packets_acc; /*Count of transmitted broadcast packets within the measurement interval*/ EVEL_OPTION_DOUBLE tx_bcast_packets_delta; /*Cumulative count of transmit discarded packets at the end of the measurement interval*/ EVEL_OPTION_DOUBLE tx_discarded_packets_acc; /*Count of transmit discarded packets within the measurement interval*/ EVEL_OPTION_DOUBLE tx_discarded_packets_delta; /*Cumulative count of transmit error packets at the end of the measurement interval*/ EVEL_OPTION_DOUBLE tx_error_packets_acc; /*Count of transmit error packets within the measurement interval*/ EVEL_OPTION_DOUBLE tx_error_packets_delta; /*Cumulative count of transmit multicast packets at the end of the measurement interval*/ EVEL_OPTION_DOUBLE tx_mcast_packets_acc; /*Count of transmit multicast packets within the measurement interval*/ EVEL_OPTION_DOUBLE tx_mcast_packets_delta; /*Cumulative count of transmit octets at the end of the measurement interval*/ EVEL_OPTION_DOUBLE tx_octets_acc; /*Count of transmit octets received within the measurement interval*/ EVEL_OPTION_DOUBLE tx_octets_delta; /*Cumulative count of all transmit packets at the end of the measurement interval*/ EVEL_OPTION_DOUBLE tx_total_packets_acc; /*Count of transmit packets within the measurement interval*/ EVEL_OPTION_DOUBLE tx_total_packets_delta; /*Cumulative count of all transmit unicast packets at the end of the measurement interval*/ EVEL_OPTION_DOUBLE tx_ucast_packets_acc; /*Count of transmit unicast packets within the measurement interval*/ EVEL_OPTION_DOUBLE tx_ucast_packets_delta; } MEASUREMENT_NIC_PERFORMANCE; /**************************************************************************//** * Codec Usage. * JSON equivalent field: codecsInUse *****************************************************************************/ typedef struct measurement_codec_use { char * codec_id; int number_in_use; } MEASUREMENT_CODEC_USE; /**************************************************************************//** * Feature Usage. * JSON equivalent field: featuresInUse *****************************************************************************/ typedef struct measurement_feature_use { char * feature_id; int feature_utilization; } MEASUREMENT_FEATURE_USE; /**************************************************************************//** * Measurement Group. * JSON equivalent field: additionalMeasurements *****************************************************************************/ typedef struct measurement_group { char * name; DLIST measurements; } MEASUREMENT_GROUP; /* * VES6.0 added fields 14July */ /**************************************************************************//** * IPMI. * JSON equivalent field: Ipmi *****************************************************************************/ typedef struct measurement_ipmi { EVEL_OPTION_DOUBLE exitAirTemperature; EVEL_OPTION_DOUBLE frontPanelTemperature; EVEL_OPTION_DOUBLE ioModuleTemperature; EVEL_OPTION_DOUBLE systemAirflow; DLIST ipmi_base_board_temparature; DLIST ipmi_base_board_voltage; DLIST ipmi_battery; DLIST ipmi_fan; DLIST ipmi_hsbp; DLIST ipmi_global_agg_temp_margin; DLIST ipmi_nic; DLIST ipmi_power; DLIST ipmi_processor; } MEASUREMENT_IPMI; /**************************************************************************//** * IPMI base board temperature * JSON equivalent field: PercentUsage *****************************************************************************/ typedef struct measurement_ipmi_bb_temperature { char * BBTemperatureID; EVEL_OPTION_DOUBLE BBTemperature; } MEASUREMENT_IPMI_BB_TEMPERATURE; typedef struct measurement_ipmi_bb_voltage { char * BBVoltageRegID; EVEL_OPTION_DOUBLE voltageRegTemperature; } MEASUREMENT_IPMI_BB_VOLTAGE; typedef struct measurement_ipmi_battery { char * batteryIdentifier; EVEL_OPTION_STRING batteryType; EVEL_OPTION_DOUBLE batteryVoltageLevel; } MEASUREMENT_IPMI_BATTERY; typedef struct measurement_ipmi_fan { char * fanIdentifier; EVEL_OPTION_DOUBLE fanSpeed; } MEASUREMENT_IPMI_FAN; typedef struct measurement_ipmi_hsbp { char * hsbpIdentifier; EVEL_OPTION_DOUBLE hsbpTemperature; } MEASUREMENT_IPMI_HSBP; typedef struct measurement_ipmi_global_agg_temp_margin { char * globalAggTempID; EVEL_OPTION_DOUBLE globalAggTempMargin; } MEASUREMENT_IPMI_GLOBAL_AGG_TEMP_MARGIN; typedef struct measurement_ipmi_nic { char * nicIdentifier; EVEL_OPTION_DOUBLE nicTemperature; } MEASUREMENT_IPMI_NIC; typedef struct measurement_ipmi_power_supply { char * powerSupplyIdentifier; EVEL_OPTION_DOUBLE powerSupplyInputPower; EVEL_OPTION_DOUBLE powerSupplyCurrentOutput; EVEL_OPTION_DOUBLE powerSupplyTemperature; } MEASUREMENT_IPMI_POWER_SUPPLY; typedef struct measurement_ipmi_processor { char * processorIdentifier; EVEL_OPTION_DOUBLE pprocessorThermalControl; EVEL_OPTION_DOUBLE processorDtsThermalMargin; DLIST processorDimmAggregateThermalMargin; } MEASUREMENT_IPMI_PROCESSOR; typedef struct measurement_ipmi_processor_dimmAgg_therm { char * MarginIdentifier; double thermalMargin; } MEASUREMENT_IPMI_PROCESSOR_DIMMAGG_THERM; /**************************************************************************//** * Custom Defined Measurement. * JSON equivalent field: measurements *****************************************************************************/ typedef struct custom_measurement { char * name; char * value; } CUSTOM_MEASUREMENT; /*****************************************************************************/ /* Supported Report version. */ /*****************************************************************************/ #define EVEL_REPORT_MAJOR_VERSION 1 #define EVEL_REPORT_MINOR_VERSION 0 /**************************************************************************//** * Report. * JSON equivalent field: measurementsForVfReportingFields * * @note This is an experimental event type and is not currently a formal part * of AT&T's specification. *****************************************************************************/ typedef struct event_report { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ double measurement_interval; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ DLIST feature_usage; DLIST measurement_groups; } EVENT_REPORT; /**************************************************************************//** * Mobile GTP Per Flow Metrics. * JSON equivalent field: gtpPerFlowMetrics *****************************************************************************/ typedef struct mobile_gtp_per_flow_metrics { double avg_bit_error_rate; double avg_packet_delay_variation; int avg_packet_latency; int avg_receive_throughput; int avg_transmit_throughput; int flow_activation_epoch; int flow_activation_microsec; int flow_deactivation_epoch; int flow_deactivation_microsec; time_t flow_deactivation_time; char * flow_status; int max_packet_delay_variation; int num_activation_failures; int num_bit_errors; int num_bytes_received; int num_bytes_transmitted; int num_dropped_packets; int num_l7_bytes_received; int num_l7_bytes_transmitted; int num_lost_packets; int num_out_of_order_packets; int num_packet_errors; int num_packets_received_excl_retrans; int num_packets_received_incl_retrans; int num_packets_transmitted_incl_retrans; int num_retries; int num_timeouts; int num_tunneled_l7_bytes_received; int round_trip_time; int time_to_first_byte; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_INT ip_tos_counts[EVEL_TOS_SUPPORTED]; EVEL_OPTION_INT tcp_flag_counts[EVEL_MAX_TCP_FLAGS]; EVEL_OPTION_INT qci_cos_counts[EVEL_MAX_QCI_COS_TYPES]; EVEL_OPTION_INT dur_connection_failed_status; EVEL_OPTION_INT dur_tunnel_failed_status; EVEL_OPTION_STRING flow_activated_by; EVEL_OPTION_TIME flow_activation_time; EVEL_OPTION_STRING flow_deactivated_by; EVEL_OPTION_STRING gtp_connection_status; EVEL_OPTION_STRING gtp_tunnel_status; EVEL_OPTION_INT large_packet_rtt; EVEL_OPTION_DOUBLE large_packet_threshold; EVEL_OPTION_INT max_receive_bit_rate; EVEL_OPTION_INT max_transmit_bit_rate; EVEL_OPTION_INT num_gtp_echo_failures; EVEL_OPTION_INT num_gtp_tunnel_errors; EVEL_OPTION_INT num_http_errors; HASHTABLE_T *ip_tos_count_list; HASHTABLE_T *mobile_qci_cos_count_list; HASHTABLE_T *tcp_flag_count_list; } MOBILE_GTP_PER_FLOW_METRICS; /*****************************************************************************/ /* Supported Mobile Flow version. */ /*****************************************************************************/ #define EVEL_MOBILE_FLOW_MAJOR_VERSION 4 #define EVEL_MOBILE_FLOW_MINOR_VERSION 0 /**************************************************************************//** * Mobile Flow. * JSON equivalent field: mobileFlow *****************************************************************************/ typedef struct event_mobile_flow { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ char * flow_direction; MOBILE_GTP_PER_FLOW_METRICS * gtp_per_flow_metrics; char * ip_protocol_type; char * ip_version; char * other_endpoint_ip_address; int other_endpoint_port; char * reporting_endpoint_ip_addr; int reporting_endpoint_port; HASHTABLE_T *additional_info; /* JSON: additionalFields */ /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_STRING application_type; EVEL_OPTION_STRING app_protocol_type; EVEL_OPTION_STRING app_protocol_version; EVEL_OPTION_STRING cid; EVEL_OPTION_STRING connection_type; EVEL_OPTION_STRING ecgi; EVEL_OPTION_STRING gtp_protocol_type; EVEL_OPTION_STRING gtp_version; EVEL_OPTION_STRING http_header; EVEL_OPTION_STRING imei; EVEL_OPTION_STRING imsi; EVEL_OPTION_STRING lac; EVEL_OPTION_STRING mcc; EVEL_OPTION_STRING mnc; EVEL_OPTION_STRING msisdn; EVEL_OPTION_STRING other_functional_role; EVEL_OPTION_STRING rac; EVEL_OPTION_STRING radio_access_technology; EVEL_OPTION_STRING sac; EVEL_OPTION_INT sampling_algorithm; EVEL_OPTION_STRING tac; EVEL_OPTION_STRING tunnel_id; EVEL_OPTION_STRING vlan_id; } EVENT_MOBILE_FLOW; /*****************************************************************************/ /* Supported Other field version. */ /*****************************************************************************/ #define EVEL_OTHER_EVENT_MAJOR_VERSION 3 #define EVEL_OTHER_EVENT_MINOR_VERSION 0 /**************************************************************************//** * Other. * JSON equivalent field: otherFields *****************************************************************************/ typedef struct event_other { EVENT_HEADER header; int major_version; int minor_version; DLIST arrayOfNamedHashMap; HASHTABLE_T *hashMap; DLIST jsonobjects; /* DLIST of EVEL_JSON_OBJECT */ /** to delete DLIST namedvalues; HASHTABLE_T *namedarrays;****/ /* HASHTABLE_T */ } EVENT_OTHER; /**************************************************************************//** * Other Field. * JSON equivalent field: otherFields *****************************************************************************/ typedef struct other_field { char * name; char * value; } OTHER_FIELD; /*****************************************************************************/ /* Supported Service Events version. */ /*****************************************************************************/ #define EVEL_HEARTBEAT_FIELD_MAJOR_VERSION 3 #define EVEL_HEARTBEAT_FIELD_MINOR_VERSION 0 /*****************************************************************************/ /* Supported Signaling version. */ /*****************************************************************************/ #define EVEL_SIGNALING_MAJOR_VERSION 3 #define EVEL_SIGNALING_MINOR_VERSION 0 /**************************************************************************//** * Vendor VNF Name fields. * JSON equivalent field: vendorVnfNameFields *****************************************************************************/ typedef struct vendor_vnfname_field { char * vendorname; EVEL_OPTION_STRING vfmodule; EVEL_OPTION_STRING vnfname; } VENDOR_VNFNAME_FIELD; /**************************************************************************//** * Signaling. * JSON equivalent field: signalingFields *****************************************************************************/ typedef struct event_signaling { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ VENDOR_VNFNAME_FIELD vnfname_field; EVEL_OPTION_STRING correlator; /* JSON: correlator */ EVEL_OPTION_STRING local_ip_address; /* JSON: localIpAddress */ EVEL_OPTION_STRING local_port; /* JSON: localPort */ EVEL_OPTION_STRING remote_ip_address; /* JSON: remoteIpAddress */ EVEL_OPTION_STRING remote_port; /* JSON: remotePort */ /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_STRING compressed_sip; /* JSON: compressedSip */ EVEL_OPTION_STRING summary_sip; /* JSON: summarySip */ HASHTABLE_T *additional_info; } EVENT_SIGNALING; /*****************************************************************************/ /* Supported State Change version. */ /*****************************************************************************/ #define EVEL_STATE_CHANGE_MAJOR_VERSION 4 #define EVEL_STATE_CHANGE_MINOR_VERSION 0 /**************************************************************************//** * State Change. * JSON equivalent field: stateChangeFields *****************************************************************************/ typedef struct event_state_change { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ EVEL_ENTITY_STATE new_state; EVEL_ENTITY_STATE old_state; char * state_interface; double version; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ HASHTABLE_T *additional_fields; } EVENT_STATE_CHANGE; /*****************************************************************************/ /* Supported Notification version. */ /*****************************************************************************/ #define EVEL_NOTIFICATION_MAJOR_VERSION 2 #define EVEL_NOTIFICATION_MINOR_VERSION 0 /**************************************************************************//** * Notification. * JSON equivalent field: notificationFields *****************************************************************************/ typedef struct event_notification { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ double version; char * changeIdentifier; char * changeType; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ HASHTABLE_T *additional_fields; DLIST arrayOfNamedHashMap; EVEL_OPTION_STRING changeContact; EVEL_OPTION_STATE new_state; EVEL_OPTION_STATE old_state; EVEL_OPTION_STRING state_interface; } EVENT_NOTIFICATION; /*****************************************************************************/ /* Supported Syslog version. */ /*****************************************************************************/ #define EVEL_SYSLOG_MAJOR_VERSION 4 #define EVEL_SYSLOG_MINOR_VERSION 0 /**************************************************************************//** * Syslog. * JSON equivalent field: syslogFields *****************************************************************************/ typedef struct event_syslog { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ EVEL_SOURCE_TYPES event_source_type; char * syslog_msg; char * syslog_tag; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ HASHTABLE_T * additional_fields; EVEL_OPTION_STRING event_source_host; EVEL_OPTION_INT syslog_facility; EVEL_OPTION_INT syslog_priority; EVEL_OPTION_STRING syslog_proc; EVEL_OPTION_INT syslog_proc_id; EVEL_OPTION_STRING syslog_s_data; EVEL_OPTION_STRING syslog_sdid; EVEL_OPTION_STRING syslog_severity; double syslog_fver; EVEL_OPTION_INT syslog_ver; EVEL_OPTION_STRING syslog_timeStamp; EVEL_OPTION_STRING syslog_msgHost; } EVENT_SYSLOG; /**************************************************************************//** * Copyright. * JSON equivalent object: attCopyrightNotice *****************************************************************************/ typedef struct copyright { char * useAndRedistribution; char * condition1; char * condition2; char * condition3; char * condition4; char * disclaimerLine1; char * disclaimerLine2; char * disclaimerLine3; char * disclaimerLine4; } COPYRIGHT; /**************************************************************************//** * Library initialization. * * Initialize the EVEL library. * * @note This function initializes the cURL library. Applications making use * of libcurl may need to pull the initialization out of here. Note * also that this function is not threadsafe as a result - refer to * libcurl's API documentation for relevant warnings. * * @sa Matching Term function. * * @param fqdn The API's FQDN or IP address. * @param port The API's port. * @param bakup_fqdn The API's FQDN or IP address. * @param bakup_port The API's port. * @param path The optional path (may be NULL). * @param topic The optional topic part of the URL (may be NULL). * @param ring_buf_size Ring buffer size (>=100) ~ Avg Messages in 1hr * @param secure Whether to use HTTPS (0=HTTP, 1=HTTPS). * @param cert_file_path Path to client certificate file * @param key_file_path Path to client key file * @param ca_info Path to CA info * @param ca_file_path Path to CA file * @param verify_peer SSL verification of peer 0 or 1 * @param verify_host SSL verification of host 0 or 1 * @param username Username for Basic Authentication of requests. * @param password Password for Basic Authentication of requests. * @param bakup_username Username for Basic Authentication of Bakup FQDN. * @param bakup_password Password for Basic Authentication of Bakup FQDN. * @param source_ip The ip of node we represent.(NULL for default ip) * @param bakup_source_ip The ip bakup fqdn interface.(NULL for default ip) * @param source_type The kind of node we represent. * @param role The role this node undertakes. * @param verbosity 0 for normal operation, positive values for chattier * logs. * * @returns Status code * @retval EVEL_SUCCESS On success * @retval ::EVEL_ERR_CODES On failure. *****************************************************************************/ EVEL_ERR_CODES evel_initialize(const char * const fqdn, int port, const char * const bakup_fqdn, int bakup_port, const char * const path, const char * const topic, int ring_buf_size, int secure, const char * const cert_file_path, const char * const key_file_path, const char * const ca_info, const char * const ca_file_path, long verify_peer, long verify_host, const char * const username, const char * const password, const char * const bakup_username, const char * const bakup_password, const char * const source_ip, const char * const bakup_source_ip, EVEL_SOURCE_TYPES source_type, const char * const role, int verbosity ); /**************************************************************************//** * Initialize value for vm_name for all coming events * @param source_name Source name string. * Must confirm with EVEL source name standard * @returns Status code * @retval EVEL_SUCCESS On success * @retval ::EVEL_ERR_CODES On failure. *****************************************************************************/ EVEL_ERR_CODES evel_set_source_name(char * src_name); /**************************************************************************//** * Clean up the EVEL library. * * @note that at present don't expect Init/Term cycling not to leak memory! * * @returns Status code * @retval EVEL_SUCCESS On success * @retval "One of ::EVEL_ERR_CODES" On failure. *****************************************************************************/ EVEL_ERR_CODES evel_terminate(void); EVEL_ERR_CODES evel_post_event(EVENT_HEADER * event); const char * evel_error_string(void); /**************************************************************************//** * Free an event. * * Free off the event supplied. Will free all the contained allocated memory. * * @note It is safe to free a NULL pointer. *****************************************************************************/ void evel_free_event(void * event); /**************************************************************************//** * Encode the event as a JSON event object according to AT&T's schema. * * @param json Pointer to where to store the JSON encoded data. * @param mode Event mode or Batch mode * @param max_size Size of storage available in json_body. * @param event Pointer to the ::EVENT_HEADER to encode. * @returns The number of characters that would have been written if max_size had been sufficiently large, not counting the terminating null character. Notice that only when this returned value is less than max_size, the string has been completely written(similar to snprintf). Otherwise, need to enlarge the buffer size to returned value +1. *****************************************************************************/ int evel_json_encode_event(char * json, int max_size, EVENT_HEADER * event); int evel_json_encode_batch_event(char * json, int max_size, EVENT_HEADER * event); /**************************************************************************//** * Callback function to provide returned data. * * Copy data into the supplied buffer, write_callback::ptr, checking size * limits. * * @returns Number of bytes placed into write_callback::ptr. 0 for EOF. *****************************************************************************/ size_t evel_write_callback(void *contents, size_t size, size_t nmemb, void *userp); /*****************************************************************************/ /*****************************************************************************/ /* */ /* HEARTBEAT - (includes common header, too) */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new heartbeat event. * * @note that the heartbeat is just a "naked" commonEventHeader! * * @returns pointer to the newly manufactured ::EVENT_HEADER. If the event is * not used it must be released using ::evel_free_event * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_HEADER * evel_new_heartbeat(void); /**************************************************************************//** * Create a new heartbeat event of given name and type. * * @note that the heartbeat is just a "naked" commonEventHeader! * * @param event_name Unique Event Name: {DomainAbbreviation}_{AsdcModel or ApplicationPlatform}_{DescriptionOfInfoBeingConveyed} * @param event_id A universal identifier of the event for: troubleshooting, cross-referencing of alarms for alarm correlation, offline log analysis, etc * * @returns pointer to the newly manufactured ::EVENT_HEADER. If the event is * not used it must be released using ::evel_free_event * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_HEADER * evel_new_heartbeat_nameid(const char* ev_name, const char *ev_id); /**************************************************************************//** * Free an event header. * * Free off the event header supplied. Will free all the contained allocated * memory. * * @note It does not free the header itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_header(EVENT_HEADER * const event); /**************************************************************************//** * Initialize a newly created event header. * * @param header Pointer to the header being initialized. *****************************************************************************/ void evel_init_header(EVENT_HEADER * const header,const char *const eventname); /**************************************************************************//** * Set the Event Type property of the event header. * * @param header Pointer to the ::EVENT_HEADER. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_header_type_set(EVENT_HEADER * const header, const char * const type); /**************************************************************************//** * Set the next event_sequence to use. * * @param sequence The next sequence number to use. *****************************************************************************/ void evel_set_global_event_sequence(const int sequence); /**************************************************************************//** * Set the Event Sequence property of the event header. * * @note This is mainly for tracking fault event sequence numbers * * @param header Pointer to the ::EVENT_HEADER. * @param sequence_number * *****************************************************************************/ void evel_event_sequence_set(EVENT_HEADER * const header,const int sequence_number); /**************************************************************************//** * Set the Start Epoch property of the event header. * * @note The Start Epoch defaults to the time of event creation. * * @param header Pointer to the ::EVENT_HEADER. * @param start_epoch_microsec * The start epoch to set, in microseconds. *****************************************************************************/ void evel_start_epoch_set(EVENT_HEADER * const header, const unsigned long long start_epoch_microsec); /**************************************************************************//** * Set the Last Epoch property of the event header. * * @note The Last Epoch defaults to the time of event creation. * * @param header Pointer to the ::EVENT_HEADER. * @param last_epoch_microsec * The last epoch to set, in microseconds. *****************************************************************************/ void evel_last_epoch_set(EVENT_HEADER * const header, const unsigned long long last_epoch_microsec); /**************************************************************************//** * Set the Reporting Entity Name property of the event header. * * @note The Reporting Entity Name defaults to the OpenStack VM Name. * * @param header Pointer to the ::EVENT_HEADER. * @param entity_name The entity name to set. *****************************************************************************/ void evel_reporting_entity_name_set(EVENT_HEADER * const header, const char * const entity_name); /**************************************************************************//** * Set the source Name property of the event header. * * @note The source Name defaults to the OpenStack VM Name. * * @param header Pointer to the ::EVENT_HEADER. * @param source_name The entity name to set. *****************************************************************************/ void evel_source_name_set(EVENT_HEADER * const header, const char * const source_name); /**************************************************************************//** * Set the Reporting Entity Id property of the event header. * * @note The Reporting Entity Id defaults to the OpenStack VM UUID. * * @param header Pointer to the ::EVENT_HEADER. * @param entity_id The entity id to set. *****************************************************************************/ void evel_reporting_entity_id_set(EVENT_HEADER * const header, const char * const entity_id); /**************************************************************************//** * Set the NFC Naming code property of the event header. * * @param header Pointer to the ::EVENT_HEADER. * @param nfcnamingcode String *****************************************************************************/ void evel_nfcnamingcode_set(EVENT_HEADER * const header, const char * const nfcnam); /**************************************************************************//** * Set the NF Naming code property of the event header. * * @param header Pointer to the ::EVENT_HEADER. * @param nfnamingcode String *****************************************************************************/ void evel_nfnamingcode_set(EVENT_HEADER * const header, const char * const nfnam); /**************************************************************************//** * Set the NF Vendor Name * * @param nfVendorName NF Vendor Name to use *****************************************************************************/ void evel_nf_vendor_name_set(EVENT_HEADER * const header, char * nfVendorName); /**************************************************************************//** * Set the time zone offset * * @param timeZoneOffset Time zone offset to use. *****************************************************************************/ void evel_time_zone_offset_set(EVENT_HEADER * const header, char * timeZoneOffset); /**************************************************************************//** * Set the source ID * * @param sourceId source ID to use *****************************************************************************/ void evel_source_id_set(EVENT_HEADER * const header, char * sourceId); /*****************************************************************************/ /*****************************************************************************/ /* */ /* FAULT */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new fault event. * * @note The mandatory fields on the Fault must be supplied to this factory * function and are immutable once set. Optional fields have explicit * setter functions, but again values may only be set once so that the * Fault has immutable properties. * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * @param condition The condition indicated by the Fault. * @param specific_problem The specific problem triggering the fault. * @param priority The priority of the event. * @param severity The severity of the Fault. * @param ev_source_type Source of Alarm event * @param version fault version * @param status status of Virtual Function * @returns pointer to the newly manufactured ::EVENT_FAULT. If the event is * not used (i.e. posted) it must be released using ::evel_free_fault. * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_FAULT * evel_new_fault(const char* ev_name, const char *ev_id, const char * const condition, const char * const specific_problem, EVEL_EVENT_PRIORITIES priority, EVEL_SEVERITIES severity, EVEL_SOURCE_TYPES ev_source_type, EVEL_VF_STATUSES status); /**************************************************************************//** * Free a Fault. * * Free off the Fault supplied. Will free all the contained allocated memory. * * @note It does not free the Fault itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_fault(EVENT_FAULT * event); /**************************************************************************//** * Set the Fault Category property of the Fault. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param fault Pointer to the fault. * @param category Category : license, link, routing, security, signaling. * ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_fault_category_set(EVENT_FAULT * fault, const char * const category); /**************************************************************************//** * Set the Alarm Interface A property of the Fault. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param fault Pointer to the fault. * @param interface The Alarm Interface A to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_fault_interface_set(EVENT_FAULT * fault, const char * const interface); /**************************************************************************//** * Add an additional value name/value pair to the Fault. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param fault Pointer to the fault. * @param name ASCIIZ string with the attribute's name. * @param value ASCIIZ string with the attribute's value. *****************************************************************************/ void evel_fault_addl_info_add(EVENT_FAULT * fault, char * name, char * value); /**************************************************************************//** * Set the Event Type property of the Fault. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param fault Pointer to the fault. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_fault_type_set(EVENT_FAULT * fault, const char * const type); /*****************************************************************************/ /*****************************************************************************/ /* */ /* MEASUREMENT */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new Measurement event. * * @note The mandatory fields on the Measurement must be supplied to this * factory function and are immutable once set. Optional fields have * explicit setter functions, but again values may only be set once so * that the Measurement has immutable properties. * * @param measurement_interval * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * * @returns pointer to the newly manufactured ::EVENT_MEASUREMENT. If the * event is not used (i.e. posted) it must be released using * ::evel_free_event. * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_MEASUREMENT * evel_new_measurement(double measurement_interval,const char* ev_name, const char *ev_id); /**************************************************************************//** * Free a Measurement. * * Free off the Measurement supplied. Will free all the contained allocated * memory. * * @note It does not free the Measurement itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_measurement(EVENT_MEASUREMENT * event); /**************************************************************************//** * Set the Event Type property of the Measurement. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to the Measurement. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_measurement_type_set(EVENT_MEASUREMENT * measurement, const char * const type); /**************************************************************************//** * Set the Concurrent Sessions property of the Measurement. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to the Measurement. * @param concurrent_sessions The Concurrent Sessions to be set. *****************************************************************************/ void evel_measurement_conc_sess_set(EVENT_MEASUREMENT * measurement, int concurrent_sessions); /**************************************************************************//** * Set the Configured Entities property of the Measurement. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to the Measurement. * @param configured_entities The Configured Entities to be set. *****************************************************************************/ void evel_measurement_cfg_ents_set(EVENT_MEASUREMENT * measurement, int configured_entities); /**************************************************************************//** * Set the Mean Request Latency property of the Measurement. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to the Measurement. * @param mean_request_latency The Mean Request Latency to be set. *****************************************************************************/ void evel_measurement_mean_req_lat_set(EVENT_MEASUREMENT * measurement, double mean_request_latency); /**************************************************************************//** * Set the Request Rate property of the Measurement. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to the Measurement. * @param request_rate The Request Rate to be set. *****************************************************************************/ void evel_measurement_request_rate_set(EVENT_MEASUREMENT * measurement, double request_rate); /**************************************************************************//** * Add an additional CPU usage value name/value pair to the Measurement. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the measurement. * @param id ASCIIZ string with the CPU's identifier. * @param usage CPU utilization. *****************************************************************************/ MEASUREMENT_CPU_USE * evel_measurement_new_cpu_use_add(EVENT_MEASUREMENT * measurement, char * id, double usage); /**************************************************************************//** * Set the CPU Idle value in measurement interval * percentage of CPU time spent in the idle task * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_idle_set(MEASUREMENT_CPU_USE *const cpu_use, const double val); /**************************************************************************//** * Set the percentage of time spent servicing interrupts * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_interrupt_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the percentage of time spent running user space processes that have been niced * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_nice_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the percentage of time spent handling soft irq interrupts * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_softirq_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the percentage of time spent in involuntary wait * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_steal_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the percentage of time spent on system tasks running the kernel * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_system_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the percentage of time spent running un-niced user space processes * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_usageuser_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the percentage of CPU time spent waiting for I/O operations to complete * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_wait_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the The amount of time the CPU cannot run due to contention, in * milliseconds over the measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_cpuCapacityContention_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the total CPU time that the NF/NFC/VM could use if there was no * contention, in milliseconds over the measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_cpuDemandAvg_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the CPU demand in MHz * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_cpuDemandMhz_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the CPU demand as a percentage of the provisioned capacity * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_cpuDemandPct_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the Percentage of time the VM is unable to run because it is * contending for access to the physical CPUs * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_cpuLatencyAvg_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the overhead demand above available allocations and reservations, * in milliseconds over the measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_cpuOverheadAvg_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Set the swap wait time, in milliseconds over the measurement Interval * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param cpu_use Pointer to the CPU Use. * @param val double *****************************************************************************/ void evel_measurement_cpu_use_cpuSwapWaitTime_set(MEASUREMENT_CPU_USE * const cpu_use, const double val); /**************************************************************************//** * Add an additional File System usage value name/value pair to the * Measurement. * * The filesystem_name is null delimited ASCII string. The library takes a * copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the measurement. * @param filesystem_name ASCIIZ string with the file-system's UUID. * @param block_configured Block storage configured. * @param block_used Block storage in use. * @param block_iops Block storage IOPS. * @param ephemeral_configured Ephemeral storage configured. * @param ephemeral_used Ephemeral storage in use. * @param ephemeral_iops Ephemeral storage IOPS. *****************************************************************************/ void evel_measurement_fsys_use_add(EVENT_MEASUREMENT * measurement, char * filesystem_name, double block_configured, double block_used, double block_iops, double ephemeral_configured, double ephemeral_used, double ephemeral_iops); /**************************************************************************//** * Add a Feature usage value name/value pair to the Measurement. * * The name is null delimited ASCII string. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the measurement. * @param feature ASCIIZ string with the feature's name. * @param utilization Utilization of the feature. *****************************************************************************/ void evel_measurement_feature_use_add(EVENT_MEASUREMENT * measurement, char * feature, char * utilization); /**************************************************************************//** * Add a new Additional Measurement hashmap to the Measurement. * * The name is null delimited ASCII string. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the Measurement. * @param name ASCIIZ string containing the hashmap name *****************************************************************************/ HASHTABLE_T * evel_measurement_new_addl_measurement( EVENT_MEASUREMENT * measurement, const char * const name); /**************************************************************************//** * Add a new Additional Measurement hashmap to the Measurement. * * The name is null delimited ASCII string. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param ht Pointer hashmap. * @param name ASCIIZ string containing the measurement's name. * @param Value ASCIIZ string containing the measurement's value. *****************************************************************************/ void evel_measurement_addl_measurement_set ( HASHTABLE_T * const ht, const char * const name, const char * const value); /**************************************************************************//** * Add a Codec usage value name/value pair to the Measurement. * * The name is null delimited ASCII string. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param measurement Pointer to the measurement. * @param codec ASCIIZ string with the codec's name. * @param utilization Utilization of the feature. *****************************************************************************/ void evel_measurement_codec_use_add(EVENT_MEASUREMENT * measurement, char * codec, int utilization); /**************************************************************************//** * Set the Media Ports in Use property of the Measurement. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to the measurement. * @param media_ports_in_use The media port usage to set. *****************************************************************************/ void evel_measurement_media_port_use_set(EVENT_MEASUREMENT * measurement, int media_ports_in_use); /**************************************************************************//** * Set the VNFC Scaling Metric property of the Measurement. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to the measurement. * @param scaling_metric The scaling metric to set. *****************************************************************************/ void evel_measurement_vnfc_scaling_metric_set(EVENT_MEASUREMENT * measurement, int scaling_metric); /**************************************************************************//** * Create a new Latency Bucket to be added to a Measurement event. * * @note The mandatory fields on the ::MEASUREMENT_LATENCY_BUCKET must be * supplied to this factory function and are immutable once set. * Optional fields have explicit setter functions, but again values * may only be set once so that the ::MEASUREMENT_LATENCY_BUCKET has * immutable properties. * * @param count Count of events in this bucket. * * @returns pointer to the newly manufactured ::MEASUREMENT_LATENCY_BUCKET. * @retval NULL Failed to create the Latency Bucket. *****************************************************************************/ MEASUREMENT_LATENCY_BUCKET * evel_new_meas_latency_bucket(const int count); /**************************************************************************//** * Set the High End property of the Measurement Latency Bucket. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param bucket Pointer to the Measurement Latency Bucket. * @param high_end High end of the bucket's range. *****************************************************************************/ void evel_meas_latency_bucket_high_end_set( MEASUREMENT_LATENCY_BUCKET * const bucket, const double high_end); /**************************************************************************//** * Set the Low End property of the Measurement Latency Bucket. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param bucket Pointer to the Measurement Latency Bucket. * @param low_end Low end of the bucket's range. *****************************************************************************/ void evel_meas_latency_bucket_low_end_set( MEASUREMENT_LATENCY_BUCKET * const bucket, const double low_end); /**************************************************************************//** * Add an additional Measurement Latency Bucket to the specified event. * * @param measurement Pointer to the Measurement event. * @param bucket Pointer to the Measurement Latency Bucket to add. *****************************************************************************/ void evel_meas_latency_bucket_add(EVENT_MEASUREMENT * const measurement, MEASUREMENT_LATENCY_BUCKET * const bucket); /**************************************************************************//** * Add an additional Latency Distribution bucket to the Measurement. * * This function implements the previous API, purely for convenience. * * @param measurement Pointer to the measurement. * @param low_end Low end of the bucket's range. * @param high_end High end of the bucket's range. * @param count Count of events in this bucket. *****************************************************************************/ void evel_measurement_latency_add(EVENT_MEASUREMENT * const measurement, const double low_end, const double high_end, const int count); /**************************************************************************//** * Create a new NIC Use to be added to a Measurement event. * * @note The mandatory fields on the ::MEASUREMENT_NIC_PERFORMANCE must be supplied * to this factory function and are immutable once set. Optional * fields have explicit setter functions, but again values may only be * set once so that the ::MEASUREMENT_NIC_PERFORMANCE has immutable * properties. * * @param nic_id ASCIIZ string with the NIC's ID. * @param val_suspect True or false confidence in data. * * @returns pointer to the newly manufactured ::MEASUREMENT_NIC_PERFORMANCE. * If the structure is not used it must be released using * ::evel_measurement_free_nic_performance. * @retval NULL Failed to create the NIC Use. *****************************************************************************/ MEASUREMENT_NIC_PERFORMANCE * evel_measurement_new_nic_performance(char * const nic_id, char * const val_suspect); /**************************************************************************//** * Free a NIC Use. * * Free off the ::MEASUREMENT_NIC_PERFORMANCE supplied. Will free all the contained * allocated memory. * * @note It does not free the NIC Use itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_measurement_free_nic_performance(MEASUREMENT_NIC_PERFORMANCE * const nic_performance); /**************************************************************************//** * Set the administrative State of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param state *****************************************************************************/ void evel_nic_performance_administrativeState_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const EVEL_OPER_STATE state); /**************************************************************************//** * Set the operational state of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param state *****************************************************************************/ void evel_nic_performance_operationalState_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const EVEL_OPER_STATE state); /**************************************************************************//** * Set the Percentage of discarded packets received of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param receivedPercentDiscard *****************************************************************************/ void evel_nic_performance_receivedPercentDiscard_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double receivedPercentDiscard); /**************************************************************************//** * Set the Percentage of error packets received of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param receivedPercentError *****************************************************************************/ void evel_nic_performance_receivedPercentError_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double receivedPercentError); /**************************************************************************//** * Set the Percentage of utilization received of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param receivedUtilization *****************************************************************************/ void evel_nic_performance_receivedUtilization_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double receivedUtilization); /**************************************************************************//** * Set the Speed configured in mbps of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param Speed *****************************************************************************/ void evel_nic_performance_speed_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double speed); /**************************************************************************//** * Set the Percentage of discarded packets transmitted of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param transmittedPercentDiscard *****************************************************************************/ void evel_nic_performance_transmittedPercentDiscard_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double transmittedPercentDiscard); /**************************************************************************//** * Set the Percentage of error packets received of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param transmittedPercentError *****************************************************************************/ void evel_nic_performance_transmittedPercentError_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double transmittedPercentError); /**************************************************************************//** * Set the Percentage of utilization transmitted of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param transmittedUtilization *****************************************************************************/ void evel_nic_performance_transmittedUtilization_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double transmittedUtilization); /**************************************************************************//** * Set the Accumulated Broadcast Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_bcast_packets_acc *****************************************************************************/ void evel_nic_performance_rx_bcast_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_bcast_packets_acc); /**************************************************************************//** * Set the Delta Broadcast Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_bcast_packets_delta *****************************************************************************/ void evel_nic_performance_rx_bcast_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_bcast_packets_delta); /**************************************************************************//** * Set the Discarded Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_discard_packets_acc *****************************************************************************/ void evel_nic_performance_rx_discard_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_discard_packets_acc); /**************************************************************************//** * Set the Delta Discarded Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_discard_packets_delta *****************************************************************************/ void evel_nic_performance_rx_discard_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_discard_packets_delta); /**************************************************************************//** * Set the Error Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_error_packets_acc *****************************************************************************/ void evel_nic_performance_rx_error_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_error_packets_acc); /**************************************************************************//** * Set the Delta Error Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_error_packets_delta *****************************************************************************/ void evel_nic_performance_rx_error_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_error_packets_delta); /**************************************************************************//** * Set the Accumulated Multicast Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_mcast_packets_acc *****************************************************************************/ void evel_nic_performance_rx_mcast_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_mcast_packets_acc); /**************************************************************************//** * Set the Delta Multicast Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_mcast_packets_delta *****************************************************************************/ void evel_nic_performance_rx_mcast_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_mcast_packets_delta); /**************************************************************************//** * Set the Accumulated Octets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_octets_acc *****************************************************************************/ void evel_nic_performance_rx_octets_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_octets_acc); /**************************************************************************//** * Set the Delta Octets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_octets_delta *****************************************************************************/ void evel_nic_performance_rx_octets_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_octets_delta); /**************************************************************************//** * Set the Accumulated Total Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_total_packets_acc *****************************************************************************/ void evel_nic_performance_rx_total_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_total_packets_acc); /**************************************************************************//** * Set the Delta Total Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_total_packets_delta *****************************************************************************/ void evel_nic_performance_rx_total_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_total_packets_delta); /**************************************************************************//** * Set the Accumulated Unicast Packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_ucast_packets_acc *****************************************************************************/ void evel_nic_performance_rx_ucast_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_ucast_packets_acc); /**************************************************************************//** * Set the Delta Unicast packets Received in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param recvd_ucast_packets_delta *****************************************************************************/ void evel_nic_performance_rx_ucast_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double recvd_ucast_packets_delta); /**************************************************************************//** * Set the Transmitted Broadcast Packets in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_bcast_packets_acc *****************************************************************************/ void evel_nic_performance_tx_bcast_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_bcast_packets_acc); /**************************************************************************//** * Set the Delta Broadcast packets Transmitted in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_bcast_packets_delta *****************************************************************************/ void evel_nic_performance_tx_bcast_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_bcast_packets_delta); /**************************************************************************//** * Set the Transmitted Discarded Packets in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_discarded_packets_acc *****************************************************************************/ void evel_nic_performance_tx_discarded_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_discarded_packets_acc); /**************************************************************************//** * Set the Delta Discarded packets Transmitted in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_discarded_packets_delta *****************************************************************************/ void evel_nic_performance_tx_discarded_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_discarded_packets_delta); /**************************************************************************//** * Set the Transmitted Errored Packets in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_error_packets_acc *****************************************************************************/ void evel_nic_performance_tx_error_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_error_packets_acc); /**************************************************************************//** * Set the Delta Errored packets Transmitted in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_error_packets_delta *****************************************************************************/ void evel_nic_performance_tx_error_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_error_packets_delta); /**************************************************************************//** * Set the Transmitted Multicast Packets in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_mcast_packets_acc *****************************************************************************/ void evel_nic_performance_tx_mcast_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_mcast_packets_acc); /**************************************************************************//** * Set the Delta Multicast packets Transmitted in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_mcast_packets_delta *****************************************************************************/ void evel_nic_performance_tx_mcast_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_mcast_packets_delta); /**************************************************************************//** * Set the Transmitted Octets in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_octets_acc *****************************************************************************/ void evel_nic_performance_tx_octets_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_octets_acc); /**************************************************************************//** * Set the Delta Octets Transmitted in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_octets_delta *****************************************************************************/ void evel_nic_performance_tx_octets_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_octets_delta); /**************************************************************************//** * Set the Transmitted Total Packets in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_total_packets_acc *****************************************************************************/ void evel_nic_performance_tx_total_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_total_packets_acc); /**************************************************************************//** * Set the Delta Total Packets Transmitted in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_total_packets_delta *****************************************************************************/ void evel_nic_performance_tx_total_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_total_packets_delta); /**************************************************************************//** * Set the Transmitted Unicast Packets in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_ucast_packets_acc *****************************************************************************/ void evel_nic_performance_tx_ucast_pkt_acc_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_ucast_packets_acc); /**************************************************************************//** * Set the Delta Octets Transmitted in measurement interval * property of the NIC performance. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param nic_performance Pointer to the NIC Use. * @param tx_ucast_packets_delta *****************************************************************************/ void evel_nic_performance_tx_ucast_pkt_delta_set(MEASUREMENT_NIC_PERFORMANCE * const nic_performance, const double tx_ucast_packets_delta); /**************************************************************************//** * Add an additional NIC Use to the specified Measurement event. * * @param measurement Pointer to the measurement. * @param nic_performance Pointer to the NIC Use to add. *****************************************************************************/ void evel_meas_nic_performance_add(EVENT_MEASUREMENT * const measurement, MEASUREMENT_NIC_PERFORMANCE * const nic_performance); /**************************************************************************//** * Add an additional NIC usage record Measurement. * * This function implements the previous API, purely for convenience. * * The ID is null delimited ASCII string. The library takes a copy so the * caller does not have to preserve values after the function returns. * * @param measurement Pointer to the measurement. * @param nic_id ASCIIZ string with the NIC's ID. * @param valset true or false confidence level * @param admin_state Administrative state * @param op_state Operational state * @param receivedPercentDiscard Percentage of discarded packets received; * @param receivedPercentError Percentage of error packets received * @param receivedUtilization Percentage of utilization received * @param speed Speed configured in mbps * @param transmittedPercentDiscard Percentage of discarded packets transmitted * @param transmittedPercentError Percentage of error packets received * @param transmittedUtilization Percentage of utilization transmitted * @param recvd_bcast_packets_acc Recieved broadcast packets * @param recvd_bcast_packets_delta Received delta broadcast packets * @param recvd_discarded_packets_acc Recieved discarded packets * @param recvd_discarded_packets_delta Received discarded delta packets * @param recvd_error_packets_acc Received error packets * @param recvd_error_packets_delta, Received delta error packets * @param recvd_mcast_packets_acc Received multicast packets * @param recvd_mcast_packets_delta Received delta multicast packets * @param recvd_octets_acc Received octets * @param recvd_octets_delta Received delta octets * @param recvd_total_packets_acc Received total packets * @param recvd_total_packets_delta Received delta total packets * @param recvd_ucast_packets_acc Received Unicast packets * @param recvd_ucast_packets_delta Received delta unicast packets * @param tx_bcast_packets_acc Transmitted broadcast packets * @param tx_bcast_packets_delta Transmitted delta broadcast packets * @param tx_discarded_packets_acc Transmitted packets discarded * @param tx_discarded_packets_delta Transmitted delta discarded packets * @param tx_error_packets_acc Transmitted error packets * @param tx_error_packets_delta Transmitted delta error packets * @param tx_mcast_packets_acc Transmitted multicast packets accumulated * @param tx_mcast_packets_delta Transmitted delta multicast packets * @param tx_octets_acc Transmitted octets * @param tx_octets_delta Transmitted delta octets * @param tx_total_packets_acc Transmitted total packets * @param tx_total_packets_delta Transmitted delta total packets * @param tx_ucast_packets_acc Transmitted Unicast packets * @param tx_ucast_packets_delta Transmitted delta Unicast packets *****************************************************************************/ void evel_measurement_nic_performance_add(EVENT_MEASUREMENT * const measurement, char * const nic_id, char * valset, EVEL_OPER_STATE admin_state, EVEL_OPER_STATE op_state, double receivedPercentDiscard, double receivedPercentError, double receivedUtilization, double speed, double transmittedPercentDiscard, double transmittedPercentError, double transmittedUtilization, double recvd_bcast_packets_acc, double recvd_bcast_packets_delta, double recvd_discarded_packets_acc, double recvd_discarded_packets_delta, double recvd_error_packets_acc, double recvd_error_packets_delta, double recvd_mcast_packets_acc, double recvd_mcast_packets_delta, double recvd_octets_acc, double recvd_octets_delta, double recvd_total_packets_acc, double recvd_total_packets_delta, double recvd_ucast_packets_acc, double recvd_ucast_packets_delta, double tx_bcast_packets_acc, double tx_bcast_packets_delta, double tx_discarded_packets_acc, double tx_discarded_packets_delta, double tx_error_packets_acc, double tx_error_packets_delta, double tx_mcast_packets_acc, double tx_mcast_packets_delta, double tx_octets_acc, double tx_octets_delta, double tx_total_packets_acc, double tx_total_packets_delta, double tx_ucast_packets_acc, double tx_ucast_packets_delta); MEASUREMENT_IPMI * evel_measurement_new_ipmi_add( EVENT_MEASUREMENT * measurement); /**************************************************************************//** * Set the System fan exit air flow temperature in Celsius of IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param double *****************************************************************************/ void evel_measurement_ipmi_exitAirTemperature_set(MEASUREMENT_IPMI *ipmi, const double val); /**************************************************************************//** * Set the Front panel temp in Celsius of IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param double *****************************************************************************/ void evel_measurement_ipmi_frontPanelTemperature_set(MEASUREMENT_IPMI *ipmi, const double val); /**************************************************************************//** * Set the Io module temp in Celsius of IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param double *****************************************************************************/ void evel_measurement_ipmi_ioModuleTemperature_set(MEASUREMENT_IPMI *ipmi, const double val); /**************************************************************************//** * Set the Airflow in cubic feet per minute (cfm) of IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param double *****************************************************************************/ void evel_measurement_ipmi_systemAirflow_set(MEASUREMENT_IPMI *ipmi, const double val); /**************************************************************************//** * Add a new Baseboard Temperature Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_BB_TEMPERATURE *evel_measurement_new_base_board_temp_add( MEASUREMENT_IPMI * ipmi, char * id); /**************************************************************************//** * Set the Baseboard temperature in celsius * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param bb_temp Pointer to base board tempeature * @param id Indentifier *****************************************************************************/ void evel_measurement_ipmi_bb_temp_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_BB_TEMPERATURE * bb_temp, const double val); /**************************************************************************//** * Add a new Baseboard Voltage Regulator Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_BB_VOLTAGE *evel_measurement_new_base_board_volt_add( MEASUREMENT_IPMI * ipmi, const char const * id); /**************************************************************************//** * Set the Voltage regulator temperature in celsius * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param bb_volt Pointer to base board Voltage regulator * @param val value *****************************************************************************/ void evel_measurement_ipmi_bb_volt_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_BB_VOLTAGE * bb_volt, const double val); /**************************************************************************//** * Add a new IPMI Battery Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_BATTERY *evel_measurement_new_ipmi_battery_add( MEASUREMENT_IPMI * ipmi, char * id); /**************************************************************************//** * Set the battery type in IPMI Battery * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param ipmiBattery Pointer to IPMI Battery * @param batteryType Batterry Type *****************************************************************************/ void evel_measurement_ipmi_battery_type_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_BATTERY * ipmiBattery, const char * const batteryType); /**************************************************************************//** * Set the Battery voltage level in IPMI Battery * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param ipmiBattery Pointer to IPMI Battery * @param val Battery voltage level *****************************************************************************/ void evel_measurement_ipmi_battery_voltage_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_BATTERY * ipmiBattery, const double val); /**************************************************************************//** * Add a new IPMI Fan Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_FAN *evel_measurement_new_ipmi_fan_add( MEASUREMENT_IPMI * ipmi, char * id); /**************************************************************************//** * Set the Fan Identifier in IPMI FAN * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param ipmiFan Pointer to IPMI FAN * @param val Fan Identifier *****************************************************************************/ void evel_measurement_ipmi_fan_speed_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_FAN * ipmiFan, const double val); /**************************************************************************//** * Add a new IPMI HSBP Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_HSBP *evel_measurement_new_ipmi_hsbp_add( MEASUREMENT_IPMI * ipmi, char * id); /**************************************************************************//** * Set the Hot swap backplane power temperature in celsius in IPMI HSBP * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI * @param ipmiHsbp Pointer to ipmi Hsbp * @param val value *****************************************************************************/ void evel_measurement_ipmi_hsbp_temp_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_HSBP * ipmiHsbp, const double val); /**************************************************************************//** * Add a new IPMI Global Aggregate Temperature Margin Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI. * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_GLOBAL_AGG_TEMP_MARGIN *evel_measurement_new_ipmi_global_temp_add( MEASUREMENT_IPMI * ipmi, const char * const id); /**************************************************************************//** * Set the IPMI Global Aggregate Temperature Margin * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI. * @param ipmig_temp Pointer to IPMI Global Aggregate Temperature Margin * @param val value *****************************************************************************/ void evel_measurement_ipmi_global_temp_margin_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_GLOBAL_AGG_TEMP_MARGIN * ipmig_temp, const double val); /**************************************************************************//** * Add a new IPMI NIC Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_NIC *evel_measurement_new_ipmi_nic_add( MEASUREMENT_IPMI * ipmi, char * id); /**************************************************************************//** * Set the NIC temperature in IPMI NIC * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param ipminic Pointer to IPMI NIC * @param val value *****************************************************************************/ void evel_measurement_ipmi_nic_temp_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_NIC * ipminic, const double val); /**************************************************************************//** * Add a new IPMI Power Supply Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_POWER_SUPPLY *evel_measurement_new_ipmi_power_add( MEASUREMENT_IPMI * ipmi, char * id); /**************************************************************************//** * Set the Power Supply input power in watts * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param ipmipwr Pointer to IPMI Power Supply * @param val Value *****************************************************************************/ void evel_measurement_ipmi_power_inputpwr_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_POWER_SUPPLY * ipmipwr, const double val); /**************************************************************************//** * Set the Current output voltage as a percentage of the design specified level * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param ipmipwr Pointer to IPMI Power Supply * @param val Value *****************************************************************************/ void evel_measurement_ipmi_power_current_op_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_POWER_SUPPLY * ipmipwr, const double val); /**************************************************************************//** * Set the Power supply temperature in Celsius * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param ipmipwr Pointer to IPMI Power Supply * @param val Value *****************************************************************************/ void evel_measurement_ipmi_power_temp_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_POWER_SUPPLY * ipmipwr, const double val); /**************************************************************************//** * Add a new IPMI Processor Array element to IPMI * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param id Indentifier *****************************************************************************/ MEASUREMENT_IPMI_PROCESSOR *evel_measurement_new_ipmi_processor_add( MEASUREMENT_IPMI * ipmi, char * id); /**************************************************************************//** * Set the processor thermal control percent * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param ipmi_processor Pointer to IPMI processor * @param val Value *****************************************************************************/ void evel_measurement_ipmi_processor_theralCtrl_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_PROCESSOR * ipmi_processor, const double val); /**************************************************************************//** * Set the processor DTS thermal margin(Front panel temperature in celsius) * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param ipmi_processor Pointer to IPMI processor * @param val Value *****************************************************************************/ void evel_measurement_ipmi_processor_theralMargin_set(MEASUREMENT_IPMI *ipmi, MEASUREMENT_IPMI_PROCESSOR * ipmi_processor, const double val); /**************************************************************************//** * Add a new Array element to Processor * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param ipmi Pointer to the IPMI Use. * @param ipmi_processor Pointer to IPMI Processor * @param therm_margin Thermal margin *****************************************************************************/ MEASUREMENT_IPMI_PROCESSOR_DIMMAGG_THERM * evel_measurement_ipmi_processor_new_dimmAggThermalMargin_add( MEASUREMENT_IPMI * ipmi, MEASUREMENT_IPMI_PROCESSOR *ipmi_processor, const char * const id, double therm_margin); /**************************************************************************//** * Add a new Array element to loads * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to measurement. *****************************************************************************/ MEASUREMENT_LOAD * evel_measurement_new_loads_add( EVENT_MEASUREMENT * measurement); /**************************************************************************//** * Set the short term value in load * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param load Pointer to load. * @param val value *****************************************************************************/ void evel_measurement_load_shortTerm_set(MEASUREMENT_LOAD *load, const double val); /**************************************************************************//** * Set the MID term value in load * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param load Pointer to load. * @param val value *****************************************************************************/ void evel_measurement_load_midTerm_set(MEASUREMENT_LOAD *load, const double val); /**************************************************************************//** * Set the Long term value in load * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param load Pointer to load. * @param val value *****************************************************************************/ void evel_measurement_load_longTerm_set(MEASUREMENT_LOAD *load, const double val); /**************************************************************************//** * Add a new Array element to Process Stats of measurement * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to measurement. * @param processIdentifier process Identifier *****************************************************************************/ MEASUREMENT_PROCESS_STATS * evel_measurement_new_process_stats_add( EVENT_MEASUREMENT * measurement, const char * const processIdentifier ); /**************************************************************************//** * Set the fork rate (The number of threads created since the last reboot) in * Process Stats * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param process_stat Pointer to process stat. * @param val value *****************************************************************************/ void evel_measurement_process_stat_forkRate_set(MEASUREMENT_PROCESS_STATS *process_stat, const double val); /**************************************************************************//** * Set the The number of processes in a blocked state in Process Stats * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param process_stat Pointer to process stat. * @param val value *****************************************************************************/ void evel_measurement_process_stat_psStateBlocked_set(MEASUREMENT_PROCESS_STATS *process_stat, const double val); /**************************************************************************//** * Set the The number of processes in a paging state in Process Stats * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param process_stat Pointer to process stat. * @param val value *****************************************************************************/ void evel_measurement_process_stat_psStatePaging_set(MEASUREMENT_PROCESS_STATS *process_stat, const double val); /**************************************************************************//** * Set the The number of processes in a running state in Process Stats * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param process_stat Pointer to process stat. * @param val value *****************************************************************************/ void evel_measurement_process_stat_psStateRunning_set(MEASUREMENT_PROCESS_STATS *process_stat, const double val); /**************************************************************************//** * Set the The number of processes in a sleeping state in Process Stats * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param process_stat Pointer to process stat. * @param val value *****************************************************************************/ void evel_measurement_process_stat_psStateSleeping_set(MEASUREMENT_PROCESS_STATS *process_stat, const double val); /**************************************************************************//** * Set the The number of processes in a stopped state in Process Stats * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param process_stat Pointer to process stat. * @param val value *****************************************************************************/ void evel_measurement_process_stat_psStateStopped_set(MEASUREMENT_PROCESS_STATS *process_stat, const double val); /**************************************************************************//** * Set the The number of processes in a zombie state in Process Stats * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param process_stat Pointer to process stat. * @param val value *****************************************************************************/ void evel_measurement_process_stat_psStateZombie_set(MEASUREMENT_PROCESS_STATS *process_stat, const double val); /**************************************************************************//** * Add a new Machine check exception array element to measurement * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param measurement Pointer to measurement. * @param process_id process Identifier *****************************************************************************/ MACHINE_CHECK_EXCEPTION * evel_measurement_new_machine_check_exception_add( EVENT_MEASUREMENT * measurement, const char * const process_id ); /**************************************************************************//** * Set the Total hardware errors that were corrected by the hardware * in Machine check exception * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param machine_check Pointer to Machine check exception. * @param val value *****************************************************************************/ void evel_measurement_machine_check_cor_mem_err_set(MACHINE_CHECK_EXCEPTION *machine_check, const double val); /**************************************************************************//** * Set the Total hardware errors that were corrected over last one hour * in Machine check exception * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param machine_check Pointer to Machine check exception. * @param val value *****************************************************************************/ void evel_measurement_machine_check_cor_mem_err_1hr_set(MACHINE_CHECK_EXCEPTION *machine_check, const double val); /**************************************************************************//** * Set the Total hardware errors that were uncorrected by the hardware * in Machine check exception * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param machine_check Pointer to Machine check exception. * @param val value *****************************************************************************/ void evel_measurement_machine_check_uncor_mem_err_set(MACHINE_CHECK_EXCEPTION *machine_check, const double val); /**************************************************************************//** * Set the Total hardware errors that were uncorrected over last one hour * in Machine check exception * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param machine_check Pointer to Machine check exception. * @param val value *****************************************************************************/ void evel_measurement_machine_check_uncor_mem_err_1hr_set(MACHINE_CHECK_EXCEPTION *machine_check, const double val); /*****************************************************************************/ /*****************************************************************************/ /* */ /* MOBILE_FLOW */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new Mobile Flow event. * * @note The mandatory fields on the Mobile Flow must be supplied to this * factory function and are immutable once set. Optional fields have * explicit setter functions, but again values may only be set once so * that the Mobile Flow has immutable properties. * * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * @param flow_direction * @param gtp_per_flow_metrics * @param ip_protocol_type * @param ip_version * @param other_endpoint_ip_address * @param other_endpoint_port * @param reporting_endpoint_ip_addr * @param reporting_endpoint_port * * @returns pointer to the newly manufactured ::EVENT_MOBILE_FLOW. If the * event is not used (i.e. posted) it must be released using * ::evel_free_mobile_flow. * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_MOBILE_FLOW * evel_new_mobile_flow( const char* ev_name, const char *ev_id, const char * const flow_direction, MOBILE_GTP_PER_FLOW_METRICS * gtp_per_flow_metrics, const char * const ip_protocol_type, const char * const ip_version, const char * const other_endpoint_ip_address, int other_endpoint_port, const char * const reporting_endpoint_ip_addr, int reporting_endpoint_port); /**************************************************************************//** * Add an additional value name/value pair to the Mobile flow. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param fault Pointer to the Mobile flow. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_flow_addl_field_add(EVENT_MOBILE_FLOW * const event, char * name, char * value); /**************************************************************************//** * Free a Mobile Flow. * * Free off the Mobile Flow supplied. Will free all the contained allocated * memory. * * @note It does not free the Mobile Flow itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_mobile_flow(EVENT_MOBILE_FLOW * event); /**************************************************************************//** * Set the Event Type property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_flow_type_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const type); /**************************************************************************//** * Set the Application Type property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param type The Application Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_flow_app_type_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const type); /**************************************************************************//** * Set the Application Protocol Type property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param type The Application Protocol Type to be set. ASCIIZ string. * The caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_mobile_flow_app_prot_type_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const type); /**************************************************************************//** * Set the Application Protocol Version property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param version The Application Protocol Version to be set. ASCIIZ * string. The caller does not need to preserve the value * once the function returns. *****************************************************************************/ void evel_mobile_flow_app_prot_ver_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const version); /**************************************************************************//** * Set the CID property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param cid The CID to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_cid_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const cid); /**************************************************************************//** * Set the Connection Type property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param type The Connection Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_flow_con_type_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const type); /**************************************************************************//** * Set the ECGI property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param ecgi The ECGI to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_ecgi_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const ecgi); /**************************************************************************//** * Set the GTP Protocol Type property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param type The GTP Protocol Type to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_mobile_flow_gtp_prot_type_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const type); /**************************************************************************//** * Set the GTP Protocol Version property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param version The GTP Protocol Version to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_mobile_flow_gtp_prot_ver_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const version); /**************************************************************************//** * Set the HTTP Header property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param header The HTTP header to be set. ASCIIZ string. The caller does * not need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_http_header_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const header); /**************************************************************************//** * Set the IMEI property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param imei The IMEI to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_imei_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const imei); /**************************************************************************//** * Set the IMSI property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param imsi The IMSI to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_imsi_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const imsi); /**************************************************************************//** * Set the LAC property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param lac The LAC to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_lac_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const lac); /**************************************************************************//** * Set the MCC property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param mcc The MCC to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_mcc_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const mcc); /**************************************************************************//** * Set the MNC property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param mnc The MNC to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_mnc_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const mnc); /**************************************************************************//** * Set the MSISDN property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param msisdn The MSISDN to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_msisdn_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const msisdn); /**************************************************************************//** * Set the Other Functional Role property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param role The Other Functional Role to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_mobile_flow_other_func_role_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const role); /**************************************************************************//** * Set the RAC property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param rac The RAC to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_rac_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const rac); /**************************************************************************//** * Set the Radio Access Technology property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param tech The Radio Access Technology to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_mobile_flow_radio_acc_tech_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const tech); /**************************************************************************//** * Set the SAC property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param sac The SAC to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_sac_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const sac); /**************************************************************************//** * Set the Sampling Algorithm property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param algorithm The Sampling Algorithm to be set. *****************************************************************************/ void evel_mobile_flow_samp_alg_set(EVENT_MOBILE_FLOW * mobile_flow, int algorithm); /**************************************************************************//** * Set the TAC property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param tac The TAC to be set. ASCIIZ string. The caller does not * need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_tac_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const tac); /**************************************************************************//** * Set the Tunnel ID property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param tunnel_id The Tunnel ID to be set. ASCIIZ string. The caller does * not need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_tunnel_id_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const tunnel_id); /**************************************************************************//** * Set the VLAN ID property of the Mobile Flow. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param mobile_flow Pointer to the Mobile Flow. * @param vlan_id The VLAN ID to be set. ASCIIZ string. The caller does * not need to preserve the value once the function returns. *****************************************************************************/ void evel_mobile_flow_vlan_id_set(EVENT_MOBILE_FLOW * mobile_flow, const char * const vlan_id); /**************************************************************************//** * Create a new Mobile GTP Per Flow Metrics. * * @note The mandatory fields on the Mobile GTP Per Flow Metrics must be * supplied to this factory function and are immutable once set. * Optional fields have explicit setter functions, but again values * may only be set once so that the Mobile GTP Per Flow Metrics has * immutable properties. * * @param avg_bit_error_rate * @param avg_packet_delay_variation * @param avg_packet_latency * @param avg_receive_throughput * @param avg_transmit_throughput * @param flow_activation_epoch * @param flow_activation_microsec * @param flow_deactivation_epoch * @param flow_deactivation_microsec * @param flow_deactivation_time * @param flow_status * @param max_packet_delay_variation * @param num_activation_failures * @param num_bit_errors * @param num_bytes_received * @param num_bytes_transmitted * @param num_dropped_packets * @param num_l7_bytes_received * @param num_l7_bytes_transmitted * @param num_lost_packets * @param num_out_of_order_packets * @param num_packet_errors * @param num_packets_received_excl_retrans * @param num_packets_received_incl_retrans * @param num_packets_transmitted_incl_retrans * @param num_retries * @param num_timeouts * @param num_tunneled_l7_bytes_received * @param round_trip_time * @param time_to_first_byte * * @returns pointer to the newly manufactured ::MOBILE_GTP_PER_FLOW_METRICS. * If the structure is not used it must be released using * ::evel_free_mobile_gtp_flow_metrics. * @retval NULL Failed to create the event. *****************************************************************************/ MOBILE_GTP_PER_FLOW_METRICS * evel_new_mobile_gtp_flow_metrics( double avg_bit_error_rate, double avg_packet_delay_variation, int avg_packet_latency, int avg_receive_throughput, int avg_transmit_throughput, int flow_activation_epoch, int flow_activation_microsec, int flow_deactivation_epoch, int flow_deactivation_microsec, time_t flow_deactivation_time, const char * const flow_status, int max_packet_delay_variation, int num_activation_failures, int num_bit_errors, int num_bytes_received, int num_bytes_transmitted, int num_dropped_packets, int num_l7_bytes_received, int num_l7_bytes_transmitted, int num_lost_packets, int num_out_of_order_packets, int num_packet_errors, int num_packets_received_excl_retrans, int num_packets_received_incl_retrans, int num_packets_transmitted_incl_retrans, int num_retries, int num_timeouts, int num_tunneled_l7_bytes_received, int round_trip_time, int time_to_first_byte); /**************************************************************************//** * Free a Mobile GTP Per Flow Metrics. * * Free off the Mobile GTP Per Flow Metrics supplied. Will free all the * contained allocated memory. * * @note It does not free the Mobile GTP Per Flow Metrics itself, since that * may be part of a larger structure. *****************************************************************************/ void evel_free_mobile_gtp_flow_metrics(MOBILE_GTP_PER_FLOW_METRICS * metrics); /**************************************************************************//** * Set the Duration of Connection Failed Status property of the Mobile GTP Per * Flow Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param duration The Duration of Connection Failed Status to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_dur_con_fail_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, int duration); /**************************************************************************//** * Set the Duration of Tunnel Failed Status property of the Mobile GTP Per Flow * Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param duration The Duration of Tunnel Failed Status to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_dur_tun_fail_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, int duration); /**************************************************************************//** * Set the Activated By property of the Mobile GTP Per Flow metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param act_by The Activated By to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_gtp_metrics_act_by_set(MOBILE_GTP_PER_FLOW_METRICS * metrics, const char * const act_by); /**************************************************************************//** * Set the Activation Time property of the Mobile GTP Per Flow metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param act_time The Activation Time to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_gtp_metrics_act_time_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, time_t act_time); /**************************************************************************//** * Set the Deactivated By property of the Mobile GTP Per Flow metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param deact_by The Deactivated By to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_gtp_metrics_deact_by_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, const char * const deact_by); /**************************************************************************//** * Set the GTP Connection Status property of the Mobile GTP Per Flow metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param status The GTP Connection Status to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_mobile_gtp_metrics_con_status_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, const char * const status); /**************************************************************************//** * Set the GTP Tunnel Status property of the Mobile GTP Per Flow metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param status The GTP Tunnel Status to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_mobile_gtp_metrics_tun_status_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, const char * const status); /**************************************************************************//** * Set the Large Packet Round-Trip Time property of the Mobile GTP Per Flow * Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param rtt The Large Packet Round-Trip Time to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_large_pkt_rtt_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, int rtt); /**************************************************************************//** * Set the Large Packet Threshold property of the Mobile GTP Per Flow Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param threshold The Large Packet Threshold to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_large_pkt_thresh_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, double threshold); /**************************************************************************//** * Set the Max Receive Bit Rate property of the Mobile GTP Per Flow Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param rate The Max Receive Bit Rate to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_max_rcv_bit_rate_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, int rate); /**************************************************************************//** * Set the Max Transmit Bit Rate property of the Mobile GTP Per Flow Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param rate The Max Transmit Bit Rate to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_max_trx_bit_rate_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, int rate); /**************************************************************************//** * Add an IP Tos count list value name/value pair to the Mobile flow. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param fault Pointer to the Mobile GTP Per Flow Metrics. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_gtp_metrics_ip_tos_count_list_add( MOBILE_GTP_PER_FLOW_METRICS * metrics, const char * const name, const char * const value); /**************************************************************************//** * Add an QCI Cos count list value name/value pair to the Mobile flow. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param fault Pointer to the Mobile GTP Per Flow Metrics. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_gtp_metrics_qci_cos_count_list_add( MOBILE_GTP_PER_FLOW_METRICS * metrics, const EVEL_QCI_COS_TYPES qci_cos, const char * const value); /**************************************************************************//** * Add an TCP Flag count list value name/value pair to the Mobile flow. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param fault Pointer to the Mobile GTP Per Flow Metrics. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_mobile_gtp_metrics_tcp_flag_count_list_add( MOBILE_GTP_PER_FLOW_METRICS * metrics, const EVEL_TCP_FLAGS tcp_flag, const char * const value); /**************************************************************************//** * Set the Number of GTP Echo Failures property of the Mobile GTP Per Flow * Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param num The Number of GTP Echo Failures to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_num_echo_fail_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, int num); /**************************************************************************//** * Set the Number of GTP Tunnel Errors property of the Mobile GTP Per Flow * Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param num The Number of GTP Tunnel Errors to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_num_tun_fail_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, int num); /**************************************************************************//** * Set the Number of HTTP Errors property of the Mobile GTP Per Flow Metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param num The Number of HTTP Errors to be set. *****************************************************************************/ void evel_mobile_gtp_metrics_num_http_errors_set( MOBILE_GTP_PER_FLOW_METRICS * metrics, int num); /**************************************************************************//** * Add a IP Tos count list to the metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param name Key of the hashmap * @param value Value of the hashmap. *****************************************************************************/ void evel_mobile_ip_tos_count_list_add( MOBILE_GTP_PER_FLOW_METRICS * metrics, const char * const name, const char * const value); /**************************************************************************//** * Add TCP Flag count list to the metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param name Key of the hashmap * @param value Value of the hashmap. *****************************************************************************/ void evel_mobile_tcp_flag_count_list_add( MOBILE_GTP_PER_FLOW_METRICS * metrics, const char * const name, const char * const value); /**************************************************************************//** * Add a QCI cos count list to the metrics. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param metrics Pointer to the Mobile GTP Per Flow Metrics. * @param name Key of the hashmap * @param value Value of the hashmap. *****************************************************************************/ void evel_mobile_qci_cos_count_list_add( MOBILE_GTP_PER_FLOW_METRICS * metrics, const char * const name, const char * const value); /*****************************************************************************/ /*****************************************************************************/ /* */ /* SIGNALING */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new Signaling event. * * @note The mandatory fields on the Signaling must be supplied to * this factory function and are immutable once set. Optional fields * have explicit setter functions, but again values may only be set * once so that the event has immutable properties. * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * @param vendor_name The vendor id to encode in the event vnf field. * @param module The module to encode in the event. * @param vnfname The Virtual network function to encode in the event. * @returns pointer to the newly manufactured ::EVENT_SIGNALING. If the event * is not used (i.e. posted) it must be released using * ::evel_free_signaling. * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_SIGNALING * evel_new_signaling(const char* ev_name, const char *ev_id, const char * const vendor_name, const char * const correlator, const char * const local_ip_address, const char * const local_port, const char * const remote_ip_address, const char * const remote_port); /**************************************************************************//** * Free a Signaling event. * * Free off the event supplied. Will free all the contained allocated memory. * * @note It does not free the event itself, since that may be part of a larger * structure. *****************************************************************************/ void evel_free_signaling(EVENT_SIGNALING * const event); /**************************************************************************//** * Set the Event Type property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_signaling_type_set(EVENT_SIGNALING * const event, const char * const type); /**************************************************************************//** * Add an additional value name/value pair to the SIP signaling. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param event Pointer to the fault. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_signaling_addl_info_add(EVENT_SIGNALING * event, char * name, char * value); /**************************************************************************//** * Set the Correlator property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param correlator The correlator to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_signaling_correlator_set(EVENT_SIGNALING * const event, const char * const correlator); /**************************************************************************//** * Set the Local Ip Address property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param local_ip_address * The Local Ip Address to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_signaling_local_ip_address_set(EVENT_SIGNALING * const event, const char * const local_ip_address); /**************************************************************************//** * Set the Local Port property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param local_port The Local Port to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_signaling_local_port_set(EVENT_SIGNALING * const event, const char * const local_port); /**************************************************************************//** * Set the Remote Ip Address property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param remote_ip_address * The Remote Ip Address to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_signaling_remote_ip_address_set(EVENT_SIGNALING * const event, const char * const remote_ip_address); /**************************************************************************//** * Set the Remote Port property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param remote_port The Remote Port to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_signaling_remote_port_set(EVENT_SIGNALING * const event, const char * const remote_port); /**************************************************************************//** * Set the Vendor module property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param modulename The module name to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_signaling_vnfmodule_name_set(EVENT_SIGNALING * const event, const char * const module_name); /**************************************************************************//** * Set the Vendor module property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param vnfname The Virtual Network function to be set. ASCIIZ string. * The caller does not need to preserve the value once * the function returns. *****************************************************************************/ void evel_signaling_vnfname_set(EVENT_SIGNALING * const event, const char * const vnfname); /**************************************************************************//** * Set the Compressed SIP property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param compressed_sip * The Compressed SIP to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_signaling_compressed_sip_set(EVENT_SIGNALING * const event, const char * const compressed_sip); /**************************************************************************//** * Set the Summary SIP property of the Signaling event. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param event Pointer to the Signaling event. * @param summary_sip The Summary SIP to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_signaling_summary_sip_set(EVENT_SIGNALING * const event, const char * const summary_sip); /*****************************************************************************/ /*****************************************************************************/ /* */ /* STATE CHANGE */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new State Change event. * * @note The mandatory fields on the Syslog must be supplied to this factory * function and are immutable once set. Optional fields have explicit * setter functions, but again values may only be set once so that the * Syslog has immutable properties. * * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * @param new_state The new state of the reporting entity. * @param old_state The old state of the reporting entity. * @param interface The card or port name of the reporting entity. * * @returns pointer to the newly manufactured ::EVENT_STATE_CHANGE. If the * event is not used it must be released using * ::evel_free_state_change * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_STATE_CHANGE * evel_new_state_change(const char* ev_name, const char *ev_id, const EVEL_ENTITY_STATE new_state, const EVEL_ENTITY_STATE old_state, const char * const interface); /**************************************************************************//** * Free a State Change. * * Free off the State Change supplied. Will free all the contained allocated * memory. * * @note It does not free the State Change itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_state_change(EVENT_STATE_CHANGE * const state_change); /**************************************************************************//** * Set the Event Type property of the State Change. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param state_change Pointer to the ::EVENT_STATE_CHANGE. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_state_change_type_set(EVENT_STATE_CHANGE * const state_change, const char * const type); /**************************************************************************//** * Add an additional field name/value pair to the State Change. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param state_change Pointer to the ::EVENT_STATE_CHANGE. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_state_change_addl_field_add(EVENT_STATE_CHANGE * const state_change, const char * const name, const char * const value); /*****************************************************************************/ /*****************************************************************************/ /* */ /* Notification */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new Notification event. * * @note The mandatory fields on the Syslog must be supplied to this factory * function and are immutable once set. Optional fields have explicit * setter functions, but again values may only be set once so that the * Syslog has immutable properties. * * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * @param new_state The new state of the reporting entity. * @param old_state The old state of the reporting entity. * @param interface The card or port name of the reporting entity. * * @returns pointer to the newly manufactured ::EVENT_NOTIFICATION. If the * event is not used it must be released using * ::evel_free_notification * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_NOTIFICATION * evel_new_notification( const char* ev_name, const char *ev_id, const char * const changeIdentifier, const char * const changeType); /**************************************************************************//** * Free a Notification. * * * Free off the Notification supplied. Will free all the contained allocated * memory. * * @note It does not free the Notification itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_notification(EVENT_NOTIFICATION * const notification); /**************************************************************************//** * Set the Event Type property of the Notification. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param notification Pointer to the ::EVENT_NOTIFICATION. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_notification_type_set(EVENT_NOTIFICATION * const notification, const char * const type); /**************************************************************************//** * Add an additional field name/value pair to the Notification. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param notification Pointer to the ::EVENT_NOTIFICATION. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_notification_addl_field_add(EVENT_NOTIFICATION * const notification, const char * const name, const char * const value); /**************************************************************************//** * Convert a ::EVEL_OPTION_STATE to it's string form for JSON encoding. * * @param state The entity state to encode. * * @returns the corresponding string *****************************************************************************/ char * evel_entity_opt_state (EVEL_OPTION_STATE * const state); /**************************************************************************//** * Initialize an ::EVEL_OPTION_STATE to a not-set state. * * @param option Pointer to the ::EVEL_OPTION_INT. *****************************************************************************/ void evel_init_option_state(EVEL_OPTION_STATE * const option); /**************************************************************************//** * Set the value of an ::EVEL_OPTION_STATE. * * @param option Pointer to the ::EVEL_OPTION_STATE. * @param value The value to set. * @param description Description to be used in logging. *****************************************************************************/ void evel_set_option_state(EVEL_OPTION_STATE * const option, const int value, const char * const description); /**************************************************************************//** * Set the Identifier for a contact related to the change of notification event * * @param notification Pointer to the ::EVENT_NOTIFICATION. * @param changeContact ASCIIZ string with the attribute's value *****************************************************************************/ void evel_notification_changeContact_set( EVENT_NOTIFICATION * const notification, const char * const changeContact); /**************************************************************************//** * Set the Card or port name of the entity that changed state of notification * * @param notification Pointer to the ::EVENT_NOTIFICATION. * @param state_interface ASCIIZ string with the attribute's value *****************************************************************************/ void evel_notification_state_interface_set( EVENT_NOTIFICATION * const notification, const char * const state_interface); /**************************************************************************//** * Set the New state of the entity of notification event * * @param notification Pointer to the ::EVENT_NOTIFICATION. * @param state Enter value of EVEL_ENTITY_STATE *****************************************************************************/ void evel_notification_new_state_set( EVENT_NOTIFICATION * const notification, const EVEL_ENTITY_STATE state); /**************************************************************************//** * Set the Old state of entity of notification event * * @param notification Pointer to the ::EVENT_NOTIFICATION. * @param state Enter value of EVEL_ENTITY_STATE *****************************************************************************/ void evel_notification_old_state_set( EVENT_NOTIFICATION * const notification, const EVEL_ENTITY_STATE state); /**************************************************************************//** * Add a new named hashmap to notification event * * @param notification Pointer to the ::EVENT_NOTIFICATION. * @param name Name of the hashmap *****************************************************************************/ HASHTABLE_T * evel_notification_add_new_named_hashmap( EVENT_NOTIFICATION * const notification, const char * const name); /**************************************************************************//** * Set the name and value for the named hashmap of notification event * * @param ht Pointer to named hashmap * @param name Key name * @param value value corresponding to key *****************************************************************************/ void evel_notification_named_hashmap_set( HASHTABLE_T * const ht, const char * const name, const char * const value); /*****************************************************************************/ /*****************************************************************************/ /* */ /* SYSLOG */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new syslog event. * * @note The mandatory fields on the Syslog must be supplied to this factory * function and are immutable once set. Optional fields have explicit * setter functions, but again values may only be set once so that the * Syslog has immutable properties. * * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * @param event_source_type * @param syslog_msg * @param syslog_tag * @param version * * @returns pointer to the newly manufactured ::EVENT_SYSLOG. If the event is * not used it must be released using ::evel_free_syslog * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_SYSLOG * evel_new_syslog(const char* ev_name, const char *ev_id, EVEL_SOURCE_TYPES event_source_type, const char * const syslog_msg, const char * const syslog_tag); /**************************************************************************//** * Set the Event Type property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the syslog. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_syslog_type_set(EVENT_SYSLOG * syslog, const char * const type); /**************************************************************************//** * Add an additional value name/value pair to the Syslog. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param syslog Pointer to the syslog. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_syslog_addl_fields_set(EVENT_SYSLOG * syslog, const char * const name, const char * const value); /**************************************************************************//** * Free a Syslog. * * Free off the Syslog supplied. Will free all the contained allocated memory. * * @note It does not free the Syslog itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_syslog(EVENT_SYSLOG * event); /**************************************************************************//** * Add an additional field name/value pair to the Syslog. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param syslog Pointer to the syslog. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_syslog_addl_field_add(EVENT_SYSLOG * syslog, const char * name, const char * value); /**************************************************************************//** * Set the Event Source Host property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param host The Event Source Host to be set. ASCIIZ string. The * caller does not need to preserve the value once the * function returns. *****************************************************************************/ void evel_syslog_event_source_host_set(EVENT_SYSLOG * syslog, const char * const host); /**************************************************************************//** * Set the Syslog Facility property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param facility The Syslog Facility to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_syslog_facility_set(EVENT_SYSLOG * syslog, EVEL_SYSLOG_FACILITIES facility); /**************************************************************************//** * Set the priority of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param priority The Syslog priority to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_syslog_priority_set(EVENT_SYSLOG * syslog, const int priority); /**************************************************************************//** * Set the Process property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param proc The Process to be set. ASCIIZ string. The caller does * not need to preserve the value once the function returns. *****************************************************************************/ void evel_syslog_proc_set(EVENT_SYSLOG * syslog, const char * const proc); /**************************************************************************//** * Set the timestamp parsed from non-VES syslog message * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param time_stamp The timestamp to be set. ASCIIZ string. The caller does * not need to preserve the value once the function returns. *****************************************************************************/ void evel_syslog_timeStamp_set(EVENT_SYSLOG * syslog, const char * const time_stamp); /**************************************************************************//** * Set the hostname parsed from non-VES syslog message * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param msg_host The hostname to be set. ASCIIZ string. The caller does * not need to preserve the value once the function returns. *****************************************************************************/ void evel_syslog_MsgHost_set(EVENT_SYSLOG * syslog, const char * const msg_host); /**************************************************************************//** * Set the Process ID property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param proc_id The Process ID to be set. *****************************************************************************/ void evel_syslog_proc_id_set(EVENT_SYSLOG * syslog, int proc_id); /**************************************************************************//** * Set the Version property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param version The Version to be set. *****************************************************************************/ void evel_syslog_version_set(EVENT_SYSLOG * syslog, int version); /**************************************************************************//** * Set the Structured Data property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param s_data The Structured Data to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_syslog_s_data_set(EVENT_SYSLOG * syslog, const char * const s_data); /**************************************************************************//** * Set the Structured SDID property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param sdid The Structured Data to be set. ASCIIZ string. name@number * Caller does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_syslog_sdid_set(EVENT_SYSLOG * syslog, const char * const sdid); /**************************************************************************//** * Set the Structured Severity property of the Syslog. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param syslog Pointer to the Syslog. * @param sdid The Structured Data to be set. ASCIIZ string. * Caller does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_syslog_severity_set(EVENT_SYSLOG * syslog, const char * const severty); /*****************************************************************************/ /*****************************************************************************/ /* */ /* OTHER */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Create a new other event. * * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * * @returns pointer to the newly manufactured ::EVENT_OTHER. If the event is * not used it must be released using ::evel_free_other. * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_OTHER * evel_new_other(const char* ev_name, const char *ev_id); /**************************************************************************//** * Free an Other. * * Free off the Other supplied. Will free all the contained allocated memory. * * @note It does not free the Other itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_other(EVENT_OTHER * event); /**************************************************************************//** * Set the Event Type property of the Other. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param other Pointer to the Other. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_other_type_set(EVENT_OTHER * other, const char * const type); /**************************************************************************//** * Add a value name/value pair to the Other. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param other Pointer to the Other. * @param name ASCIIZ string with the attribute's name. * @param value ASCIIZ string with the attribute's value. *****************************************************************************/ void evel_other_field_add_hashmap(EVENT_OTHER * other, char * name, char *value); /**************************************************************************//** * Add a new named hashmap to other event * * @param notification Pointer to other * @param name Name of the hashmap *****************************************************************************/ HASHTABLE_T * evel_other_add_new_hashmap_to_hmarray(EVENT_OTHER * const other, const char * const name); /**************************************************************************//** * Add a value name/value pair to named hashmap of Other. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param other Pointer to the Other. * @param name ASCIIZ string with the attribute's name. * @param value ASCIIZ string with the attribute's value. *****************************************************************************/ void evel_other_set_hashmap_in_hmarray( HASHTABLE_T * const ht, const char * const name, const char * const value); /*****************************************************************************/ /*****************************************************************************/ /* */ /* THROTTLING */ /* */ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************************//** * Return the current measurement interval provided by the Event Listener. * * @returns The current measurement interval * @retval EVEL_MEASUREMENT_INTERVAL_UKNOWN (0) - interval has not been * specified *****************************************************************************/ int evel_get_measurement_interval(); /*****************************************************************************/ /* Supported Report version. */ /*****************************************************************************/ #define EVEL_VOICEQ_MAJOR_VERSION 4 #define EVEL_VOICEQ_MINOR_VERSION 0 /**************************************************************************//** * End of Call Voice Quality Metrices * JSON equivalent field: endOfCallVqmSummaries *****************************************************************************/ typedef struct end_of_call_vqm_summaries { /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ char* adjacencyName; char* endpointDescription; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_INT localRtpOctetsLost; EVEL_OPTION_INT endpointRtpOctetsDiscarded; EVEL_OPTION_INT endpointRtpOctetsReceived; EVEL_OPTION_INT endpointRtpOctetsSent; EVEL_OPTION_INT endpointRtpPacketsDiscarded; EVEL_OPTION_INT endpointRtpPacketsReceived; EVEL_OPTION_INT endpointRtpPacketsSent; EVEL_OPTION_INT localMaxJitterBufferDelay; EVEL_OPTION_INT localRtpOctetsDiscarded; EVEL_OPTION_INT localRtpOctetsReceived; EVEL_OPTION_INT localRtpOctetsSent; EVEL_OPTION_INT localRtpPacketsDiscarded; EVEL_OPTION_INT localRtpPacketsReceived; EVEL_OPTION_INT localRtpPacketsSent; EVEL_OPTION_INT mosCqe; EVEL_OPTION_INT localRtpPacketsLost; EVEL_OPTION_INT packetLossPercent; EVEL_OPTION_INT rFactor; EVEL_OPTION_INT roundTripDelay; EVEL_OPTION_INT endpointAverageJitter; EVEL_OPTION_INT endpointMaxJitter; EVEL_OPTION_INT endpointRtpOctetsLost; EVEL_OPTION_INT endpointRtpPacketsLost; EVEL_OPTION_INT localAverageJitter; EVEL_OPTION_INT localAverageJitterBufferDelay; EVEL_OPTION_INT localMaxJitter; EVEL_OPTION_INT oneWayDelay; } END_OF_CALL_VOICE_QUALITY_METRICS; /**************************************************************************//** * Voice QUality. * JSON equivalent field: voiceQualityFields *****************************************************************************/ typedef struct event_voiceQuality { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ char *calleeSideCodec; char *callerSideCodec; char *correlator; char *midCallRtcp; VENDOR_VNFNAME_FIELD vendorVnfNameFields; END_OF_CALL_VOICE_QUALITY_METRICS *endOfCallVqmSummaries; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EVEL_OPTION_STRING phoneNumber; HASHTABLE_T * additionalInformation; } EVENT_VOICE_QUALITY; /**************************************************************************//** * Create a new voice quality event. * * @note The mandatory fields on the Voice Quality must be supplied to this * factory function and are immutable once set. Optional fields have * explicit setter functions, but again values may only be set once * so that the Voice Quality has immutable properties. * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * @param calleeSideCodec Callee codec for the call. * @param callerSideCodec Caller codec for the call. * @param correlator Constant across all events on this call. * @param midCallRtcp Base64 encoding of the binary RTCP data * (excluding Eth/IP/UDP headers). * @param vendorVnfNameFields Vendor, VNF and VfModule names. * @returns pointer to the newly manufactured ::EVENT_VOICE_QUALITY. If the * event is not used (i.e. posted) it must be released using ::evel_free_voice_quality. * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_VOICE_QUALITY * evel_new_voice_quality(const char* ev_name, const char *ev_id, const char * const calleeSideCodec, const char * const callerSideCodec, const char * const correlator, const char * const midCallRtcp, const char * const vendorVnfNameFields); /**************************************************************************//** * Set the Callee side codec for Call for domain Voice Quality * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param voiceQuality Pointer to the Voice Quality Event. * @param calleeCodecForCall The Callee Side Codec to be set. ASCIIZ * string. The caller does not need to * preserve the value once the function * returns. *****************************************************************************/ void evel_voice_quality_callee_codec_set(EVENT_VOICE_QUALITY * voiceQuality, const char * const calleeCodecForCall); /**************************************************************************//** * Set the Caller side codec for Call for domain Voice Quality * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param voiceQuality Pointer to the Voice Quality Event. * @param callerCodecForCall The Caller Side Codec to be set. ASCIIZ * string. The caller does not need to * preserve the value once the function * returns. *****************************************************************************/ void evel_voice_quality_caller_codec_set(EVENT_VOICE_QUALITY * voiceQuality, const char * const callerCodecForCall); /**************************************************************************//** * Set the correlator for domain Voice Quality * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param voiceQuality Pointer to the Voice Quality Event. * @param correlator The correlator value to be set. ASCIIZ * string. The caller does not need to * preserve the value once the function * returns. *****************************************************************************/ void evel_voice_quality_correlator_set(EVENT_VOICE_QUALITY * voiceQuality, const char * const vCorrelator); /**************************************************************************//** * Set the RTCP Call Data for domain Voice Quality * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param voiceQuality Pointer to the Voice Quality Event. * @param rtcpCallData The RTCP Call Data to be set. ASCIIZ * string. The caller does not need to * preserve the value once the function * returns. *****************************************************************************/ void evel_voice_quality_rtcp_data_set(EVENT_VOICE_QUALITY * voiceQuality, const char * const rtcpCallData); /**************************************************************************//** * Set the Vendor VNF Name fields for domain Voice Quality * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param voiceQuality Pointer to the Voice Quality Event. * @param modulename The Vendor, VNF and VfModule names to be set. * ASCIIZ string. The caller does not need to * preserve the value once the function * returns. *****************************************************************************/ void evel_voice_quality_vnfmodule_name_set(EVENT_VOICE_QUALITY * voiceQuality, const char * const module_name); /**************************************************************************//** * Set the Vendor VNF Name fields for domain Voice Quality * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param voiceQuality Pointer to the Voice Quality Event. * @param modulename The Vendor, VNF and VfModule names to be set. * ASCIIZ string. The caller does not need to * preserve the value once the function * returns. *****************************************************************************/ void evel_voice_quality_vnfname_set(EVENT_VOICE_QUALITY * voiceQuality, const char * const vnfname); /**************************************************************************//** * Set the Phone Number associated with the Correlator for domain Voice Quality * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param voiceQuality Pointer to the Voice Quality Event. * @param calleeCodecForCall The Phone Number to be set. ASCIIZ * string. The caller does not need to * preserve the value once the function * returns. *****************************************************************************/ void evel_voice_quality_phone_number_set(EVENT_VOICE_QUALITY * voiceQuality, const char * const phoneNumber); /**************************************************************************//** * Add an End of Call Voice Quality Metrices * The adjacencyName and endpointDescription is null delimited ASCII string. * The library takes a copy so the caller does not have to preserve values * after the function returns. * * @param voiceQuality Pointer to the measurement. * @param adjacencyName Adjacency name * @param endpointDescription Enumeration: ‘Caller’, ‘Callee’. * @param localRtpOctetsLost localRtpOctetsLost * @param endpointRtpOctetsDiscarded Endpoint RTP octets discarded. * @param endpointRtpOctetsReceived Endpoint RTP octets received. * @param endpointRtpOctetsSent Endpoint RTP octets sent * @param endpointRtpPacketsDiscarded Endpoint RTP packets discarded. * @param endpointRtpPacketsReceived Endpoint RTP packets received. * @param endpointRtpPacketsSent Endpoint RTP packets sent. * @param localMaxJitterBufferDelay Local max jitter buffer Delay. * @param localRtpOctetsDiscarded Local RTP octets discarded. * @param localRtpOctetsReceived Local RTP octets received. * @param localRtpOctetsSent Local RTP octets sent. * @param localRtpPacketsDiscarded Local RTP packets discarded. * @param localRtpPacketsReceived Local RTP packets received. * @param localRtpPacketsSent Local RTP packets sent. * @param mosCqe Decimal range from 1 to 5 * (1 decimal place) * @param localRtpPacketsLost Local RTP Packets lost * @param packetLossPercent Calculated percentage packet loss * @param rFactor rFactor from 0 to 100 * @param roundTripDelay Round trip delay in milliseconds *****************************************************************************/ void evel_voice_quality_end_metrics_add(EVENT_VOICE_QUALITY * voiceQuality, const char * adjacencyName, EVEL_SERVICE_ENDPOINT_DESC endpointDescription, int localRtpOctetsLost, int endpointRtpOctetsDiscarded, int endpointRtpOctetsReceived, int endpointRtpOctetsSent, int endpointRtpPacketsDiscarded, int endpointRtpPacketsReceived, int endpointRtpPacketsSent, int localMaxJitterBufferDelay, int localRtpOctetsDiscarded, int localRtpOctetsReceived, int localRtpOctetsSent, int localRtpPacketsDiscarded, int localRtpPacketsReceived, int localRtpPacketsSent, int mosCqe, int localRtpPacketsLost, int packetLossPercent, int rFactor, int roundTripDelay, int endpointAverageJitter, int endpointMaxJitter, int endpointRtpOctetsLost, int endpointRtpPacketsLost, int localAverageJitter, int localAverageJitterBufferDelay, int localMaxJitter, int oneWayDelay); /**************************************************************************//** * Free a Voice Quality. * * Free off the Voce Quality supplied. Will free all the contained allocated * memory. * * @note It does not free the Voice Quality itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_voice_quality(EVENT_VOICE_QUALITY * voiceQuality); /**************************************************************************//** * Add an additional value name/value pair to the Voice Quality. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param fault Pointer to the fault. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_voice_quality_addl_info_add(EVENT_VOICE_QUALITY * voiceQuality, char * name, char * value); /*****************************************************************************/ /*****************************************************************************/ /* */ /* THRESHOLD CROSSING ALERT */ /* */ /*****************************************************************************/ /*****************************************************************************/ typedef enum evel_event_action { EVEL_EVENT_ACTION_SET, EVEL_EVENT_ACTION_CONTINUE, EVEL_EVENT_ACTION_CLEAR, EVEL_MAX_EVENT_ACTION }EVEL_EVENT_ACTION; typedef enum evel_alert_type { EVEL_CARD_ANOMALY, EVEL_ELEMENT_ANOMALY, EVEL_INTERFACE_ANOMALY, EVEL_SERVICE_ANOMALY, EVEL_MAX_ANOMALY }EVEL_ALERT_TYPE; typedef struct perf_counter { char * criticality; char * thresholdCrossed; HASHTABLE_T *hashmap; }PERF_COUNTER; /*****************************************************************************/ /* Supported Threshold Crossing version. */ /*****************************************************************************/ #define EVEL_THRESHOLD_CROSS_MAJOR_VERSION 4 #define EVEL_THRESHOLD_CROSS_MINOR_VERSION 0 /**************************************************************************//** * Threshold Crossing. * JSON equivalent field: Threshold Cross Fields *****************************************************************************/ typedef struct event_threshold_cross { /***************************************************************************/ /* Header and version */ /***************************************************************************/ EVENT_HEADER header; int major_version; int minor_version; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ DLIST additionalParameters; EVEL_EVENT_ACTION alertAction; char * alertDescription; EVEL_ALERT_TYPE alertType; char * collectionTimestamp; EVEL_SEVERITIES eventSeverity; char * eventStartTimestamp; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ HASHTABLE_T *additional_info; EVEL_OPTION_STRING alertValue; DLIST alertidList; EVEL_OPTION_STRING dataCollector; EVEL_OPTION_STRING elementType; EVEL_OPTION_STRING interfaceName; EVEL_OPTION_STRING networkService; EVEL_OPTION_STRING possibleRootCause; } EVENT_THRESHOLD_CROSS; /**************************************************************************//** * Create a new Threshold Crossing Alert event. * * @note The mandatory fields on the TCA must be supplied to this factory * function and are immutable once set. Optional fields have explicit * setter functions, but again values may only be set once so that the * TCA has immutable properties. * * @param event_name Unique Event Name * @param event_id A universal identifier of the event for analysis etc * @param EVEL_EVENT_ACTION talertAction Alert set continue or clear * @param char* talertDescription * @param EVEL_ALERT_TYPE talertType Kind of anamoly * @param char * tcollectionTimestamp time at which alert was collected * @param EVEL_SEVERITIES teventSeverity Severity of Alert * @param char * teventStartTimestamp Time when this alert started * * @returns pointer to the newly manufactured ::EVENT_THRESHOLD_CROSS. If the * event is not used it must be released using * ::evel_free_threshold_cross * @retval NULL Failed to create the event. *****************************************************************************/ EVENT_THRESHOLD_CROSS * evel_new_threshold_cross( const char* ev_name, const char *ev_id, EVEL_ALERT_ACTIONS talertAction, char * talertDescription, EVEL_ALERT_TYPE talertType, char * tcollectionTimestamp, EVEL_SEVERITIES teventSeverity, char * teventStartTimestamp); /**************************************************************************//** * Add the TCA additional performance counter * * @param tcp Pointer to the ::EVENT_THRESHOLD_CROSS. * @param char* tcriticality Performance Counter criticality * @param char* tthresholdCrossed Performance Counter Threshold name *****************************************************************************/ PERF_COUNTER * evel_threshold_cross_add_addl_parameters( EVENT_THRESHOLD_CROSS * const event, char * tcriticality, char * tthresholdCrossed); /**************************************************************************//** * Set the TCA name / Value for additional performance counter * * @param PERF_COUNTER perf_ctr Pointer to additional Parameter array element * @param char* name Performance Counter Threshold name * @param char* value Performance Counter actual value *****************************************************************************/ void evel_threshold_cross_addl_parameters_hashmap_set( PERF_COUNTER * perf_ctr, char * name, char * value); /**************************************************************************//** * Free a Threshold cross event. * * Free off the Threshold crossing event supplied. Will free all the contained allocated * memory. * * @note It does not free the Threshold Cross itself, since that may be part of a * larger structure. *****************************************************************************/ void evel_free_threshold_cross(EVENT_THRESHOLD_CROSS * const tcp); /**************************************************************************//** * Set the Event Type property of the Threshold Cross. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param tcp Pointer to the ::EVENT_THRESHOLD_CROSS. * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_threshold_cross_type_set(EVENT_THRESHOLD_CROSS * const tcp, char * type); /**************************************************************************//** * Add an optional additional alertid value to Alert. * * @param alertid Adds Alert ID *****************************************************************************/ void evel_threshold_cross_alertid_add(EVENT_THRESHOLD_CROSS * const event,char * alertid); /**************************************************************************//** * Set the TCA probable Root cause. * * @param sheader Possible root cause to Threshold *****************************************************************************/ void evel_threshold_cross_possible_rootcause_set(EVENT_THRESHOLD_CROSS * const event, char * sheader); /**************************************************************************//** * Set the TCA networking cause. * * @param sheader Possible networking service value to Threshold *****************************************************************************/ void evel_threshold_cross_networkservice_set(EVENT_THRESHOLD_CROSS * const event, char * sheader); /**************************************************************************//** * Set the TCA Interface name. * * @param sheader Interface name to threshold *****************************************************************************/ void evel_threshold_cross_interfacename_set(EVENT_THRESHOLD_CROSS * const event,char * sheader); /**************************************************************************//** * Set the TCA Data element type. * * @param sheader element type of Threshold *****************************************************************************/ void evel_threshold_cross_data_elementtype_set(EVENT_THRESHOLD_CROSS * const event,char * sheader); /**************************************************************************//** * Set the TCA Data collector value. * * @param sheader Data collector value *****************************************************************************/ void evel_threshold_cross_data_collector_set(EVENT_THRESHOLD_CROSS * const event,char * sheader); /**************************************************************************//** * Set the TCA alert value. * * @param sheader Possible alert value *****************************************************************************/ void evel_threshold_cross_alertvalue_set(EVENT_THRESHOLD_CROSS * const event,char * sheader); /**************************************************************************//** * Add an additional field name/value pair to the THRESHOLD CROSS event. * * The name and value are null delimited ASCII strings. The library takes * a copy so the caller does not have to preserve values after the function * returns. * * @param state_change Pointer to the ::EVENT_THRESHOLD_CROSS. * @param name ASCIIZ string with the attribute's name. The caller * does not need to preserve the value once the function * returns. * @param value ASCIIZ string with the attribute's value. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ void evel_threshold_cross_addl_info_add(EVENT_THRESHOLD_CROSS * const tcp, const char * const name, const char * const value); /*****************************************************************************/ /*****************************************************************************/ /* */ /* LOGGING */ /* */ /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ /* Debug macros. */ /*****************************************************************************/ #define EVEL_DEBUG(FMT, ...) log_debug(EVEL_LOG_DEBUG, (FMT), ##__VA_ARGS__) #define EVEL_WARN(FMT, ...) log_debug(EVEL_LOG_WARN, (FMT), ##__VA_ARGS__) #define EVEL_INFO(FMT, ...) log_debug(EVEL_LOG_INFO, (FMT), ##__VA_ARGS__) #define EVEL_SPAMMY(FMT, ...) log_debug(EVEL_LOG_SPAMMY, (FMT), ##__VA_ARGS__) #define EVEL_ERROR(FMT, ...) log_debug(EVEL_LOG_ERROR, "ERROR: " FMT, \ ##__VA_ARGS__) #define EVEL_ENTER() \ { \ log_debug(EVEL_LOG_DEBUG, "Enter %s {", __FUNCTION__); \ debug_indent += 2; \ } #define EVEL_EXIT() \ { \ debug_indent -= 2; \ log_debug(EVEL_LOG_DEBUG, "Exit %s }", __FUNCTION__); \ } #define INDENT_SEPARATORS \ "| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | " extern EVEL_LOG_LEVELS debug_level; extern int debug_indent; extern FILE * fout; #define EVEL_DEBUG_ON() ((debug_level) >= EVEL_LOG_DEBUG) /**************************************************************************//** * Initialize logging * * @param[in] level The debugging level - one of ::EVEL_LOG_LEVELS. * @param[in] ident The identifier for our logs. *****************************************************************************/ void log_initialize(EVEL_LOG_LEVELS level, const char * ident); /**************************************************************************//** * Log debug information * * Logs debugging information in a platform independent manner. * * @param[in] level The debugging level - one of ::EVEL_LOG_LEVELS. * @param[in] format Log formatting string in printf format. * @param[in] ... Variable argument list. *****************************************************************************/ void log_debug(EVEL_LOG_LEVELS level, char * format, ...); /***************************************************************************//* * Store the formatted string into the static error string and log the error. * * @param format Error string in standard printf format. * @param ... Variable parameters to be substituted into the format string. *****************************************************************************/ void log_error_state(char * format, ...); #ifdef __cplusplus } #endif #endif