diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2022-12-12 17:50:59 +0100 | 
|---|---|---|
| committer | Jafar Al-Gharaibeh <jafar@atcorp.com> | 2024-05-10 16:06:28 -0500 | 
| commit | cdbf788cedcf199ad2337951add4b48b17ced2ab (patch) | |
| tree | ac5d65cfc5497ffc1d5b89f79d2668913c2298fd | |
| parent | 9c3e45a75f3599de844b4ce6bbd92cb65b330310 (diff) | |
pimd: fix order of operations for evaluating join
join_desired looks at whether up->channel_oil is empty.  up->channel_oil
is updated from pim_forward_stop(), calling pim_channel_del_oif().  But
that was being called *after* updating join_desired, so join_desired saw
a non-empty OIL.  Pull up the pim_forward_stop() call to before updating
join_desired.
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit fdb1a6fed5a8e42447b5b9633ad9df0f3042d0a9)
| -rw-r--r-- | pimd/pim_ifchannel.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c index 3310009c02..c26f318f98 100644 --- a/pimd/pim_ifchannel.c +++ b/pimd/pim_ifchannel.c @@ -355,6 +355,13 @@ void pim_ifchannel_ifjoin_switch(const char *caller, struct pim_ifchannel *ch,  				   ch->sg_str, ch->interface->name);  		} +		/* pim_upstream_update_join_desired looks at up->channel_oil, +		 * but that's updated from pim_forward_stop().  Need this here +		 * so we correctly determine join_desired right below. +		 */ +		if (new_state == PIM_IFJOIN_NOINFO) +			pim_forward_stop(ch); +  		/*  		  Record uptime of state transition to/from NOINFO  		*/ @@ -632,7 +639,6 @@ struct pim_ifchannel *pim_ifchannel_add(struct interface *ifp, pim_sgaddr *sg,  static void ifjoin_to_noinfo(struct pim_ifchannel *ch)  {  	pim_ifchannel_ifjoin_switch(__func__, ch, PIM_IFJOIN_NOINFO); -	pim_forward_stop(ch);  	PIM_UPSTREAM_FLAG_UNSET_SRC_PIM(ch->upstream->flags);  | 
