wg: Simplify locking.
Summary: Access to a stable established session is still allowed via psref; all other access to peer and session state is now serialized by struct wg_peer::wgp_lock, with no dancing around a per-session lock. This way, the handshake paths are locked, while the data transmission paths are pserialized. - Eliminate struct wg_session::wgs_lock. - Eliminate wg_get_unstable_session -- access to the unstable session is allowed only with struct wgp_peer::wgp_lock held. - Push INIT_PASSIVE->ESTABLISHED transition down into a thread task. - Push rekey down into a thread task. - Allocate session indices only on transition from UNKNOWN and free them only on transition back to UNKNOWN. - Be a little more explicit about allowed state transitions, and reject some nonsensical ones. - Sprinkle assertions and comments. - Reduce atomic r/m/w swap operations that can just as well be store-release.
This commit is contained in:
parent
4131d8f567
commit
d1a81d3157
854
sys/net/if_wg.c
854
sys/net/if_wg.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user