blob: 8b4716566cc68c81b25bf400abd52be4d3d5d6f7 [file] [log] [blame]
<!--
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 &mdash; 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>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>