| # Netstack3 Hacking HOWTO |
| |
| This document describes how to run Netstack3, as well as a few possible dev |
| workflows. The instructions are for how to set up QEMU, but are also applicable |
| to real hardware. |
| |
| ## Running Alongside Default Netstack |
| |
| The following instructions here are for running Netstack3 alongside the default |
| netstack on a separate interface. This is currently the recommended method of |
| running Netstack3. |
| |
| ### (Step 1) QEMU Setup |
| |
| First, set up two interfaces for QEMU to use (you only need to do this once per |
| boot of host machine): |
| |
| ``` |
| sudo ip tuntap add dev qemu mode tap user $USER |
| sudo ip tuntap add dev qemu-extra mode tap user $USER |
| sudo ifconfig qemu up |
| sudo ifconfig qemu-extra up |
| ``` |
| |
| Assign an IPv4 address for the `qemu-extra` interface so that you can ping from |
| it later: |
| |
| ``` |
| sudo ifconfig qemu-extra 192.168.4.1 netmask 255.255.255.0 up |
| ``` |
| |
| Start Qemu with networking support: |
| |
| ``` |
| fx qemu -N |
| ``` |
| |
| At this point you should be able to `fx shell` and resolve the default |
| netstack interface address with `fx get-device-addr`. |
| |
| ### (Step 2) `enclosed_runner` Setup |
| |
| Follow the instructions in the [`enclosed_runner` documentation]( |
| ../tools/enclosed_runner/README.md) to run Netstack3 on the second ethernet |
| interface. Note that the instructions above assigned `192.168.4.1/24` to |
| `qemu-extra` so the address assigned to Netstack3 through `enclosed_runner` |
| should also be in this subnet. If you're successful, you should be able to ping |
| the address assigned to Netstack3 (presumably `192.168.4.x`) from the host |
| machine. |
| |
| ## Running Netstack3 Only |
| |
| The following instructions are for running Netstack3 as a replacement for the |
| default netstack. |
| |
| ### (Step 1) Build Configuration |
| |
| `fx set ... --args=use_netstack3=true` |
| |
| **NOTE:** At the time of this writing, Netstack3 is not complete enough to allow |
| for dynamic package download and install. So make sure that every package that |
| you'll need is included in your `fx set` line using the `--with-base` argument, |
| which will have those packages be part of the base system. Like this: |
| |
| ``` |
| fx set core.x64 |
| --with-base //path/to/targetA \ |
| --with-base //path/to/targetB \ |
| --args=use_netstack3=true |
| ``` |
| |
| ### (Step 2) Running |
| |
| Once you've done this setup, the netstack should be set up. You can run fuchsia |
| however you normally would, then use `net` to set up the interface: |
| |
| ``` |
| net if add /dev/class/ethernet/000 |
| net if addr add 1 192.168.1.39 24 |
| net fwd add-device 1 192.168.1.0 24 |
| ``` |
| |
| Once you've done this, you can check that Netstack3 is reachable by pinging it |
| from your host machine: |
| |
| ``` |
| ping -I qemu-extra 192.168.1.39 -c 1 |
| ``` |
| |
| This is painfully slow right now - wesleyac@ is working on a solution that |
| pushes only the package, instead of rebuilding the image and restarting qemu |
| each time, but that's further off. |