@@ -182,7 +182,8 @@ nsim_configure (nsim_main_t * nsm, f64 bandwidth, f64 delay, f64 packet_size,
182
182
vec_validate (nsm -> wheel_by_thread , num_workers );
183
183
184
184
/* Initialize the output scheduler wheels */
185
- for (i = num_workers ? 1 : 0 ; i < num_workers + 1 ; i ++ )
185
+ i = (!nsm -> poll_main_thread && num_workers ) ? 1 : 0 ;
186
+ for (; i < num_workers + 1 ; i ++ )
186
187
{
187
188
nsim_wheel_t * wp ;
188
189
@@ -205,7 +206,8 @@ nsim_configure (nsim_main_t * nsm, f64 bandwidth, f64 delay, f64 packet_size,
205
206
vlib_worker_thread_barrier_sync (vm );
206
207
207
208
/* turn on the ring scrapers */
208
- for (i = num_workers ? 1 : 0 ; i < num_workers + 1 ; i ++ )
209
+ i = (!nsm -> poll_main_thread && num_workers ) ? 1 : 0 ;
210
+ for (; i < num_workers + 1 ; i ++ )
209
211
{
210
212
vlib_main_t * this_vm = vlib_mains [i ];
211
213
@@ -287,6 +289,28 @@ nsim_cross_connect_enable_disable_command_fn (vlib_main_t * vm,
287
289
return 0 ;
288
290
}
289
291
292
+ static clib_error_t *
293
+ nsim_config (vlib_main_t * vm , unformat_input_t * input )
294
+ {
295
+ nsim_main_t * nsm = & nsim_main ;
296
+
297
+ while (unformat_check_input (input ) != UNFORMAT_END_OF_INPUT )
298
+ {
299
+ if (unformat (input , "poll-main-thread" ))
300
+ {
301
+ nsm -> poll_main_thread = 1 ;
302
+ }
303
+ else
304
+ {
305
+ return clib_error_return (0 , "unknown input '%U'" ,
306
+ format_unformat_error , input );
307
+ }
308
+ }
309
+ return 0 ;
310
+ }
311
+
312
+ VLIB_CONFIG_FUNCTION (nsim_config , "nsim" );
313
+
290
314
/*?
291
315
* Enable or disable network simulation cross-connect on two interfaces
292
316
* The network simulator must have already been configured, see
@@ -584,6 +608,8 @@ set_nsim_command_fn (vlib_main_t * vm,
584
608
return clib_error_return
585
609
(0 , "drop fraction must be between zero and 1" );
586
610
}
611
+ else if (unformat (input , "poll-main-thread" ))
612
+ nsm -> poll_main_thread = 1 ;
587
613
else
588
614
break ;
589
615
}
0 commit comments