Applied On Thu, 2020-01-09 at 13:58 +0100, Michał Lowas-Rzechonek wrote: > First valid SNB received from the network should cause the node to > switch into IV_UPD_NORMAL state. > > Otherwise, it will never try to enter IV Update procedure when sequence > number approaches the IV_UPDATE_SEQ_TRIGGER, because that's only allowed > in IV_UPD_NORMAL. > --- > mesh/net.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/mesh/net.c b/mesh/net.c > index 20e9a1e81..bd8826b58 100644 > --- a/mesh/net.c > +++ b/mesh/net.c > @@ -2688,11 +2688,17 @@ static void process_beacon(void *net_ptr, void *user_data) > /* We have officially *seen* this beacon now */ > beacon_data->processed = true; > > - if (ivi == net->iv_index && ivu == net->iv_update && kr == local_kr) > - return; > + /* > + * Ignore the beacon if it doesn't change anything, unless we're > + * doing IV Recovery > + */ > + if (net->iv_upd_state == IV_UPD_INIT || > + ivi != net->iv_index || ivu != net->iv_update) > + update_iv_ivu_state(net, ivi, ivu); > + > + if (kr != local_kr) > + update_kr_state(subnet, kr, beacon_data->key_id); > > - update_iv_ivu_state(net, ivi, ivu); > - update_kr_state(subnet, kr, beacon_data->key_id); > net_key_beacon_refresh(beacon_data->key_id, net->iv_index, > !!(subnet->kr_phase == KEY_REFRESH_PHASE_TWO), net->iv_update); > }