code: func lintReversedIPAddressLabels(name string, ipv6 bool) error {
  	numRequiredLabels := rdnsIPv4Labels
  	zoneSuffix := rdnsIPv4Suffix
  
  	if ipv6 {
  		numRequiredLabels = rdnsIPv6Labels
  		zoneSuffix = rdnsIPv6Suffix
  	}
  
  	// Strip off the zone suffix to get only the reversed IP address
  	ipName := strings.TrimSuffix(name, zoneSuffix)
  
  	// A well encoded IPv4 or IPv6 reverse DNS name will have the correct number
  	// of labels to express the address
  	ipLabels := strings.Split(ipName, ".")
  	if len(ipLabels) != numRequiredLabels {
  		return fmt.Errorf(
  			"name %q has too few leading labels (%d vs %d) to be a reverse DNS entry "+
  				"in the %q zone.",
  			name, len(ipLabels), numRequiredLabels, zoneSuffix)
  	}
  
  	// Reverse the IP labels and try to parse an IP address
  	var ip net.IP
  	if ipv6 {
  		ip = reversedLabelsToIPv6(ipLabels)
  	} else {
  		ip = reversedLabelsToIPv4(ipLabels)
  	}
  
  	// If the result isn't an IP then a warning should be generated
  	if ip == nil {
  		return fmt.Errorf(
  			"the first %d labels of name %q did not parse as a reversed IP address",
  			numRequiredLabels, name)
  	}
  
  	// Otherwise return no error - checking the actual value of the IP is left to
  	// `lint_subject_contains_reserved_arpa_ip.go`.
  	return nil
  }
docs: // lintReversedIPAddressLabels lints the given name as either a reversed IPv4 or
  // IPv6 address under the respective ARPA zone based on the address class. An
  // error is returned if there aren't enough labels in the name after removing
  // the relevant arpa suffix.