aboutsummaryrefslogtreecommitdiffstats
path: root/vnet/vnet/bfd/bfd_main.c
diff options
context:
space:
mode:
authorKlement Sekera <ksekera@cisco.com>2016-12-08 05:03:32 +0100
committerDamjan Marion <dmarion.lists@gmail.com>2016-12-08 12:16:42 +0000
commit0c1519b5e7953d093d5532d6caf87ae7ac9333d8 (patch)
tree12a950c5e54b8b5156bf098ef748827151cf4265 /vnet/vnet/bfd/bfd_main.c
parentb1135432d7b8c91d19fe463308c882880c9d60e7 (diff)
BFD: improve ip header handling, fix assert
Instead of storing a pointer, store an offset within vlib_buffer marking the start of the ip header (similar to storing start of ethernet header). Handle negative timeout in the bfd process main loop. Change-Id: I05a1ff3ac41da5bdc3b2ac6f9e03b3241994688b Signed-off-by: Klement Sekera <ksekera@cisco.com>
Diffstat (limited to 'vnet/vnet/bfd/bfd_main.c')
-rw-r--r--vnet/vnet/bfd/bfd_main.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/vnet/vnet/bfd/bfd_main.c b/vnet/vnet/bfd/bfd_main.c
index a72d6fed9bb..26b9fe31f09 100644
--- a/vnet/vnet/bfd/bfd_main.c
+++ b/vnet/vnet/bfd/bfd_main.c
@@ -570,15 +570,23 @@ bfd_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
{
BFD_DBG ("wait for event without timeout");
(void) vlib_process_wait_for_event (vm);
+ event_type = vlib_process_get_events (vm, &event_data);
}
else
{
f64 timeout = ((i64) next_expire - (i64) now) / bm->cpu_cps;
BFD_DBG ("wait for event with timeout %.02f", timeout);
- ASSERT (timeout > 0);
- (void) vlib_process_wait_for_event_or_clock (vm, timeout);
+ if (timeout < 0)
+ {
+ BFD_DBG ("negative timeout, already expired, skipping wait");
+ event_type = ~0;
+ }
+ else
+ {
+ (void) vlib_process_wait_for_event_or_clock (vm, timeout);
+ event_type = vlib_process_get_events (vm, &event_data);
+ }
}
- event_type = vlib_process_get_events (vm, &event_data);
now = clib_cpu_time_now ();
switch (event_type)
{