| <!-- |
| Documentation/_templates/layout.html |
| |
| 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. |
| --> |
| |
| |
| |
| <!DOCTYPE html> |
| <html class="writer-html5" lang="en"> |
| <head> |
| <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" /> |
| |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <title>ntpclient NTP client — NuttX latest documentation</title> |
| <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" /> |
| <link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css" /> |
| <link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" /> |
| <link rel="stylesheet" type="text/css" href="../../../_static/sphinx_collapse.css" /> |
| <link rel="stylesheet" type="text/css" href="../../../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" /> |
| <link rel="stylesheet" type="text/css" href="../../../_static/custom.css" /> |
| |
| |
| <link rel="shortcut icon" href="../../../_static/favicon.ico"/> |
| <script src="../../../_static/jquery.js"></script> |
| <script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script> |
| <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> |
| <script src="../../../_static/doctools.js"></script> |
| <script src="../../../_static/sphinx_highlight.js"></script> |
| <script src="../../../_static/clipboard.min.js"></script> |
| <script src="../../../_static/copybutton.js"></script> |
| <script src="../../../_static/design-tabs.js"></script> |
| <script src="../../../_static/js/theme.js"></script> |
| <link rel="index" title="Index" href="../../../genindex.html" /> |
| <link rel="search" title="Search" href="../../../search.html" /> |
| <link rel="next" title="ping ICMP ping support" href="../ping/index.html" /> |
| <link rel="prev" title="nng Nanomsg NG" href="../nng/index.html" /> |
| </head> |
| |
| <body class="wy-body-for-nav"> |
| <div class="wy-grid-for-nav"> |
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |
| <div class="wy-side-scroll"> |
| <div class="wy-side-nav-search" > |
| |
| <a href="../../../index.html" class="icon icon-home"> NuttX |
| |
| |
| |
| </a> |
| |
| <!-- this version selector is quite ugly, should be probably replaced by something |
| more modern --> |
| |
| <div class="version-selector"> |
| <select onchange="javascript:location.href = this.value;"> |
| |
| <option value="../../../../latest" selected="selected">latest</option> |
| |
| <option value="../../../../10.0.0" >10.0.0</option> |
| |
| <option value="../../../../10.0.1" >10.0.1</option> |
| |
| <option value="../../../../10.1.0" >10.1.0</option> |
| |
| <option value="../../../../10.2.0" >10.2.0</option> |
| |
| <option value="../../../../10.3.0" >10.3.0</option> |
| |
| <option value="../../../../11.0.0" >11.0.0</option> |
| |
| <option value="../../../../12.0.0" >12.0.0</option> |
| |
| <option value="../../../../12.1.0" >12.1.0</option> |
| |
| <option value="../../../../12.2.0" >12.2.0</option> |
| |
| <option value="../../../../12.2.1" >12.2.1</option> |
| |
| <option value="../../../../12.3.0" >12.3.0</option> |
| |
| <option value="../../../../12.4.0" >12.4.0</option> |
| |
| <option value="../../../../12.5.0" >12.5.0</option> |
| |
| <option value="../../../../12.5.1" >12.5.1</option> |
| |
| <option value="../../../../12.6.0" >12.6.0</option> |
| |
| <option value="../../../../12.7.0" >12.7.0</option> |
| |
| <option value="../../../../12.8.0" >12.8.0</option> |
| |
| <option value="../../../../12.9.0" >12.9.0</option> |
| |
| <option value="../../../../12.10.0" >12.10.0</option> |
| |
| <option value="../../../../12.11.0" >12.11.0</option> |
| |
| </select> |
| </div> |
| |
| |
| <div role="search"> |
| <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> |
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> |
| <input type="hidden" name="check_keywords" value="yes" /> |
| <input type="hidden" name="area" value="default" /> |
| </form> |
| </div> |
| |
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> |
| <p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p> |
| <ul class="current"> |
| <li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../platforms/index.html">Supported Platforms</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../components/index.html">OS Components</a></li> |
| <li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Applications</a><ul class="current"> |
| <li class="toctree-l2"><a class="reference internal" href="../../audioutils/index.html">Audio Utility libraries</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../boot/index.html">Bootloader Utilities</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../benchmarks/index.html">Benchmark Applications</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../canutils/index.html">CAN Utilities</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../crypto/index.html">Cryptography Library Support</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../fsutils/index.html">File System Utilities</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../games/index.html">Games</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../graphics/index.html">Graphics Support</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../industry/index.html">Industrial Applications</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../inertial/index.html">Inertial Libraries Support</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../interpreters/index.html">Interpreters</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../logging/index.html">Logging Utilities</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../lte/index.html">LTE Libraries and NSH Add-Ons</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../math/index.html">Math Library Support</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../mlearing/index.html">Machine Learning Support</a></li> |
| <li class="toctree-l2 current"><a class="reference internal" href="../index.html">Network Utilities</a><ul class="current"> |
| <li class="toctree-l3"><a class="reference internal" href="../chat/index.html"><code class="docutils literal notranslate"><span class="pre">chat</span></code> Chat tool</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../cjson/index.html"><code class="docutils literal notranslate"><span class="pre">cjson</span></code> cJSON library</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../codecs/index.html"><code class="docutils literal notranslate"><span class="pre">codecs</span></code> CODEC Library: Base64 coding, URL coding, MD5</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../cwebsocket/index.html"><code class="docutils literal notranslate"><span class="pre">cwebsocket</span></code> WebSocket Client Library</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../dhcp6c/index.html"><code class="docutils literal notranslate"><span class="pre">dhcp6c</span></code> DHCPv6 client</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../dhcpc/index.html"><code class="docutils literal notranslate"><span class="pre">dhcpc</span></code> DHCP client</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../dhcpd/index.html"><code class="docutils literal notranslate"><span class="pre">dhcpd</span></code> DHCP server</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../discover/index.html"><code class="docutils literal notranslate"><span class="pre">discover</span></code> Network Discovery Utility</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../esp8266/index.html"><code class="docutils literal notranslate"><span class="pre">esp8266</span></code> ESP8266</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../ftpc/index.html"><code class="docutils literal notranslate"><span class="pre">ftpc</span></code> FTP client</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../ftpd/index.html"><code class="docutils literal notranslate"><span class="pre">ftpd</span></code> FTP server</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../iper/index.html"><code class="docutils literal notranslate"><span class="pre">iperf</span></code> iperf</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../iptables/index.html"><code class="docutils literal notranslate"><span class="pre">iptables</span></code> iptables library</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../libcurl4nx/index.html"><code class="docutils literal notranslate"><span class="pre">libcurl4nx</span></code> cURL4nx HTTP client library</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../mqttc/index.html"><code class="docutils literal notranslate"><span class="pre">mqttc</span></code> MQTT-C library</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../netcat/index.html"><code class="docutils literal notranslate"><span class="pre">netcat</span></code> NetCat tool</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../netinit/index.html"><code class="docutils literal notranslate"><span class="pre">netinit</span></code> Network initialization</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../netlib/index.html"><code class="docutils literal notranslate"><span class="pre">netlib</span></code> Network support library</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../nng/index.html"><code class="docutils literal notranslate"><span class="pre">nng</span></code> Nanomsg NG</a></li> |
| <li class="toctree-l3 current"><a class="current reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">ntpclient</span></code> NTP client</a><ul> |
| <li class="toctree-l4"><a class="reference internal" href="#what-is-ntp">What is NTP?</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#ntp-protocol-overview">NTP Protocol Overview</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#implementation-details">Implementation Details</a><ul> |
| <li class="toctree-l5"><a class="reference internal" href="#source-code-structure">Source Code Structure</a></li> |
| <li class="toctree-l5"><a class="reference internal" href="#key-functions">Key Functions</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l4"><a class="reference internal" href="#configuration-options">Configuration Options</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#usage">Usage</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#limitations">Limitations</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#dependencies">Dependencies</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l3"><a class="reference internal" href="../ping/index.html"><code class="docutils literal notranslate"><span class="pre">ping</span></code> ICMP ping support</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../pppd/index.html"><code class="docutils literal notranslate"><span class="pre">pppd</span></code> PPP server</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../ptpd/index.html"><code class="docutils literal notranslate"><span class="pre">ptpd</span></code> PTPD client/server</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../rexec/index.html"><code class="docutils literal notranslate"><span class="pre">rexec</span></code> Remote execution client</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../rexecd/index.html"><code class="docutils literal notranslate"><span class="pre">rexecd</span></code> Remote Execution Server</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../rtptools/index.html"><code class="docutils literal notranslate"><span class="pre">rtptools</span></code> RTP Tools</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../smtp/index.html"><code class="docutils literal notranslate"><span class="pre">smtp</span></code> SMTP</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../telnetc/index.html"><code class="docutils literal notranslate"><span class="pre">telnetc</span></code> Telnet client library</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../telnetd/index.html"><code class="docutils literal notranslate"><span class="pre">telnetd</span></code> Telnet server daemon</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../tftpc/index.html"><code class="docutils literal notranslate"><span class="pre">tftpc</span></code> TFTP client</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../thttpd/index.html"><code class="docutils literal notranslate"><span class="pre">thttpd</span></code> THTTPD webserver</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../wakaama/index.html"><code class="docutils literal notranslate"><span class="pre">wakaama</span></code> Eclipse Wakaama (formerly liblwm2m) - LWM2M protocol</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../wakeonlan/index.html"><code class="docutils literal notranslate"><span class="pre">wakeonlan</span></code> WakeOnLAN support</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../webclient/index.html"><code class="docutils literal notranslate"><span class="pre">webclient</span></code> uIP web client</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../webserver/index.html"><code class="docutils literal notranslate"><span class="pre">webserver</span></code> uIP web server</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="../xmlrpc/index.html"><code class="docutils literal notranslate"><span class="pre">xmlrpc</span></code> XML RPC library</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../sdr/index.html">Software Defined Radio Libraries</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../system/index.html">System Libraries and NSH Add-Ons</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../testing/index.html">Testing</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../tools/index.html">Host Side Tools</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../wireless/index.html">Wireless Libraries and NSH Add-Ons</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../../examples/index.html">Examples</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../implementation/index.html">Implementation Details</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../faq/index.html">FAQ</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../debugging/index.html">Debugging</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../standards/index.html">Standards</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../logos/index.html">NuttX Logos</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../../_tags/tagsindex.html">Tags</a></li> |
| </ul> |
| |
| </div> |
| </div> |
| </nav> |
| |
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |
| <a href="../../../index.html">NuttX</a> |
| </nav> |
| |
| <div class="wy-nav-content"> |
| <div class="rst-content"> |
| <div role="navigation" aria-label="Page navigation"> |
| <ul class="wy-breadcrumbs"> |
| <li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li> |
| <li class="breadcrumb-item"><a href="../../index.html">Applications</a></li> |
| <li class="breadcrumb-item"><a href="../index.html">Network Utilities</a></li> |
| <li class="breadcrumb-item active"><code class="docutils literal notranslate"><span class="pre">ntpclient</span></code> NTP client</li> |
| <li class="wy-breadcrumbs-aside"> |
| <a href="https://github.com/apache/nuttx/blob/master/Documentation/applications/netutils/ntpclient/index.rst" class="fa fa-github"> Edit on GitHub</a> |
| </li> |
| </ul> |
| <hr/> |
| </div> |
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |
| <div itemprop="articleBody"> |
| |
| <section id="ntpclient-ntp-client"> |
| <h1><code class="docutils literal notranslate"><span class="pre">ntpclient</span></code> NTP client<a class="headerlink" href="#ntpclient-ntp-client" title="Permalink to this heading"></a></h1> |
| <p>The NTP (Network Time Protocol) client is a network utility that synchronizes |
| the system clock with time servers over the Internet. This implementation |
| provides a minimal but functional NTP client for NuttX.</p> |
| <section id="what-is-ntp"> |
| <h2>What is NTP?<a class="headerlink" href="#what-is-ntp" title="Permalink to this heading"></a></h2> |
| <p>The Network Time Protocol (NTP) is a networking protocol designed to |
| synchronize clocks of computer systems over packet-switched, variable-latency |
| data networks. NTP is one of the oldest Internet protocols still in use, |
| originally designed by David L. Mills of the University of Delaware.</p> |
| <p>Key features of NTP:</p> |
| <ul class="simple"> |
| <li><p><strong>High Precision</strong>: NTP can achieve sub-millisecond accuracy on local area |
| networks and typically 10-100 millisecond accuracy over the Internet</p></li> |
| <li><p><strong>Robust Algorithm</strong>: Uses sophisticated algorithms to filter out network |
| jitter and select the best time sources</p></li> |
| <li><p><strong>Hierarchical Structure</strong>: Uses a stratum system where stratum 0 devices |
| are atomic clocks, stratum 1 servers sync with stratum 0, and so on</p></li> |
| <li><p><strong>Fault Tolerance</strong>: Can handle multiple time sources and automatically |
| switch between them</p></li> |
| </ul> |
| </section> |
| <section id="ntp-protocol-overview"> |
| <h2>NTP Protocol Overview<a class="headerlink" href="#ntp-protocol-overview" title="Permalink to this heading"></a></h2> |
| <p>NTP uses UDP port 123 and follows a client-server model. The protocol |
| exchanges timestamps to calculate:</p> |
| <ul class="simple"> |
| <li><p><strong>Offset</strong>: The difference between the client’s clock and the server’s clock</p></li> |
| <li><p><strong>Delay</strong>: The round-trip network delay</p></li> |
| <li><p><strong>Dispersion</strong>: The maximum error due to clock frequency tolerance</p></li> |
| </ul> |
| <p>The NTP packet format (version 3) includes:</p> |
| <ul class="simple"> |
| <li><p><strong>Leap Indicator</strong>: Warns of an impending leap second</p></li> |
| <li><p><strong>Version Number</strong>: NTP version (3 in this implementation)</p></li> |
| <li><p><strong>Mode</strong>: Client, server, broadcast, etc.</p></li> |
| <li><p><strong>Stratum</strong>: Clock level (0-15)</p></li> |
| <li><p><strong>Poll Interval</strong>: Maximum interval between successive messages</p></li> |
| <li><p><strong>Precision</strong>: Clock precision</p></li> |
| <li><p><strong>Root Delay/Dispersion</strong>: Total delay and dispersion to the reference clock</p></li> |
| <li><p><strong>Reference Identifier</strong>: Identifies the reference source</p></li> |
| <li><p><strong>Reference Timestamp</strong>: Time when the system clock was last set</p></li> |
| <li><p><strong>Originate Timestamp</strong>: Time when the request departed the client</p></li> |
| <li><p><strong>Receive Timestamp</strong>: Time when the request arrived at the server</p></li> |
| <li><p><strong>Transmit Timestamp</strong>: Time when the reply departed the server</p></li> |
| </ul> |
| </section> |
| <section id="implementation-details"> |
| <h2>Implementation Details<a class="headerlink" href="#implementation-details" title="Permalink to this heading"></a></h2> |
| <p>The NuttX NTP client implementation consists of several key components:</p> |
| <section id="source-code-structure"> |
| <h3>Source Code Structure<a class="headerlink" href="#source-code-structure" title="Permalink to this heading"></a></h3> |
| <p><strong>ntpclient.c</strong> - Main implementation file containing:</p> |
| <ul class="simple"> |
| <li><p><strong>Daemon Management</strong>: Functions to start, stop, and manage the NTP daemon</p></li> |
| <li><p><strong>Time Synchronization</strong>: Core algorithms for calculating clock offset and delay</p></li> |
| <li><p><strong>Network Communication</strong>: UDP socket handling and NTP packet exchange</p></li> |
| <li><p><strong>Sample Collection</strong>: Gathering multiple time samples for statistical filtering</p></li> |
| </ul> |
| <p><strong>ntpv3.h</strong> - NTP version 3 packet format definitions:</p> |
| <ul class="simple"> |
| <li><p><strong>ntp_datagram_s</strong>: Complete NTP packet structure</p></li> |
| <li><p><strong>ntp_timestamp_s</strong>: 64-bit NTP timestamp format</p></li> |
| <li><p><strong>Protocol Constants</strong>: NTP version, modes, and stratum definitions</p></li> |
| </ul> |
| </section> |
| <section id="key-functions"> |
| <h3>Key Functions<a class="headerlink" href="#key-functions" title="Permalink to this heading"></a></h3> |
| <ul class="simple"> |
| <li><p><strong>ntpc_start_with_list()</strong>: Starts the NTP daemon with a list of servers</p></li> |
| <li><p><strong>ntpc_start()</strong>: Starts the NTP daemon with default configuration</p></li> |
| <li><p><strong>ntpc_stop()</strong>: Stops the running NTP daemon</p></li> |
| <li><p><strong>ntpc_status()</strong>: Retrieves current synchronization status and samples</p></li> |
| <li><p><strong>ntpc_daemon()</strong>: Main daemon loop that:</p> |
| <ul> |
| <li><p>Connects to configured NTP servers</p></li> |
| <li><p>Sends NTP requests and processes responses</p></li> |
| <li><p>Calculates clock offset and delay</p></li> |
| <li><p>Applies time corrections to the system clock</p></li> |
| <li><p>Continues polling at configured intervals</p></li> |
| </ul> |
| </li> |
| <li><p><strong>ntpc_get_ntp_sample()</strong>: Performs a single NTP transaction:</p> |
| <ul> |
| <li><p>Creates UDP socket to NTP server</p></li> |
| <li><p>Sends NTP request packet with current timestamp</p></li> |
| <li><p>Receives and validates NTP response</p></li> |
| <li><p>Calculates offset and delay using NTP algorithms</p></li> |
| </ul> |
| </li> |
| <li><p><strong>ntpc_calculate_offset()</strong>: Implements the NTP clock filter algorithm</p> |
| <ul> |
| <li><p>Uses four timestamps, calculates offset and delay</p></li> |
| <li><p>Applies statistical filtering to reduce jitter</p></li> |
| </ul> |
| </li> |
| <li><p><strong>ntpc_settime()</strong>: Applies time correction to system clock:</p> |
| <ul> |
| <li><p>Uses calculated offset to adjust system time</p></li> |
| <li><p>Handles both positive and negative time adjustments</p></li> |
| <li><p>Maintains monotonic clock consistency</p></li> |
| </ul> |
| </li> |
| </ul> |
| </section> |
| </section> |
| <section id="configuration-options"> |
| <h2>Configuration Options<a class="headerlink" href="#configuration-options" title="Permalink to this heading"></a></h2> |
| <p>The NTP client can be configured through Kconfig options:</p> |
| <ul class="simple"> |
| <li><p><strong>CONFIG_NETUTILS_NTPCLIENT_SERVER</strong>: List of NTP server hostnames</p></li> |
| <li><p><strong>CONFIG_NETUTILS_NTPCLIENT_PORTNO</strong>: NTP server port (default: 123)</p></li> |
| <li><p><strong>CONFIG_NETUTILS_NTPCLIENT_STACKSIZE</strong>: Daemon task stack size</p></li> |
| <li><p><strong>CONFIG_NETUTILS_NTPCLIENT_SERVERPRIO</strong>: Daemon task priority</p></li> |
| <li><p><strong>CONFIG_NETUTILS_NTPCLIENT_STAY_ON</strong>: Keep polling continuously</p></li> |
| <li><p><strong>CONFIG_NETUTILS_NTPCLIENT_POLLDELAYSEC</strong>: Polling interval in seconds</p></li> |
| <li><p><strong>CONFIG_NETUTILS_NTPCLIENT_NUM_SAMPLES</strong>: Number of samples for filtering</p></li> |
| <li><p><strong>CONFIG_NETUTILS_NTPCLIENT_TIMEOUT_MS</strong>: Network timeout in milliseconds</p></li> |
| </ul> |
| </section> |
| <section id="usage"> |
| <h2>Usage<a class="headerlink" href="#usage" title="Permalink to this heading"></a></h2> |
| <p>The NTP client is typically used through the system commands:</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>The NTP client functionality requires enabling the <code class="code docutils literal notranslate"><span class="pre">SYSTEM_NTPC</span></code> option in your configuration. |
| Make sure to select this option in menuconfig or your Kconfig fragment before building.</p> |
| </div> |
| <ul class="simple"> |
| <li><p><strong>ntpcstart</strong>: Start the NTP daemon</p></li> |
| <li><p><strong>ntpcstop</strong>: Stop the NTP daemon</p></li> |
| <li><p><strong>ntpcstatus</strong>: Display synchronization status</p></li> |
| </ul> |
| <p>Example workflow:</p> |
| <ol class="arabic simple"> |
| <li><p>Configure network connectivity</p></li> |
| <li><p>Start NTP client: <code class="docutils literal notranslate"><span class="pre">ntpcstart</span></code></p></li> |
| <li><p>Check status: <code class="docutils literal notranslate"><span class="pre">ntpcstatus</span></code></p></li> |
| <li><p>Verify time: <code class="docutils literal notranslate"><span class="pre">date</span></code> command</p></li> |
| <li><p>Stop when needed: <code class="docutils literal notranslate"><span class="pre">ntpcstop</span></code></p></li> |
| </ol> |
| <p>The client will automatically: |
| - Connect to configured NTP servers |
| - Exchange time information |
| - Calculate and apply clock corrections |
| - Continue periodic synchronization</p> |
| </section> |
| <section id="limitations"> |
| <h2>Limitations<a class="headerlink" href="#limitations" title="Permalink to this heading"></a></h2> |
| <p>This is a minimal NTP client implementation with some limitations:</p> |
| <ul class="simple"> |
| <li><p><strong>No Authentication</strong>: Does not support NTP authentication (MD5/SHA1)</p></li> |
| <li><p><strong>Basic Filtering</strong>: Uses simple statistical filtering, not full NTP algorithms</p></li> |
| <li><p><strong>Single Reference</strong>: Does not implement full NTP reference clock selection</p></li> |
| <li><p><strong>No Leap Seconds</strong>: Does not handle leap second announcements</p></li> |
| <li><p><strong>Limited Error Handling</strong>: Basic error recovery and retry mechanisms</p></li> |
| </ul> |
| <p>Despite these limitations, the implementation provides sufficient accuracy |
| for most embedded applications requiring network time synchronization.</p> |
| </section> |
| <section id="dependencies"> |
| <h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading"></a></h2> |
| <p>The NTP client requires:</p> |
| <ul class="simple"> |
| <li><p><strong>CONFIG_NET</strong>: Network support</p></li> |
| <li><p><strong>CONFIG_NET_UDP</strong>: UDP protocol support</p></li> |
| <li><p><strong>CONFIG_NET_SOCKOPTS</strong>: Socket options support</p></li> |
| <li><p><strong>CONFIG_LIBC_NETDB</strong>: DNS resolution (recommended)</p></li> |
| <li><p><strong>CONFIG_HAVE_LONG_LONG</strong>: 64-bit integer support</p></li> |
| </ul> |
| <p>For best results, ensure: |
| - Stable network connectivity |
| - Access to reliable NTP servers |
| - Sufficient system resources for daemon operation</p> |
| </section> |
| </section> |
| |
| |
| </div> |
| </div> |
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> |
| <a href="../nng/index.html" class="btn btn-neutral float-left" title="nng Nanomsg NG" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> |
| <a href="../ping/index.html" class="btn btn-neutral float-right" title="ping ICMP ping support" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> |
| </div> |
| |
| <hr/> |
| |
| <div role="contentinfo"> |
| <p>© Copyright 2023, The Apache Software Foundation.</p> |
| </div> |
| |
| |
| |
| </footer> |
| </div> |
| </div> |
| </section> |
| </div> |
| <script> |
| jQuery(function () { |
| SphinxRtdTheme.Navigation.enable(true); |
| }); |
| </script> |
| |
| </body> |
| </html> |