Auf dieser Seite wird beschrieben, wie verschiedene Netzwerkbedingungen unter Android simuliert werden Hardwaregeräte für den Automobilbereich auf skalierbare und wartungsarme Weise Dieses umgebungsunabhängige Netzwerksimulation gewöhnliche Linux-Tools verwendet, die auf Android Automotive-Hardwaregeräten ausgeführt werden können.
In den folgenden Abschnitten wird beschrieben, wie Sie Android Automotive-Hardwaregeräte
Kernel-Anforderung
Um die Netzwerksimulation auf einem zu testenden Gerät (DUT) zu aktivieren,
ifb
und
netem
Module müssen in der Kernel-Konfigurationsdatei wie unten gezeigt konfiguriert werden:
# Network simulation config fragment start
CONFIG_NET_SCH_NETEM=y
CONFIG_IFB=y
CONFIG_NET_ACT_MIRRED=y
# Network simulation config fragment end
Simulation einrichten
Alle Netzwerksimulationen oder Drosselungssimulationen müssen auf einer
Gerät wird getestet. In dieser Simulation wird das Linux-Betriebssystem
tc
und
NetEm
Dienstprogramme zur Steuerung des Netzwerkverkehrs auf dem Netzwerkschnittstellen-Controller
(NIC) auf Basis der Steuerrichtlinie und -regeln.
So richten Sie die Simulation ein:
- Verbinden Sie den DUT und den Hostserver mit dem Internet.
- Erstellen Sie das Skript
NetworkSimulation.sh
, indem Sie es aus dem bereitgestellten Code kopieren im BereichNetworkSimulation.sh
-Script und laden Sie es herunter. auf dem Hostserver. - Verbinden Sie den Hostserver mit dem DUT. Achten Sie darauf, dass die DUT in der Liste angezeigt wird
verbundener Geräte durch Ausführen von
adb devices -l
.
Die folgende Abbildung veranschaulicht die Einrichtungsarchitektur:
Abbildung 1: Architektur einrichten
Skript NetworkSimulation.sh
Die Skriptdatei NetworkSimulation.sh
enthält adb
-Befehle zur Ausführung des
Netzwerksimulation. Kopieren Sie Folgendes in eine Datei mit dem Namen NetworkSimulation.sh
:
#!/bin/bash
latency=$1
bandwidth=$2
packetloss=$3
# root device and set it to permissive mode
adb root
adb shell setenforce 0
#Clear the current tc control
adb shell tc qdisc del dev ifb0 root
adb shell ip link set dev ifb0 down
adb shell tc qdisc del dev wlan0 ingress
adb shell tc qdisc del dev wlan0 root
# Create a virtual device for ingress
adb shell ip link set dev wlan0 up
adb shell ip link set dev ifb0 up
adb shell tc qdisc del dev wlan0 clsact
adb shell tc qdisc add dev wlan0 handle ffff: ingress
adb shell tc filter add dev wlan0 parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ifb0
# Throttle upload bandwidth / latency / packet loss
adb shell tc qdisc add dev wlan0 root handle 1: htb default 11
adb shell tc class add dev wlan0 parent 1: classid 1:1 htb rate "$bandwidth"
adb shell tc class add dev wlan0 parent 1:1 classid 1:11 htb rate "$bandwidth"
adb shell tc qdisc add dev wlan0 parent 1:11 handle 10: netem delay "$latency" loss "$packetloss"
# Throttle download bandwidth
adb shell tc qdisc add dev ifb0 root handle 1: htb default 10
adb shell tc class add dev ifb0 parent 1: classid 1:1 htb rate "$bandwidth"
adb shell tc class add dev ifb0 parent 1:1 classid 1:10 htb rate "$bandwidth"
Simulation ausführen
Zum Ausführen einer Netzwerksimulation verwenden die adb
-Befehle in der
NetworkSimulation.sh
-Scriptdatei verwendet Befehlszeilenargumente zum Festlegen
Werte.
Führen Sie den Befehl
NetworkSimulation.sh
-Script mit den folgenden Befehlszeilenargumenten:
- Latenz, angegeben in ms.
- Bandbreite, angegeben in kbit oder mbit.
- Der Paketverlust in Prozent.
Führen Sie beispielsweise folgenden Befehl aus, um eine Latenz von 300 ms, eine Bandbreite von 100 kbit und einen Paketverlust von 50% festzulegen:
bash NetworkSimulation.sh 300ms 100kbit 50%
Führen Sie folgenden Befehl aus, um eine Latenz von 100 ms, eine 1-mbit-Bandbreite und einen Paketverlust von 0% festzulegen:
bash NetworkSimulation.sh 100ms 1mbit 0%
Simulation prüfen
Prüfen Sie nach dem Ausführen des Skripts NetworkSimulation.sh
, ob das Netzwerk
ist richtig konfiguriert und läuft wie erwartet mit dem
Linux ping
und
curl
. Prüfen Sie die Latenz mit dem Befehl ping
und dem Befehl curl
,
prüfen Sie die Bandbreite.
Das folgende Beispiel zeigt die erwartete Ausgabe von ping
für eine Simulation
ausgeführt mit bash NetworkSimulation.sh 100ms 500kbit 10%
:
BUILD:/ # ping -c 20 www.google.com PING www.google.com (172.217.5.100) 56(84) bytes of data. 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=1 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=2 ttl=119 time=105 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=3 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=5 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=6 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=7 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=9 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=10 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=11 ttl=119 time=185 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=12 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=13 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=14 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=15 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=16 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=17 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=18 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=19 ttl=119 time=103 ms 64 bytes from sfo03s07-in-f4.1e100.net (172.217.5.100): icmp_seq=20 ttl=119 time=103 ms --- www.google.com ping statistics --- 20 packets transmitted, 18 received, 10% packet loss, time 19040ms rtt min/avg/max/mdev = 103.394/108.307/185.756/18.791 ms
Dieses Beispiel zeigt, dass ping
einen Paketverlust bei 10% und einer durchschnittlichen Latenz meldet
nahe 108 ms, was wie erwartet für den 100-ms-Wert, der in der
Simulationsspiele. Es ist normal, wenn die gemeldete Latenz
den Wert geringfügig zu erhöhen.
Für dasselbe Beispiel wird die folgende Ausgabe erwartet, wenn der Befehl
curl
-Befehl.
BUILD:/sdcard/DCIM # curl https://images-assets.nasa.gov/image/PIA15416/PIA15416~orig.jpg -o foo.jpg % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 6598k 100 6598k 0 0 49220 0 0:02:17 0:02:17 --:--:-- 47574
Dieses Beispiel zeigt, dass curl
eine durchschnittliche Downloadgeschwindigkeit von 49.220 bps meldet.
Dies entspricht den Erwartungen für die in der Simulation angegebenen 500 kbit. Das ist normal
für die gemeldete Bandbreite geringfügig vom angegebenen Wert abweichen.