本頁面說明如何在 Android 上模擬不同的網路狀況 以可擴充、低維護的方式執行 Automotive 硬體裝置。這個 跨環境診斷網路模擬使用常見的 Linux 工具 可以在 Android Automotive 硬體裝置上執行。
以下各節將說明如何設定及執行網路模擬 Android Automotive 硬體裝置。
核心規定
如要在測試的裝置 (DUT) 上啟用網路模擬功能,Linux 中
ifb
敬上
和
netem
您必須在核心設定檔中設定模組,如下所示:
# Network simulation config fragment start
CONFIG_NET_SCH_NETEM=y
CONFIG_IFB=y
CONFIG_NET_ACT_MIRRED=y
# Network simulation config fragment end
設定模擬作業
所有網路模擬或節流模擬都必須以
測試中的裝置 (DUT)。這項模擬會使用 Linux
tc
和
NetEm
提供公用程式,可控制網路介面控制器的網路流量
(NIC)。
如要設定模擬,請執行下列操作:
- 將 DUT 和主機伺服器連上網際網路。
- 從提供的程式碼中複製
NetworkSimulation.sh
指令碼 在NetworkSimulation.sh
指令碼部分中,然後下載 在主機伺服器上 - 將主機伺服器連線至 DUT。確認清單中出現 DUT
執行
adb devices -l
。
如需設定架構的插圖,請參閱下圖:
圖 1. 設定架構。
NetworkSimulation.sh 指令碼
NetworkSimulation.sh
指令碼檔案包含的 adb
指令,可以執行
網路模擬將下列內容複製到名為 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"
執行模擬作業
如要執行網路模擬,請參照以下資料欄中的 adb
指令:
NetworkSimulation.sh
指令碼檔案使用指令列引數來設定
輕鬆分配獎金
如要指定想要模擬的延遲時間、頻寬和封包遺失率,請執行
NetworkSimulation.sh
指令碼含有以下指令列引數:
- 延遲時間 (以毫秒為單位)。
- 以 kbit 或 mbit 為單位指定頻寬。
- 封包遺失率 (百分比)。
舉例來說,如要將延遲時間設為 300 毫秒、設為 100 KB 和 50% 的封包遺失,請執行以下指令:
bash NetworkSimulation.sh 300ms 100kbit 50%
如要設定 100 毫秒的延遲時間、1 位元頻寬和 0% 的封包遺失,請執行以下指令:
bash NetworkSimulation.sh 100ms 1mbit 0%
驗證模擬作業
執行 NetworkSimulation.sh
指令碼後,請確認網路
模擬設定正確,且使用
Linux ping
和
curl
指令。使用 ping
指令驗證延遲時間,並使用 curl
指令執行以下操作:
然後驗證頻寬
例如,模擬的預期輸出內容為 ping
使用 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
這個範例顯示,ping
回報的封包遺失率為 10%,平均延遲時間
接近 108 毫秒,這個數字是 100 毫秒的
模擬情境回報的延遲時間與指定值不同是正常現象
小數值
就相同的例子,執行
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
以下範例顯示 curl
回報的平均下載速度為 49220 Bps,
這與模擬中指定的 500Kbit 一致這很正常
,讓回報的頻寬與指定值不同。