blob: 49b98ce38fe96cdda8636a4f6d031ae7d6986fe3 [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>Simulator &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/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="How to use RNDIS" href="rndis.html" />
<link rel="prev" title="USB Device Trace" href="usbtrace.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"><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"><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 current"><a class="reference internal" href="index.html">Guides</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="nfs.html">NFS Client How-To</a></li>
<li class="toctree-l2"><a class="reference internal" href="usbtrace.html">USB Device Trace</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Simulator</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#prerequisites-for-macos">Prerequisites For macOS</a></li>
<li class="toctree-l3"><a class="reference internal" href="#compiling">Compiling</a></li>
<li class="toctree-l3"><a class="reference internal" href="#accessing-the-network">Accessing the Network</a></li>
<li class="toctree-l3"><a class="reference internal" href="#testing-capturing-tcp-network-traffic">Testing / capturing TCP network traffic</a></li>
<li class="toctree-l3"><a class="reference internal" href="#stopping">Stopping</a></li>
<li class="toctree-l3"><a class="reference internal" href="#debugging">Debugging</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="rndis.html">How to use RNDIS</a></li>
<li class="toctree-l2"><a class="reference internal" href="drivers.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpp_cmake.html">C++ Example using CMake</a></li>
<li class="toctree-l2"><a class="reference internal" href="pysimcoder.html">pysimCoder integration with NuttX</a></li>
<li class="toctree-l2"><a class="reference internal" href="customboards.html">Custom Boards How-To</a></li>
<li class="toctree-l2"><a class="reference internal" href="customapps.html">Custom Apps How-to</a></li>
<li class="toctree-l2"><a class="reference internal" href="citests.html">Running CI Test Locally</a></li>
<li class="toctree-l2"><a class="reference internal" href="zerolatencyinterrupts.html">High Performance: Zero Latency Interrupts, Maskable Nested Interrupts</a></li>
<li class="toctree-l2"><a class="reference internal" href="fortify.html">Fortify</a></li>
<li class="toctree-l2"><a class="reference internal" href="nestedinterrupts.html">Nested Interrupts</a></li>
<li class="toctree-l2"><a class="reference internal" href="ofloader.html">Open Flash Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="testingtcpip.html">Testing TCP/IP Network Stacks</a></li>
<li class="toctree-l2"><a class="reference internal" href="automounter.html">Auto-Mounter</a></li>
<li class="toctree-l2"><a class="reference internal" href="stm32nullpointer.html">STM32 Null Pointer Detection</a></li>
<li class="toctree-l2"><a class="reference internal" href="stm32ccm.html">STM32 CCM Allocator</a></li>
<li class="toctree-l2"><a class="reference internal" href="etcromfs.html">etc romfs</a></li>
<li class="toctree-l2"><a class="reference internal" href="thread_local_storage.html">Thread Local Storage</a></li>
<li class="toctree-l2"><a class="reference internal" href="devicetree.html">Device Tree</a></li>
<li class="toctree-l2"><a class="reference internal" href="changing_systemclockconfig.html">Changing the System Clock Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="usingkernelthreads.html">Using Kernel Threads</a></li>
<li class="toctree-l2"><a class="reference internal" href="armv7m_runtimestackcheck.html">ARMv7-M Run Time Stack Checking</a></li>
<li class="toctree-l2"><a class="reference internal" href="include_files_board_h.html">Including Files in board.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="specialstuff_in_nuttxheaderfiles.html">Why can’t I put my special stuff in NuttX header files?</a></li>
<li class="toctree-l2"><a class="reference internal" href="kernel_threads_with_custom_stacks.html">Kernel Threads with Custom Stacks</a></li>
<li class="toctree-l2"><a class="reference internal" href="versioning_and_task_names.html">Versioning and Task Names</a></li>
<li class="toctree-l2"><a class="reference internal" href="logging_rambuffer.html">Logging to a RAM Buffer</a></li>
<li class="toctree-l2"><a class="reference internal" href="ipv6.html">IPv6</a></li>
<li class="toctree-l2"><a class="reference internal" href="integrate_newlib.html">Integrating with Newlib</a></li>
<li class="toctree-l2"><a class="reference internal" href="protected_build.html">NuttX Protected Build</a></li>
<li class="toctree-l2"><a class="reference internal" href="platform_directories.html">Platform Directories</a></li>
<li class="toctree-l2"><a class="reference internal" href="port_drivers_to_stm32f7.html">Porting Drivers to the STM32 F7</a></li>
<li class="toctree-l2"><a class="reference internal" href="semihosting.html">Semihosting</a></li>
<li class="toctree-l2"><a class="reference internal" href="renode.html">Run NuttX on Renode</a></li>
<li class="toctree-l2"><a class="reference internal" href="signal_events_interrupt_handlers.html">Signaling Events from Interrupt Handlers</a></li>
<li class="toctree-l2"><a class="reference internal" href="signaling_sem_priority_inheritance.html">Signaling Semaphores and Priority Inheritance</a></li>
<li class="toctree-l2"><a class="reference internal" href="smaller_vector_tables.html">Smaller Vector Tables</a></li>
<li class="toctree-l2"><a class="reference internal" href="port.html">How to port</a></li>
<li class="toctree-l2"><a class="reference internal" href="updating_release_system_elf.html">Updating a Release System with ELF Programs</a></li>
<li class="toctree-l2"><a class="reference internal" href="partially_linked_elf.html">ELF Programs – With Symbol Tables</a></li>
<li class="toctree-l2"><a class="reference internal" href="fully_linked_elf.html">ELF Programs – No Symbol Tables</a></li>
<li class="toctree-l2"><a class="reference internal" href="building_nuttx_with_app_out_of_src_tree.html">Building NuttX with Applications Outside the Source Tree</a></li>
<li class="toctree-l2"><a class="reference internal" href="building_uclibcpp.html">Building uClibc++</a></li>
<li class="toctree-l2"><a class="reference internal" href="custom_app_directories.html">Custom Application Directories</a></li>
<li class="toctree-l2"><a class="reference internal" href="multiple_nsh_sessions.html">Multiple NSH Sessions</a></li>
<li class="toctree-l2"><a class="reference internal" href="nsh_network_link_management.html">NSH Network Link Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="ram_rom_disks.html">RAM Disks and ROM Disks</a></li>
<li class="toctree-l2"><a class="reference internal" href="reading_can_msgs.html">Reading CAN Messages</a></li>
<li class="toctree-l2"><a class="reference internal" href="remove_device_drivers_nsh.html">Removing Device Drivers with NSH</a></li>
<li class="toctree-l2"><a class="reference internal" href="rust.html">Rust in NuttX</a></li>
<li class="toctree-l2"><a class="reference internal" href="optee.html">Interfacing with OP-TEE</a></li>
</ul>
</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">Guides</a></li>
<li class="breadcrumb-item active">Simulator</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/nuttx/blob/master/Documentation/guides/simulator.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="simulator">
<span id="id1"></span><h1>Simulator<a class="headerlink" href="#simulator" title="Permalink to this heading"></a></h1>
<p>Apache NuttX has a simulator that can run as a regular program on Linux, Mac, and Windows computers.
It’s useful for debugging operating system features that aren’t associated with particular
device drivers— for instance the TCP/IP stack itself, a web interface or API for your
application, or other communication protocols. It’s also handy for trying out Apache NuttX without
having a piece of embedded hardware.</p>
<p>This guide assumes you’re on Linux. It works on Windows and Mac too— if you know how,
submit a PR to improve this guide!</p>
<div class="admonition-todo admonition" id="id2">
<p class="admonition-title">Todo</p>
<p>Windows instructions</p>
</div>
<section id="prerequisites-for-macos">
<h2>Prerequisites For macOS<a class="headerlink" href="#prerequisites-for-macos" title="Permalink to this heading"></a></h2>
<p>We need <code class="docutils literal notranslate"><span class="pre">genromfs</span></code> to build simulators(NON GUI).</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/chexum/genromfs.git
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>genromfs
<span class="gp">$ </span>make
<span class="gp">$ </span>make<span class="w"> </span>install
</pre></div>
</div>
</div></blockquote>
<p>Now Copy the built <cite>genromfs</cite> <cite>exec</cite> to /opt/local/bin.</p>
<p>For GUI Applications we need X11 Libraries, libx11 can also be built using Homebrew or by Installing XQuartz.</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>port<span class="w"> </span>install<span class="w"> </span>xorg-libX11
<span class="gp">$ </span>sudo<span class="w"> </span>port<span class="w"> </span>install<span class="w"> </span>xorg-server
</pre></div>
</div>
</div></blockquote>
</section>
<section id="compiling">
<h2>Compiling<a class="headerlink" href="#compiling" title="Permalink to this heading"></a></h2>
<ol class="arabic">
<li><p>Configure the Simulator</p>
<p>There are a lot of simulator configurations available that set you up to test various
operating system features.</p>
<p>Here we’ll use the <code class="docutils literal notranslate"><span class="pre">sim:nsh</span></code> basic NuttX Shell configuration.</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>nuttx
<span class="gp">$ </span>./tools/configure.sh<span class="w"> </span>sim:nsh
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Compile</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>make
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Run the simulator:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>./nuttx
<span class="go">login: admin</span>
<span class="go">password: Administrator</span>
<span class="go">User Logged-in!</span>
<span class="go">NuttShell (NSH) NuttX-9.1.0</span>
<span class="go">MOTD: username=admin password=Administrator</span>
<span class="go">nsh&gt; help</span>
<span class="go">help usage: help [-v] [&lt;cmd&gt;]</span>
<span class="go"> [ cp exit losetup mv rmdir true</span>
<span class="go"> ? cmp false ls mw set uname</span>
<span class="go"> basename dirname free mb poweroff sh unset</span>
<span class="go"> break dd help mkdir ps sleep usleep</span>
<span class="go"> cat echo hexdump mkfatfs pwd test xd</span>
<span class="go"> cd exec kill mh rm time</span>
<span class="go">Builtin Apps:</span>
<span class="go"> hello nsh</span>
<span class="go">nsh&gt;</span>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Stop the simulator:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">nsh&gt; poweroff</span>
<span class="gp">$</span>
<span class="gp">$ </span><span class="c1"># we&#39;re back at the Linux prompt.</span>
</pre></div>
</div>
</div></blockquote>
</li>
</ol>
</section>
<section id="accessing-the-network">
<span id="simulator-accessing-the-network"></span><h2>Accessing the Network<a class="headerlink" href="#accessing-the-network" title="Permalink to this heading"></a></h2>
<ol class="arabic">
<li><p>Here we’ll use the <code class="docutils literal notranslate"><span class="pre">sim:tcpblaster</span></code> configuration because it comes with networking
that is ready to use.</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>make<span class="w"> </span>distclean
<span class="gp">$ </span>./tools/configure.sh<span class="w"> </span>sim:tcpblaster
<span class="gp">$ </span>make
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Give the Simulator Privileges</p>
<p>On recent Linux distributions, you need to give the <code class="docutils literal notranslate"><span class="pre">nuttx</span></code> program the capabilities
(similar to permissions) to access the network:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>setcap<span class="w"> </span>cap_net_admin+ep<span class="w"> </span>./nuttx
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Run the simulator:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>./nuttx
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Bring Up the Network Interfaces</p>
<p>On Apache NuttX:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">nsh&gt; ifup eth0</span>
</pre></div>
</div>
</div></blockquote>
<p>On Linux, first you need to find your main network interface— this will usually either
be an ethernet or wireless network adapter. Do this:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>ifconfig
<span class="go">lo: flags=73&lt;UP,LOOPBACK,RUNNING&gt; mtu 65536</span>
<span class="go"> inet 127.0.0.1 netmask 255.0.0.0</span>
<span class="go"> inet6 ::1 prefixlen 128 scopeid 0x10&lt;host&gt;</span>
<span class="go"> loop txqueuelen 1000 (Local Loopback)</span>
<span class="go"> RX packets 5846 bytes 614351 (614.3 KB)</span>
<span class="go"> RX errors 0 dropped 0 overruns 0 frame 0</span>
<span class="go"> TX packets 5846 bytes 614351 (614.3 KB)</span>
<span class="go"> TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</span>
<span class="go">wlp0s20f3: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt; mtu 1500</span>
<span class="go"> inet 192.168.1.209 netmask 255.255.255.0 broadcast 192.168.1.255</span>
<span class="go"> inet6 fe80::1161:c26b:af05:d784 prefixlen 64 scopeid 0x20&lt;link&gt;</span>
<span class="go"> ether 24:41:8c:a8:30:d1 txqueuelen 1000 (Ethernet)</span>
<span class="go"> RX packets 219369 bytes 176416490 (176.4 MB)</span>
<span class="go"> RX errors 0 dropped 0 overruns 0 frame 0</span>
<span class="go"> TX packets 108399 bytes 27213617 (27.2 MB)</span>
<span class="go"> TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</span>
</pre></div>
</div>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">lo0</span></code> is the Loopback Interface, so <code class="docutils literal notranslate"><span class="pre">wlp0s20f3</span></code> is the wireless interface. Note
that it has an IP address on the local net. There may be other interfaces listed, you’ll
need to pick the one that’s right for your system.</p>
<p>Then, on Linux do this to set up the tap network interface and route that will let
the Apache NuttX simulator access the network:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>./tools/simhostroute.sh<span class="w"> </span>wlp0s20f3<span class="w"> </span>on
<span class="gp">$ </span>ping<span class="w"> </span>-c<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">10</span>.0.1.2<span class="w"> </span><span class="c1"># nuttx system</span>
<span class="go">PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.</span>
<span class="go">64 bytes from 10.0.1.2: icmp_seq=1 ttl=64 time=7.52 ms</span>
<span class="go">--- 10.0.1.2 ping statistics ---</span>
<span class="go">1 packets transmitted, 1 received, 0% packet loss, time 0ms</span>
<span class="go">rtt min/avg/max/mdev = 7.529/7.529/7.529/0.000 m</span>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Test that Apache NuttX can access the Internet</p>
<p>First let’s ping the network interface of our Linux host to prove we can see the
gateway to the Internet:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">nsh&gt; ping -c 1 10.0.1.1</span>
<span class="go">nsh&gt; ping -c 1 10.0.1.1</span>
<span class="go">PING 10.0.1.1 56 bytes of data</span>
<span class="go">56 bytes from 10.0.1.1: icmp_seq=0 time=0 ms</span>
<span class="go">1 packets transmitted, 1 received, 0% packet loss, time 1010 ms</span>
</pre></div>
</div>
<p>Now let’s ping one of Google’s DNS servers to prove we can access the rest of the
Internet:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">nsh&gt; ping -c 1 8.8.8.8</span>
<span class="go">PING 8.8.8.8 56 bytes of data</span>
<span class="go">56 bytes from 8.8.8.8: icmp_seq=0 time=10 ms</span>
<span class="go">1 packets transmitted, 1 received, 0% packet loss, time 1010 ms</span>
</pre></div>
</div>
<p>If it doesn’t work, then you need to enable the IP forward on your computer:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">sudo sysctl -w net.ipv4.ip_forward=1</span>
</pre></div>
</div>
</div></blockquote>
<p>Success!</p>
</li>
</ol>
</section>
<section id="testing-capturing-tcp-network-traffic">
<h2>Testing / capturing TCP network traffic<a class="headerlink" href="#testing-capturing-tcp-network-traffic" title="Permalink to this heading"></a></h2>
<ol class="arabic">
<li><p>Start Wireshark (or tcpdump) on Linux and capture the appeared tap0 interface.</p></li>
<li><p>Optionally activate emulating packet loss on Linux:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>iptables<span class="w"> </span>-A<span class="w"> </span>INPUT<span class="w"> </span>-p<span class="w"> </span>tcp<span class="w"> </span>--dport<span class="w"> </span><span class="m">31337</span><span class="w"> </span>-m<span class="w"> </span>statistic<span class="w"> </span>--mode<span class="w"> </span>random<span class="w"> </span>--probability<span class="w"> </span><span class="m">0</span>.01<span class="w"> </span>-j<span class="w"> </span>DROP
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Run netcat server on Linux:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>netcat<span class="w"> </span>-l<span class="w"> </span>-p<span class="w"> </span><span class="m">31337</span>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Run netcat client on Apache NuttX:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">nsh&gt; dd if=/dev/zero of=/tmp/test.bin count=1000</span>
<span class="go">nsh&gt; netcat LINUX_HOST_IP_ADDRESS 31337 /tmp/test.bin</span>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Observe TCP network traffic in Wireshark / tcpdump on Linux.</p></li>
</ol>
</section>
<section id="stopping">
<h2>Stopping<a class="headerlink" href="#stopping" title="Permalink to this heading"></a></h2>
<ol class="arabic">
<li><p>The normal way to stop:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">nsh&gt; poweroff</span>
<span class="gp">$</span>
<span class="gp">$ </span><span class="c1"># we&#39;re back at the Linux prompt.</span>
</pre></div>
</div>
</div></blockquote>
<p>If you don’t have an nsh prompt, the only effective way to stop the simulator is kill it from another terminal:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>pkill<span class="w"> </span>nuttx
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Optionally deactivate emulating packet loss on Linux:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>iptables<span class="w"> </span>-D<span class="w"> </span>INPUT<span class="w"> </span>-p<span class="w"> </span>tcp<span class="w"> </span>--dport<span class="w"> </span><span class="m">31337</span><span class="w"> </span>-m<span class="w"> </span>statistic<span class="w"> </span>--mode<span class="w"> </span>random<span class="w"> </span>--probability<span class="w"> </span><span class="m">0</span>.01<span class="w"> </span>-j<span class="w"> </span>DROP
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>If you do not need tap0 interface anymore, it can be disabled on Linux as follows:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>./tools/simhostroute.sh<span class="w"> </span>wlan0<span class="w"> </span>off
</pre></div>
</div>
</div></blockquote>
</li>
</ol>
</section>
<section id="debugging">
<h2>Debugging<a class="headerlink" href="#debugging" title="Permalink to this heading"></a></h2>
<p>You can debug the simulator like any regular Linux program.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="usbtrace.html" class="btn btn-neutral float-left" title="USB Device Trace" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="rndis.html" class="btn btn-neutral float-right" title="How to use RNDIS" 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>