#!/vendor/bin/sh # Do all the setup required for WiFi. # The kernel driver mac80211_hwsim has already created two virtual wifi devices # us. These devices are connected so that everything that's sent on one device # is recieved on the other and vice versa. This allows us to create a fake # WiFi network with an access point running inside the guest. Here is the setup # for that and the basics of how it works. # # Create a namespace named router and move eth0 to it. Create a virtual ethernet # pair of devices and move both one virtual ethernet interface and one virtual # wifi interface into the router namespace. Then set up NAT networking for those # interfaces so that traffic flowing through them reach eth0 and eventually the # host and the internet. The main network namespace will now only see the other # ends of those pipes and send traffic on them depending on if WiFi or radio is # used. Finally run hostapd in the network namespace to create an access point # for the guest to connect to and dnsmasq to serve as a DHCP server for the WiFi # connection. # # main namespace router namespace # ------- ---------- | --------------- # | ril |<----->| radio0 |<--+--->| radio0-peer |<-------+ # ------- ---------- | --------------- | # | ^ | # | | | # | v v # | ************* -------- # | * ipv6proxy *<--->| eth0 |<--+ # | ************* -------- | # | ^ ^ | # | | | | # | v | | # ------------------ --------- | --------- | | # | wpa_supplicant |<->| wlan0 |<--+------->| wlan1 |<---------+ | # ------------------ --------- | --------- | # | ^ ^ | # | | | v # | v v -------- # | *********** *********** | host | # | * hostapd * * dnsmasq * -------- # | *********** *********** # wifi_mac_prefix=`getprop vendor.net.wifi_mac_prefix` if [ -n "$wifi_mac_prefix" ]; then /vendor/bin/mac80211_create_radios 2 $wifi_mac_prefix || exit 1 fi NAMESPACE="router" # createns will have created a file that contains the process id (pid) of a # process running in the network namespace. This pid is needed for some commands # to access the namespace. PID=$(