Add Ethernet support to cuttlefish

Add a launcher flag (e.g. "launch_cvd -ethernet=true") which adds
another Ethernet interface to the virtual device. Ethernet devices are
already "buried" for use by wireless, but this new interface is not
wrapped and can be managed by netd. This functionality is useful for
Auto targets.

This mildly refactors some code in allocd to create separate Ethernet
and Wifi bridges and tap devices.

The code is off by default because it requires a new cuttlefish-common
package (0.9.17) and we haven't made the necessary changes to the
networkAttributes to allow Ethernet and Wifi to co-exist, so enabling
Ethernet currently breaks Wifi on phone configurations.

The created ethernet interface will be eth2 for now; once we can enable
this by default, we can move Ethernet back to eth0.

Bug: 172286896
Change-Id: I38ebf259f8eac101d867279f40cc78088a60921d
19 files changed
tree: 0d4c8d5fe8e2bc20252449c690848c35695b98c9
  1. build/
  2. common/
  3. guest/
  4. host/
  5. recovery/
  6. shared/
  7. tests/
  8. tools/
  9. vsoc_arm64/
  10. vsoc_arm64_only/
  11. vsoc_x86/
  12. vsoc_x86_64/
  13. vsoc_x86_64_only/
  14. vsoc_x86_noapex/
  15. vsoc_x86_only/
  16. Android.bp
  17. Android.mk
  18. AndroidProducts.mk
  19. CleanSpec.mk
  20. default-permissions.xml
  21. dtb.img
  22. fetcher.mk
  23. host_package.mk
  24. METADATA
  25. OWNERS
  26. README.md
  27. required_images
  28. TEST_MAPPING
README.md

Cuttlefish Getting Started

Try Cuttlefish

  1. Make sure virtualization with KVM is available.

     grep -c -w "vmx\|svm" /proc/cpuinfo
    

    This should return a non-zero value. If running on a cloud machine, this may take cloud-vendor-specific steps to enable. For Google Compute Engine specifically, see the GCE guide.

  2. Download, build, and install the host debian package:

    git clone https://github.com/google/android-cuttlefish
    cd android-cuttlefish
    debuild -i -us -uc -b
    sudo dpkg -i ../cuttlefish-common_*_amd64.deb || sudo apt-get install -f
    sudo reboot
    

    The reboot will trigger installing additional kernel modules and applying udev rules.

  3. Go to http://ci.android.com/

  4. Enter a branch name. Start with aosp-master if you don‘t know what you’re looking for

  5. Navigate to aosp_cf_x86_phone and click on userdebug for the latest build

  6. Click on Artifacts

  7. Scroll down to the OTA images. These packages look like aosp_cf_x86_phone-img-xxxxxx.zip -- it will always have img in the name. Download this file

  8. Scroll down to cvd-host_package.tar.gz. You should always download a host package from the same build as your images.

  9. On your local system, combine the packages:

    mkdir cf
    cd cf
    tar xvf /path/to/cvd-host_package.tar.gz
    unzip /path/to/aosp_cf_x86_phone-img-xxxxxx.zip
    
  10. Launch cuttlefish with:

$ HOME=$PWD ./bin/launch_cvd

  1. Stop cuttlefish with:

$ HOME=$PWD ./bin/stop_cvd

Debug Cuttlefish

You can use adb to debug it, just like a physical device:

$ ./bin/adb -e shell

Launch Viewer

You can use the TightVNC JViewer. Once you have downloaded the TightVNC Java Viewer JAR in a ZIP archive, run it with

$ java -jar tightvnc-jviewer.jar -ScalingFactor=50 -Tunneling=no -host=localhost -port=6444

Click “Connect” and you should see a lock screen!