In questa pagina viene descritto come simulare condizioni di rete diverse su Android Scalabilità dei dispositivi hardware per auto e motori a bassa manutenzione. Questo la simulazione di rete indipendente dall’ambiente usa strumenti Linux comunemente disponibili che possono essere eseguiti su dispositivi hardware Android Automotive.
Le seguenti sezioni descrivono come impostare ed eseguire una simulazione di rete Dispositivi hardware Android Automotive.
Requisito del kernel
Per abilitare la simulazione di rete su un dispositivo in fase di test (DUT),
ifb
e
netem
i moduli devono essere configurati nel file di configurazione del kernel, come mostrato di seguito:
# Network simulation config fragment start
CONFIG_NET_SCH_NETEM=y
CONFIG_IFB=y
CONFIG_NET_ACT_MIRRED=y
# Network simulation config fragment end
Configura la simulazione
Tutte le simulazioni di rete o di limitazione devono essere condotte su un
dispositivo in corso di test (DUT). Questa simulazione utilizza lo strumento
tc
e
NetEm
utilità per controllare il traffico di rete sul controller dell'interfaccia di rete
(NIC) in base al criterio e alle regole di controllo.
Per configurare la simulazione, segui questi passaggi:
- Connetti il DUT e il server host a internet.
- Crea lo script
NetworkSimulation.sh
copiandolo dal codice fornito nella sezioneNetworkSimulation.sh
script e scaricalo sul server host. - Collega il server host al DUT. Assicurati che il DUT compaia nell'elenco
di dispositivi connessi eseguendo
adb devices -l
.
Per un'illustrazione dell'architettura di configurazione, guarda la figura seguente:
Figura 1. Configurare l'architettura.
Script NetworkSimulation.sh
Il file dello script NetworkSimulation.sh
contiene i comandi adb
che eseguono
una simulazione di rete. Copia quanto segue in un file denominato 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"
Esegui simulazione
Per eseguire una simulazione di rete, i comandi adb
nella
Il file di script NetworkSimulation.sh
utilizza gli argomenti della riga di comando da impostare
e i relativi valori.
Per specificare la latenza, la larghezza di banda e la perdita di pacchetti che vuoi simulare, esegui
Script NetworkSimulation.sh
con i seguenti argomenti della riga di comando:
- Latenza, specificata in ms.
- Larghezza di banda, specificata in kbit o mbit.
- Perdita pacchetti, in percentuale.
Ad esempio, per impostare una latenza di 300 ms, una larghezza di banda di 100 kbit e una perdita di pacchetti del 50%, esegui:
bash NetworkSimulation.sh 300ms 100kbit 50%
Per impostare una latenza di 100 ms, una larghezza di banda di 1 Mbit e una perdita di pacchetti dello 0%, esegui:
bash NetworkSimulation.sh 100ms 1mbit 0%
Verifica simulazione
Dopo aver eseguito lo script NetworkSimulation.sh
, verifica che la rete
sia configurata correttamente e funzioni come previsto utilizzando
Linux ping
e
curl
tramite comandi SQL. Usa il comando ping
per verificare la latenza e il comando curl
per
per verificare la larghezza di banda.
Ad esempio, il seguente è l'output previsto di ping
per una simulazione
eseguita con 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
Questo esempio mostra che ping
segnala una perdita di pacchetti al 10% e una latenza media
vicino a 108 ms, come previsto per il valore di 100 ms specificato
di simulazione. È normale che la latenza riportata sia diversa da quella specificata
con un piccolo valore.
Per lo stesso esempio, di seguito è riportato l'output previsto per l'esecuzione
Comando curl
.
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
Questo esempio mostra che curl
riporta la velocità media di download a 49.220 Bps.
come previsto per i 500 kbit specificati nella simulazione. È normale
affinché la larghezza di banda riportata sia leggermente diversa dal valore specificato.