LCOV - code coverage report
Current view: top level - zephyr/net - sntp.h Coverage Total Hit
Test: new.info Lines: 100.0 % 16 16
Test Date: 2025-03-11 06:50:38

            Line data    Source code
       1            1 : /*
       2              :  * Copyright (c) 2017 Linaro Limited
       3              :  * Copyright (c) 2019 Intel Corporation
       4              :  *
       5              :  * SPDX-License-Identifier: Apache-2.0
       6              :  */
       7              : 
       8              : /**
       9              :  * @file
      10              :  * @brief SNTP (Simple Network Time Protocol)
      11              :  */
      12              : 
      13              : #ifndef ZEPHYR_INCLUDE_NET_SNTP_H_
      14              : #define ZEPHYR_INCLUDE_NET_SNTP_H_
      15              : 
      16              : #include <zephyr/net/socket.h>
      17              : #include <zephyr/net/socket_service.h>
      18              : 
      19              : #ifdef __cplusplus
      20              : extern "C" {
      21              : #endif
      22              : 
      23              : /**
      24              :  * @brief Simple Network Time Protocol API
      25              :  * @defgroup sntp SNTP
      26              :  * @since 1.10
      27              :  * @version 0.8.0
      28              :  * @ingroup networking
      29              :  * @{
      30              :  */
      31              : 
      32              : /** Time as returned by SNTP API, fractional seconds since 1 Jan 1970 */
      33            1 : struct sntp_time {
      34            1 :         uint64_t seconds;        /**< Second value */
      35            1 :         uint32_t fraction;       /**< Fractional seconds value */
      36              : #if defined(CONFIG_SNTP_UNCERTAINTY)
      37              :         uint64_t uptime_us;      /**< Uptime in microseconds */
      38              :         uint32_t uncertainty_us; /**< Uncertainty in microseconds */
      39              : #endif
      40              : };
      41              : 
      42              : /** SNTP context */
      43            1 : struct sntp_ctx {
      44              : 
      45              : /** @cond INTERNAL_HIDDEN */
      46              :         struct {
      47              :                 struct zsock_pollfd fds[1];
      48              :                 int nfds;
      49              :                 int fd;
      50              :         } sock;
      51              : /** @endcond */
      52              : 
      53              :         /** Timestamp when the request was sent from client to server.
      54              :          *  This is used to check if the originated timestamp in the server
      55              :          *  reply matches the one in client request.
      56              :          */
      57            1 :         struct sntp_time expected_orig_ts;
      58              : };
      59              : 
      60              : /**
      61              :  * @brief Initialize SNTP context
      62              :  *
      63              :  * @param ctx Address of sntp context.
      64              :  * @param addr IP address of NTP/SNTP server.
      65              :  * @param addr_len IP address length of NTP/SNTP server.
      66              :  *
      67              :  * @return 0 if ok, <0 if error.
      68              :  */
      69            1 : int sntp_init(struct sntp_ctx *ctx, struct sockaddr *addr,
      70              :               socklen_t addr_len);
      71              : 
      72              : /**
      73              :  * @brief Perform SNTP query
      74              :  *
      75              :  * @param ctx Address of sntp context.
      76              :  * @param timeout Timeout of waiting for sntp response (in milliseconds).
      77              :  * @param ts Timestamp including integer and fractional seconds since
      78              :  * 1 Jan 1970 (output).
      79              :  *
      80              :  * @return 0 if ok, <0 if error (-ETIMEDOUT if timeout).
      81              :  */
      82            1 : int sntp_query(struct sntp_ctx *ctx, uint32_t timeout, struct sntp_time *ts);
      83              : 
      84              : /**
      85              :  * @brief Attempt to receive an SNTP response after issuing a query
      86              :  *
      87              :  * @param ctx Address of sntp context.
      88              :  * @param timeout Timeout of waiting for sntp response (in milliseconds).
      89              :  * @param ts Timestamp including integer and fractional seconds since
      90              :  * 1 Jan 1970 (output).
      91              :  *
      92              :  * @return 0 if ok, <0 if error (-ETIMEDOUT if timeout).
      93              :  */
      94            1 : int sntp_recv_response(struct sntp_ctx *ctx, uint32_t timeout, struct sntp_time *ts);
      95              : 
      96              : /**
      97              :  * @brief Release SNTP context
      98              :  *
      99              :  * @param ctx Address of sntp context.
     100              :  */
     101            1 : void sntp_close(struct sntp_ctx *ctx);
     102              : 
     103              : /**
     104              :  * @brief Initialise SNTP context for async operation
     105              :  *
     106              :  * Asynchronous operation is powered by @kconfig{CONFIG_NET_SOCKETS_SERVICE}.
     107              :  *
     108              :  * @param ctx Address of sntp context.
     109              :  * @param addr IP address of NTP/SNTP server.
     110              :  * @param addr_len IP address length of NTP/SNTP server.
     111              :  * @param service Socket service defined by @ref NET_SOCKET_SERVICE_SYNC_DEFINE
     112              :  *
     113              :  * @return 0 if ok, <0 if error.
     114              :  */
     115            1 : int sntp_init_async(struct sntp_ctx *ctx, struct sockaddr *addr, socklen_t addr_len,
     116              :                     const struct net_socket_service_desc *service);
     117              : 
     118              : /**
     119              :  * @brief Send the SNTP query
     120              :  *
     121              :  * @param ctx Address of sntp context.
     122              :  *
     123              :  * @return 0 if ok, <0 if error.
     124              :  */
     125            1 : int sntp_send_async(struct sntp_ctx *ctx);
     126              : 
     127              : /**
     128              :  * @brief Read the result of the SNTP query
     129              :  *
     130              :  * Must be called from the callback attached to the @ref net_socket_service_desc
     131              :  * context.
     132              :  *
     133              :  * @param event Event pointer extracted from the service work callback
     134              :  * @param ts Timestamp including integer and fractional seconds since
     135              :  * 1 Jan 1970 (output).
     136              :  *
     137              :  * @return 0 if ok, <0 if error
     138              :  */
     139            1 : int sntp_read_async(struct net_socket_service_event *event, struct sntp_time *ts);
     140              : 
     141              : /**
     142              :  * @brief Release SNTP context
     143              :  *
     144              :  * @param service Socket service defined by @ref NET_SOCKET_SERVICE_SYNC_DEFINE
     145              :  */
     146            1 : void sntp_close_async(const struct net_socket_service_desc *service);
     147              : 
     148              : /**
     149              :  * @brief Convenience function to query SNTP in one-shot fashion
     150              :  *
     151              :  * Convenience wrapper which calls getaddrinfo(), sntp_init(),
     152              :  * sntp_query(), and sntp_close().
     153              :  *
     154              :  * @param server Address of server in format addr[:port]
     155              :  * @param timeout Query timeout
     156              :  * @param ts Timestamp including integer and fractional seconds since
     157              :  * 1 Jan 1970 (output).
     158              :  *
     159              :  * @return 0 if ok, <0 if error (-ETIMEDOUT if timeout).
     160              :  */
     161            1 : int sntp_simple(const char *server, uint32_t timeout,
     162              :                 struct sntp_time *ts);
     163              : 
     164              : /**
     165              :  * @brief Convenience function to query SNTP in one-shot fashion
     166              :  * using a pre-initialized address struct
     167              :  *
     168              :  * Convenience wrapper which calls sntp_init(), sntp_query() and
     169              :  * sntp_close().
     170              :  *
     171              :  * @param addr IP address of NTP/SNTP server.
     172              :  * @param addr_len IP address length of NTP/SNTP server.
     173              :  * @param timeout Query timeout
     174              :  * @param ts Timestamp including integer and fractional seconds since
     175              :  * 1 Jan 1970 (output).
     176              :  *
     177              :  * @return 0 if ok, <0 if error (-ETIMEDOUT if timeout).
     178              :  */
     179            1 : int sntp_simple_addr(struct sockaddr *addr, socklen_t addr_len, uint32_t timeout,
     180              :                      struct sntp_time *ts);
     181              : 
     182              : #ifdef __cplusplus
     183              : }
     184              : #endif
     185              : 
     186              : /**
     187              :  * @}
     188              :  */
     189              : 
     190              : #endif
        

Generated by: LCOV version 2.0-1