Closed idismmxiv closed 8 years ago
Good work tracking this one down! I've actually never dared to venture into the assert handling, it always looked very scary. I too have noticed recurring problems with the assert election but could never figure out what was the root cause ... you may have stumbled upon it here! :+1:
In any case, simply creating a branch and doing a pull-request is a LOT easier to discuss around at GitHub. So just go ahead and make a pull request and we can discuss the details around that :smiley:
Merged to master
While doing some tests I ended up to a situation where RP had some (S,G) entries in Assert state. Once entered to such state, it looks like pimd never resets Assert. I looked at the
receive_pim_assert()
function a bit and I couldn't understand what actually happens there. First of all inpim_proto.c
line 2878-2879 there ismrt->timer
manipulation, but I suppose it should bemrt->assert_timer
manipulation? If I change that timer, then ASSERT timer starts to run once assert message is received. But then intimer.c
theassert_timer
handling seems to be somewhat unfinished.What I would do is change
mrt->timer
tomrt->assert_timer
inreceive_pim_assert()
, and then intimer.c if
assert_timerhas expired, then go through all VIFs of given
mrtentry and clear assert state. Currently VIFs are not looped through at all while doing assert checks and
asserted_oifs` are not cleared.So, am I missing something here? I could do some fixes to assert message state handling, but it would be great to get another opinion how this should be fixed.