Add Stack.ResetNetwork

This commit is contained in:
世界 2026-07-19 17:41:50 +08:00
parent 79084fa798
commit b59636919c
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
7 changed files with 64 additions and 5 deletions

View file

@ -114,11 +114,12 @@ type ForwardDispatcher struct {
udpTimeout time.Duration
icmpTimeout time.Duration
table map[flowKey]*flowEntry
lastSweep int64
ports map[Port]*portNAT
natList atomic.Pointer[[]*portNAT]
revNAT atomic.Pointer[map[netip.Addr]*portNAT]
table map[flowKey]*flowEntry
lastSweep int64
resetPending atomic.Bool
ports map[Port]*portNAT
natList atomic.Pointer[[]*portNAT]
revNAT atomic.Pointer[map[netip.Addr]*portNAT]
activeNATs []*portNAT
writebackBatch [][]byte
@ -544,10 +545,22 @@ func (d *ForwardDispatcher) stageReject(packet *forwardPacket) {
}
}
func (d *ForwardDispatcher) ResetNetwork() {
if d == nil {
return
}
d.resetPending.Store(true)
}
func (d *ForwardDispatcher) Flush() {
if d == nil {
return
}
if d.resetPending.Swap(false) {
for key, entry := range d.table {
d.removeEntry(key, entry, FlowCloseReset)
}
}
for _, nat := range d.activeNATs {
d.flushPort(nat)
}