code: func NewIAAddr(ip net.IP, preferred time.Duration, valid time.Duration, options dhcp6.Options) (*IAAddr, error) {
  	// From documentation: If ip is not an IPv4 address, To4 returns nil.
  	if ip.To4() != nil {
  		return nil, ErrInvalidIP
  	}
  
  	// Preferred lifetime must always be less than valid lifetime.
  	if preferred > valid {
  		return nil, ErrInvalidLifetimes
  	}
  
  	// If no options set, make empty map
  	if options == nil {
  		options = make(dhcp6.Options)
  	}
  
  	return &IAAddr{
  		IP:                ip,
  		PreferredLifetime: preferred,
  		ValidLifetime:     valid,
  		Options:           options,
  	}, nil
  }
docs: // NewIAAddr creates a new IAAddr from an IPv6 address, preferred and valid lifetime
  // durations, and an optional Options map.
  //
  // The IP must be exactly 16 bytes, the correct length for an IPv6 address.
  // The preferred lifetime duration must be less than the valid lifetime
  // duration.  Failure to meet either of these conditions will result in an error.
  // If an Options map is not specified, a new one will be allocated.