# Frequently Asked Questions

This page contains the answers to frequently asked questions of SDK users.

1. How do I get set_style() with the HOSTS option in Perl if I get "Authorization failed" error?

2. How do I fix the "SSL initialization" error while using HTTPS transport option in my application?

3. Which ports are used on the storage system for Data ONTAP API communication?

4. Where do I find information about the NetApp SNMP MIBs and supported Data ONTAP versions?

5. Can I connect to a MultiStore system (vFiler) using HTTPS?

6. What is vFiler tunneling?

7. What are the vFiler-enabled APIs?

8. Does ONTAPI access to vFiler units using HTTP work with Data ONTAP versions prior to 7.2?

8. Do SDK libraries work with older Data ONTAP versions?

10. Which version of ONTAPI should be used by the client programs?

11. Where can I find more information about the error returned by the APIs?

top

12. How does Data ONTAP API behave in the absence of the required license on the storage system?

13. Why do I get the error "Unable to find API: xyz (errno=13001)", when I issue the API 'xyz' on a particular vFiler unit of a storage system?

14. How do I make non-blocking API calls to the storage system?

15. What is the maximum number of client connections that can be initiated between a client using the Data ONTAP API (or set of clients) and a storage system?

16. For Data ONTAP 7.1 and later, when the retention year is set to greater than 2037, why does the API 'file-set-snaplock-retention-time()' fails with the error message "Retention year could not be set netapp.manage.NaAPIFailedException:SnapLock retention time is out of range (errno=34)"?

17. For Data ONTAP 7.1 and later, why does the API file-set-snaplock-retention-time() allow setting a retention date which has already passed?

18. Can I restrict a client from using a particular Data ONTAP API? How do I add role-based access control (RBAC) for Data ONTAP APIs?

19. How can I read the 64-bit integer value from the API output?

20. When should I use iterative APIs?

21. What is the minimum version of Data ONTAP that supports the IPv6 feature?

top

22. How do I know whether IPv6 is configured in a storage system?

23. Where can I get information about configuring IPv6 on the storage system?

24. Should I change the configuration of the storage system to make Data ONTAP APIs queries on an IPv6 network?

25. How do I know whether a storage system is a NetApp storage system or an IBM N series system?

26. How can I retrieve the vendor ID of my storage system?

27. What are the Microsoft .Net Framework languages supported by Manage ONTAP SDK 3.5?

28. Where can I find more information about errors returned by the Microsoft .NET Core APIs?

29. Can I make use of certificate-based authentication using HTTPS?

30. Where can I find ntapadmin.dll?

top

31. Where can I find ManageOntap.dll?

32. What are the libraries required for PowerShell support?

33. I cannot run scripts when I first install Windows PowerShell.

34. The utilites, apitest and ZExplore, fail to execute and display the error message "The system cannot execute the specified program". What is wrong?

35. What is the minimum version of DataFabric Manager that supports Web services?

36. How would an API behave if it is invoked during a cluster failover?

37. How do I know whether a NetApp storage system (using Data ONTAP 8.1 or higher) is in 7-Mode or Cluster-Mode?

38. How do I determine the list of all supported LIFs and IP addresses in a Cluster by using a program?

top

### 1. How do I get set_style() with the HOSTS option in Perl if I get "Authorization failed" error?

The HOSTS option requires the 'httpd.admin.hostsequiv.enable' option on the storage system to be set to 'on'.

If you use the Perl API set_style() with the HOSTS option, and 'httpd.admin.hostsequiv.enable' is not set to 'on', you get the error message 'Authorization failed'. It runs the rsh command successfully on the storage system.

Following is the output when you run the options httpd command:

httpd.access | legacy
httpd.admin.access | legacy
httpd.admin.enable | on
httpd.admin.hostsequiv.enable | on
httpd.admin.max_connections | 512
httpd.admin.ssl.enable | off
httpd.autoindex.enable | on
httpd.enable | on
httpd.log.format | common
httpd.method.trace.enable | off
httpd.rootdir | XXX
httpd.timeout | 300
httpd.timewait.enable | off

To set the above option, run the following command on a NetApp storage system:

$options httpd.admin.hostsequiv.enable on

top

