blob: 2edd415842c0f515dc0b1df155b3352ef7878a19 [file] [log] [blame] [view]
# 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.