xref: /aosp_15_r20/tools/netsim/guide/src/development/README.md (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Worker# Network Simulator Development
2*cf78ab8cSAndroid Build Coastguard Worker
3*cf78ab8cSAndroid Build Coastguard WorkerThis section walks you through building netsim from source.
4*cf78ab8cSAndroid Build Coastguard Worker
5*cf78ab8cSAndroid Build Coastguard WorkerNetsim can be built as part of emulator or cuttlefish and best practice is to
6*cf78ab8cSAndroid Build Coastguard Workersetup both and switch between repo directories to test each build environment.
7*cf78ab8cSAndroid Build Coastguard Worker
8*cf78ab8cSAndroid Build Coastguard Worker* To build with emulator, follow the [netsim with emulator](#netsim_with_emulator)
9*cf78ab8cSAndroid Build Coastguard Workersection to build netsim by `cmake` in `emu-master-dev` manifest branch.
10*cf78ab8cSAndroid Build Coastguard Worker
11*cf78ab8cSAndroid Build Coastguard Worker* To build with cuttlefish, follow the [netsim with
12*cf78ab8cSAndroid Build Coastguard Workercuttlefish](#netsim_with_cuttlefish) to build netsim by `soong` in `aosp-master`
13*cf78ab8cSAndroid Build Coastguard Workermanifest branch.
14*cf78ab8cSAndroid Build Coastguard Worker
15*cf78ab8cSAndroid Build Coastguard Worker## Emulator and cuttlefish build branches
16*cf78ab8cSAndroid Build Coastguard Worker
17*cf78ab8cSAndroid Build Coastguard WorkerThe *netsim* network simulator is built as a component of
18*cf78ab8cSAndroid Build Coastguard Worker[emulator](https://source.android.com/docs/setup/create/avd)
19*cf78ab8cSAndroid Build Coastguard Workerand
20*cf78ab8cSAndroid Build Coastguard Worker[cuttlefish](https://source.android.com/docs/setup/create/cuttlefish)
21*cf78ab8cSAndroid Build Coastguard Workervirtual devices.
22*cf78ab8cSAndroid Build Coastguard Worker
23*cf78ab8cSAndroid Build Coastguard Worker*Emulator* allows you to run emulations of Android devices on Windows, macOS or
24*cf78ab8cSAndroid Build Coastguard WorkerLinux machines. Emulator runs the Android operating system in a virtual machine
25*cf78ab8cSAndroid Build Coastguard Workercalled an Android Virtual Device (AVD).
26*cf78ab8cSAndroid Build Coastguard WorkerThe emulator is typically used from
27*cf78ab8cSAndroid Build Coastguard Worker[Android Studio](https://developer.android.com/studio).
28*cf78ab8cSAndroid Build Coastguard Worker
29*cf78ab8cSAndroid Build Coastguard Worker*Cuttlefish* is a configurable virtual Android device that can be run on Linux
30*cf78ab8cSAndroid Build Coastguard Workerx86 machines both remotely (using third-party cloud offerings such as Google
31*cf78ab8cSAndroid Build Coastguard WorkerCloud Engine) and locally. Cuttlefish runs the Android operating system in a
32*cf78ab8cSAndroid Build Coastguard Workervirtual machine called a Cuttlefish Virtual Device (CVD).
33*cf78ab8cSAndroid Build Coastguard WorkerCuttlefish is typically used by developers working with AOSP code to [launch
34*cf78ab8cSAndroid Build Coastguard WorkerAOSP builds](https://source.android.com/docs/setup/create/cuttlefish-use).
35*cf78ab8cSAndroid Build Coastguard Worker
36*cf78ab8cSAndroid Build Coastguard WorkerThe table below summarizes the two virtual device environments:
37*cf78ab8cSAndroid Build Coastguard Worker
38*cf78ab8cSAndroid Build Coastguard Worker|                 |      emulator         | cuttlefish         |
39*cf78ab8cSAndroid Build Coastguard Worker|:----------------|:---------------------:|:----------------:  |
40*cf78ab8cSAndroid Build Coastguard Worker| AOSP branch     | `emu-master-dev`      | `aosp-master`      |
41*cf78ab8cSAndroid Build Coastguard Worker| launcher        | `emulator` app and<br>Android Studio | `launch_cvd` and<br>`cvd` app |
42*cf78ab8cSAndroid Build Coastguard Worker| best for        | App developer         | Platform developer |
43*cf78ab8cSAndroid Build Coastguard Worker| Supported OS    | Linux, MacOS, Windows | Linux              |
44*cf78ab8cSAndroid Build Coastguard Worker| Build system    | &nbsp;&nbsp; CMake (CMakeLists.txt) &nbsp;&nbsp; | &nbsp;&nbsp; Soong (Android.bp) &nbsp;&nbsp; |
45*cf78ab8cSAndroid Build Coastguard Worker| Virtual device  | AVD                   | CVD                |
46*cf78ab8cSAndroid Build Coastguard Worker
47*cf78ab8cSAndroid Build Coastguard WorkerNetsim is the default networking backplane for AVD and CVD emulated Android
48*cf78ab8cSAndroid Build Coastguard Workerdevices.
49*cf78ab8cSAndroid Build Coastguard Worker
50*cf78ab8cSAndroid Build Coastguard Worker## <a name="netsim_with_emulator"></a>Build netsim with emulator
51*cf78ab8cSAndroid Build Coastguard Worker
52*cf78ab8cSAndroid Build Coastguard WorkerFor developing netsim alongside emulator, start with the OS specific build
53*cf78ab8cSAndroid Build Coastguard Workerinstructions:
54*cf78ab8cSAndroid Build Coastguard Worker* [Android emulator Windows Development](
55*cf78ab8cSAndroid Build Coastguard Workerhttps://android.googlesource.com/platform/external/qemu/+/refs/heads/emu-master-dev/android/docs/WINDOWS-DEV.md
56*cf78ab8cSAndroid Build Coastguard Worker)
57*cf78ab8cSAndroid Build Coastguard Worker* [Android emulator MacOS Development](
58*cf78ab8cSAndroid Build Coastguard Workerhttps://android.googlesource.com/platform/external/qemu/+/refs/heads/emu-master-dev/android/docs/DARWIN-DEV.md
59*cf78ab8cSAndroid Build Coastguard Worker)
60*cf78ab8cSAndroid Build Coastguard Worker* [Android emulator Linux Development](
61*cf78ab8cSAndroid Build Coastguard Workerhttps://android.googlesource.com/platform/external/qemu/+/refs/heads/emu-master-dev/android/docs/LINUX-DEV.md
62*cf78ab8cSAndroid Build Coastguard Worker)
63*cf78ab8cSAndroid Build Coastguard Worker
64*cf78ab8cSAndroid Build Coastguard WorkerIn general changes should be built and tested on all three operating systems.
65*cf78ab8cSAndroid Build Coastguard Worker
66*cf78ab8cSAndroid Build Coastguard WorkerFollow the instructions above links for workstation setup. Linux setup and build
67*cf78ab8cSAndroid Build Coastguard Workeris summarized below:
68*cf78ab8cSAndroid Build Coastguard Worker
69*cf78ab8cSAndroid Build Coastguard Worker### Linux workstation set up
70*cf78ab8cSAndroid Build Coastguard Worker
71*cf78ab8cSAndroid Build Coastguard WorkerInstall cmake and ninja:
72*cf78ab8cSAndroid Build Coastguard Worker
73*cf78ab8cSAndroid Build Coastguard Worker```
74*cf78ab8cSAndroid Build Coastguard Workersudo apt-get install -y cmake ninja-build
75*cf78ab8cSAndroid Build Coastguard Worker```
76*cf78ab8cSAndroid Build Coastguard Worker
77*cf78ab8cSAndroid Build Coastguard Worker### Initialize and sync the code
78*cf78ab8cSAndroid Build Coastguard Worker
79*cf78ab8cSAndroid Build Coastguard WorkerDownload the emu-master-dev branch:
80*cf78ab8cSAndroid Build Coastguard Worker
81*cf78ab8cSAndroid Build Coastguard Worker```
82*cf78ab8cSAndroid Build Coastguard Workermkdir /repo/emu-master-dev; cd /repo/emu-master-dev
83*cf78ab8cSAndroid Build Coastguard Workerrepo init -u https://android.googlesource.com/platform/manifest -b emu-master-dev
84*cf78ab8cSAndroid Build Coastguard Worker```
85*cf78ab8cSAndroid Build Coastguard WorkerSync the source code:
86*cf78ab8cSAndroid Build Coastguard Worker
87*cf78ab8cSAndroid Build Coastguard Worker```
88*cf78ab8cSAndroid Build Coastguard Workerrepo sync -j8
89*cf78ab8cSAndroid Build Coastguard Worker```
90*cf78ab8cSAndroid Build Coastguard Worker
91*cf78ab8cSAndroid Build Coastguard Worker### Emulator full build
92*cf78ab8cSAndroid Build Coastguard Worker
93*cf78ab8cSAndroid Build Coastguard WorkerUse Android emulator toolchain script to run the build:
94*cf78ab8cSAndroid Build Coastguard Worker```
95*cf78ab8cSAndroid Build Coastguard Workercd /repo/emu-master-dev/external/qemu
96*cf78ab8cSAndroid Build Coastguard Workersh android/rebuild.sh
97*cf78ab8cSAndroid Build Coastguard Worker```
98*cf78ab8cSAndroid Build Coastguard Worker
99*cf78ab8cSAndroid Build Coastguard WorkerThe output can be found in:
100*cf78ab8cSAndroid Build Coastguard Worker```
101*cf78ab8cSAndroid Build Coastguard Worker/repo/emu-master-dev/external/qemu/objs/distribution/emulator
102*cf78ab8cSAndroid Build Coastguard Worker```
103*cf78ab8cSAndroid Build Coastguard Worker
104*cf78ab8cSAndroid Build Coastguard Worker### Emulator incremental netsim build
105*cf78ab8cSAndroid Build Coastguard Worker
106*cf78ab8cSAndroid Build Coastguard WorkerThe `emulator` rebuild script does a complete clean build of all emulator components.
107*cf78ab8cSAndroid Build Coastguard WorkerFor incrmental builds of the `netsimd` component, you can use the `cmake_setup` script:
108*cf78ab8cSAndroid Build Coastguard Worker```
109*cf78ab8cSAndroid Build Coastguard Workercd /repo/emu-master-dev/tools/netsim
110*cf78ab8cSAndroid Build Coastguard Workersh scripts/cmake_setup.sh
111*cf78ab8cSAndroid Build Coastguard Worker```
112*cf78ab8cSAndroid Build Coastguard Worker
113*cf78ab8cSAndroid Build Coastguard WorkerThen use `ninja` for a partial netsim build:
114*cf78ab8cSAndroid Build Coastguard Worker```
115*cf78ab8cSAndroid Build Coastguard Workerninja -C objs netsimd
116*cf78ab8cSAndroid Build Coastguard Worker```
117*cf78ab8cSAndroid Build Coastguard Worker
118*cf78ab8cSAndroid Build Coastguard WorkerIf the build fails with rust errors it may be necessary to issue this command:
119*cf78ab8cSAndroid Build Coastguard Worker
120*cf78ab8cSAndroid Build Coastguard Worker```
121*cf78ab8cSAndroid Build Coastguard Workerrm rust/Cargo.lock
122*cf78ab8cSAndroid Build Coastguard Worker```
123*cf78ab8cSAndroid Build Coastguard Worker
124*cf78ab8cSAndroid Build Coastguard WorkerCopy Web UI assets into `objs/netsim-ui`.
125*cf78ab8cSAndroid Build Coastguard Worker```
126*cf78ab8cSAndroid Build Coastguard Workersh scripts/build_ui.sh
127*cf78ab8cSAndroid Build Coastguard Worker```
128*cf78ab8cSAndroid Build Coastguard WorkerIf you wish to change the source code of the ui and rebuild, use the `-b` flag.
129*cf78ab8cSAndroid Build Coastguard Worker
130*cf78ab8cSAndroid Build Coastguard WorkerThe output can be found in
131*cf78ab8cSAndroid Build Coastguard Worker
132*cf78ab8cSAndroid Build Coastguard Worker```
133*cf78ab8cSAndroid Build Coastguard Worker/repo/emu-master-dev/tools/netsim/objs
134*cf78ab8cSAndroid Build Coastguard Worker```
135*cf78ab8cSAndroid Build Coastguard Worker
136*cf78ab8cSAndroid Build Coastguard Worker## <a name="netsim_with_cuttlefish"></a>Build netsim with cuttlefish
137*cf78ab8cSAndroid Build Coastguard Worker
138*cf78ab8cSAndroid Build Coastguard WorkerThe [Android Developer Codelab](https://source.android.com/docs/setup/start)
139*cf78ab8cSAndroid Build Coastguard Workerprovides instructions for building and running cuttlefish AVDs.
140*cf78ab8cSAndroid Build Coastguard Worker
141*cf78ab8cSAndroid Build Coastguard WorkerFollow the instructions in the codelab for workstation setup.
142*cf78ab8cSAndroid Build Coastguard Worker
143*cf78ab8cSAndroid Build Coastguard Worker### Initialize and sync the code
144*cf78ab8cSAndroid Build Coastguard Worker
145*cf78ab8cSAndroid Build Coastguard WorkerInitialize the repo:
146*cf78ab8cSAndroid Build Coastguard Worker```
147*cf78ab8cSAndroid Build Coastguard Workermkdir /repo/aosp-master; cd /repo/aosp-master
148*cf78ab8cSAndroid Build Coastguard Workerrepo init -u https://android.googlesource.com/platform/manifest -b aosp-master
149*cf78ab8cSAndroid Build Coastguard Worker```
150*cf78ab8cSAndroid Build Coastguard Worker
151*cf78ab8cSAndroid Build Coastguard WorkerSync the source code:
152*cf78ab8cSAndroid Build Coastguard Worker```
153*cf78ab8cSAndroid Build Coastguard Workerrepo sync -j8
154*cf78ab8cSAndroid Build Coastguard Worker```
155*cf78ab8cSAndroid Build Coastguard Worker
156*cf78ab8cSAndroid Build Coastguard Worker### Build cuttlefish
157*cf78ab8cSAndroid Build Coastguard Worker
158*cf78ab8cSAndroid Build Coastguard WorkerSet up build environment:
159*cf78ab8cSAndroid Build Coastguard Worker```
160*cf78ab8cSAndroid Build Coastguard Workersource build/envsetup.sh
161*cf78ab8cSAndroid Build Coastguard Worker```
162*cf78ab8cSAndroid Build Coastguard Worker
163*cf78ab8cSAndroid Build Coastguard WorkerSet the target device type:
164*cf78ab8cSAndroid Build Coastguard Worker```
165*cf78ab8cSAndroid Build Coastguard Workerlunch aosp_cf_x86_64_phone
166*cf78ab8cSAndroid Build Coastguard Worker```
167*cf78ab8cSAndroid Build Coastguard Worker
168*cf78ab8cSAndroid Build Coastguard WorkerStart the build:
169*cf78ab8cSAndroid Build Coastguard Worker```
170*cf78ab8cSAndroid Build Coastguard Workerm -j64
171*cf78ab8cSAndroid Build Coastguard Worker```
172*cf78ab8cSAndroid Build Coastguard Worker
173*cf78ab8cSAndroid Build Coastguard WorkerThe netsim executable can be found in:
174*cf78ab8cSAndroid Build Coastguard Worker```
175*cf78ab8cSAndroid Build Coastguard Worker/repo/aosp-master/out/host/linux-x86/bin
176*cf78ab8cSAndroid Build Coastguard Worker```
177*cf78ab8cSAndroid Build Coastguard Worker
178*cf78ab8cSAndroid Build Coastguard Worker### Cuttlefish incremental netsim build
179*cf78ab8cSAndroid Build Coastguard Worker
180*cf78ab8cSAndroid Build Coastguard Worker
181*cf78ab8cSAndroid Build Coastguard WorkerStart the build with netsimd target:
182*cf78ab8cSAndroid Build Coastguard Worker```
183*cf78ab8cSAndroid Build Coastguard Workerm netsimd -j64
184*cf78ab8cSAndroid Build Coastguard Worker```
185*cf78ab8cSAndroid Build Coastguard Worker
186*cf78ab8cSAndroid Build Coastguard Worker## Unit Testing
187*cf78ab8cSAndroid Build Coastguard Worker
188*cf78ab8cSAndroid Build Coastguard WorkerUnit tests can be run from the `aosp-master` branch using the `atest` command:
189*cf78ab8cSAndroid Build Coastguard Worker```
190*cf78ab8cSAndroid Build Coastguard Workeratest --host-unit-test-only --test-filter netsim
191*cf78ab8cSAndroid Build Coastguard Worker```
192*cf78ab8cSAndroid Build Coastguard Worker
193*cf78ab8cSAndroid Build Coastguard WorkerRust tests can also be run for individual Rust modules using the `cargo test` command:
194*cf78ab8cSAndroid Build Coastguard Worker```
195*cf78ab8cSAndroid Build Coastguard Workercd tools/netsim/rust/netsim-cxx/
196*cf78ab8cSAndroid Build Coastguard Workercargo test transport
197*cf78ab8cSAndroid Build Coastguard Worker```
198*cf78ab8cSAndroid Build Coastguard Worker
199*cf78ab8cSAndroid Build Coastguard Worker## Build Tips
200*cf78ab8cSAndroid Build Coastguard Worker
201*cf78ab8cSAndroid Build Coastguard Worker### Building across repository directories
202*cf78ab8cSAndroid Build Coastguard Worker
203*cf78ab8cSAndroid Build Coastguard WorkerYou will need to verify that any changes in `tools/netsim` can be built from
204*cf78ab8cSAndroid Build Coastguard Workerboth manifest branches. To temporarily copy changes between repositories we often
205*cf78ab8cSAndroid Build Coastguard Workeruse:
206*cf78ab8cSAndroid Build Coastguard Worker
207*cf78ab8cSAndroid Build Coastguard Worker```
208*cf78ab8cSAndroid Build Coastguard Workergit diff HEAD^ > /tmp/git.diff
209*cf78ab8cSAndroid Build Coastguard Workercd /repo/emu-master-dev
210*cf78ab8cSAndroid Build Coastguard Workergit apply /tmp/git.diff
211*cf78ab8cSAndroid Build Coastguard Worker```
212*cf78ab8cSAndroid Build Coastguard Worker
213*cf78ab8cSAndroid Build Coastguard Worker### Repo workflow
214*cf78ab8cSAndroid Build Coastguard Worker
215*cf78ab8cSAndroid Build Coastguard WorkerThe repo workflow for creating and uploading a change request:
216*cf78ab8cSAndroid Build Coastguard Worker```
217*cf78ab8cSAndroid Build Coastguard Workerrepo start new-branch
218*cf78ab8cSAndroid Build Coastguard Workergit add <files>
219*cf78ab8cSAndroid Build Coastguard Workergit commit
220*cf78ab8cSAndroid Build Coastguard Workerrepo upload --branch=new-branch
221*cf78ab8cSAndroid Build Coastguard Worker```
222*cf78ab8cSAndroid Build Coastguard Worker
223*cf78ab8cSAndroid Build Coastguard WorkerSubsequent commits:
224*cf78ab8cSAndroid Build Coastguard Worker```
225*cf78ab8cSAndroid Build Coastguard Workergit add <files>
226*cf78ab8cSAndroid Build Coastguard Workergit commit --amend --no-edit
227*cf78ab8cSAndroid Build Coastguard Workerrepo upload --branch=new-branch
228*cf78ab8cSAndroid Build Coastguard Worker```
229*cf78ab8cSAndroid Build Coastguard Worker
230*cf78ab8cSAndroid Build Coastguard Worker## Documentation
231*cf78ab8cSAndroid Build Coastguard Worker
232*cf78ab8cSAndroid Build Coastguard WorkerThe developer and user documentation for netsim is stored in the `guide`
233*cf78ab8cSAndroid Build Coastguard Workerdirectory in `mdbook` format.  Refer to
234*cf78ab8cSAndroid Build Coastguard Worker[install](https://rust-lang.github.io/mdBook/guide/installation.html)
235*cf78ab8cSAndroid Build Coastguard Workerfor instructions on how to install `mdbook`.
236*cf78ab8cSAndroid Build Coastguard Worker
237*cf78ab8cSAndroid Build Coastguard WorkerUse this command to start a local web server with the netsim guide:
238*cf78ab8cSAndroid Build Coastguard Worker```
239*cf78ab8cSAndroid Build Coastguard Workermdbook serve guide
240*cf78ab8cSAndroid Build Coastguard Worker```
241*cf78ab8cSAndroid Build Coastguard Worker
242