### 2. How do I fix the "SSL initialization" error while using HTTPS transport option in my application?

Check whether OpenSSL libraries are in your Path environment variable. On UNIX, check whether LD_LIBRARY_PATH has path for OpenSSL libraries. On Windows, check whether the PATH environment variable has a path for OpenSSL libraries.

When the path is not set as mentioned above, the application fails and sends the error message "SSL initialization failed".

### 3. Which ports are used on the storage system for Data ONTAP API communication?

Following are the default ports on the storage system used for Data ONTAP API communication:

HTTP transport - 80

HTTPS transport - 443

###

### 4. Where do I find information about the NetApp SNMP MIBs and supported Data ONTAP versions?

The SNMP MIB files are present at the NOW site. Click here to view.

### 5. Can I connect to a MultiStore system (vFiler) using HTTPS?

No. SSL is not supported on MultiStore/vFiler systems. Therefore, Data ONTAP API calls to MultiStore or vFiler systems using HTTPS as the transport mechanism is not possible. To overcome this limitation, use the vFiler tunneling feature of the SDK.

### 6. What is vFiler tunneling?

vFiler tunneling is the ability to execute an API on a vFiler unit through a physical storage system. This feature is supported by the -v option of the apitest utility. The na_server_set_vfiler() interface is used for this purpose.

For more information, click here
.

### 7. What are the vFiler-enabled APIs?

vFiler-enabled API are used to access a vFiler unit, and the APIs are made available on the IP address of the vFiler unit's.

To view the list of vFiler APIs, click here. This list contains all the Data ONTAP vFiler-enabled APIs.

top

### 8. Does ONTAPI access to vFiler units using HTTP work with Data ONTAP versions prior to 7.2?

No. It only works from Data ONTAP 7.2.1 and later.

### 9. Do SDK libraries work with older Data ONTAP versions?

Yes. Libraries in the later versions of the Manage ONTAP SDK work with the older APIs. For example, Manage ONTAP SDK 1.6 works with Data ONTAP versions prior to 7.2.

###

### 10. Which version of ONTAPI should be used by the client programs?

As a good practice, the client program should specify the lowest ONTAPI version that corresponds to the APIs used by the program. This ensures that the client program is usable on as many storage systems as possible.

If the client program specifies the latest version of ONTAPI, it is usable on the latest version of Data ONTAP only, even if it uses the older APIs.

The ONTAPI version is specified in na_server_open().

For example:

s = na_server_open(argv[1],1,4);

By providing ONTAPI 1.4 in the client program, it is usable on Data ONTAP 7.0, 7.1, and 7.2. You can use the API 'system-get-ontapi-version' command on the client program to know the ONTAPI version of Data ONTAP.

top

### 11. Where can I find more information about the error returned by the APIs?

The include/netapp_errno.h file in the SDK provides information about the error numbers returned by the APIs.

### 12. How does the Data ONTAP API behave in the absence of the required license on the storage system?

The Data ONTAP APIs return the EAPILICENSE error in the absence of the required license on the storage system.

### 13. Why do I get the error "Unable to find API: xyz (errno=13001)", when I issue the API 'xyz' on a particular vFiler unit of a storage system?

Not all the APIs are supported for vFiler units. Check the API documentation to determine whether the API is supported for vFiler units. If the 'vfiler-enabled' tag is "Yes", then the API is supported for vFiler units.

### 14. How do I make non-blocking API calls to the storage system?

You can set the timeout value for the server connection to a non-zero value to make API calls non-blocking. For the applications that use the C APIs, you can set the timeout value using the Core API na_server_set_timeout(). Timeout setting is not supported in Java and Perl APIs.

### 15. What is the maximum number of client connections that can be initiated between a client using the Data ONTAP API (or set of clients) and a storage system?

The total number of client connections is limited by the maximum HTTP connections allowed by the storage system. The option 'httpd.admin.max_connections' decides this value and falls in the range of 1 and 1023.

You can determine the maximum connections allowed by the storage system by entering the following command-line interface command:

$options httpd

