Skip to content

Commit 8cfdce6

Browse files
committed
backend/rpn: redo and pingall apis
1 parent 518877f commit 8cfdce6

File tree

3 files changed

+55
-3
lines changed

3 files changed

+55
-3
lines changed

intra/backend/ipn_proxies.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ type RpnProxy interface {
145145
RpnAcc
146146
// Fork adds proxy for country code, cc.
147147
Fork(cc string) (Proxy, error)
148+
// Redo re-forks the main proxy and all its kids.
149+
Redo() (err error)
150+
// PingAll pings the main proxy and all its kids.
151+
PingAll() (csvpids string, err error)
148152
// Purge removes proxy for country code, cc.
149153
Purge(cc string) bool
150154
// Get returns proxy for country code, cc.

intra/ipn/rpn.go

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"fmt"
1212
"strings"
1313
"sync"
14+
"time"
1415

1516
x "github.com/celzero/firestack/intra/backend"
1617
"github.com/celzero/firestack/intra/core"
@@ -363,16 +364,63 @@ func (r *rpnp) forkMain() {
363364

364365
func (r *rpnp) forkAll() {
365366
provider := r.RpnAcc.ProviderID()
366-
log.I("proxy: rpn: forkAll: %s[%s]", provider, r.kidsCsv())
367+
kids := r.flattenKids()
368+
log.I("proxy: rpn: forkAll: %s[%v]", provider, kids)
367369

368370
r.forkMain()
369371

370-
for _, cc := range r.flattenKids() {
372+
for _, cc := range kids {
371373
_, err := r.fork(cc)
372374
loged(err)("proxy: rpn: forkAll: forked %s[%s]; err? %v", provider, cc, err)
373375
}
374376
}
375377

378+
func (r *rpnp) Redo() (err error) {
379+
r.forkMain()
380+
r.forkAll()
381+
return nil
382+
}
383+
384+
func (r *rpnp) PingAll() (csvpids string, err error) {
385+
start := time.Now()
386+
provider := r.RpnAcc.ProviderID()
387+
kids := r.flattenKids()
388+
main, err := r.requireProxy()
389+
390+
logei(err)("proxy: rpn: pingAll: %s[%v]; got main? %t; err: %v",
391+
provider, kids, main != nil, err)
392+
393+
if err != nil {
394+
return
395+
}
396+
397+
mainpinged := main.Ping()
398+
if !mainpinged {
399+
log.W("proxy: rpn: pingAll: main proxy %s failed ping", provider)
400+
}
401+
402+
kidspinged := make([]string, 0, len(kids))
403+
errs := make([]error, 0)
404+
for _, cc := range kids {
405+
p, rerr := r.pxr.rpnProxyFor(provider, cc)
406+
if rerr != nil {
407+
errs = append(errs, rerr)
408+
continue
409+
}
410+
if !p.Ping() {
411+
log.W("proxy: rpn: pingAll: proxy for %s[%s] failed ping", provider, cc)
412+
} else {
413+
kidspinged = append(kidspinged, cc)
414+
}
415+
}
416+
417+
err = core.JoinErr(errs...)
418+
logei(err)("proxy: rpn: pingAll: %s[%v] done in %s; main pinged? %t / kids pinged? %v; err? %v",
419+
provider, kids, core.FmtTimeAsPeriod(start), mainpinged, kidspinged, errs)
420+
421+
return strings.Join(kidspinged, ","), err
422+
}
423+
376424
func (r *rpnp) PurgeAll() (n uint32) {
377425
for _, cc := range r.flattenKids() {
378426
if r.purge(cc) {

intra/ipn/wgproxy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1552,7 +1552,7 @@ func (h *wgtun) listener(op wg.PktDir, err error) {
15521552
if !stoppedOrPaused {
15531553
updated = h.status.Cas(cur, s)
15541554
}
1555-
logeif(!updated)("wg: %s listener: %s; status %s => %s; end/pause? %t, ignored? %t, why: %s",
1555+
logeif(!updated)("wg: %s listener: %s; status %s => %s; end/pause? %t, statusupdated? %t, why: %s",
15561556
h.tag(), op, pxstatus(cur), pxstatus(s), stoppedOrPaused, !updated, why)
15571557
}()
15581558

0 commit comments

Comments
 (0)