nat: fix regarding vm arg for vlib_time_now call 81/27281/3
authorElias Rudberg <elias.rudberg@bahnhof.net>
Wed, 27 May 2020 00:15:53 +0000 (02:15 +0200)
committerDave Barach <openvpp@barachs.net>
Wed, 27 May 2020 11:48:44 +0000 (11:48 +0000)
Change in snat_ipfix_header_create() to use thread-specific
vlib_main_t *vm pointer to avoid problems with different threads
accessing the same vlib_main_t data structure. This avoids
assertion failure when vlib_time_now() is called with a vm
corresponding to a different thread.

Type: fix

Signed-off-by: Elias Rudberg <elias.rudberg@bahnhof.net>
Change-Id: I2096c1debb5688d3b97e5ed9a0ea78d94053d8b7

src/plugins/nat/nat_ipfix_logging.c

index 7647742..59387e1 100644 (file)
@@ -493,6 +493,7 @@ snat_ipfix_header_create (flow_report_main_t * frm,
   u32 stream_index;
   ip4_header_t *ip;
   udp_header_t *udp;
+  vlib_main_t *vm = vlib_get_main ();
   
   stream_index = clib_atomic_fetch_or(&silm->stream_index, 0);
   stream = &frm->streams[stream_index];
@@ -521,7 +522,7 @@ snat_ipfix_header_create (flow_report_main_t * frm,
 
   h->export_time = clib_host_to_net_u32 ((u32)
                                         (((f64) frm->unix_time_0) +
-                                         (vlib_time_now (frm->vlib_main) -
+                                         (vlib_time_now (vm) -
                                           frm->vlib_time_0)));
 
   sequence_number = clib_atomic_fetch_add (&stream->sequence_number, 1);