code: func CanUseIPVSProxier(handle KernelHandler, ipsetver IPSetVersioner) (bool, error) {
  	mods, err := handle.GetModules()
  	if err != nil {
  		return false, fmt.Errorf("error getting installed ipvs required kernel modules: %v", err)
  	}
  	wantModules := sets.NewString()
  	loadModules := sets.NewString()
  	linuxKernelHandler := NewLinuxKernelHandler()
  	_, ipvsModules, _ := utilipvs.GetKernelVersionAndIPVSMods(linuxKernelHandler.executor)
  	wantModules.Insert(ipvsModules...)
  	loadModules.Insert(mods...)
  	modules := wantModules.Difference(loadModules).UnsortedList()
  	var missingMods []string
  	ConntrackiMissingCounter := 0
  	for _, mod := range modules {
  		if strings.Contains(mod, "nf_conntrack") {
  			ConntrackiMissingCounter++
  		} else {
  			missingMods = append(missingMods, mod)
  		}
  	}
  	if ConntrackiMissingCounter == 2 {
  		missingMods = append(missingMods, "nf_conntrack_ipv4(or nf_conntrack for Linux kernel 4.19 and later)")
  	}
  
  	if len(missingMods) != 0 {
  		return false, fmt.Errorf("IPVS proxier will not be used because the following required kernel modules are not loaded: %v", missingMods)
  	}
  
  	// Check ipset version
  	versionString, err := ipsetver.GetVersion()
  	if err != nil {
  		return false, fmt.Errorf("error getting ipset version, error: %v", err)
  	}
  	if !checkMinVersion(versionString) {
  		return false, fmt.Errorf("ipset version: %s is less than min required version: %s", versionString, MinIPSetCheckVersion)
  	}
  	return true, nil
  }
docs: // CanUseIPVSProxier returns true if we can use the ipvs Proxier.
  // This is determined by checking if all the required kernel modules can be loaded. It may
  // return an error if it fails to get the kernel modules information without error, in which
  // case it will also return false.