X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fipfix-export%2Fflow_report.h;h=65ddebcac3e296cb351e91a95447b3882c97ef6d;hb=d747dd950;hp=a26232d59191925336bd17e91c72acd0c82d88dd;hpb=2be45813c757137000878dc711dd169fc2d414af;p=vpp.git diff --git a/src/vnet/ipfix-export/flow_report.h b/src/vnet/ipfix-export/flow_report.h index a26232d5919..65ddebcac3e 100644 --- a/src/vnet/ipfix-export/flow_report.h +++ b/src/vnet/ipfix-export/flow_report.h @@ -17,13 +17,13 @@ #include #include -#include #include #include #include +#include #include #include -#include +#include #include #include #include @@ -48,25 +48,23 @@ typedef struct struct flow_report_main; struct flow_report; +struct ipfix_exporter; -typedef vlib_frame_t *(vnet_flow_data_callback_t) (struct flow_report_main *, - struct flow_report *, - vlib_frame_t *, u32 *, - u32); +typedef vlib_frame_t *(vnet_flow_data_callback_t) ( + struct flow_report_main *frm, struct ipfix_exporter *exp, + struct flow_report *, vlib_frame_t *, u32 *, u32); -typedef u8 *(vnet_flow_rewrite_callback_t) (struct flow_report_main *, +typedef u8 *(vnet_flow_rewrite_callback_t) (struct ipfix_exporter *exp, struct flow_report *, - ip4_address_t *, - ip4_address_t *, u16, - ipfix_report_element_t * elts, - u32 n_elts, u32 * stream_index); - -u8 *vnet_flow_rewrite_generic_callback (struct flow_report_main *, - struct flow_report *, - ip4_address_t *, + ip4_address_t *, ip4_address_t *, + u16, ipfix_report_element_t *elts, + u32 n_elts, u32 *stream_index); + +u8 *vnet_flow_rewrite_generic_callback (struct ipfix_exporter *exp, + struct flow_report *, ip4_address_t *, ip4_address_t *, u16, - ipfix_report_element_t * elts, - u32 n_elts, u32 * stream_index); + ipfix_report_element_t *elts, + u32 n_elts, u32 *stream_index); typedef union { @@ -108,7 +106,16 @@ typedef struct flow_report vnet_flow_data_callback_t *flow_data_callback; } flow_report_t; -typedef struct flow_report_main +/* + * The maximum number of ipfix exporters we can have at once + */ +#define IPFIX_EXPORTERS_MAX 5 + +/* + * We support multiple exporters. Each one has its own configured + * destination, and its own set of reports and streams. + */ +typedef struct ipfix_exporter { flow_report_t *reports; flow_report_stream_t *streams; @@ -127,6 +134,16 @@ typedef struct flow_report_main /* UDP checksum calculation enable flag */ u8 udp_checksum; +} ipfix_exporter_t; + +typedef struct flow_report_main +{ + /* + * A pool of the exporters. Entry 0 is always there for backwards + * compatability reasons. Entries 1 and above have to be created by + * the users. + */ + ipfix_exporter_t *exporters; /* time scale transform. Joy. */ u32 unix_time_0; @@ -135,14 +152,14 @@ typedef struct flow_report_main /* convenience variables */ vlib_main_t *vlib_main; vnet_main_t *vnet_main; + + u16 msg_id_base; } flow_report_main_t; extern flow_report_main_t flow_report_main; extern vlib_node_registration_t flow_report_process_node; -int vnet_flow_report_enable_disable (u32 sw_if_index, u32 table_index, - int enable_disable); typedef struct { vnet_flow_data_callback_t *flow_data_callback; @@ -156,19 +173,23 @@ typedef struct u32 *stream_indexp; } vnet_flow_report_add_del_args_t; -int vnet_flow_report_add_del (flow_report_main_t * frm, - vnet_flow_report_add_del_args_t * a, - u16 * template_id); +int vnet_flow_report_add_del (ipfix_exporter_t *exp, + vnet_flow_report_add_del_args_t *a, + u16 *template_id); clib_error_t *flow_report_add_del_error_to_clib_error (int error); -void vnet_flow_reports_reset (flow_report_main_t * frm); +void vnet_flow_reports_reset (ipfix_exporter_t *exp); -void vnet_stream_reset (flow_report_main_t * frm, u32 stream_index); +void vnet_stream_reset (ipfix_exporter_t *exp, u32 stream_index); -int vnet_stream_change (flow_report_main_t * frm, - u32 old_domain_id, u16 old_src_port, - u32 new_domain_id, u16 new_src_port); +int vnet_stream_change (ipfix_exporter_t *exp, u32 old_domain_id, + u16 old_src_port, u32 new_domain_id, u16 new_src_port); + +/* + * Search all the exporters for one that has a matching destination address. + */ +ipfix_exporter_t *vnet_ipfix_exporter_lookup (ip4_address_t *ipfix_collector); #endif /* __included_vnet_flow_report_h__ */