Files
tun2socks/stack/icmp.go
xjasonlyu 90d7d2dfe6 Refactor
2021-02-05 20:02:29 +08:00

41 lines
804 B
Go
Executable File

package stack
import (
"fmt"
"net"
"gvisor.dev/gvisor/pkg/tcpip"
)
func withICMPHandler() Option {
return func(s *Stack) error {
// Add default route table for IPv4 and IPv6.
// This will handle all incoming ICMP packets.
s.SetRouteTable([]tcpip.Route{
{
Destination: mustSubnet("0.0.0.0/0"),
NIC: s.nicID,
},
{
Destination: mustSubnet("::/0"),
NIC: s.nicID,
},
})
return nil
}
}
// mustSubnet returns tcpip.Subnet from CIDR string.
func mustSubnet(s string) tcpip.Subnet {
_, ipNet, err := net.ParseCIDR(s)
if err != nil {
panic(fmt.Errorf("parse CIDR: %w", err))
}
subnet, err := tcpip.NewSubnet(tcpip.Address(ipNet.IP), tcpip.AddressMask(ipNet.Mask))
if err != nil {
panic(fmt.Errorf("new subnet: %w", err))
}
return subnet
}