123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- /****************************************************************************
- * include/netdb.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
- #ifndef __INCLUDE_NETDB_H
- #define __INCLUDE_NETDB_H
- /****************************************************************************
- * Included Files
- ****************************************************************************/
- #include <nuttx/config.h>
- #include <nuttx/compiler.h>
- /* Inclusion of the <netdb.h> header may also make visible all symbols from
- * <netinet/in.h>, <sys/socket.h>, and <inttypes.h>.
- */
- #include <inttypes.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- /****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
- /* The <netdb.h> header shall define the IPPORT_RESERVED macro with the
- * value of the highest reserved Internet port number.
- */
- #define IPPORT_RESERVED 0xffff /* No reserved port numbers */
- /* The <netdb.h> header shall define the following macros that evaluate to
- * bitwise-distinct integer constants for use in the flags field of the
- * addrinfo structure:
- *
- * AI_PASSIVE - Socket address is intended for bind().
- * AI_CANONNAME - Request for canonical name.
- * AI_NUMERICHOST - Return numeric host address as name.
- * AI_NUMERICSERV - Inhibit service name resolution.
- * AI_V4MAPPED - If no IPv6 addresses are found, query for IPv4
- * addresses and return them to the caller as IPv4-mapped
- * IPv6 addresses.
- * AI_ALL - Query for both IPv4 and IPv6 addresses.
- * AI_ADDRCONFIG - Query for IPv4 addresses only when an IPv4 address is
- * configured; query for IPv6 addresses only when an IPv6
- * address is configured.
- */
- #define AI_PASSIVE (1 << 0)
- #define AI_CANONNAME (1 << 1)
- #define AI_NUMERICHOST (1 << 2)
- #define AI_NUMERICSERV (1 << 3)
- #define AI_V4MAPPED (1 << 4)
- #define AI_ALL (1 << 5)
- #define AI_ADDRCONFIG (1 << 6)
- /* The <netdb.h> header shall define the following macros that evaluate to
- * bitwise-distinct integer constants for use in the flags argument to
- * getnameinfo():
- *
- * NI_NOFQDN - Only the nodename portion of the FQDN is returned for
- * local hosts.
- * NI_NUMERICHOST - The numeric form of the node's address is returned
- * instead of its name.
- * NI_NAMEREQD - Return an error if the node's name cannot be located
- * in the database.
- * NI_NUMERICSERV - The numeric form of the service address is returned
- * instead of its name.
- * NI_NUMERICSCOPE - For IPv6 addresses, the numeric form of the scope
- * identifier is returned instead of its name.
- * NI_DGRAM - Indicates that the service is a datagram service
- * (SOCK_DGRAM).
- */
- #define NI_NOFQDN (1 << 0)
- #define NI_NUMERICHOST (1 << 1)
- #define NI_NAMEREQD (1 << 2)
- #define NI_NUMERICSERV (1 << 3)
- #define NI_NUMERICSCOPE (1 << 4)
- #define NI_DGRAM (1 << 5)
- /* Address Information Errors. The <netdb.h> header shall define the
- * following macros for use as error values for getaddrinfo() and
- * getnameinfo():
- *
- * EAI_AGAIN - The name could not be resolved at this time. Future
- * attempts may succeed.
- * EAI_BADFLAGS - The flags had an invalid value.
- * EAI_FAIL - A non-recoverable error occurred.
- * EAI_FAMILY - The address family was not recognized or the address
- * length was invalid for the specified family.
- * EAI_MEMORY - There was a memory allocation failure.
- * EAI_NONAME - The name does not resolve for the supplied
- * parameters. NI_NAMEREQD is set and the host's name
- * cannot be located, or both nodename and servname were
- * null.
- * EAI_SERVICE - The service passed was not recognized for the
- * specified socket type.
- * EAI_SOCKTYPE - The intended socket type was not recognized.
- * EAI_SYSTEM - A system error occurred. The error code can be found
- * in errno.
- * EAI_OVERFLOW - An argument buffer overflowed.
- */
- #define EAI_AGAIN 1
- #define EAI_BADFLAGS 2
- #define EAI_FAIL 3
- #define EAI_FAMILY 4
- #define EAI_MEMORY 5
- #define EAI_NONAME 6
- #define EAI_SERVICE 7
- #define EAI_SOCKTYPE 8
- #define EAI_SYSTEM 9
- #define EAI_OVERFLOW 10
- /* h_errno values that may be returned by gethosbyname(), gethostbyname_r(),
- * gethostbyaddr(), or gethostbyaddr_r()
- *
- * HOST_NOT_FOUND - No such host is known.
- *
- * NO_DATA - The server recognized the request and the name, but no
- * address is available. Another type of request to the name server
- * for the domain might return an answer.
- *
- * NO_RECOVERY - An unexpected server failure occurred which cannot be
- * recovered.
- *
- * TRY_AGAIN - A temporary and possibly transient error occurred, such as
- * a failure of a server to respond.
- *
- * These are obsolete and were removed in the Open Group Base Specifications
- * Issue 7, 2018 edition.
- */
- #define HOST_NOT_FOUND 1
- #define NO_DATA 2
- #define NO_ADDRESS NO_DATA
- #define NO_RECOVERY 3
- #define TRY_AGAIN 4
- /* NI_MAXHOST is the max of
- *
- * CONFIG_NETDB_DNSCLIENT_NAMESIZE + 1
- * INET6_ADDRSTRLEN
- * INET_ADDRSTRLEN
- *
- * Note: INETxxx_ADDRSTRLEN already includes the terminating NUL.
- * Note: INET6_ADDRSTRLEN > INET_ADDRSTRLEN is assumed.
- */
- #if defined(CONFIG_NET_IPv6)
- #define _INET_ADDRSTRLEN INET6_ADDRSTRLEN
- #else
- #define _INET_ADDRSTRLEN INET_ADDRSTRLEN
- #endif
- #if defined(CONFIG_NETDB_DNSCLIENT) && \
- (CONFIG_NETDB_DNSCLIENT_NAMESIZE + 1) > _INET_ADDRSTRLEN
- #define NI_MAXHOST (CONFIG_NETDB_DNSCLIENT_NAMESIZE + 1)
- #else
- #define NI_MAXHOST _INET_ADDRSTRLEN
- #endif
- /* Right now, g_services_db[] only has "ntp".
- * 16 should be large enough.
- */
- #define NI_MAXSERV 16
- /****************************************************************************
- * Public Types
- ****************************************************************************/
- struct hostent
- {
- FAR char *h_name; /* Official name of the host. */
- FAR char **h_aliases; /* A pointer to an array of pointers to the
- * alternative host names, terminated by a
- * null pointer. */
- int h_addrtype; /* Address type. */
- int h_length; /* The length, in bytes, of the address. */
- FAR char **h_addr_list; /* A pointer to an array of pointers to network
- * addresses (in network byte order) for the host,
- * terminated by a null pointer. */
- };
- #define h_addr h_addr_list[0] /* For backward compatibility */
- struct netent
- {
- FAR char *n_name; /* Official, fully-qualified(including the domain)
- * name of the host. */
- FAR char **n_aliases; /* A pointer to an array of pointers to the
- * alternative network names, terminated by a
- * null pointer. */
- int n_addrtype; /* The address type of the network. */
- uint32_t n_net; /* The network number, in host byte order. */
- };
- struct protoent
- {
- FAR char *p_name; /* Official name of the protocol. */
- FAR char **p_aliases; /* A pointer to an array of pointers to
- * alternative protocol names, terminated by a
- * null pointer. */
- int p_proto; /* The protocol number. */
- };
- struct servent
- {
- FAR char *s_name; /* Official name of the service. */
- FAR char **s_aliases; /* A pointer to an array of pointers to
- * alternative service names, terminated by a
- * null pointer. */
- int s_port; /* The port number at which the service resides,
- * in network byte order. */
- FAR char *s_proto; /* The name of the protocol to use when
- * contacting the service. */
- };
- struct addrinfo
- {
- int ai_flags; /* Input flags. */
- int ai_family; /* Address family of socket. */
- int ai_socktype; /* Socket type. */
- int ai_protocol; /* Protocol of socket. */
- socklen_t ai_addrlen; /* Length of socket address. */
- FAR struct sockaddr *ai_addr; /* Socket address of socket. */
- FAR char *ai_canonname; /* Canonical name of service location. */
- FAR struct addrinfo *ai_next; /* Pointer to next in list. */
- };
- /****************************************************************************
- * Public Data
- ****************************************************************************/
- #ifdef __cplusplus
- #define EXTERN extern "C"
- extern "C"
- {
- #else
- #define EXTERN extern
- #endif
- /* When the <netdb.h> header is included, h_errno shall be available as a
- * modifiable lvalue of type int. It is unspecified whether h_errno is a
- * macro or an identifier declared with external linkage.
- *
- * h_errno is obsolete and was removed in the Open Group Base Specifications
- * Issue 7, 2018 edition.
- */
- /* REVISIT: This should at least be per-task? */
- EXTERN int h_errno;
- /****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
- #ifdef CONFIG_LIBC_NETDB
- #if 0 /* None of these are yet supported */
- void endhostent(void);
- void endnetent(void);
- void endprotoent(void);
- void endservent(void);
- #endif
- void freeaddrinfo(FAR struct addrinfo *ai);
- FAR const char *gai_strerror(int);
- int getaddrinfo(FAR const char *nodename,
- FAR const char *servname,
- FAR const struct addrinfo *hints,
- FAR struct addrinfo **res);
- int getnameinfo(FAR const struct sockaddr *sa,
- socklen_t salen, FAR char *node,
- socklen_t nodelen, FAR char *service,
- socklen_t servicelen, int flags);
- FAR struct hostent *gethostbyaddr(FAR const void *addr, socklen_t len,
- int type);
- FAR struct hostent *gethostbyname(FAR const char *name);
- FAR struct hostent *gethostbyname2(FAR const char *name, int type);
- FAR struct servent *getservbyport(int port, FAR const char *proto);
- FAR struct servent *getservbyname(FAR const char *name,
- FAR const char *proto);
- #if 0 /* None of these are yet supported */
- FAR struct hostent *gethostent(void);
- FAR struct netent *getnetbyaddr(uint32_t net, int type);
- FAR struct netent *getnetbyname(FAR const char *name);
- FAR struct netent *getnetent(void);
- FAR struct protoent *getprotobyname(FAR const char *name);
- FAR struct protoent *getprotobynumber(int proto);
- FAR struct protoent *getprotoent(void);
- FAR struct servent *getservent(void);
- void sethostent(int);
- void setnetent(int stayopen);
- void setprotoent(int stayopen);
- void setservent(int);
- #endif /* None of these are yet supported */
- /* Non-standard interfaces similar to Glibc 2 interfaces */
- int gethostbyaddr_r(FAR const void *addr, socklen_t len, int type,
- FAR struct hostent *host, FAR char *buf,
- size_t buflen, FAR struct hostent **result,
- FAR int *h_errnop);
- int gethostbyname_r(FAR const char *name,
- FAR struct hostent *host, FAR char *buf,
- size_t buflen, FAR struct hostent **result,
- FAR int *h_errnop);
- int gethostbyname2_r(FAR const char *name, int type,
- FAR struct hostent *host, FAR char *buf,
- size_t buflen, FAR struct hostent **result,
- FAR int *h_errnop);
- int getservbyport_r(int port, FAR const char *proto,
- FAR struct servent *result_buf, FAR char *buf,
- size_t buflen, FAR struct servent **result);
- int getservbyname_r(FAR const char *name, FAR const char *proto,
- FAR struct servent *result_buf, FAR char *buf,
- size_t buflen, FAR struct servent **result);
- #endif /* CONFIG_LIBC_NETDB */
- #undef EXTERN
- #ifdef __cplusplus
- }
- #endif
- #endif /* __INCLUDE_NETDB_H */
|