An unused semaphore is added to Nic Nexus which allows us to notify the Subnet to start the rekeying logic through the Nic. In the former version, Vm would directly call the Subnet Nexus to start the rekey process but if an unlucky nic didn't get enough CPU time to reach the wait_setup state, it would miss the start_rekey semaphore and since when we decr a semaphore, it is set to zero, Nic strand would get stuck on wait_setup until a manual trigger is done. Now each nic is used as the bridge between Vm and Subnet and this way, we make sure Nic strand is in the right state before subnet starts triggering different semaphores and logics.
12 KiB
12 KiB