From fdd81af6afe6c782ad2c1a139210378badec626b Mon Sep 17 00:00:00 2001 From: AkshayaNadahalli Date: Thu, 1 Dec 2016 16:33:51 +0530 Subject: VPP-632 : InBand OAM Analyser Refer to jira ticket for more details. Change-Id: I6facb9ef8553a21464f9a2e612706f152badbb68 Signed-off-by: AkshayaNadahalli --- src/plugins/ioam/export/ioam_export.c | 6 ++++++ src/plugins/ioam/export/node.c | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'src/plugins/ioam/export') diff --git a/src/plugins/ioam/export/ioam_export.c b/src/plugins/ioam/export/ioam_export.c index 06634baaf4b..1112ce4f66d 100644 --- a/src/plugins/ioam/export/ioam_export.c +++ b/src/plugins/ioam/export/ioam_export.c @@ -81,6 +81,10 @@ do { \ #define foreach_ioam_export_plugin_api_msg \ _(IOAM_EXPORT_IP6_ENABLE_DISABLE, ioam_export_ip6_enable_disable) +ioam_export_main_t ioam_export_main; + +vlib_node_registration_t export_node; + /* Action function shared between message handler and debug CLI */ int @@ -232,6 +236,8 @@ ioam_export_init (vlib_main_t * vm) em->vlib_main = vm; em->vnet_main = vnet_get_main (); + em->set_id = IPFIX_IOAM_EXPORT_ID; + ioam_export_reset_next_node (em); name = format (0, "ioam_export_%08x%c", api_version, 0); diff --git a/src/plugins/ioam/export/node.c b/src/plugins/ioam/export/node.c index 19f143dfbf3..b32d7841690 100644 --- a/src/plugins/ioam/export/node.c +++ b/src/plugins/ioam/export/node.c @@ -17,8 +17,10 @@ #include #include #include +#include #include + typedef struct { u32 next_index; @@ -119,6 +121,20 @@ copy3cachelines (void *dst, const void *src, size_t n) #endif } +static void +ip6_export_fixup_func (vlib_buffer_t * export_buf, vlib_buffer_t * pak_buf) +{ + ip6_header_t *ip6_temp = + (ip6_header_t *) (export_buf->data + export_buf->current_length); + u32 flow_label_temp = + clib_net_to_host_u32(ip6_temp->ip_version_traffic_class_and_flow_label) + & 0xFFF00000; + flow_label_temp |= + IOAM_MASK_DECAP_BIT((vnet_buffer(pak_buf)->l2_classify.opaque_index)); + ip6_temp->ip_version_traffic_class_and_flow_label = + clib_host_to_net_u32(flow_label_temp); +} + static uword ip6_export_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) @@ -126,7 +142,7 @@ ip6_export_node_fn (vlib_main_t * vm, ioam_export_main_t *em = &ioam_export_main; ioam_export_node_common(em, vm, node, frame, ip6_header_t, payload_length, ip_version_traffic_class_and_flow_label, - EXPORT_NEXT_POP_HBYH); + EXPORT_NEXT_POP_HBYH, ip6_export_fixup_func); return frame->n_vectors; } -- cgit 1.2.3-korg