on early-fs
    start vold

on fs
    mount_all /vendor/etc/fstab.ranchu --early

on late-fs
    # Mount RW partitions which need run fsck
    exec_start wait_for_keymaster
    mount_all /vendor/etc/fstab.ranchu --late

on early-init
    mount proc proc /proc remount hidepid=2,gid=3009
    setprop ro.hardware.vulkan ranchu

    # true if ram is <= 2G
    setprop ro.config.low_ram ${ro.boot.config.low_ram}
    setprop dalvik.vm.dex2oat64.enabled 1

    setprop ro.soc.manufacturer AOSP
    setprop ro.soc.model ranchu

    # DEPRECATED, use ro.boot.qemu instead. The GTS tests still refer to
    # ro.kernel.qemu to decide if a device is emulator. Should be removed once
    # GTS tests are migrated to ro.boot.qemu.
    setprop ro.kernel.qemu 1

on init
    # set RLIMIT_MEMLOCK to 8MB for BPF network statistics
    setrlimit memlock 8388608 8388608

    symlink /dev/goldfish_pipe /dev/android_pipe
    symlink /dev/goldfish_pipe /dev/qemu_pipe

    write /sys/block/zram0/comp_algorithm lz4
    write /proc/sys/vm/page-cluster 0

    #
    # EAS uclamp interfaces
    #
    mkdir /dev/cpuctl/foreground
    mkdir /dev/cpuctl/background
    mkdir /dev/cpuctl/top-app
    mkdir /dev/cpuctl/rt
    chown system system /dev/cpuctl
    chown system system /dev/cpuctl/foreground
    chown system system /dev/cpuctl/background
    chown system system /dev/cpuctl/top-app
    chown system system /dev/cpuctl/rt
    chown system system /dev/cpuctl/tasks
    chown system system /dev/cpuctl/foreground/tasks
    chown system system /dev/cpuctl/background/tasks
    chown system system /dev/cpuctl/top-app/tasks
    chown system system /dev/cpuctl/rt/tasks
    chmod 0664 /dev/cpuctl/tasks
    chmod 0664 /dev/cpuctl/foreground/tasks
    chmod 0664 /dev/cpuctl/background/tasks
    chmod 0664 /dev/cpuctl/top-app/tasks
    chmod 0664 /dev/cpuctl/rt/tasks

    start qemu-props

on post-fs-data
    setprop vold.post_fs_data_done 1
    mkdir /data/vendor/adb 0755 root root
    mkdir /data/vendor/var 0755 root root
    mkdir /data/vendor/var/run 0755 root root
    mkdir /data/vendor/var/run/netns 0755 root root

    start qemu-adb-keys

on zygote-start
    # Create the directories used by the Wireless subsystem
    mkdir /data/vendor/wifi 0771 wifi wifi
    mkdir /data/vendor/wifi/wpa 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi

on boot
    setprop ro.hardware.egl ${ro.boot.hardwareegl:-emulation}
    setprop debug.sf.vsync_reactor_ignore_present_fences true
    setprop debug.hwui.renderer opengl
    setprop debug.hwui.renderer ${ro.boot.debug.hwui.renderer}
    setprop ro.opengles.version ${ro.boot.opengles.version}
    setprop ro.surface_flinger.supports_background_blur 1
    setprop ro.zygote.disable_gl_preload 1

    setprop debug.stagefright.ccodec ${ro.boot.debug.stagefright.ccodec}

    setprop dalvik.vm.heapsize 192m
    setprop dalvik.vm.heapsize ${ro.boot.dalvik.vm.heapsize}
    setprop dalvik.vm.checkjni ${ro.boot.dalvik.vm.checkjni}
    chown root system /sys/power/wake_lock
    chown root system /sys/power/wake_unlock
    setprop ro.hardware.audio.primary goldfish

    setprop wifi.interface wlan0
    setprop wifi.direct.interface p2p-dev-wlan0

    # Create an unused USB gadget to allow sysfs testing
    mkdir /config/usb_gadget/g1 0770 root root

