27 #include <netinet/in.h>
28 #include <arpa/inet.h>
30 #include <sys/queue.h>
32 #include <linux/types.h>
34 #include <rte_string_fns.h>
61 struct doca_telemetry_exporter_netflow_flowset_field *field;
147 struct hostent *host_entry =
NULL;
150 if (gethostname(host,
sizeof(host)) < 0) {
163 host_entry = gethostbyname(host);
164 if (host_entry ==
NULL)
167 strlcpy(host_name, host_entry->h_name, 64);
176 size_t records_to_send = 0;
177 size_t records_sent = 0;
178 size_t records_successfully_sent;
190 while (records_sent < records_to_send) {
192 (
const void **)(records + records_sent),
193 records_to_send - records_sent,
194 &records_successfully_sent);
199 records_sent += records_successfully_sent;
203 DOCA_LOG_TRC(
"Successfully sent %lu netflow records with default template", records_sent);
214 struct doca_telemetry_exporter_netflow_record *tmp_record;
223 *tmp_record = *record;
243 char *bluefield_rshim =
"192.168.100.1";
288 rte_ring_create(
"placeholder_netflow_queue",
NETFLOW_QUEUE_SIZE, SOCKET_ID_ANY, RING_F_SP_ENQ);
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IN_BYTES
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_L4_DST_PORT_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_LAST_SWITCHED_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV6_SRC_ADDR_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_DST_AS
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_PROTOCOL
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV6_DST_ADDR
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_SRC_TOS
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IN_BYTES_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_INPUT_SNMP_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_OUTPUT_SNMP_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_FIRST_SWITCHED
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_SRC_AS
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_L4_SRC_PORT
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_APPLICATION_NAME_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_APPLICATION_NAME
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_FIRST_SWITCHED_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_DST_MASK_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV4_SRC_ADDR
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV4_SRC_ADDR_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_CONNECTION_TRANSACTION_ID
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IN_PKTS_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_L4_DST_PORT
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_DST_MASK
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV4_NEXT_HOP
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_PROTOCOL_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV6_NEXT_HOP
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_SRC_MASK_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_SRC_MASK
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV6_NEXT_HOP_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_TCP_FLAGS_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_OUTPUT_SNMP
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_CONNECTION_TRANSACTION_ID_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV4_DST_ADDR_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_INPUT_SNMP
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV4_DST_ADDR
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV6_DST_ADDR_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_LAST_SWITCHED
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_SRC_TOS_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV6_SRC_ADDR
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_DST_AS_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_SRC_AS_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_L4_SRC_PORT_DEFAULT_LENGTH
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IN_PKTS
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_TCP_FLAGS
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_IPV4_NEXT_HOP_DEFAULT_LENGTH
enum doca_error doca_error_t
DOCA API return codes.
@ DOCA_ERROR_INVALID_VALUE
@ DOCA_ERROR_NOT_PERMITTED
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
#define DOCA_LOG_TRC(format,...)
Generates a TRACE application log message.
#define DOCA_LOG_DBG(format,...)
Generates a DEBUG application log message.
DOCA_EXPERIMENTAL void doca_telemetry_exporter_netflow_source_set_id(const char *source_id)
Set source id.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_destroy(void)
Free the exporter memory and close the connection.
DOCA_EXPERIMENTAL void doca_telemetry_exporter_netflow_source_set_tag(const char *source_tag)
Set source tag.
DOCA_EXPERIMENTAL void doca_telemetry_exporter_netflow_field_set_len(struct doca_telemetry_exporter_netflow_flowset_field *field, uint16_t length)
Set doca telemetry netflow field length.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_send(const struct doca_telemetry_exporter_netflow_template *netflow_template, const void **records, size_t nof_records, size_t *nof_records_sent)
Sending netflow records. Need to init first.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_start(void)
Finalizes netflow setup.
DOCA_EXPERIMENTAL void doca_telemetry_exporter_netflow_set_ipc_enabled(void)
Enable IPC IPC is disabled by default.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_field_destroy(struct doca_telemetry_exporter_netflow_flowset_field *field)
Destructor for DOCA netflow field.
DOCA_EXPERIMENTAL void doca_telemetry_exporter_netflow_set_collector_addr(const char *collector_addr)
Set collector address.
DOCA_EXPERIMENTAL void doca_telemetry_exporter_netflow_field_set_type(struct doca_telemetry_exporter_netflow_flowset_field *field, uint16_t type)
Set doca telemetry netflow field type.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_template_create(struct doca_telemetry_exporter_netflow_template **netflow_template)
Create new telemetry netflow template.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_init(uint16_t source_id)
Init exporter memory, set configs and open connection.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_template_add_field(struct doca_telemetry_exporter_netflow_template *netflow_template, struct doca_telemetry_exporter_netflow_flowset_field *field)
Add DOCA telemetry netflow field to netflow_template. The user loses the ownership of the field after...
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_flush(void)
Immediately flush the data of the DOCA internal Netflow source.
DOCA_EXPERIMENTAL doca_error_t doca_telemetry_exporter_netflow_field_create(struct doca_telemetry_exporter_netflow_flowset_field **field)
Create new telemetry netflow field.
static struct doca_telemetry_exporter_netflow_record data_to_send[NETFLOW_QUEUE_SIZE]
doca_error_t send_netflow_record(void)
DOCA_LOG_REGISTER(NETFLOW_TELEMETRY)
void enqueue_netflow_record_to_ring(const struct doca_telemetry_exporter_netflow_record *record)
static struct doca_telemetry_exporter_netflow_template * netflow_template
static doca_error_t get_hostname_ip(char *host_name)
void destroy_netflow_schema_and_source(void)
static doca_error_t add_netflow_field(uint16_t type, uint16_t length)
static struct doca_telemetry_exporter_netflow_record * data_to_send_ptr[NETFLOW_QUEUE_SIZE]
static struct rte_ring * netflow_pending_ring
static struct rte_ring * netflow_freelist_ring
static doca_error_t init_template_fields(void)
doca_error_t init_netflow_schema_and_source(uint8_t id, char *source_tag)
#define NETFLOW_QUEUE_SIZE
size_t strlcpy(char *dst, const char *src, size_t size)