| <!-- |
| 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.18.1: http://docutils.sourceforge.net/" /> |
| |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <title>Network Devices — NuttX latest documentation</title> |
| <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |
| <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |
| <link rel="stylesheet" href="../../_static/copybutton.css" type="text/css" /> |
| <link rel="stylesheet" href="../../_static/tabs.css" type="text/css" /> |
| <link rel="stylesheet" href="../../_static/custom.css" type="text/css" /> |
| <link rel="shortcut icon" href="../../_static/favicon.ico"/> |
| <!--[if lt IE 9]> |
| <script src="../../_static/js/html5shiv.min.js"></script> |
| <![endif]--> |
| |
| <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/js/theme.js"></script> |
| <link rel="index" title="Index" href="../../genindex.html" /> |
| <link rel="search" title="Search" href="../../search.html" /> |
| <link rel="next" title="FAQ" href="../../faq/index.html" /> |
| <link rel="prev" title="Work Queues" href="wqueue.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> |
| |
| </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"><a class="reference internal" href="../../applications/index.html">Applications</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../implementation/index.html">Implementation Details</a></li> |
| <li class="toctree-l1 current"><a class="reference internal" href="../index.html">API Reference</a><ul class="current"> |
| <li class="toctree-l2"><a class="reference internal" href="../user/index.html">Userspace API</a></li> |
| <li class="toctree-l2 current"><a class="reference internal" href="index.html">Architecture APIs</a><ul class="current"> |
| <li class="toctree-l3"><a class="reference internal" href="addrenv.html">Address Environments</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="app_vs_os.html">Application OS vs. Internal OS Interfaces</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="arch.html">APIs Exported by Architecture-Specific Logic to NuttX</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="board.html">APIs Exported by Board-Specific Logic to NuttX</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="conventions.html">Naming and Header File Conventions</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="iob.html">I/O Buffer Management</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="led.html">LED Support</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="mutex.html">Mutual Exclusion lock</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="nat.html">Network Address Translation (NAT)</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="newreno.html">Congestion Control NewReno</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="notifier.html">Notifier Chain</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="nuttx.html">APIs Exported by NuttX to Architecture-Specific Logic</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="paging.html">On-Demand Paging</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="shm.html">Shared Memory</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="smp.html">Symmetric Multiprocessing (SMP) Application</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="time_clock.html">System Time and Clock</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="wqueue.html">Work Queues</a></li> |
| <li class="toctree-l3 current"><a class="current reference internal" href="#">Network Devices</a><ul> |
| <li class="toctree-l4"><a class="reference internal" href="#ip-addresses">IP Addresses</a><ul> |
| <li class="toctree-l5"><a class="reference internal" href="#configuration-options">Configuration Options</a></li> |
| <li class="toctree-l5"><a class="reference internal" href="#ipv4-interfaces">IPv4 Interfaces</a></li> |
| <li class="toctree-l5"><a class="reference internal" href="#ipv6-interfaces">IPv6 Interfaces</a></li> |
| <li class="toctree-l5"><a class="reference internal" href="#ioctls-for-ip-addresses">Ioctls for IP Addresses</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </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="../../guides/index.html">Guides</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../glossary.html">Glossary</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">API Reference</a></li> |
| <li class="breadcrumb-item"><a href="index.html">Architecture APIs</a></li> |
| <li class="breadcrumb-item active">Network Devices</li> |
| <li class="wy-breadcrumbs-aside"> |
| <a href="../../_sources/reference/os/netdev.rst.txt" rel="nofollow"> View page source</a> |
| </li> |
| </ul> |
| <hr/> |
| </div> |
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |
| <div itemprop="articleBody"> |
| |
| <section id="network-devices"> |
| <h1>Network Devices<a class="headerlink" href="#network-devices" title="Permalink to this heading"></a></h1> |
| <ul class="simple"> |
| <li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/net/netdev.h</span></code>. All structures and APIs |
| needed to work with network drivers are provided in this |
| header file. The structure <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">net_driver_s</span></code> defines the |
| interface and is passed to the network via |
| <code class="docutils literal notranslate"><span class="pre">netdev_register()</span></code>.</p></li> |
| </ul> |
| <section id="ip-addresses"> |
| <h2>IP Addresses<a class="headerlink" href="#ip-addresses" title="Permalink to this heading"></a></h2> |
| <p>The structure <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">net_driver_s</span></code> now supports one IPv4 address and |
| multiple IPv6 addresses. Multiple IPv6 addresses is common in modern |
| network devices. For example, a network device may have a link-local |
| address and a global address. The link-local address is used for |
| neighbor discovery protocol and the global address is used for |
| communication with the Internet.</p> |
| <section id="configuration-options"> |
| <h3>Configuration Options<a class="headerlink" href="#configuration-options" title="Permalink to this heading"></a></h3> |
| <dl class="simple"> |
| <dt><code class="docutils literal notranslate"><span class="pre">CONFIG_NETDEV_MULTIPLE_IPv6</span></code></dt><dd><p>Enable support for multiple IPv6 addresses per network device. |
| Depends on <code class="docutils literal notranslate"><span class="pre">CONFIG_NET_IPv6</span></code>.</p> |
| </dd> |
| <dt><code class="docutils literal notranslate"><span class="pre">CONFIG_NETDEV_MAX_IPv6_ADDR</span></code></dt><dd><p>Maximum number of IPv6 addresses that can be assigned to a single |
| network device. Normally a link-local address and a global address |
| are needed.</p> |
| </dd> |
| </dl> |
| </section> |
| <section id="ipv4-interfaces"> |
| <h3>IPv4 Interfaces<a class="headerlink" href="#ipv4-interfaces" title="Permalink to this heading"></a></h3> |
| <p>Now we only support one IPv4 address per network device, and directly |
| use the <code class="xref c c-member docutils literal notranslate"><span class="pre">d_ipaddr</span></code>, <code class="xref c c-member docutils literal notranslate"><span class="pre">d_draddr</span></code> and <code class="xref c c-member docutils literal notranslate"><span class="pre">d_netmask</span></code> |
| in <a class="reference internal" href="#c.net_driver_s" title="net_driver_s"><code class="xref c c-struct docutils literal notranslate"><span class="pre">net_driver_s</span></code></a>.</p> |
| <dl class="c struct"> |
| <dt class="sig sig-object c" id="c.net_driver_s"> |
| <span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">net_driver_s</span></span></span><a class="headerlink" href="#c.net_driver_s" title="Permalink to this definition"></a><br /></dt> |
| <dd><div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">net_driver_s</span> |
| <span class="p">{</span> |
| <span class="cp">#ifdef CONFIG_NET_IPv4</span> |
| <span class="w"> </span><span class="n">in_addr_t</span><span class="w"> </span><span class="n">d_ipaddr</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Host IPv4 address assigned to the network interface */</span> |
| <span class="w"> </span><span class="n">in_addr_t</span><span class="w"> </span><span class="n">d_draddr</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Default router IP address */</span> |
| <span class="w"> </span><span class="n">in_addr_t</span><span class="w"> </span><span class="n">d_netmask</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Network subnet mask */</span> |
| <span class="cp">#endif</span> |
| <span class="p">};</span> |
| </pre></div> |
| </div> |
| </dd></dl> |
| |
| </section> |
| <section id="ipv6-interfaces"> |
| <h3>IPv6 Interfaces<a class="headerlink" href="#ipv6-interfaces" title="Permalink to this heading"></a></h3> |
| <p>Now we support multiple IPv6 addresses per network device, and use |
| the <code class="xref c c-member docutils literal notranslate"><span class="pre">d_ipv6</span></code> in <a class="reference internal" href="#c.net_driver_s" title="net_driver_s"><code class="xref c c-struct docutils literal notranslate"><span class="pre">net_driver_s</span></code></a> to store the IPv6 |
| addresses. For historical reason, we keep the old name <code class="xref c c-member docutils literal notranslate"><span class="pre">d_ipv6addr</span></code> |
| and <code class="xref c c-member docutils literal notranslate"><span class="pre">d_ipv6netmask</span></code> for backward compatibility. Please use |
| <code class="xref c c-member docutils literal notranslate"><span class="pre">d_ipv6</span></code> for new drivers.</p> |
| <dl class="c struct"> |
| <dt class="sig sig-object c"> |
| <span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">net_driver_s</span></span></span><br /></dt> |
| <dd><div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">net_driver_s</span> |
| <span class="p">{</span> |
| <span class="cp">#ifdef CONFIG_NET_IPv6</span> |
| <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">netdev_ifaddr6_s</span><span class="w"> </span><span class="n">d_ipv6</span><span class="p">[</span><span class="n">CONFIG_NETDEV_MAX_IPv6_ADDR</span><span class="p">];</span> |
| <span class="cp">#endif</span> |
| <span class="p">};</span> |
| </pre></div> |
| </div> |
| </dd></dl> |
| |
| <p>Managing the IPv6 addresses by provided APIs would be more flexible:</p> |
| <blockquote> |
| <div><ul class="simple"> |
| <li><p><a class="reference internal" href="#c.netdev_ipv6_add" title="netdev_ipv6_add"><code class="xref c c-func docutils literal notranslate"><span class="pre">netdev_ipv6_add()</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.netdev_ipv6_del" title="netdev_ipv6_del"><code class="xref c c-func docutils literal notranslate"><span class="pre">netdev_ipv6_del()</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.netdev_ipv6_srcaddr" title="netdev_ipv6_srcaddr"><code class="xref c c-func docutils literal notranslate"><span class="pre">netdev_ipv6_srcaddr()</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.netdev_ipv6_lladdr" title="netdev_ipv6_lladdr"><code class="xref c c-func docutils literal notranslate"><span class="pre">netdev_ipv6_lladdr()</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.netdev_ipv6_lookup" title="netdev_ipv6_lookup"><code class="xref c c-func docutils literal notranslate"><span class="pre">netdev_ipv6_lookup()</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.netdev_ipv6_foreach" title="netdev_ipv6_foreach"><code class="xref c c-func docutils literal notranslate"><span class="pre">netdev_ipv6_foreach()</span></code></a></p></li> |
| </ul> |
| </div></blockquote> |
| <dl class="c function"> |
| <dt class="sig sig-object c" id="c.netdev_ipv6_add"> |
| <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">netdev_ipv6_add</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.net_driver_s" title="net_driver_s"><span class="n"><span class="pre">net_driver_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">dev</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">net_ipv6addr_t</span></span><span class="w"> </span><span class="n"><span class="pre">addr</span></span>, <span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">preflen</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.netdev_ipv6_add" title="Permalink to this definition"></a><br /></dt> |
| <dd></dd></dl> |
| |
| <dl class="c function"> |
| <dt class="sig sig-object c" id="c.netdev_ipv6_del"> |
| <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">netdev_ipv6_del</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.net_driver_s" title="net_driver_s"><span class="n"><span class="pre">net_driver_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">dev</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">net_ipv6addr_t</span></span><span class="w"> </span><span class="n"><span class="pre">addr</span></span>, <span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">preflen</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.netdev_ipv6_del" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>Add or delete an IPv6 address on the network device</p> |
| <dl class="field-list simple"> |
| <dt class="field-odd">Returns<span class="colon">:</span></dt> |
| <dd class="field-odd"><p>Zero is returned if the operation is successfully applied on |
| the device; A negated errno value is returned if failed.</p> |
| </dd> |
| </dl> |
| </dd></dl> |
| |
| <dl class="c function"> |
| <dt class="sig sig-object c" id="c.netdev_ipv6_srcaddr"> |
| <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">netdev_ipv6_srcaddr</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.net_driver_s" title="net_driver_s"><span class="n"><span class="pre">net_driver_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">dev</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">net_ipv6addr_t</span></span><span class="w"> </span><span class="n"><span class="pre">dst</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.netdev_ipv6_srcaddr" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>Get the source IPv6 address (RFC6724).</p> |
| <dl class="field-list simple"> |
| <dt class="field-odd">Returns<span class="colon">:</span></dt> |
| <dd class="field-odd"><p>A pointer to the IPv6 address is returned on success. It will never be |
| NULL, but can be an address containing g_ipv6_unspecaddr.</p> |
| </dd> |
| </dl> |
| </dd></dl> |
| |
| <dl class="c function"> |
| <dt class="sig sig-object c" id="c.netdev_ipv6_lladdr"> |
| <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">netdev_ipv6_lladdr</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.net_driver_s" title="net_driver_s"><span class="n"><span class="pre">net_driver_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">dev</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.netdev_ipv6_lladdr" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>Get the link-local address of the network device.</p> |
| <dl class="field-list simple"> |
| <dt class="field-odd">Returns<span class="colon">:</span></dt> |
| <dd class="field-odd"><p>A pointer to the link-local address is returned on success. |
| NULL is returned if the address is not found on the device.</p> |
| </dd> |
| </dl> |
| </dd></dl> |
| |
| <dl class="c function"> |
| <dt class="sig sig-object c" id="c.netdev_ipv6_lookup"> |
| <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="n"><span class="pre">netdev_ifaddr6_s</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">netdev_ipv6_lookup</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.net_driver_s" title="net_driver_s"><span class="n"><span class="pre">net_driver_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">dev</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">net_ipv6addr_t</span></span><span class="w"> </span><span class="n"><span class="pre">addr</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n"><span class="pre">maskcmp</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.netdev_ipv6_lookup" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>Look up an IPv6 address in the network device’s IPv6 addresses</p> |
| <dl class="field-list simple"> |
| <dt class="field-odd">Returns<span class="colon">:</span></dt> |
| <dd class="field-odd"><p>A pointer to the matching IPv6 address entry is returned on success. |
| NULL is returned if the IPv6 address is not found in the device.</p> |
| </dd> |
| </dl> |
| </dd></dl> |
| |
| <dl class="c function"> |
| <dt class="sig sig-object c" id="c.netdev_ipv6_foreach"> |
| <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">netdev_ipv6_foreach</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.net_driver_s" title="net_driver_s"><span class="n"><span class="pre">net_driver_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">dev</span></span>, <span class="n"><span class="pre">devif_ipv6_callback_t</span></span><span class="w"> </span><span class="n"><span class="pre">callback</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.netdev_ipv6_foreach" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>Enumerate each IPv6 address on a network device. This function will |
| terminate when either (1) all addresses have been enumerated or (2) when |
| a callback returns any non-zero value.</p> |
| <dl class="field-list simple"> |
| <dt class="field-odd">Returns<span class="colon">:</span></dt> |
| <dd class="field-odd"><p>Zero is returned if the enumeration is successfully completed; |
| Non-zero value is returned if enumeration is terminated early by callback.</p> |
| </dd> |
| </dl> |
| </dd></dl> |
| |
| </section> |
| <section id="ioctls-for-ip-addresses"> |
| <h3>Ioctls for IP Addresses<a class="headerlink" href="#ioctls-for-ip-addresses" title="Permalink to this heading"></a></h3> |
| <blockquote> |
| <div><ul class="simple"> |
| <li><p><a class="reference internal" href="#c.SIOCGIFADDR" title="SIOCGIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCGIFADDR</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.SIOCSIFADDR" title="SIOCSIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCSIFADDR</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.SIOCDIFADDR" title="SIOCDIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCDIFADDR</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.SIOCGLIFADDR" title="SIOCGLIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCGLIFADDR</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.SIOCSLIFADDR" title="SIOCSLIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCSLIFADDR</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.SIOCGIFNETMASK" title="SIOCGIFNETMASK"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCGIFNETMASK</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.SIOCSIFNETMASK" title="SIOCSIFNETMASK"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCSIFNETMASK</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.SIOCGLIFNETMASK" title="SIOCGLIFNETMASK"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCGLIFNETMASK</span></code></a></p></li> |
| <li><p><a class="reference internal" href="#c.SIOCSLIFNETMASK" title="SIOCSLIFNETMASK"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCSLIFNETMASK</span></code></a></p></li> |
| </ul> |
| </div></blockquote> |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCGIFADDR"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCGIFADDR</span></span></span><a class="headerlink" href="#c.SIOCGIFADDR" title="Permalink to this definition"></a><br /></dt> |
| <dd></dd></dl> |
| |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCSIFADDR"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCSIFADDR</span></span></span><a class="headerlink" href="#c.SIOCSIFADDR" title="Permalink to this definition"></a><br /></dt> |
| <dd></dd></dl> |
| |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCDIFADDR"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCDIFADDR</span></span></span><a class="headerlink" href="#c.SIOCDIFADDR" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>We just follow the Linux convention[1]:</p> |
| <blockquote> |
| <div><p>Get, set, or delete the address of the device using <code class="xref c c-member docutils literal notranslate"><span class="pre">ifr_addr</span></code>, |
| or <code class="xref c c-member docutils literal notranslate"><span class="pre">ifr6_addr</span></code> with <code class="xref c c-member docutils literal notranslate"><span class="pre">ifr6_prefixlen</span></code>. |
| For compatibility, <a class="reference internal" href="#c.SIOCGIFADDR" title="SIOCGIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCGIFADDR</span></code></a> returns only <code class="xref c c-macro docutils literal notranslate"><span class="pre">AF_INET</span></code> |
| addresses, <a class="reference internal" href="#c.SIOCSIFADDR" title="SIOCSIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCSIFADDR</span></code></a> accepts <code class="xref c c-macro docutils literal notranslate"><span class="pre">AF_INET</span></code> and |
| <code class="xref c c-macro docutils literal notranslate"><span class="pre">AF_INET6</span></code> addresses, and <a class="reference internal" href="#c.SIOCDIFADDR" title="SIOCDIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCDIFADDR</span></code></a> deletes |
| only <code class="xref c c-macro docutils literal notranslate"><span class="pre">AF_INET6</span></code> addresses. A <code class="xref c c-macro docutils literal notranslate"><span class="pre">AF_INET</span></code> address |
| can be deleted by setting it to zero via <a class="reference internal" href="#c.SIOCSIFADDR" title="SIOCSIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCSIFADDR</span></code></a>.</p> |
| </div></blockquote> |
| <p>Note: Unlike Linux, the maximum number of IPv6 addresses is limited on |
| NuttX. If you add more IPv6 addresses when we have already reached the |
| limit, the new addresses will replace addresses with same scope.</p> |
| <p>[1]: <a class="reference external" href="https://man7.org/linux/man-pages/man7/netdevice.7.html">https://man7.org/linux/man-pages/man7/netdevice.7.html</a></p> |
| </dd></dl> |
| |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCGLIFADDR"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCGLIFADDR</span></span></span><a class="headerlink" href="#c.SIOCGLIFADDR" title="Permalink to this definition"></a><br /></dt> |
| <dd></dd></dl> |
| |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCSLIFADDR"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCSLIFADDR</span></span></span><a class="headerlink" href="#c.SIOCSLIFADDR" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>Get or set the IPv6 address of the device using <code class="xref c c-member docutils literal notranslate"><span class="pre">lifr_addr</span></code>.</p> |
| <p>We follow the Linux convention[1] to allow interface name to be |
| <eth>:<num>[2], to keep working with multiple IPv6 addresses.</p> |
| <p>Note: Recommend to use <a class="reference internal" href="#c.SIOCSIFADDR" title="SIOCSIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCSIFADDR</span></code></a> and <a class="reference internal" href="#c.SIOCDIFADDR" title="SIOCDIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCDIFADDR</span></code></a> |
| to manage IPv6 addresses, by which you don’t need to care about the |
| slot it stored.</p> |
| <p>[1]: <a class="reference external" href="https://man7.org/linux/man-pages/man7/netdevice.7.html">https://man7.org/linux/man-pages/man7/netdevice.7.html</a> |
| [2]: e.g. ‘eth0:0’ stands for the secondary address on eth0</p> |
| </dd></dl> |
| |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCGIFNETMASK"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCGIFNETMASK</span></span></span><a class="headerlink" href="#c.SIOCGIFNETMASK" title="Permalink to this definition"></a><br /></dt> |
| <dd></dd></dl> |
| |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCSIFNETMASK"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCSIFNETMASK</span></span></span><a class="headerlink" href="#c.SIOCSIFNETMASK" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>Get or set the IPv4 network mask for a device using <code class="xref c c-member docutils literal notranslate"><span class="pre">ifr_netmask</span></code>.</p> |
| </dd></dl> |
| |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCGLIFNETMASK"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCGLIFNETMASK</span></span></span><a class="headerlink" href="#c.SIOCGLIFNETMASK" title="Permalink to this definition"></a><br /></dt> |
| <dd></dd></dl> |
| |
| <dl class="c macro"> |
| <dt class="sig sig-object c" id="c.SIOCSLIFNETMASK"> |
| <span class="sig-name descname"><span class="n"><span class="pre">SIOCSLIFNETMASK</span></span></span><a class="headerlink" href="#c.SIOCSLIFNETMASK" title="Permalink to this definition"></a><br /></dt> |
| <dd><p>Get or set the IPv6 network mask for a device using <code class="xref c c-member docutils literal notranslate"><span class="pre">lifr_netmask</span></code>.</p> |
| <p>We follow the Linux convention to allow interface name to be <eth>:<num>, |
| to keep working with multiple IPv6 addresses.</p> |
| <p>Note: Recommend to use <a class="reference internal" href="#c.SIOCSIFADDR" title="SIOCSIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCSIFADDR</span></code></a> and <a class="reference internal" href="#c.SIOCDIFADDR" title="SIOCDIFADDR"><code class="xref c c-macro docutils literal notranslate"><span class="pre">SIOCDIFADDR</span></code></a> |
| to manage IPv6 addresses, by which you don’t need to care about the |
| slot it stored.</p> |
| </dd></dl> |
| |
| </section> |
| </section> |
| </section> |
| |
| |
| </div> |
| </div> |
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> |
| <a href="wqueue.html" class="btn btn-neutral float-left" title="Work Queues" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> |
| <a href="../../faq/index.html" class="btn btn-neutral float-right" title="FAQ" 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> |