48 uint32_t *slots_populated)
50 uint32_t max_slot_info_len, max_slots, id, major, minor, i;
60 printf(
"\n*************************************\n");
61 printf(
"%u slots detected on card:\n", max_slots);
69 algo_info = (
char *)malloc(
sizeof(
char) * max_slot_info_len);
70 if (algo_info ==
NULL) {
75 for (i = 0; i < max_slots; i++) {
79 printf(
"Slot %u: Empty\n", i);
104 printf(
"Slot %u: ID %04x, version %u.%02u - %s\n", i,
id, major, minor, algo_info);
105 *slots_populated |= (1 << i);
107 printf(
"*************************************\n");
128 uint32_t max_info, max_counters, counters_populated, i;
133 printf(
"-------------------------------------\n");
141 counters = (uint32_t *)malloc(
sizeof(uint32_t) * max_counters);
142 if (counters ==
NULL) {
153 printf(
"Number of counters found is %u\n", counters_populated);
161 counter_info = (
char *)malloc(
sizeof(
char) * max_info);
162 if (counter_info ==
NULL) {
163 DOCA_LOG_ERR(
"Failed to allocate array for counter info");
168 for (i = 0; i < counters_populated; i++) {
172 goto free_counter_info;
175 printf(
"Counter %u: %u - %s\n", i, counters[i], counter_info);
177 printf(
"-------------------------------------\n");
189 uint32_t slots_populated, slot, i;
190 struct doca_telemetry_pcc *pcc;
191 uint8_t algo_en, counters_en;
192 struct doca_dev *dev;
231 printf(
"\nContext is running. Parsing for counters...\n\n");
233 while ((i = ffs(slots_populated))) {
239 DOCA_LOG_ERR(
"Failed getting Enabled status of slot %u: Error=%s",
245 printf(
"Slot %u: algo %s, counters %s\n",
247 algo_en ?
"ENABLED" :
"DISABLED",
248 counters_en ?
"ENABLED" :
"DISABLED");
251 slots_populated &= ~(1 << slot);
253 if (counters_en == 0)
static doca_error_t open_doca_device_with_pci(const char *pcie_value, struct doca_dev **retval)
DOCA_STABLE struct doca_devinfo * doca_dev_as_devinfo(const struct doca_dev *dev)
Get local device info from device. This should be useful when wanting to query information about devi...
DOCA_STABLE doca_error_t doca_dev_close(struct doca_dev *dev)
Destroy allocated local device instance.
enum doca_error doca_error_t
DOCA API return codes.
DOCA_STABLE const char * doca_error_get_name(doca_error_t error)
Returns the string representation of an error code name.
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_stop(struct doca_telemetry_pcc *pcc)
Stop pcc counter extraction context.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_cap_get_max_algo_info_len(const struct doca_devinfo *devinfo, uint32_t *max_algo_info_len)
Get the maximum number of characters that be returned by an algo_info request.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_create(struct doca_dev *dev, struct doca_telemetry_pcc **pcc)
Create a DOCA Telemetry PCC instance.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_cap_get_max_algo_slots(const struct doca_devinfo *devinfo, uint32_t *max_algo_slots)
Get the maximum number of algo slots that may be populated.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_get_algo_minor_version(struct doca_telemetry_pcc *pcc, uint8_t algo_slot, uint32_t *minor_ver)
Get the minor version number of algo on a specific slot.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_get_algo_info(struct doca_telemetry_pcc *pcc, uint8_t algo_slot, char *algo_info)
Get information on a given algorithm.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_cap_is_supported(const struct doca_devinfo *devinfo)
Check if given device is capable of executing telemetry PCC operations.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_get_algo_enable_status(struct doca_telemetry_pcc *pcc, uint8_t algo_slot, uint8_t *algo_enabled, uint8_t *counters_enabled)
Get the enable status for a given algo slot.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_destroy(struct doca_telemetry_pcc *pcc)
Destroy doca_telemetry_pcc previously created by doca_telemetry_pcc_create().
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_get_algo_id(struct doca_telemetry_pcc *pcc, uint8_t algo_slot, uint32_t *algo_id)
Get the id of algo on a specific slot.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_cap_get_max_counter_info_len(const struct doca_devinfo *devinfo, uint32_t *max_counter_info_len)
Get the maximum number of characters that be returned by a counter_info request.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_get_algo_major_version(struct doca_telemetry_pcc *pcc, uint8_t algo_slot, uint32_t *major_ver)
Get the major version number of algo on a specific slot.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_get_counter_info(struct doca_telemetry_pcc *pcc, uint8_t algo_slot, uint8_t counter_id, char *counter_info)
Get information on a given counter.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_cap_get_max_num_counters(const struct doca_devinfo *devinfo, uint32_t *max_num_counters)
Get the maximum number of counters that may be returned.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_get_counters(struct doca_telemetry_pcc *pcc, uint8_t algo_slot, uint32_t *counters_populated, uint32_t *counters)
Get counters for PCC algo slot.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_pcc_start(struct doca_telemetry_pcc *pcc)
Start context for pcc counter extraction.
const struct ip_frag_config * cfg
static doca_error_t get_algo_information(struct doca_telemetry_pcc *pcc, struct doca_dev *dev, uint32_t *slots_populated)
DOCA_LOG_REGISTER(TELEMETRY_PCC::SAMPLE)
static doca_error_t get_counter_information(struct doca_telemetry_pcc *pcc, struct doca_dev *dev, uint8_t slot)
doca_error_t telemetry_pcc_sample_run(const struct telemetry_pcc_sample_cfg *cfg)