@@ -277,32 +277,32 @@ func waitForViaHandshake() {
277277}
278278
279279// onNotOK implements Proxy.
280- func (w * wgproxy ) onNotOK () (handled bool ) {
281- var didRefresh , didPing , didCallVia bool
280+ func (w * wgproxy ) onNotOK () (didRefresh , allok bool ) {
281+ var didPing , viaDidRefresh , viaOK bool
282282
283283 if via := w .getViaIfDialed (); via != nil {
284- didCallVia = via .onNotOK ()
284+ viaDidRefresh , viaOK = via .onNotOK ()
285285 }
286286
287287 var err error
288- if didCallVia {
288+ if viaDidRefresh {
289289 waitForViaHandshake () // wait for via to be OK
290290 err = w .Refresh ()
291291 didRefresh = true
292- handled = err == nil
292+ allok = err == nil
293293 } else {
294- handled , err = w .refreshBa .DoIt (w .id , func () (bool , error ) {
294+ allok , err = w .refreshBa .DoIt (w .id , func () (bool , error ) {
295295 rerr := w .Refresh ()
296296 didRefresh = true
297297 return rerr == nil , rerr
298298 })
299299 }
300300 if ! didRefresh { // attempt Ping if refresh skipped by the barrier
301- handled = handled && w .Ping () // ping / sendkeepalive is async
301+ allok = allok && w .Ping () // ping / sendkeepalive is async
302302 didPing = true
303303 }
304- loged (err )("proxy: wg: %s ( %s); onNotOK: via ? %t refresh? %t ping? %t; ok? %t; err? %v" ,
305- w .id , w .viaStatus (), didCallVia , didRefresh , didPing , handled , err )
304+ loged (err )("proxy: wg: ( %s + %s); onNotOK: refresh ? %t+%t; ping? %t; ok? %t+ %t; err? %v" ,
305+ w .id , w .viaStatus (), viaDidRefresh , didRefresh , didPing , viaOK , allok , err )
306306 return
307307}
308308
@@ -320,36 +320,25 @@ func (w *wgproxy) Refresh() (err error) {
320320 nn := w .remote .Load ().Refresh ()
321321
322322 via := w .getVia ()
323-
324- viaHandled , didWait := false , false
323+ viaOK , didWait := false , false
325324 if via != nil {
326- if viaHandled = via .onNotOK (); viaHandled {
325+ var viaDidRefresh bool
326+ if viaDidRefresh , viaOK = via .onNotOK (); viaDidRefresh {
327327 waitForViaHandshake ()
328328 didWait = true
329329 }
330330 }
331331
332- if err : = w .resetMtu (via ); err ! = nil {
333- log . E ( "proxy: wg: (%s / %s) refresh failed; resetMtu: len(dns): %d, len(peer): %d, err: %v" ,
334- w . id , w . viaStatus (), n , nn , err )
335- return err
332+ if err = w .resetMtu (via ); err = = nil {
333+ if err = w . Device . Down (); err == nil {
334+ err = w . Device . Up ( )
335+ }
336336 }
337337
338- if err = w .Device .Down (); err != nil {
339- log .E ("proxy: wg: (%s / %s) refresh failed; down: len(dns): %d, len(peer): %d, err: %v" ,
340- w .id , w .viaStatus (), n , nn , err )
341- return
342- }
343- if err = w .Device .Up (); err != nil {
344- log .E ("proxy: wg: (%s / %s) refresh failed; up: len(dns): %d, len(peer): %d, err: %v" ,
345- w .id , w .viaStatus (), n , nn , err )
346- return
347- }
348338 // not required since wgconn:NewBind() is namespace aware
349339 // bindok := bindWgSockets(w.ID(), w.remote.AnyAddr(), w.wgdev, w.ctl)
350- log .I ("proxy: wg: (%s / %s): refresh done; len(dns): %d, len(peer): %d; viaHandled? %t, didWait? %t; err? %v" ,
351- w .id , w .viaStatus (), n , nn , viaHandled , didWait , err )
352-
340+ logei (err )("proxy: wg: (%s + %s): refresh done; len(dns): %d, len(peer): %d; viaOK? %t, didWait? %t; err? %v" ,
341+ w .id , w .viaStatus (), n , nn , viaOK , didWait , err )
353342 return
354343}
355344
0 commit comments