/* * Copyright (c) 2017 Linaro Limited * Copyright (c) 2019 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_INCLUDE_NET_SNTP_H_ #define ZEPHYR_INCLUDE_NET_SNTP_H_ #ifdef CONFIG_NET_SOCKETS_POSIX_NAMES #include #else #include #include #include #endif #ifdef __cplusplus extern "C" { #endif /** * @brief Simple Network Time Protocol API * @defgroup sntp SNTP * @ingroup networking * @{ */ /** SNTP context */ struct sntp_ctx { struct { struct pollfd fds[1]; int nfds; int fd; } sock; /** Timestamp when the request was sent from client to server. * This is used to check if the originated timestamp in the server * reply matches the one in client request. */ u32_t expected_orig_ts; }; /** Time as returned by SNTP API, fractional seconds since 1 Jan 1970 */ struct sntp_time { u64_t seconds; u32_t fraction; }; /** * @brief Initialize SNTP context * * @param ctx Address of sntp context. * @param addr IP address of NTP/SNTP server. * @param addr_len IP address length of NTP/SNTP server. * * @return 0 if ok, <0 if error. */ int sntp_init(struct sntp_ctx *ctx, struct sockaddr *addr, socklen_t addr_len); /** * @brief SNTP query with seconds precision (deprecated) * * @param ctx Address of sntp context. * @param timeout Timeout of waiting for sntp response (in milliseconds). * @param epoch_time Seconds since 1 January 1970 (output). * * @return 0 if ok, <0 if error (-ETIMEDOUT if timeout). */ __deprecated int sntp_request(struct sntp_ctx *ctx, u32_t timeout, u64_t *epoch_time); /** * @brief Perform SNTP query * * @param ctx Address of sntp context. * @param timeout Timeout of waiting for sntp response (in milliseconds). * @param time Timestamp including integer and fractional seconds since * 1 Jan 1970 (output). * * @return 0 if ok, <0 if error (-ETIMEDOUT if timeout). */ int sntp_query(struct sntp_ctx *ctx, u32_t timeout, struct sntp_time *time); /** * @brief Release SNTP context * * @param ctx Address of sntp context. */ void sntp_close(struct sntp_ctx *ctx); /** * @brief Convenience function to query SNTP in one-shot fashion * * Convenience wrapper which calls getaddrinfo(), sntp_init(), * sntp_query(), and sntp_close(). * * @param server Address of server in format addr[:port] * @param timeout Query timeout * @param time Timestamp including integer and fractional seconds since * 1 Jan 1970 (output). * * @return 0 if ok, <0 if error (-ETIMEDOUT if timeout). */ int sntp_simple(const char *server, u32_t timeout, struct sntp_time *time); #ifdef __cplusplus } #endif /** * @} */ #endif