Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
misc: ipfix process node wait time adjustment
[vpp.git]
/
src
/
vnet
/
ipfix-export
/
flow_report.c
diff --git
a/src/vnet/ipfix-export/flow_report.c
b/src/vnet/ipfix-export/flow_report.c
index
103392a
..
760de5f
100644
(file)
--- a/
src/vnet/ipfix-export/flow_report.c
+++ b/
src/vnet/ipfix-export/flow_report.c
@@
-17,6
+17,7
@@
*/
#include <vnet/ipfix-export/flow_report.h>
#include <vnet/api_errno.h>
*/
#include <vnet/ipfix-export/flow_report.h>
#include <vnet/api_errno.h>
+#include <vnet/udp/udp.h>
flow_report_main_t flow_report_main;
flow_report_main_t flow_report_main;
@@
-118,9
+119,6
@@
send_template_packet (flow_report_main_t * frm,
b0 = vlib_get_buffer (vm, bi0);
b0 = vlib_get_buffer (vm, bi0);
- /* Initialize the buffer */
- VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b0);
-
ASSERT (vec_len (fr->rewrite) < vlib_buffer_get_default_data_size (vm));
clib_memcpy_fast (b0->data, fr->rewrite, vec_len (fr->rewrite));
ASSERT (vec_len (fr->rewrite) < vlib_buffer_get_default_data_size (vm));
clib_memcpy_fast (b0->data, fr->rewrite, vec_len (fr->rewrite));
@@
-262,7
+260,8
@@
flow_report_process (vlib_main_t * vm,
u32 template_bi;
u32 *to_next;
int send_template;
u32 template_bi;
u32 *to_next;
int send_template;
- f64 now;
+ f64 now, wait_time;
+ f64 def_wait_time = 5.0;
int rv;
uword event_type;
uword *event_data = 0;
int rv;
uword event_type;
uword *event_data = 0;
@@
-278,14
+277,20
@@
flow_report_process (vlib_main_t * vm,
ip4_lookup_node = vlib_get_node_by_name (vm, (u8 *) "ip4-lookup");
ip4_lookup_node_index = ip4_lookup_node->index;
ip4_lookup_node = vlib_get_node_by_name (vm, (u8 *) "ip4-lookup");
ip4_lookup_node_index = ip4_lookup_node->index;
+ wait_time = def_wait_time;
+
while (1)
{
while (1)
{
- vlib_process_wait_for_event_or_clock (vm,
5.0
);
+ vlib_process_wait_for_event_or_clock (vm,
wait_time
);
event_type = vlib_process_get_events (vm, &event_data);
vec_reset_length (event_data);
event_type = vlib_process_get_events (vm, &event_data);
vec_reset_length (event_data);
+ /* 5s delay by default, possibly reduced by template intervals */
+ wait_time = def_wait_time;
+
vec_foreach (fr, frm->reports)
{
vec_foreach (fr, frm->reports)
{
+ f64 next_template;
now = vlib_time_now (vm);
/* Need to send a template packet? */
now = vlib_time_now (vm);
/* Need to send a template packet? */
@@
-301,6
+306,11
@@
flow_report_process (vlib_main_t * vm,
if (rv < 0)
continue;
if (rv < 0)
continue;
+ /* decide if template should be sent sooner than current wait time */
+ next_template =
+ (fr->last_template_sent + frm->template_interval) - now;
+ wait_time = clib_min (wait_time, next_template);
+
nf = vlib_get_frame_to_node (vm, ip4_lookup_node_index);
nf->n_vectors = 0;
to_next = vlib_frame_vector_args (nf);
nf = vlib_get_frame_to_node (vm, ip4_lookup_node_index);
nf->n_vectors = 0;
to_next = vlib_frame_vector_args (nf);
@@
-500,7
+510,8
@@
set_ipfix_exporter_command_fn (vlib_main_t * vm,
{
if (unformat (input, "collector %U", unformat_ip4_address, &collector))
;
{
if (unformat (input, "collector %U", unformat_ip4_address, &collector))
;
- else if (unformat (input, "port %u", &collector_port))
+ else if (unformat (input, "port %U", unformat_udp_port,
+ &collector_port))
;
else if (unformat (input, "src %U", unformat_ip4_address, &src))
;
;
else if (unformat (input, "src %U", unformat_ip4_address, &src))
;
@@
-569,7
+580,7
@@
VLIB_CLI_COMMAND (set_ipfix_exporter_command, static) = {
"collector <ip4-address> [port <port>] "
"src <ip4-address> [fib-id <fib-id>] "
"[path-mtu <path-mtu>] "
"collector <ip4-address> [port <port>] "
"src <ip4-address> [fib-id <fib-id>] "
"[path-mtu <path-mtu>] "
- "[template-interval <template-interval>]
",
+ "[template-interval <template-interval>]
"
"[udp-checksum]",
.function = set_ipfix_exporter_command_fn,
};
"[udp-checksum]",
.function = set_ipfix_exporter_command_fn,
};
@@
-607,7
+618,7
@@
flow_report_init (vlib_main_t * vm)
return 0;
}
return 0;
}
-VLIB_INIT_FUNCTION (flow_report_init)
+VLIB_INIT_FUNCTION (flow_report_init)
;
/*
* fd.io coding-style-patch-verification: ON
*
/*
* fd.io coding-style-patch-verification: ON
*