device: make new peers inherit broken mobile semantics

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2021-11-11 03:13:20 +01:00
parent e3134bf665
commit 111e0566dc
3 changed files with 5 additions and 0 deletions

View file

@ -44,6 +44,7 @@ type Device struct {
netlinkCancel *rwcancel.RWCancel netlinkCancel *rwcancel.RWCancel
port uint16 // listening port port uint16 // listening port
fwmark uint32 // mark value (0 = disabled) fwmark uint32 // mark value (0 = disabled)
brokenRoaming bool
} }
staticIdentity struct { staticIdentity struct {

View file

@ -5,7 +5,10 @@
package device package device
// DisableSomeRoamingForBrokenMobileSemantics should ideally be called before peers are created,
// though it will try to deal with it, and race maybe, if called after.
func (device *Device) DisableSomeRoamingForBrokenMobileSemantics() { func (device *Device) DisableSomeRoamingForBrokenMobileSemantics() {
device.net.brokenRoaming = true
device.peers.RLock() device.peers.RLock()
for _, peer := range device.peers.keyMap { for _, peer := range device.peers.keyMap {
peer.Lock() peer.Lock()

View file

@ -261,6 +261,7 @@ func (peer *ipcSetPeer) handlePostConfig() {
if peer.Peer == nil { if peer.Peer == nil {
return return
} }
peer.disableRoaming = peer.device.net.brokenRoaming && peer.endpoint != nil
if !peer.dummy && peer.device.isUp() { if !peer.dummy && peer.device.isUp() {
peer.Start() peer.Start()
if peer.pkaOn { if peer.pkaOn {