mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #100866 from bowei/small-validation-msg
Update IP address validation message to include IPv6
This commit is contained in:
		@@ -5764,6 +5764,10 @@ func validateNonSpecialIP(ipAddress string, fldPath *field.Path) field.ErrorList
 | 
			
		||||
	// unspecified and loopback addresses are nonsensical and link-local
 | 
			
		||||
	// addresses tend to be used for node-centric purposes (e.g. metadata
 | 
			
		||||
	// service).
 | 
			
		||||
	//
 | 
			
		||||
	// IPv6 references
 | 
			
		||||
	// - https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml
 | 
			
		||||
	// - https://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml
 | 
			
		||||
	allErrs := field.ErrorList{}
 | 
			
		||||
	ip := net.ParseIP(ipAddress)
 | 
			
		||||
	if ip == nil {
 | 
			
		||||
@@ -5771,16 +5775,16 @@ func validateNonSpecialIP(ipAddress string, fldPath *field.Path) field.ErrorList
 | 
			
		||||
		return allErrs
 | 
			
		||||
	}
 | 
			
		||||
	if ip.IsUnspecified() {
 | 
			
		||||
		allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be unspecified (0.0.0.0)"))
 | 
			
		||||
		allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, fmt.Sprintf("may not be unspecified (%v)", ipAddress)))
 | 
			
		||||
	}
 | 
			
		||||
	if ip.IsLoopback() {
 | 
			
		||||
		allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the loopback range (127.0.0.0/8)"))
 | 
			
		||||
		allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the loopback range (127.0.0.0/8, ::1/128)"))
 | 
			
		||||
	}
 | 
			
		||||
	if ip.IsLinkLocalUnicast() {
 | 
			
		||||
		allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the link-local range (169.254.0.0/16)"))
 | 
			
		||||
		allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the link-local range (169.254.0.0/16, fe80::/10)"))
 | 
			
		||||
	}
 | 
			
		||||
	if ip.IsLinkLocalMulticast() {
 | 
			
		||||
		allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the link-local multicast range (224.0.0.0/24)"))
 | 
			
		||||
		allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the link-local multicast range (224.0.0.0/24, ff02::/10)"))
 | 
			
		||||
	}
 | 
			
		||||
	return allErrs
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -17366,3 +17366,43 @@ func TestValidateResourceRequirements(t *testing.T) {
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestValidateNonSpecialIP(t *testing.T) {
 | 
			
		||||
	fp := field.NewPath("ip")
 | 
			
		||||
 | 
			
		||||
	// Valid values.
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		desc string
 | 
			
		||||
		ip   string
 | 
			
		||||
	}{
 | 
			
		||||
		{"ipv4", "10.1.2.3"},
 | 
			
		||||
		{"ipv6", "2000::1"},
 | 
			
		||||
	} {
 | 
			
		||||
		t.Run(tc.desc, func(t *testing.T) {
 | 
			
		||||
			errs := validateNonSpecialIP(tc.ip, fp)
 | 
			
		||||
			if len(errs) != 0 {
 | 
			
		||||
				t.Errorf("validateNonSpecialIP(%q, ...) = %v; want nil", tc.ip, errs)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	// Invalid cases
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		desc string
 | 
			
		||||
		ip   string
 | 
			
		||||
	}{
 | 
			
		||||
		{"ipv4 unspecified", "0.0.0.0"},
 | 
			
		||||
		{"ipv6 unspecified", "::0"},
 | 
			
		||||
		{"ipv4 localhost", "127.0.0.0"},
 | 
			
		||||
		{"ipv4 localhost", "127.255.255.255"},
 | 
			
		||||
		{"ipv6 localhost", "::1"},
 | 
			
		||||
		{"ipv6 link local", "fe80::"},
 | 
			
		||||
		{"ipv6 local multicast", "ff02::"},
 | 
			
		||||
	} {
 | 
			
		||||
		t.Run(tc.desc, func(t *testing.T) {
 | 
			
		||||
			errs := validateNonSpecialIP(tc.ip, fp)
 | 
			
		||||
			if len(errs) == 0 {
 | 
			
		||||
				t.Errorf("validateNonSpecialIP(%q, ...) = nil; want non-nil (errors)", tc.ip)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user