29 #include <arpa/inet.h>
30 #include <linux/types.h>
37 #define DOCA_TELEMETRY_EXPORTER_NETFLOW_EXAMPLE_SOURCE_ID 111
38 #define DOCA_TELEMETRY_EXPORTER_NETFLOW_EXAMPLE_EVENTS_BATCH_SIZE 100
39 #define DOCA_TELEMETRY_EXPORTER_NETFLOW_EXAMPLE_EVENTS_NOF_BATCHES 10
81 struct doca_telemetry_exporter_netflow_flowset_field *field;
167 inet_pton(AF_INET6,
"0:0:0:0:0:FFFF:C0A8:7801", &record->
src_addr_v6);
168 inet_pton(AF_INET6,
"0:0:0:0:0:FFFF:C0A8:7802", &record->
dst_addr_v6);
170 inet_pton(AF_INET6,
"0:0:0:0:0:FFFF:C0A8:8507", &record->
next_hop_v6);
198 bool file_write_enable =
true;
199 bool ipc_enabled =
true;
202 size_t nb_of_records_sent;
208 char *netflow_addr =
"127.0.0.1";
209 uint16_t netflow_port = 9996;
223 goto fields_init_err;
230 goto netflow_init_err;
238 if (file_write_enable)
259 goto netflow_start_err;
266 records[i] = &record;
269 nb_of_records_sent = 0;
272 (
const void **)&records,
274 &nb_of_records_sent);
277 DOCA_LOG_ERR(
"Batch#%d: %zu out of %d records sent (err=%d)",
284 goto netflow_send_err;
286 DOCA_LOG_INFO(
"Batch#%d: %zu records sent", i, nb_of_records_sent);
#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.
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
#define DOCA_LOG_INFO(format,...)
Generates an INFO 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_set_file_write_enabled(void)
Enable file write file write is disabled by default.
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_template_destroy(struct doca_telemetry_exporter_netflow_template *netflow_template)
Destructor for DOCA netflow template.
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 void doca_telemetry_exporter_netflow_set_collector_port(uint16_t collector_port)
Set collector port. See DOCA_NETFLOW_DEFAULT_PORT for default value.
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_field_create(struct doca_telemetry_exporter_netflow_flowset_field **field)
Create new telemetry netflow field.
char application_name[DOCA_TELEMETRY_EXPORTER_NETFLOW_APPLICATION_NAME_DEFAULT_LENGTH]
struct in6_addr dst_addr_v6
struct in6_addr next_hop_v6
struct in6_addr src_addr_v6
struct doca_telemetry_exporter_netflow_example_record __attribute__((packed))
doca_error_t telemetry_netflow_export(void)
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_EXAMPLE_EVENTS_BATCH_SIZE
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_EXAMPLE_SOURCE_ID
#define DOCA_TELEMETRY_EXPORTER_NETFLOW_EXAMPLE_EVENTS_NOF_BATCHES
static doca_error_t add_netflow_field(uint16_t type, uint16_t length)
static doca_error_t init_template_fields(void)
static void prepare_netflow_example_record(struct doca_telemetry_exporter_netflow_example_record *record)
static struct doca_telemetry_exporter_netflow_template * example_template
DOCA_LOG_REGISTER(TELEMETRY_EXPORTER::NETFLOW)