Skip to content

Commit

Permalink
Fix random loss of multicast, lasts 5-10 mins, by Ventus Networks
Browse files Browse the repository at this point in the history
Once PIMD joins multicast groups it relies on a timer to periodically
send JOIN updates.  However, if JOIN update is received from a BSR
router (which is also a multicast router) then new timer + random value
is calculated.  If new timer’s value is greater than the value in the
packet (and in most cases it is) then the new value is used and next
JOIN prune update is delayed.  Delay typically starts at 80+ seconds.

The net result of this behavior is that JOIN message are actually never
get sent and after hold timer expiration the entire Linux PIM router is
removed from the group.  In practice this causes random outages that
lasts between 5 and 10 minutes.

Signed-off-by: Al Ivanov <alivanov@ventusgns.com>
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
  • Loading branch information
troglobit committed Jun 10, 2018
1 parent ff8a52e commit 892acbe
Showing 1 changed file with 0 additions and 3 deletions.
3 changes: 0 additions & 3 deletions src/pim_proto.c
Original file line number Diff line number Diff line change
Expand Up @@ -1566,9 +1566,6 @@ int receive_pim_join_prune(uint32_t src, uint32_t dst __attribute__((unused)), c
if ((mrt->jp_timer == holdtime) && (ntohl(src) > ntohl(v->uv_lcl_addr)))
continue;

jp_value = PIM_JOIN_PRUNE_PERIOD + 0.5 * (RANDOM() % PIM_JOIN_PRUNE_PERIOD);
if (mrt->jp_timer < jp_value)
SET_TIMER(mrt->jp_timer, jp_value);
continue;
} /* End of (*,G) Join suppression */

Expand Down

0 comments on commit 892acbe

Please sign in to comment.