Improve ipfix template packet rewrite construction 54/12554/2
authorDave Barach <dave@barachs.net>
Sun, 13 May 2018 12:50:25 +0000 (08:50 -0400)
committerFlorin Coras <florin.coras@gmail.com>
Sun, 13 May 2018 17:55:24 +0000 (17:55 +0000)
commit2be45813c757137000878dc711dd169fc2d414af
treea695bbb512468c9abff710a1542a75bc3cb95e9d
parent078371e32c41c6c63d8e49964d2046a5dd90de48
Improve ipfix template packet rewrite construction

Instead of repeatedly cutting, pasting, and hacking to create a new
callback, use vnet_flow_rewrite_generic_callback(). Add three
arguments to the flow rewrite callback:

(in) pointer to an array of report elements,
(in) length of array,
(out) pointer to the stream index

Change existing code prototypes. Code owners encouraged to evaluate
whether they can use the generic callback or not, at leisure.

/* ipfix field definitions for a particular report */
typedef struct
{
  u32 info_element;
  u32 size;
} ipfix_report_element_t;

Best generated like so:

_(sourceIPv4Address, 4)                         \
_(destinationIPv4Address, 4)                    \
_(sourceTransportPort, 2)                       \
_(destinationTransportPort, 2)                  \
_(protocolIdentifier, 1)                        \
_(flowStartMicroseconds, 8)                     \
_(flowEndMicroseconds, 8)

static ipfix_report_element_t simple_report_elements[] = {
  foreach_simple_report_ipfix_element
};

  ...
  /* Set up the ipfix report */
  memset (&a, 0, sizeof (a));
  a.is_add = 1 /* to enable the report */ ;
  a.domain_id = 1 /* pick a domain ID */ ;
  a.src_port = UDP_DST_PORT_ipfix /* src port for reports */ ;
  a.rewrite_callback = vnet_flow_rewrite_generic_callback;
  a.report_elements = simple_report_elements;
  a.n_report_elements = ARRAY_LEN (simple_report_elements);
  a.stream_indexp = &jim->stream_index;
  a.flow_data_callback = simple_flow_data_callback;

  /* Create the report */
  rv = vnet_flow_report_add_del (frm, &a, &template_id);
  if (rv)
    return rv;
  ...

Change-Id: If6131e6821d3a37a29269c0d58040cdf18ff05e4
Signed-off-by: Dave Barach <dave@barachs.net>
src/plugins/flowprobe/flowprobe.c
src/plugins/ioam/analyse/ioam_summary_export.c
src/plugins/ioam/analyse/ioam_summary_export.h
src/plugins/ioam/udp-ping/udp_ping_export.c
src/plugins/nat/nat_ipfix_logging.c
src/vnet/ipfix-export/flow_report.c
src/vnet/ipfix-export/flow_report.h
src/vnet/ipfix-export/flow_report_classify.c
src/vnet/ipfix-export/flow_report_classify.h