// SetLinkFeaturesPostUp configures link features on t based on select TS_TUN_ // environment variables and OS feature tests. Callers should ensure t is // up prior to calling, otherwise OS feature tests may be inconclusive. func (t *Wrapper) SetLinkFeaturesPostUp() { if t.isTAP || runtime.GOOS == "android" { return } if groDev, ok := t.tdev.(tun.GRODevice); ok { if envknob.Bool("TS_TUN_DISABLE_UDP_GRO") { groDev.DisableUDPGRO() } if envknob.Bool("TS_TUN_DISABLE_TCP_GRO") { groDev.DisableTCPGRO() } err := probeTCPGRO(groDev) if errors.Is(err, unix.EINVAL) { groDev.DisableTCPGRO() groDev.DisableUDPGRO() t.logf("disabled TUN TCP & UDP GRO due to GRO probe error: %v", err) } } }