httpd.access | legacy
httpd.admin.access | legacy
httpd.admin.enable | on
httpd.admin.hostsequiv.enable | on
httpd.admin.max_connections | 512*
httpd.admin.ssl.enable | off
httpd.autoindex.enable | on
httpd.enable | on
httpd.log.format | common
httpd.method.trace.enable | off
httpd.rootdir | XXX
httpd.timeout | 300
httpd.timewait.enable | off

* The value that is set.

top

### 16. For Data ONTAP 7.1 and later, when the retention year is set to greater than 2037, why does the API 'file-set-snaplock-retention-time()' fail with the error message "Retention year could not be set netapp.manage.NaAPIFailedException:SnapLock retention time is out of range (errno=34)"?

For Data ONTAP 7.1 and later, the longest permitted retention period is 70 years. To support an extended range for record retention dates, SnapLock provides a mechanism by which applications can specify retention dates up to January 19, 2071. This is accomplished by defining a new epoch for the last access time of January 1, 2003, at 00:00:00 GMT. Rather than offsetting the entire time range, SnapLock interprets last access times before January 1, 2003, as dates in the future, using the wraparound technique. This technique leaves all retention dates between January 1, 2003, and January 19, 2038 identical to the regular format. However, it remaps dates in the range 1970 through 2003 to the range 2038 through 2071.

For Data ONTAP 7.0 systems, the longest permitted retention period is 30 years, and setting a record's retention date to the 2038 through 2071 extended range is not supported. Therefore, for Data ONTAP 7.1 and later, to set the date beyond January 19,2038, you must map the date to a date in the range of 1970 through 2003.

### 17. For Data ONTAP 7.1 and later, why does the API file-set-snaplock-retention-time() allow setting a retention date that has already passed?

For Data ONTAP 7.1 and later, years 1970 through 2003 are remapped to 2038 through 2071. Therefore, the years from 1970 through 2003 actually represent the future years from 2038 to 2071. See question 15 for details.

top

### 18. Can I restrict a client from using a particular Data ONTAP API? How do I add role-based access control (RBAC) for Data ONTAP APIs?

Yes. You can do so by using either the useradmin command or APIs.

#### Using the useradmin command

Use the useradmin command to restrict the client from using Data ONTAP APIs.

For more information, see the $man useradmin command.

#### Using APIs

APIs support setting RBAC using the 'useradmin-*' API family. You can set a particular user to have only particular API capabilities. Following is the granularity with which you can assign API capabilities to a user:

Capability | Level of Access
api-* | Grants the specified role all API capabilities.
api-api_call_family-* | Grants the specified role the capability to call all API routines in the family api_call_family.
api-api_call | Grants the specified role the capability to call the API api_call.

Note: Users with API capability also require the login-http-admin capability to execute APIs.

top

### 19. How can I read the 64-bit integer value from the API output?

You can use the na_child_get_int64() or na_child_get_uint64() API to read a 64-bit integer value.

Prior to Manage ONTAP SDK 3.0, the 64-bit integer value was read as a string by using the API na_child_get_string(), and then the string was converted to a 64-bit integer.

### 20. When should I use iterative APIs?

Use iterative APIs when the output is expected to have a large amount of data (for example, thousands of qtrees).

Do not use iterative APIs when the output does not contain a large amount of data.

### 21. What is the minimum version of Data ONTAP that supports the IPv6 feature?

The IPv6 feature is supported from Data ONTAP 7.3.1 and later.

### 22. How do I know whether IPv6 is configured in a storage system?

To check whether IPv6 is configured, run the following command:

$ifconfig -a

Look for the inet6 address or IPv6 format address. An example of an IPv6 address is as follows: 3ffe:1900:4545:3:200:f8ff:fe21:67cf

top

### 23. Where can I get information on configuring IPv6 on the storage system?

For information about how to configure IPv6, see the Data ONTAP Network Management Guide that corresponds to the Data ONTAP version on your system.

###

### 24. Should I change the configuration of the storage system to make Data ONTAP APIs queries on an IPv6 network?

Yes. You must enable the option httpd.ipv6.enable to make Data ONTAP APIs queries using the HTTP or HTTPS transport mechanism on an IPv6 network.

To enable IPv6, run the following command:

$options http

To use the Windows DCE/RPC transport mechanism on an IPv6 network, enable option cifs.ipv6.enable. Run the following command to enable the option cifs.ipv6.enable:

$options cifs.ipv6.enable on

### 25. How do I know whether a storage system is a NetApp storage system or an IBM N series system?

Use the system-get-version API to get the vendor information.

For a NetApp storage system, the output is as follows:

$apitest <host> <user> <password> system-get-version

<results status="passed">

<version>NetApp Release 7.3: Fri May 9 08:47:06 PDT 2008</version>

</results>

Following is the output for an IBM N series system, which has an IBM tag:

$apitest <host> <user> <password> system-get-version

<results status="passed">

<version>Data ONTAP Release 7.1.2: Thu Feb 22 00:45:26 PST 2007 (IBM)</version>

</results>

top

### 26. How can I retrieve the vendor ID of my storage system?

The system-get-info API returns the vendor ID as part of output parameter vendor-id. The value for vendor-id is NetApp for NetApp storage systems and IBM for IBM N series systems.

Following is an example of system-get-info:

<results status="passed">

<system-info>

<system-id>0084181440</system-id>

<system-model>FAS270</system-model>

<vendor-id>NetApp</vendor-id>

<system-serial-number>3047474</system-serial-number>

............

</system-info>

</results>

<results status="passed">

<system-info>

<system-id>0084181440</system-id>

<system-model>FAS270</system-model>

<vendor-id>IBM</vendor-id>

<system-serial-number>3047474</system-serial-number>

............

</system-info>

</results>

top

### 27. What are the Microsoft .Net Framework languages supported by Manage ONTAP SDK 3.5.1?

The Microsoft .Net Framework languages that Manage ONTAP SDK 3.5 supports are C#, VB.NET, and PowerShell.

###

### 28. Where can I find more information about errors returned by the Microsoft .NET Core APIs?

To view all the errors returned by the APIs, launch the Microsoft .NET Core API documentation. Select the topic ErrNo Enumeration from the Table of Contents.

### 29. Can I make use of certificate-based authentication using HTTPS?

Certificate-based authentication is not yet supported by the Manage ONTAP SDK.

###

### 30. Where can I find ntapadmin.dll?

The ntapadmin.dll library is at lib/nt. It is required for the RPC transport mechanism.

###

### 31. Where can I find ManageOntap.dll?

The ManageOntap.dll library is at lib/Dotnet. It is required for PowerShell and .NET application programming.

top

### 32. What are the libraries required for PowerShell support?

PowerShell requires a Microsoft .NET based ManageOntap.dll library. For RPC transport mechanism, you need ntapadmin.dll.

For PowerShell cmdlets, you require the following additional Microsoft .NET libraries:

- System.Management.Automation.dll (PowerShell usually installs this assembly at C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 directory)

- System.Configuration.Install.dll

- System.Management.dll

### 33. I cannot run scripts when I first install Windows PowerShell.

By default, Execution Policy (a security feature in PowerShell) prevents script execution. To list execution policies, type the command Get-Help about_signing in the Windows PowerShell prompt. Use the Set-ExecutionPolicy cmdlet to set the new policy.

### 34. The utilites, apitest and ZExplore, display the error message "The system cannot execute the specified program" and fail to execute. What is wrong?

You have to install Microsoft Visual C++ 2005 SP1 Redistributable Package on your system. Download this package from Microsoft Download Center.

top

### 35. What is the minimum version of DataFabric Manager that supports Web services?

DataFabric Manager 4.0 or later supports the Web services feature.

### 36. How would an API behave if it is invoked during a cluster failover?

During a cluster failover, the storage system undergoes a downtime of approximately one minute. API requests that are sent during this downtime fail.

### 37. How do I know whether a NetApp storage system (using Data ONTAP 8.1 or higher) is in 7-Mode or Cluster-Mode?

Run the command: apitest <host> <user> <password> system-get-version

Look for the tag <is-clustered>, which indicates the mode of the Data ONTAP version.

### 38. How do I determine the list of all supported LIFs and IP addresses in a Cluster by using a program?

1. Run the apitest and use the net-interface-get-iter Cluster-Mode API to discover the list of all the supported LIFs and IP addresses: apitest <host> <user> <passwd> net-interface-get-iter

2. After you obtain the LIFs, you can connect to the specific LIF and invoke an API.

###

top