service ranchu-setup /vendor/bin/init.ranchu-core.sh
    class core
    user root
    group root
    oneshot

service qemu-adb-setup /system_ext/bin/init.qemu-adb-keys.sh
    class core
    user root
    group shell
    disabled  # Started when qemu-adb-keys is stopped
    oneshot

on property:vendor.qemu.vport.gnss=*
    symlink ${vendor.qemu.vport.gnss} /dev/gnss0

on property:vendor.qemu.timezone=*
    setprop persist.sys.timezone ${vendor.qemu.timezone}

on property:ro.boot.debug.sf.nobootanimation=1
    setprop debug.sf.nobootanimation 1

on property:dev.bootcomplete=1
    setprop vendor.qemu.dev.bootcomplete 1
    start ranchu-setup

on post-fs-data && property:ro.boot.qemu.wifi=1
    start create_router_ns

on post-fs-data && property:ro.boot.qemu.virtiowifi=1
    start ranchu-net

on property:vendor.qemu.networknamespace=ready
    start ranchu-net

service ranchu-net /vendor/bin/init.ranchu-net.sh
    class late_start
    user root
    group root wakelock wifi
    oneshot
    disabled    # Started on post-fs-data

service emu_hostapd /vendor/bin/execns router /vendor/bin/hostapd_nohidl /data/vendor/wifi/hostapd/hostapd.conf
    user root
    group root wifi net_raw net_admin
    disabled

service netmgr /vendor/bin/execns router /vendor/bin/netmgr --if-prefix wlan1 --bridge eth0,radio0-peer
    user root
    group root wifi
    disabled

service create_router_ns /vendor/bin/createns router
    user root
    group root
    disabled
    oneshot

service wifi_forwarder /vendor/bin/wifi_forwarder
    user root
    group root wifi
    disabled

service dhcpclient_rtr /vendor/bin/dhcpclient -i radio0 --no-gateway
    user root
    group root
    disabled

service dhcpclient_wifi /vendor/bin/dhcpclient -i wlan0 --no-gateway
    user root
    group root
    disabled

on property:vendor.network.bridged=1
    start dhcpclient_rtr

service dhcpclient_def /vendor/bin/dhcpclient -i eth0 --no-gateway
    user root
    group root
    disabled

# The qemu-props program is used to set various system
# properties on boot. It must be run early during the boot
# process to avoid race conditions with other daemons that
# might read them (e.g. surface flinger), so define it in
# class 'core'
#
service qemu-props /vendor/bin/qemu-props
    class core
    user root
    group root
    oneshot

service qemu-adb-keys /vendor/bin/qemu-adb-keys
    class core
    user root
    group root
    oneshot

service goldfish-logcat /system/bin/logcat -f /dev/hvc1 ${ro.boot.logcat}
    class main
    user logd
    group root logd

service bugreport /system/bin/dumpstate -d -p -z
    class main
    disabled
    oneshot
    keycodes 114 115 116

service wpa_supplicant /vendor/bin/hw/wpa_supplicant -Dnl80211 -iwlan0 -c/vendor/etc/wifi/wpa_supplicant.conf -g@android:wpa_wlan0
    interface android.hardware.wifi.supplicant@1.0::ISupplicant default
    interface android.hardware.wifi.supplicant@1.1::ISupplicant default
    interface android.hardware.wifi.supplicant@1.2::ISupplicant default
    interface android.hardware.wifi.supplicant@1.3::ISupplicant default
    socket wpa_wlan0 dgram 660 wifi wifi
    group system wifi inet
    oneshot
    disabled

# Enable zram only once per boot. From:

# We want one opportunity per boot to enable zram, so we
# use a trigger we fire from the above stanza. If
# persist.sys.zram_enabled becomes true after boot,
# we don't want to run swapon_all at that time.

on property:sys.boot_completed=1
    trigger sys-boot-completed-set

on sys-boot-completed-set && property:persist.sys.zram_enabled=1
    swapon_all /vendor/etc/fstab.${ro.hardware}
