github.com/metacubex/sing-tun@v0.2.7-0.20240512075008-89e7c6208eec/tun_linux_gvisor.go (about)

     1  //go:build with_gvisor && linux
     2  
     3  package tun
     4  
     5  import (
     6  	"github.com/metacubex/gvisor/pkg/tcpip/link/fdbased"
     7  	"github.com/metacubex/gvisor/pkg/tcpip/stack"
     8  )
     9  
    10  var _ GVisorTun = (*NativeTun)(nil)
    11  
    12  func (t *NativeTun) NewEndpoint() (stack.LinkEndpoint, error) {
    13  	if t.gsoEnabled {
    14  		return fdbased.New(&fdbased.Options{
    15  			FDs:               []int{t.tunFd},
    16  			MTU:               t.options.MTU,
    17  			GSOMaxSize:        gsoMaxSize,
    18  			RXChecksumOffload: true,
    19  			TXChecksumOffload: t.txChecksumOffload,
    20  		})
    21  	}
    22  	return fdbased.New(&fdbased.Options{
    23  		FDs:               []int{t.tunFd},
    24  		MTU:               t.options.MTU,
    25  		RXChecksumOffload: true,
    26  		TXChecksumOffload: t.txChecksumOffload,
    27  	})
    28  }