1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2025-10-13 20:44:04 -04:00
Files
v2fly/app/tun/stack.go

50 lines
1.1 KiB
Go
Raw Normal View History

2023-05-28 12:18:58 +08:00
package tun
import (
2023-05-28 14:39:16 +08:00
"gvisor.dev/gvisor/pkg/tcpip"
2023-05-28 12:18:58 +08:00
"gvisor.dev/gvisor/pkg/tcpip/network/ipv4"
"gvisor.dev/gvisor/pkg/tcpip/network/ipv6"
"gvisor.dev/gvisor/pkg/tcpip/stack"
"gvisor.dev/gvisor/pkg/tcpip/transport/icmp"
"gvisor.dev/gvisor/pkg/tcpip/transport/tcp"
"gvisor.dev/gvisor/pkg/tcpip/transport/udp"
)
2023-05-28 14:17:40 +08:00
type StackOption func(*stack.Stack) error
2023-05-28 14:39:16 +08:00
func (t *TUN) CreateStack(linkedEndpoint stack.LinkEndpoint) (*stack.Stack, error) {
2023-05-28 12:18:58 +08:00
s := stack.New(stack.Options{
NetworkProtocols: []stack.NetworkProtocolFactory{
ipv4.NewProtocol,
ipv6.NewProtocol,
},
TransportProtocols: []stack.TransportProtocolFactory{
tcp.NewProtocol,
udp.NewProtocol,
icmp.NewProtocol4,
icmp.NewProtocol6,
},
})
2023-05-28 14:39:16 +08:00
nicID := tcpip.NICID(s.UniqueID())
2023-05-28 14:32:48 +08:00
opts := []StackOption{
2023-05-28 21:08:36 +08:00
HandleTCP(handleTCP),
HandleUDP(handleUDP),
2023-05-28 14:39:16 +08:00
CreateNIC(nicID, linkedEndpoint),
2023-05-28 17:28:10 +08:00
AddProtocolAddress(nicID, t.config.Ips),
2023-05-28 18:00:23 +08:00
SetRouteTable(nicID, t.config.Routes),
SetPromiscuousMode(nicID, t.config.EnablePromiscuousMode),
SetSpoofing(nicID, t.config.EnableSpoofing),
2023-05-28 14:32:48 +08:00
}
for _, opt := range opts {
if err := opt(s); err != nil {
return nil, err
}
}
2023-05-28 12:18:58 +08:00
return s, nil
}