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 | CMake (CMakeLists.txt) | Soong (Android.bp) | 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