refactor: New udpnat
This commit is contained in:
parent
d1af8aaf7e
commit
95bc107a1c
10 changed files with 1218 additions and 52 deletions
|
|
@ -19,9 +19,10 @@ import (
|
|||
|
||||
type Mixed struct {
|
||||
*System
|
||||
tun GVisorTun
|
||||
stack *stack.Stack
|
||||
endpoint *channel.Endpoint
|
||||
tun GVisorTun
|
||||
stack *stack.Stack
|
||||
endpoint *channel.Endpoint
|
||||
udpForwarder *UDPForwarder
|
||||
}
|
||||
|
||||
func NewMixed(
|
||||
|
|
@ -47,7 +48,13 @@ func (m *Mixed) Start() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ipStack.SetTransportProtocolHandler(udp.ProtocolNumber, NewUDPForwarder(m.ctx, ipStack, m.handler, m.udpTimeout).HandlePacket)
|
||||
udpForwarder := NewUDPForwarder(m.ctx, ipStack, m.handler, m.udpNATOptions)
|
||||
err = udpForwarder.Start()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ipStack.SetTransportProtocolHandler(udp.ProtocolNumber, udpForwarder.HandlePacket)
|
||||
m.udpForwarder = udpForwarder
|
||||
m.stack = ipStack
|
||||
m.endpoint = endpoint
|
||||
go m.tunLoop()
|
||||
|
|
@ -59,6 +66,9 @@ func (m *Mixed) Close() error {
|
|||
if m.stack == nil {
|
||||
return nil
|
||||
}
|
||||
if m.udpForwarder != nil {
|
||||
m.udpForwarder.Close()
|
||||
}
|
||||
m.endpoint.Attach(nil)
|
||||
m.stack.Close()
|
||||
for _, endpoint := range m.stack.CleanupEndpoints() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue