Mistake on this page?
Report an issue in GitHub or email us
nsapi_types.h
1 
2 /** \addtogroup netsocket */
3 /** @{*/
4 /* nsapi.h - The network socket API
5  * Copyright (c) 2015 ARM Limited
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 
20 #ifndef NSAPI_TYPES_H
21 #define NSAPI_TYPES_H
22 
23 #include <stdint.h>
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 
30 /** Enum of standardized error codes
31  *
32  * Valid error codes have negative values and may
33  * be returned by any network operation.
34  *
35  * @enum nsapi_error
36  */
38  NSAPI_ERROR_OK = 0, /*!< no error */
39  NSAPI_ERROR_WOULD_BLOCK = -3001, /*!< no data is not available but call is non-blocking */
40  NSAPI_ERROR_UNSUPPORTED = -3002, /*!< unsupported functionality */
41  NSAPI_ERROR_PARAMETER = -3003, /*!< invalid configuration */
42  NSAPI_ERROR_NO_CONNECTION = -3004, /*!< not connected to a network */
43  NSAPI_ERROR_NO_SOCKET = -3005, /*!< socket not available for use */
44  NSAPI_ERROR_NO_ADDRESS = -3006, /*!< IP address is not known */
45  NSAPI_ERROR_NO_MEMORY = -3007, /*!< memory resource not available */
46  NSAPI_ERROR_NO_SSID = -3008, /*!< ssid not found */
47  NSAPI_ERROR_DNS_FAILURE = -3009, /*!< DNS failed to complete successfully */
48  NSAPI_ERROR_DHCP_FAILURE = -3010, /*!< DHCP failed to complete successfully */
49  NSAPI_ERROR_AUTH_FAILURE = -3011, /*!< connection to access point failed */
50  NSAPI_ERROR_DEVICE_ERROR = -3012, /*!< failure interfacing with the network processor */
51  NSAPI_ERROR_IN_PROGRESS = -3013, /*!< operation (eg connect) in progress */
52  NSAPI_ERROR_ALREADY = -3014, /*!< operation (eg connect) already in progress */
53  NSAPI_ERROR_IS_CONNECTED = -3015, /*!< socket is already connected */
54  NSAPI_ERROR_CONNECTION_LOST = -3016, /*!< connection lost */
55  NSAPI_ERROR_CONNECTION_TIMEOUT = -3017, /*!< connection timed out */
56  NSAPI_ERROR_ADDRESS_IN_USE = -3018, /*!< Address already in use */
57  NSAPI_ERROR_TIMEOUT = -3019, /*!< operation timed out */
58  NSAPI_ERROR_BUSY = -3020, /*!< device is busy and cannot accept new operation */
59 };
60 
61 
62 /** Enum of connection status types
63  *
64  * Valid error codes have negative values.
65  *
66  * @enum nsapi_connection_status
67  */
69  NSAPI_STATUS_LOCAL_UP = 0, /*!< local IP address set */
70  NSAPI_STATUS_GLOBAL_UP = 1, /*!< global IP address set */
71  NSAPI_STATUS_DISCONNECTED = 2, /*!< no connection to network */
72  NSAPI_STATUS_CONNECTING = 3, /*!< connecting to network */
73  NSAPI_STATUS_ERROR_UNSUPPORTED = NSAPI_ERROR_UNSUPPORTED
74 } nsapi_connection_status_t;
75 
76 
77 /** Enum of event types
78  *
79  * Event callbacks are accompanied with an event-dependent parameter passed as an intptr_t.
80  *
81  * @enum nsapi_event
82  */
83 typedef enum nsapi_event {
84  NSAPI_EVENT_CONNECTION_STATUS_CHANGE = 0, /*!< network connection status has changed, the parameter = new status (nsapi_connection_status_t) */
85  NSAPI_EVENT_CELLULAR_STATUS_BASE = 0x1000, /*!< Cellular modem status has changed, See the enum values from enum cellular_connection_status_t in /features/cellular/framework/common/CellularCommon.h */
86  NSAPI_EVENT_CELLULAR_STATUS_END = 0x1FFF /*!< cellular modem status has changed, See the enum values from enum cellular_connection_status_t in /features/cellular/framework/common/CellularCommon.h */
87 } nsapi_event_t;
88 
89 
90 /** Type used to represent error codes
91  *
92  * This is a separate type from enum nsapi_error to avoid breaking
93  * compatibility in type-sensitive overloads
94  */
95 typedef signed int nsapi_error_t;
96 
97 /** Type used to represent the size of data passed through sockets
98  */
99 typedef unsigned int nsapi_size_t;
100 
101 /** Type used to represent either a size or error passed through sockets
102  *
103  * A valid nsapi_size_or_error_t is either a non-negative size or a
104  * negative error code from the nsapi_error_t
105  */
106 typedef signed int nsapi_size_or_error_t;
107 
108 /** Type used to represent either a value or error
109  *
110  * A valid nsapi_value_or_error_t is either a non-negative value or a
111  * negative error code from the nsapi_error_t
112  */
113 typedef signed int nsapi_value_or_error_t;
114 
115 /** Enum of encryption types
116  *
117  * The security type specifies a particular security to use when
118  * connected to a WiFi network
119  */
120 typedef enum nsapi_security {
121  NSAPI_SECURITY_NONE = 0x0, /*!< open access point */
122  NSAPI_SECURITY_WEP = 0x1, /*!< phrase conforms to WEP */
123  NSAPI_SECURITY_WPA = 0x2, /*!< phrase conforms to WPA */
124  NSAPI_SECURITY_WPA2 = 0x3, /*!< phrase conforms to WPA2 */
125  NSAPI_SECURITY_WPA_WPA2 = 0x4, /*!< phrase conforms to WPA/WPA2 */
126  NSAPI_SECURITY_PAP = 0x5, /*!< phrase conforms to PPP authentication context */
127  NSAPI_SECURITY_CHAP = 0x6, /*!< phrase conforms to PPP authentication context */
128  NSAPI_SECURITY_EAP_TLS = 0x7, /*!< phrase conforms to EAP-TLS */
129  NSAPI_SECURITY_PEAP = 0x8, /*!< phrase conforms to PEAP */
130  NSAPI_SECURITY_WPA2_ENT = 0x9, /*!< phrase conforms to WPA2-AES and WPA-TKIP with enterprise security */
131  NSAPI_SECURITY_UNKNOWN = 0xFF, /*!< unknown/unsupported security in scan results */
133 
134 /** Size of 2 char network interface name from driver
135  */
136 #define NSAPI_INTERFACE_PREFIX_SIZE 2
137 
138 /** Maximum size of network interface name
139  */
140 #define NSAPI_INTERFACE_NAME_MAX_SIZE 6
141 
142 /** Maximum size of IP address representation
143  */
144 #define NSAPI_IP_SIZE NSAPI_IPv6_SIZE
145 
146 /** Maximum number of bytes for IP address
147  */
148 #define NSAPI_IP_BYTES NSAPI_IPv6_BYTES
149 
150 /** Maximum size of MAC address representation
151  */
152 #define NSAPI_MAC_SIZE 18
153 
154 /** Maximum number of bytes for MAC address
155  */
156 #define NSAPI_MAC_BYTES 6
157 
158 /** Size of IPv4 representation
159  */
160 #define NSAPI_IPv4_SIZE 16
161 
162 /** Number of bytes in IPv4 address
163  */
164 #define NSAPI_IPv4_BYTES 4
165 
166 /** Size of IPv6 representation
167  */
168 #define NSAPI_IPv6_SIZE 40
169 
170 /** Number of bytes in IPv6 address
171  */
172 #define NSAPI_IPv6_BYTES 16
173 
174 /** Enum of IP address versions
175  *
176  * The IP version specifies the type of an IP address.
177  *
178  * @enum nsapi_version
179  */
180 typedef enum nsapi_version {
181  NSAPI_UNSPEC, /*!< Address is unspecified */
182  NSAPI_IPv4, /*!< Address is IPv4 */
183  NSAPI_IPv6, /*!< Address is IPv6 */
184 } nsapi_version_t;
185 
186 /** IP address structure for passing IP addresses by value
187  */
188 typedef struct nsapi_addr {
189  /** IP version
190  * - NSAPI_IPv4
191  * - NSAPI_IPv6
192  * - NSAPI_UNSPEC
193  */
194  nsapi_version_t version;
195 
196  /** IP address
197  * The raw bytes of the IP address stored in big-endian format
198  */
200 } nsapi_addr_t;
201 
202 
203 /** Opaque handle for network sockets
204  */
205 typedef void *nsapi_socket_t;
206 
207 
208 /** Enum of socket protocols
209  *
210  * The socket protocol specifies a particular protocol to
211  * be used with a newly created socket.
212  *
213  * @enum nsapi_protocol
214  */
215 typedef enum nsapi_protocol {
216  NSAPI_TCP, /*!< Socket is of TCP type */
217  NSAPI_UDP, /*!< Socket is of UDP type */
218  NSAPI_ICMP, /*!< Socket is of ICMP type */
219 } nsapi_protocol_t;
220 
221 /** Enum of standardized stack option levels
222  * for use with NetworkStack::setstackopt and getstackopt.
223  *
224  * @enum nsapi_stack_level
225  */
226 typedef enum nsapi_stack_level {
227  NSAPI_STACK = 5000, /*!< Stack option level - see nsapi_stack_option_t for options */
228 } nsapi_stack_level_t;
229 
230 /** Enum of standardized stack option names for level NSAPI_STACK
231  * of NetworkStack::setstackopt and getstackopt.
232  *
233  * These options may not be supported on all stacks, in which
234  * case NSAPI_ERROR_UNSUPPORTED may be returned.
235  *
236  * @enum nsapi_stack_option
237  */
238 typedef enum nsapi_stack_option {
239  NSAPI_IPV4_MRU, /*!< Sets/gets size of largest IPv4 fragmented datagram to reassemble */
240  NSAPI_IPV6_MRU, /*!< Sets/gets size of largest IPv6 fragmented datagram to reassemble */
241 } nsapi_stack_option_t;
242 
243 /** Enum of standardized socket option levels
244  * for use with Socket::setsockopt and getsockopt.
245  *
246  * @enum nsapi_socket_level
247  */
248 typedef enum nsapi_socket_level {
249  NSAPI_SOCKET = 7000, /*!< Socket option level - see nsapi_socket_option_t for options */
250 } nsapi_socket_level_t;
251 
252 /** Enum of standardized socket option names for level NSAPI_SOCKET
253  * of Socket::setsockopt and getsockopt.
254  *
255  * These options may not be supported on all stacks, in which
256  * case NSAPI_ERROR_UNSUPPORTED may be returned.
257  *
258  * @enum nsapi_socket_option
259  */
260 typedef enum nsapi_socket_option {
261  NSAPI_REUSEADDR, /*!< Allow bind to reuse local addresses */
262  NSAPI_KEEPALIVE, /*!< Enables sending of keepalive messages */
263  NSAPI_KEEPIDLE, /*!< Sets timeout value to initiate keepalive */
264  NSAPI_KEEPINTVL, /*!< Sets timeout value for keepalive */
265  NSAPI_LINGER, /*!< Keeps close from returning until queues empty */
266  NSAPI_SNDBUF, /*!< Sets send buffer size */
267  NSAPI_RCVBUF, /*!< Sets recv buffer size */
268  NSAPI_ADD_MEMBERSHIP, /*!< Add membership to multicast address */
269  NSAPI_DROP_MEMBERSHIP, /*!< Drop membership to multicast address */
270  NSAPI_BIND_TO_DEVICE, /*!< Bind socket network interface name*/
271 } nsapi_socket_option_t;
272 
273 typedef enum nsapi_tlssocket_level {
274  NSAPI_TLSSOCKET_LEVEL = 7099, /*!< TLSSocket option level - see nsapi_tlssocket_option_t for options*/
275 } nsapi_tlssocket_level_t;
276 
278  NSAPI_TLSSOCKET_SET_HOSTNAME, /*!< Set host name */
279  NSAPI_TLSSOCKET_SET_CACERT, /*!< Set server CA certificate */
280  NSAPI_TLSSOCKET_SET_CLCERT, /*!< Set client certificate */
281  NSAPI_TLSSOCKET_SET_CLKEY, /*!< Set client key */
282  NSAPI_TLSSOCKET_ENABLE /*!< Enable TLSSocket */
283 } nsapi_tlssocket_option_t;
284 
285 /** Supported IP protocol versions of IP stack
286  *
287  * @enum nsapi_ip_stack
288  */
289 typedef enum nsapi_ip_stack {
290  DEFAULT_STACK = 0,
291  IPV4_STACK,
292  IPV6_STACK,
293  IPV4V6_STACK
294 } nsapi_ip_stack_t;
295 
296 /* Backwards compatibility - previously didn't distinguish stack and socket options */
297 typedef nsapi_socket_level_t nsapi_level_t;
298 typedef nsapi_socket_option_t nsapi_option_t;
299 
300 /** nsapi_wifi_ap structure
301  *
302  * Structure representing a WiFi Access Point
303  */
304 typedef struct nsapi_wifi_ap {
305  char ssid[33]; /* 32 is what 802.11 defines as longest possible name; +1 for the \0 */
306  uint8_t bssid[6];
307  nsapi_security_t security;
308  int8_t rssi;
309  uint8_t channel;
311 
312 
313 /** nsapi_stack structure
314  *
315  * Stack structure representing a specific instance of a stack.
316  */
317 typedef struct nsapi_stack {
318  /** Network stack operation table
319  *
320  * Provides access to the underlying api of the stack. This is not
321  * flattened into the nsapi_stack to allow allocation in read-only
322  * memory.
323  */
324  const struct nsapi_stack_api *stack_api;
325 
326  /** Opaque handle for network stacks
327  */
328  void *stack;
329 
330  // Internal nsapi buffer
331  unsigned _stack_buffer[16];
332 } nsapi_stack_t;
333 
334 /** nsapi_ip_mreq structure
335  */
336 typedef struct nsapi_ip_mreq {
337  nsapi_addr_t imr_multiaddr; /* IP multicast address of group */
338  nsapi_addr_t imr_interface; /* local IP address of interface */
340 
341 /** nsapi_stack_api structure
342  *
343  * Common api structure for network stack operations. A network stack
344  * can provide a nsapi_stack_api structure filled out with the
345  * appropriate implementation.
346  *
347  * Unsupported operations can be left as null pointers.
348  */
349 typedef struct nsapi_stack_api {
350  /** Get the local IP address
351  *
352  * @param stack Stack handle
353  * @return Local IP Address or null address if not connected
354  */
355  nsapi_addr_t (*get_ip_address)(nsapi_stack_t *stack);
356 
357  /** Translates a hostname to an IP address
358  *
359  * The hostname may be either a domain name or an IP address. If the
360  * hostname is an IP address, no network transactions will be performed.
361  *
362  * If no stack-specific DNS resolution is provided, the hostname
363  * will be resolve using a UDP socket on the stack.
364  *
365  * @param stack Stack handle
366  * @param addr Destination for the host IP address
367  * @param host Hostname to resolve
368  * @param version Address family
369  * @return 0 on success, negative error code on failure
370  */
371  nsapi_error_t (*gethostbyname)(nsapi_stack_t *stack, const char *host, nsapi_addr_t *addr, nsapi_version_t version);
372 
373  /** Add a domain name server to list of servers to query
374  *
375  * @param addr Destination for the host address
376  * @return 0 on success, negative error code on failure
377  */
378  nsapi_error_t (*add_dns_server)(nsapi_stack_t *stack, nsapi_addr_t addr);
379 
380  /** Set stack-specific stack options
381  *
382  * The setstackopt allow an application to pass stack-specific hints
383  * to the underlying stack. For unsupported options,
384  * NSAPI_ERROR_UNSUPPORTED is returned and the stack is unmodified.
385  *
386  * @param stack Stack handle
387  * @param level Stack-specific protocol level
388  * @param optname Stack-specific option identifier
389  * @param optval Option value
390  * @param optlen Length of the option value
391  * @return 0 on success, negative error code on failure
392  */
393  nsapi_error_t (*setstackopt)(nsapi_stack_t *stack, int level,
394  int optname, const void *optval, unsigned optlen);
395 
396  /** Get stack-specific stack options
397  *
398  * The getstackopt allow an application to retrieve stack-specific hints
399  * from the underlying stack. For unsupported options,
400  * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified.
401  *
402  * @param stack Stack handle
403  * @param level Stack-specific protocol level
404  * @param optname Stack-specific option identifier
405  * @param optval Destination for option value
406  * @param optlen Length of the option value
407  * @return 0 on success, negative error code on failure
408  */
409  nsapi_error_t (*getstackopt)(nsapi_stack_t *stack, int level,
410  int optname, void *optval, unsigned *optlen);
411 
412  /** Opens a socket
413  *
414  * Creates a network socket and stores it in the specified handle.
415  * The handle must be passed to following calls on the socket.
416  *
417  * A stack may have a finite number of sockets, in this case
418  * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
419  *
420  * @param stack Stack context
421  * @param socket Destination for the handle to a newly created socket
422  * @param proto Protocol of socket to open, NSAPI_TCP or NSAPI_UDP
423  * @return 0 on success, negative error code on failure
424  */
425  nsapi_error_t (*socket_open)(nsapi_stack_t *stack, nsapi_socket_t *socket,
426  nsapi_protocol_t proto);
427 
428  /** Close the socket
429  *
430  * Closes any open connection and deallocates any memory associated
431  * with the socket.
432  *
433  * @param stack Stack handle
434  * @param socket Socket handle
435  * @return 0 on success, negative error code on failure
436  */
437  nsapi_error_t (*socket_close)(nsapi_stack_t *stack, nsapi_socket_t socket);
438 
439  /** Bind a specific address to a socket
440  *
441  * Binding a socket specifies the address and port on which to receive
442  * data. If the IP address is zeroed, only the port is bound.
443  *
444  * @param stack Stack handle
445  * @param socket Socket handle
446  * @param addr Local address to bind, may be null
447  * @param port Local port to bind
448  * @return 0 on success, negative error code on failure.
449  */
450  nsapi_error_t (*socket_bind)(nsapi_stack_t *stack, nsapi_socket_t socket,
451  nsapi_addr_t addr, uint16_t port);
452 
453  /** Listen for connections on a TCP socket
454  *
455  * Marks the socket as a passive socket that can be used to accept
456  * incoming connections.
457  *
458  * @param stack Stack handle
459  * @param socket Socket handle
460  * @param backlog Number of pending connections that can be queued
461  * simultaneously
462  * @return 0 on success, negative error code on failure
463  */
464  nsapi_error_t (*socket_listen)(nsapi_stack_t *stack, nsapi_socket_t socket, int backlog);
465 
466  /** Connects TCP socket to a remote host
467  *
468  * Initiates a connection to a remote server specified by the
469  * indicated address.
470  *
471  * @param stack Stack handle
472  * @param socket Socket handle
473  * @param addr The address of the remote host
474  * @param port The port of the remote host
475  * @return 0 on success, negative error code on failure
476  */
477  nsapi_error_t (*socket_connect)(nsapi_stack_t *stack, nsapi_socket_t socket,
478  nsapi_addr_t addr, uint16_t port);
479 
480  /** Accepts a connection on a TCP socket
481  *
482  * The server socket must be bound and set to listen for connections.
483  * On a new connection, creates a network socket and stores it in the
484  * specified handle. The handle must be passed to following calls on
485  * the socket.
486  *
487  * A stack may have a finite number of sockets, in this case
488  * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
489  *
490  * This call is non-blocking. If accept would block,
491  * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
492  *
493  * @param stack Stack handle
494  * @param server Socket handle to server to accept from
495  * @param socket Destination for a handle to the newly created socket
496  * @param addr Destination for the address of the remote host
497  * @param port Destination for the port of the remote host
498  * @return 0 on success, negative error code on failure
499  */
500  nsapi_error_t (*socket_accept)(nsapi_stack_t *stack, nsapi_socket_t server,
501  nsapi_socket_t *socket, nsapi_addr_t *addr, uint16_t *port);
502 
503  /** Send data over a TCP socket
504  *
505  * The socket must be connected to a remote host. Returns the number of
506  * bytes sent from the buffer.
507  *
508  * This call is non-blocking. If send would block,
509  * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
510  *
511  * @param stack Stack handle
512  * @param socket Socket handle
513  * @param data Buffer of data to send to the host
514  * @param size Size of the buffer in bytes
515  * @return Number of sent bytes on success, negative error
516  * code on failure
517  */
518  nsapi_size_or_error_t (*socket_send)(nsapi_stack_t *stack, nsapi_socket_t socket,
519  const void *data, nsapi_size_t size);
520 
521  /** Receive data over a TCP socket
522  *
523  * The socket must be connected to a remote host. Returns the number of
524  * bytes received into the buffer.
525  *
526  * This call is non-blocking. If recv would block,
527  * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
528  *
529  * @param stack Stack handle
530  * @param socket Socket handle
531  * @param data Destination buffer for data received from the host
532  * @param size Size of the buffer in bytes
533  * @return Number of received bytes on success, negative error
534  * code on failure
535  */
536  nsapi_size_or_error_t (*socket_recv)(nsapi_stack_t *stack, nsapi_socket_t socket,
537  void *data, nsapi_size_t size);
538 
539  /** Send a packet over a UDP socket
540  *
541  * Sends data to the specified address. Returns the number of bytes
542  * sent from the buffer.
543  *
544  * This call is non-blocking. If sendto would block,
545  * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
546  *
547  * @param stack Stack handle
548  * @param socket Socket handle
549  * @param addr The address of the remote host
550  * @param port The port of the remote host
551  * @param data Buffer of data to send to the host
552  * @param size Size of the buffer in bytes
553  * @return Number of sent bytes on success, negative error
554  * code on failure
555  */
556  nsapi_size_or_error_t (*socket_sendto)(nsapi_stack_t *stack, nsapi_socket_t socket,
557  nsapi_addr_t addr, uint16_t port, const void *data, nsapi_size_t size);
558 
559  /** Receive a packet over a UDP socket
560  *
561  * Receives data and stores the source address in address if address
562  * is not NULL. Returns the number of bytes received into the buffer.
563  *
564  * This call is non-blocking. If recvfrom would block,
565  * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
566  *
567  * @param stack Stack handle
568  * @param socket Socket handle
569  * @param addr Destination for the address of the remote host
570  * @param port Destination for the port of the remote host
571  * @param data Destination buffer for data received from the host
572  * @param size Size of the buffer in bytes
573  * @return Number of received bytes on success, negative error
574  * code on failure
575  */
576  nsapi_size_or_error_t (*socket_recvfrom)(nsapi_stack_t *stack, nsapi_socket_t socket,
577  nsapi_addr_t *addr, uint16_t *port, void *buffer, nsapi_size_t size);
578 
579  /** Register a callback on state change of the socket
580  *
581  * The specified callback will be called on state changes such as when
582  * the socket can recv/send/accept successfully and on when an error
583  * occurs. The callback may also be called spuriously without reason.
584  *
585  * The callback may be called in an interrupt context and should not
586  * perform expensive operations such as recv/send calls.
587  *
588  * @param stack Stack handle
589  * @param socket Socket handle
590  * @param callback Function to call on state change
591  * @param data Argument to pass to callback
592  */
593  void (*socket_attach)(nsapi_stack_t *stack, nsapi_socket_t socket,
594  void (*callback)(void *), void *data);
595 
596  /** Set stack-specific socket options
597  *
598  * The setsockopt allow an application to pass stack-specific hints
599  * to the underlying stack. For unsupported options,
600  * NSAPI_ERROR_UNSUPPORTED is returned and the socket is unmodified.
601  *
602  * @param stack Stack handle
603  * @param socket Socket handle
604  * @param level Stack-specific protocol level
605  * @param optname Stack-specific option identifier
606  * @param optval Option value
607  * @param optlen Length of the option value
608  * @return 0 on success, negative error code on failure
609  */
610  nsapi_error_t (*setsockopt)(nsapi_stack_t *stack, nsapi_socket_t socket, int level,
611  int optname, const void *optval, unsigned optlen);
612 
613  /** Get stack-specific socket options
614  *
615  * The getstackopt allow an application to retrieve stack-specific hints
616  * from the underlying stack. For unsupported options,
617  * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified.
618  *
619  * @param stack Stack handle
620  * @param socket Socket handle
621  * @param level Stack-specific protocol level
622  * @param optname Stack-specific option identifier
623  * @param optval Destination for option value
624  * @param optlen Length of the option value
625  * @return 0 on success, negative error code on failure
626  */
627  nsapi_error_t (*getsockopt)(nsapi_stack_t *stack, nsapi_socket_t socket, int level,
628  int optname, void *optval, unsigned *optlen);
630 
631 
632 #ifdef __cplusplus
633 }
634 #endif
635 
636 #endif
637 
638 /** @}*/
nsapi_stack structure
Definition: nsapi_types.h:317
nsapi_stack_option
Enum of standardized stack option names for level NSAPI_STACK of NetworkStack::setstackopt and getsta...
Definition: nsapi_types.h:238
const struct nsapi_stack_api * stack_api
Network stack operation table.
Definition: nsapi_types.h:324
void * nsapi_socket_t
Opaque handle for network sockets.
Definition: nsapi_types.h:205
void * stack
Opaque handle for network stacks.
Definition: nsapi_types.h:328
nsapi_security
Enum of encryption types.
Definition: nsapi_types.h:120
nsapi_stack_api structure
Definition: nsapi_types.h:349
signed int nsapi_error_t
Type used to represent error codes.
Definition: nsapi_types.h:95
struct nsapi_stack_api nsapi_stack_api_t
nsapi_stack_api structure
nsapi_stack_level
Enum of standardized stack option levels for use with NetworkStack::setstackopt and getstackopt...
Definition: nsapi_types.h:226
nsapi_ip_stack
Supported IP protocol versions of IP stack.
Definition: nsapi_types.h:289
signed int nsapi_size_or_error_t
Type used to represent either a size or error passed through sockets.
Definition: nsapi_types.h:106
#define NSAPI_IP_BYTES
Maximum number of bytes for IP address.
Definition: nsapi_types.h:148
nsapi_socket_level
Enum of standardized socket option levels for use with Socket::setsockopt and getsockopt.
Definition: nsapi_types.h:248
signed int nsapi_value_or_error_t
Type used to represent either a value or error.
Definition: nsapi_types.h:113
struct nsapi_addr nsapi_addr_t
IP address structure for passing IP addresses by value.
nsapi_wifi_ap structure
Definition: nsapi_types.h:304
nsapi_event
Enum of event types.
Definition: nsapi_types.h:83
struct nsapi_wifi_ap nsapi_wifi_ap_t
nsapi_wifi_ap structure
uint8_t bytes[16]
IP address The raw bytes of the IP address stored in big-endian format.
Definition: nsapi_types.h:199
Callback< R(ArgTs...)> callback(R(*func)(ArgTs...)=0)
Create a callback class with type inferred from the arguments.
Definition: Callback.h:709
nsapi_version_t version
IP version.
Definition: nsapi_types.h:194
nsapi_connection_status
Enum of connection status types.
Definition: nsapi_types.h:68
unsigned int nsapi_size_t
Type used to represent the size of data passed through sockets.
Definition: nsapi_types.h:99
IP address structure for passing IP addresses by value.
Definition: nsapi_types.h:188
enum nsapi_security nsapi_security_t
Enum of encryption types.
nsapi_tlssocket_level
Definition: nsapi_types.h:273
struct nsapi_ip_mreq nsapi_ip_mreq_t
nsapi_ip_mreq structure
nsapi_error
Enum of standardized error codes.
Definition: nsapi_types.h:37
nsapi_tlssocket_option
Definition: nsapi_types.h:277
struct nsapi_stack nsapi_stack_t
nsapi_stack structure
nsapi_ip_mreq structure
Definition: nsapi_types.h:336
nsapi_protocol
Enum of socket protocols.
Definition: nsapi_types.h:215
nsapi_socket_option
Enum of standardized socket option names for level NSAPI_SOCKET of Socket::setsockopt and getsockopt...
Definition: nsapi_types.h:260
nsapi_version
Enum of IP address versions.
Definition: nsapi_types.h:180
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.