code: func (p *protocol) SetOption(option interface{}) *tcpip.Error {
  	switch v := option.(type) {
  	case SACKEnabled:
  		p.mu.Lock()
  		p.sackEnabled = bool(v)
  		p.mu.Unlock()
  		return nil
  
  	case SendBufferSizeOption:
  		if v.Min <= 0 || v.Default < v.Min || v.Default > v.Max {
  			return tcpip.ErrInvalidOptionValue
  		}
  		p.mu.Lock()
  		p.sendBufferSize = v
  		p.mu.Unlock()
  		return nil
  
  	case ReceiveBufferSizeOption:
  		if v.Min <= 0 || v.Default < v.Min || v.Default > v.Max {
  			return tcpip.ErrInvalidOptionValue
  		}
  		p.mu.Lock()
  		p.recvBufferSize = v
  		p.mu.Unlock()
  		return nil
  
  	case CongestionControlOption:
  		for _, c := range p.availableCongestionControl {
  			if string(v) == c {
  				p.mu.Lock()
  				p.congestionControl = string(v)
  				p.mu.Unlock()
  				return nil
  			}
  		}
  		return tcpip.ErrInvalidOptionValue
  	default:
  		return tcpip.ErrUnknownProtocolOption
  	}
  }
docs: // SetOption implements TransportProtocol.SetOption.