hnssupport.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //go:build windows
  2. package hns
  3. import (
  4. "github.com/sirupsen/logrus"
  5. )
  6. type HNSSupportedFeatures struct {
  7. Acl HNSAclFeatures `json:"ACL"`
  8. }
  9. type HNSAclFeatures struct {
  10. AclAddressLists bool `json:"AclAddressLists"`
  11. AclNoHostRulePriority bool `json:"AclHostRulePriority"`
  12. AclPortRanges bool `json:"AclPortRanges"`
  13. AclRuleId bool `json:"AclRuleId"`
  14. }
  15. func GetHNSSupportedFeatures() HNSSupportedFeatures {
  16. var hnsFeatures HNSSupportedFeatures
  17. globals, err := GetHNSGlobals()
  18. if err != nil {
  19. // Expected on pre-1803 builds, all features will be false/unsupported
  20. logrus.Debugf("Unable to obtain HNS globals: %s", err)
  21. return hnsFeatures
  22. }
  23. hnsFeatures.Acl = HNSAclFeatures{
  24. AclAddressLists: isHNSFeatureSupported(globals.Version, HNSVersion1803),
  25. AclNoHostRulePriority: isHNSFeatureSupported(globals.Version, HNSVersion1803),
  26. AclPortRanges: isHNSFeatureSupported(globals.Version, HNSVersion1803),
  27. AclRuleId: isHNSFeatureSupported(globals.Version, HNSVersion1803),
  28. }
  29. return hnsFeatures
  30. }
  31. func isHNSFeatureSupported(currentVersion HNSVersion, minVersionSupported HNSVersion) bool {
  32. if currentVersion.Major < minVersionSupported.Major {
  33. return false
  34. }
  35. if currentVersion.Major > minVersionSupported.Major {
  36. return true
  37. }
  38. if currentVersion.Minor < minVersionSupported.Minor {
  39. return false
  40. }
  41. return true
  42. }