Trang này mô tả cách mô phỏng các điều kiện mạng khác nhau trên các thiết bị phần cứng Android Automotive theo cách có thể mở rộng và ít cần bảo trì. Mô phỏng mạng bất khả tri về môi trường này sử dụng các công cụ Linux phổ biến có thể chạy trên các thiết bị phần cứng Android Automotive.
Các phần sau đây mô tả cách thiết lập và chạy mô phỏng mạng trên các thiết bị phần cứng Android Automotive.
Yêu cầu hạt nhân
Để kích hoạt mô phỏng mạng trên thiết bị đang được thử nghiệm (DUT), các mô-đun ifb
và netem
của Linux phải được cấu hình trong tệp cấu hình kernel, như hiển thị bên dưới:
# Network simulation config fragment start
CONFIG_NET_SCH_NETEM=y
CONFIG_IFB=y
CONFIG_NET_ACT_MIRRED=y
# Network simulation config fragment end
Thiết lập mô phỏng
Tất cả các mô phỏng mạng hoặc mô phỏng điều tiết phải được tiến hành trên thiết bị được thử nghiệm (DUT). Mô phỏng này sử dụng các tiện ích Linux tc
và NetEm
để kiểm soát lưu lượng mạng trên bộ điều khiển giao diện mạng (NIC) dựa trên chính sách và quy tắc kiểm soát.
Để thiết lập mô phỏng, hãy làm như sau:
- Kết nối DUT và máy chủ lưu trữ với internet.
- Tạo tập lệnh
NetworkSimulation.sh
bằng cách sao chép nó từ mã được cung cấp trong phần tập lệnhNetworkSimulation.sh
và tải xuống trên máy chủ lưu trữ. - Kết nối máy chủ lưu trữ với DUT. Đảm bảo rằng DUT xuất hiện trong danh sách các thiết bị được kết nối bằng cách chạy
adb devices -l
.
Để minh họa về kiến trúc thiết lập, hãy xem hình sau:
Hình 1. Kiến trúc thiết lập.
Tập lệnh NetworkSimulation.sh
Tệp tập lệnh NetworkSimulation.sh
chứa các lệnh adb
chạy mô phỏng mạng. Sao chép phần sau vào tệp có tên 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"
Thực hiện mô phỏng
Để thực thi mô phỏng mạng, các lệnh adb
trong tệp tập lệnh NetworkSimulation.sh
sử dụng các đối số dòng lệnh để đặt giá trị.
Để chỉ định độ trễ, băng thông và mất gói mà bạn muốn mô phỏng, hãy chạy tập lệnh NetworkSimulation.sh
với các đối số dòng lệnh sau:
- Độ trễ, được chỉ định bằng ms.
- Băng thông, được chỉ định bằng kbit hoặc mbit.
- Mất gói, tính theo phần trăm.
Ví dụ: để đặt độ trễ 300ms, băng thông 100kbit và mất gói 50%, hãy chạy:
bash NetworkSimulation.sh 300ms 100kbit 50%
Để đặt độ trễ 100ms, băng thông 1mbit và mất gói 0%, hãy chạy:
bash NetworkSimulation.sh 100ms 1mbit 0%
Xác minh mô phỏng
Sau khi thực thi tập lệnh NetworkSimulation.sh
, hãy xác minh rằng mô phỏng mạng được định cấu hình đúng và đang chạy như mong đợi bằng cách sử dụng lệnh ping
và curl
của Linux. Sử dụng lệnh ping
để xác minh độ trễ và lệnh curl
để xác minh băng thông.
Ví dụ: sau đây là kết quả ping
dự kiến cho một mô phỏng được thực thi với 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
Ví dụ này cho thấy rằng ping
báo cáo mức độ mất gói ở mức 10% và độ trễ trung bình gần 108 mili giây, đúng như mong đợi đối với giá trị 100 mili giây được chỉ định trong mô phỏng. Việc độ trễ được báo cáo chênh lệch một chút so với giá trị được chỉ định là điều bình thường.
Đối với ví dụ tương tự, sau đây là kết quả mong đợi khi chạy lệnh 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
Ví dụ này cho thấy curl
báo cáo tốc độ tải xuống trung bình là 49220 Bps, đúng như mong đợi đối với 500kbit được chỉ định trong mô phỏng. Việc băng thông được báo cáo chênh lệch một chút so với giá trị được chỉ định là điều bình thường.