Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LLCP updates are not applied when the event is missed #74

Open
jonas-schievink opened this issue Aug 30, 2019 · 1 comment

Comments

@jonas-schievink
Copy link
Owner

@jonas-schievink jonas-schievink commented Aug 30, 2019

When we've stored an LLCP update, we need to apply it to the connection state after the correct connection event number (or "instant"). Currently, this is done here:

// Next conn event will the the first one with these parameters.
let result = self.apply_llcp_update(update, rx_end);
info!("LLCP patch applied: {:?} -> {:?}", update, result);
if let Some(cmd) = result {
return Ok(cmd);
}

However, this code is inside the RX handler, so if we happen to miss the event we're supposed to apply the update, we never do so, resulting in the connection being lost completely. This can be seen in the following log:

2.888649s - TRACE - #18 DATA(15->22)<- Header { LLID: DataCont, NESN: 1, SN: 1, MD: false, Length: 0 }, []
2.889144s - INFO - LLCP<- ConnectionUpdateReq(ConnectionUpdateData { win_size: 2, win_offset: 17, interval: 39, latency: 0, timeout: 500, instant: 29 })
...
2.963649s - TRACE - #28 DATA(11->18)<- Header { LLID: DataCont, NESN: 1, SN: 1, MD: false, Length: 0 }, []
2.964147s - TRACE - DATA(18->25): missed conn event #29
2.972340s - TRACE - DATA(25->32): missed conn event #30
2.980533s - TRACE - DATA(32->2): missed conn event #31
2.988725s - TRACE - DATA(2->16): missed conn event #32
2.996940s - TRACE - DATA(16->16): missed conn event #33
...

Event 29 is missed presumably due to interference, we never apply the update, all future events are missed because the connection state is now desynced.

@jonas-schievink

This comment has been minimized.

Copy link
Owner Author

@jonas-schievink jonas-schievink commented Aug 31, 2019

A good way to fix this would probably be to move the code that hops channels and applies the LLCP update into its own function (close_connection_event?) and just call it from the 2 places.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
1 participant
You can’t perform that action at this time.