Mô phỏng mạng trong Android Automotive OS (AAOS)

Trang này mô tả cách mô phỏng nhiều điều kiện mạng trên Android Thiết bị phần cứng cho ô tô theo cách có thể mở rộng và ít phải bảo trì. Chiến dịch này mô phỏng mạng không phụ thuộc vào môi trường sử dụng các công cụ Linux phổ biến có thể chạy trên 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 Thiết bị phần cứng Android Automotive.

Yêu cầu về kernel

Để bật tính năng mô phỏng mạng trên một thiết bị đang kiểm thử (DUT), Linux ifbnetem Các mô-đun phải được định cấu hình trong tệp cấu hình nhân, như trình bày dưới đây:

# 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 phiên mô phỏng

Tất cả hoạt động mô phỏng mạng hoặc mô phỏng điều tiết phải được thực hiện trên một thiết bị đang được thử nghiệm (DUT). Phần mô phỏng này sử dụng Linux tcNetEm phần mềm tiện ích để kiểm soát lưu lượng truy cập mạng trên trình điều khiển giao diện mạng (LI) dựa trên chính sách và quy tắc kiểm soát.

Để thiết lập phiên mô phỏng, hãy làm như sau:

  1. Kết nối DUT và máy chủ lưu trữ với Internet.
  2. Tạo tập lệnh NetworkSimulation.sh bằng cách sao chép tập lệnh đó từ đoạn mã được cung cấp trong phần tập lệnh NetworkSimulation.sh và tải tập lệnh đó xuống trên máy chủ lưu trữ.
  3. 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 thiết bị đã kết nối bằng cách chạy adb devices -l.

Để xem hình minh hoạ về cấu trúc thiết lập, hãy xem hình sau:

SIM nw

Hình 1. Cấu trúc thiết lập.

Tập lệnh Network mô phỏng.sh

Tệp tập lệnh NetworkSimulation.sh chứa các lệnh adb chạy lệnh mô phỏng mạng. Sao chép nội dung sau đây 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 thi hoạt động mô phỏng

Để thực thi hoạt động 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à tình trạng mất gói tin mà bạn muốn mô phỏng, hãy chạy lệnh Tập lệnh NetworkSimulation.sh với các đối số dòng lệnh sau:

  • Độ trễ, được chỉ định bằng mili giây.
  • Băng thông, được chỉ định bằng kbit hoặc mbit.
  • Tỷ lệ mất gói tin tính theo phần trăm.

Ví dụ: để đặt độ trễ 300 mili giây, băng thông 100kbit và mức độ mất gói tin là 50%, hãy chạy:

bash NetworkSimulation.sh 300ms 100kbit 50%

Để đặt độ trễ 100 mili giây, băng thông 1mbit và tỷ lệ mất gói tin 0%, hãy chạy mã:

bash NetworkSimulation.sh 100ms 1mbit 0%

Xác minh hoạt động mô phỏng

Sau khi thực thi tập lệnh NetworkSimulation.sh, hãy xác minh rằng mạng mô phỏng được định cấu hình chính xác và đang chạy như mong đợi bằng cách sử dụng Linux pingcurl . 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ả dự kiến của ping cho một quá trình mô phỏng được thực thi bằng 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 ping báo cáo tỷ lệ mất gói dữ liệu là 10% với độ trễ trung bình gần 108 mili giây, đúng như dự kiến đối với giá trị 100 mili giây được chỉ định trong mô phỏng. Độ trễ được báo cáo khác với độ trễ được chỉ định là điều bình thường giá trị tăng thêm một chút.

Trong cùng ví dụ, sau đây là kết quả dự kiến của việc 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 B/giây, đúng như mong đợi cho 500kbit được chỉ định trong mô phỏng. Bình thường vì băng thông được báo cáo khác với giá trị được chỉ định một chút.