X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=vnet%2Fvnet%2Fflow%2Fflow_report_sample.c;h=69f0491f3d3adfec18a49dce2e61b8596e8c1797;hb=f3f25416900288d86511133b4d47e68ccf359772;hp=122bd9d8aea2b09f1de71a92f844d8b39626ba04;hpb=86634f0e74672cc82195f21fff6c3d729dd5a341;p=vpp.git diff --git a/vnet/vnet/flow/flow_report_sample.c b/vnet/vnet/flow/flow_report_sample.c index 122bd9d8aea..69f0491f3d3 100644 --- a/vnet/vnet/flow/flow_report_sample.c +++ b/vnet/vnet/flow/flow_report_sample.c @@ -25,7 +25,8 @@ flow_report_sample_main_t flow_report_sample_main; static u8 * template_rewrite (flow_report_main_t * frm, flow_report_t * fr, ip4_address_t * collector_address, - ip4_address_t * src_address) + ip4_address_t * src_address, + u16 collector_port) { vnet_classify_table_t * tblp; vnet_classify_main_t * vcm = &vnet_classify_main; @@ -91,8 +92,8 @@ static u8 * template_rewrite (flow_report_main_t * frm, ip->protocol = IP_PROTOCOL_UDP; ip->src_address.as_u32 = src_address->as_u32; ip->dst_address.as_u32 = collector_address->as_u32; - udp->src_port = clib_host_to_net_u16 (4739 /* $$FIXME */); - udp->dst_port = clib_host_to_net_u16 (UDP_DST_PORT_ipfix); + udp->src_port = clib_host_to_net_u16 (fr->src_port); + udp->dst_port = clib_host_to_net_u16 (collector_port); udp->length = clib_host_to_net_u16 (vec_len(rewrite) - sizeof (*ip)); /* FIXUP: message header export_time */ @@ -150,6 +151,7 @@ static vlib_frame_t * send_flows (flow_report_main_t * frm, vnet_classify_entry_t * v, * save_v; vlib_buffer_t *b0 = 0; u32 next_offset = 0; + u32 record_offset = 0; u32 bi0 = ~0; int i, j, k; ip4_ipfix_template_packet_t * tp; @@ -218,6 +220,7 @@ static vlib_frame_t * send_flows (flow_report_main_t * frm, h->sequence_number = clib_host_to_net_u32 (h->sequence_number); next_offset = (u32) (((u8 *)(s+1)) - (u8 *)tp); + record_offset = next_offset; records_this_buffer = 0; } @@ -246,7 +249,11 @@ static vlib_frame_t * send_flows (flow_report_main_t * frm, records_this_buffer++; fr->sequence_number++; - if (next_offset > 1450) + /* Next record will have the same size as this record */ + u32 next_record_size = next_offset - record_offset; + record_offset = next_offset; + + if (next_offset + next_record_size > frm->path_mtu) { s->set_id_length = ipfix_set_id_length (256 /* template ID*/, next_offset - @@ -346,6 +353,7 @@ flow_sample_command_fn (vlib_main_t * vm, int rv; int is_add = 1; u32 domain_id = 0; + u32 src_port = UDP_DST_PORT_ipfix; domain_id = 0; fsm->classify_table_index = ~0; @@ -356,6 +364,8 @@ flow_sample_command_fn (vlib_main_t * vm, ; else if (unformat (input, "domain %d", &domain_id)) ; + else if (unformat (input, "src-port %d", &src_port)) + ; else if (unformat (input, "del")) is_add = 0; else @@ -371,6 +381,7 @@ flow_sample_command_fn (vlib_main_t * vm, args.flow_data_callback = send_flows; args.is_add = is_add; args.domain_id = domain_id; + args.src_port = (u16)src_port; rv = vnet_flow_report_add_del (frm, &args);