@@ -24,13 +24,17 @@ var (
2424// NetstackRouter implements Router using a userspace network stack.
2525// This router can be used for both client and server sides.
2626type NetstackRouter struct {
27- tunDev * netstack.TunDevice
28- mux * connection.MuxedConn
29- proxy * socksproxy.ProxyServer
27+ tunDev * netstack.TunDevice
28+ mux * connection.MuxedConn
29+
30+ proxy * socksproxy.ProxyServer
31+
3032localAddresses []netip.Prefix
3133resolveConf * network.ResolveConfig
3234socksListenAddr string
33- closeOnce sync.Once
35+ cksumRecalc bool
36+
37+ closeOnce sync.Once
3438}
3539
3640// NewNetstackRouter creates a new netstack-based tunnel router.
@@ -52,12 +56,15 @@ func NewNetstackRouter(opts ...Option) (*NetstackRouter, error) {
5256)
5357
5458return & NetstackRouter {
55- tunDev : tunDev ,
56- mux : connection .NewMuxedConn (),
57- proxy : proxy ,
59+ tunDev : tunDev ,
60+ mux : connection .NewMuxedConn (),
61+
62+ proxy : proxy ,
63+
5864localAddresses : options .localAddresses ,
5965resolveConf : options .resolveConf ,
6066socksListenAddr : options .socksListenAddr ,
67+ cksumRecalc : options .cksumRecalc ,
6168}, nil
6269}
6370
@@ -75,7 +82,11 @@ func (r *NetstackRouter) Start(ctx context.Context) error {
7582})
7683
7784g .Go (func () error {
78- return connection .Splice (r .tunDev , r .mux , connection .WithChecksumRecalculation ())
85+ var opts []connection.SpliceOption
86+ if r .cksumRecalc {
87+ opts = append (opts , connection .WithChecksumRecalculation ())
88+ }
89+ return connection .Splice (r .tunDev , r .mux , opts ... )
7990})
8091
8192_ , socksListenPortStr , err := net .SplitHostPort (r .socksListenAddr )
0 commit comments