@@ -115,7 +115,7 @@ func (pxr *proxifier) addRpnProxy(acc RpnAcc, cc string) (Proxy, error) {
115115
116116 rpnid := typ + cc
117117
118- p , err := pxr .addProxy (rpnid , txt )
118+ p , err := pxr .forceAddProxy (rpnid , txt )
119119 if p == nil {
120120 pxr .postAddRpnProxyError (acc ) // remove from pxr.rp if exists
121121 return nil , core .JoinErr (err , errAddProxy )
@@ -181,7 +181,15 @@ func (pxr *proxifier) postAddRpnProxyError(acc RpnAcc) (removed bool) {
181181 return pxr .unregisterRpn (acc .ProviderID ()) // unregisters if it exists
182182}
183183
184+ func (pxr * proxifier ) forceAddProxy (id , txt string ) (p Proxy , err error ) {
185+ return pxr .addOrUpdateProxy (id , txt , true /*force*/ )
186+ }
187+
184188func (pxr * proxifier ) addProxy (id , txt string ) (p Proxy , err error ) {
189+ return pxr .addOrUpdateProxy (id , txt , false /*force*/ )
190+ }
191+
192+ func (pxr * proxifier ) addOrUpdateProxy (id , txt string , force bool ) (p Proxy , err error ) {
185193 if len (id ) <= 0 {
186194 return nil , errAddProxy
187195 }
@@ -197,20 +205,23 @@ func (pxr *proxifier) addProxy(id, txt string) (p Proxy, err error) {
197205 pxr .Lock ()
198206 lp := pxr .lp
199207 pxr .Unlock ()
200- if p , _ = pxr .proxyFor (id ); p != nil {
208+ if force {
209+ p , err = NewWgProxy (id , pxr .ctl , pxr , lp , txt )
210+ } else if p , _ = pxr .proxyFor (id ); p != nil {
201211 if wgp , ok := p .(WgProxy ); ok && wgp .update (id , txt ) {
202212 newcfg , readd := wgp .OnProtoChange (lp )
203213 if readd || len (newcfg ) > 0 {
204214 log .W ("proxy: add: cannot update wg(%s); readd it!" , id )
205- return nil , errProxyReadd
215+ } else {
216+ log .I ("proxy: add: updated wg %s/%s/%s" , id , lp , p .GetAddr ())
217+ return
206218 }
207-
208- log .I ("proxy: add: updated wg %s/%s/%s" , id , lp , p .GetAddr ())
209- return
210219 } // else: recreate
211- } // else: new
212- // txt is both wg ifconfig and peercfg
213- p , err = NewWgProxy (id , pxr .ctl , pxr , lp , txt )
220+ }
221+ if p == nil {
222+ // txt is both wg ifconfig and peercfg
223+ p , err = NewWgProxy (id , pxr .ctl , pxr , lp , txt )
224+ }
214225 } else if len (txt ) <= 0 {
215226 p = NewBasicProxy (id , pxr .ctx , pxr .ctl , pxr )
216227 err = nil
@@ -240,17 +251,17 @@ func (pxr *proxifier) addProxy(id, txt string) (p Proxy, err error) {
240251
241252 if err != nil {
242253 log .P ("proxy: add: %s failed; cfg: %v" , id , txt )
243- log .W ("proxy: add: %s failed; err: %v" , id , err )
254+ log .W ("proxy: add: %s failed; force? %t; err: %v" , id , force , err )
244255 return nil , err
245256 } else if p == nil {
246257 log .P ("proxy: add: %s nil; cfg: %v" , id , txt )
247- log .W ("proxy: add: %s nil; txt: %d" , id , len (txt ))
258+ log .W ("proxy: add: %s nil; force? %t; txt: %d" , id , force , len (txt ))
248259 return nil , errAddProxy
249260 } else if ok := pxr .add (p ); ! ok {
250261 return nil , errAddProxy
251262 }
252263
253- log .I ("proxy: add: done %s/%s/%s" , p .ID (), p .Type (), p .GetAddr ())
264+ log .I ("proxy: add: force? %t; done %s/%s/%s" , force , p .ID (), p .Type (), p .GetAddr ())
254265 return
255266}
256267
0 commit comments