Pengurangan beban hardware tethering

Pengurangan beban tethering memungkinkan perangkat menghemat daya dan meningkatkan performa dengan mengurangi beban traffic tethering (melalui USB, Wi-Fi) ke hardware. Traffic tethering di-offload dengan menyediakan jalur langsung antara modem dan perangkat periferal, dengan melewati prosesor aplikasi.

Spesifikasi

Mulai Android 8.1, perangkat dapat menggunakan pelepasan beban tethering untuk melepaskan beban penerusan IPv4, IPv6, atau IPv4+IPv6 ke hardware.

Fitur pelepasan tidak perlu melepaskan semua paket. Framework ini mampu menangani paket apa pun di software. Paket kontrol biasanya diproses dalam software. Karena port IPv4 digunakan bersama antara traffic tethering dan traffic perangkat, paket penyiapan/penghapusan sesi IPv4 (misalnya, SYN/SYN+ACK, FIN) harus diproses dalam software sehingga kernel dapat membuat status alur. Framework ini menyediakan bidang kontrol dan mesin status. Hal ini juga memberikan informasi tentang antarmuka/awalan hulu dan hilir ke hardware.

Untuk IPv4, hardware memungkinkan paket penyiapan sesi Network Address Translation (NAT) IPv4 mencapai CPU. Kernel membuat entri NAT, dan implementasi HAL mengamati entri dari deskriptor file yang disediakan framework dan menangani alur ini di hardware. Artinya, penerapan HAL tidak memerlukan CAP_NET_* karena HAL membuka soket NF_NETLINK_CONNTRACK dari framework. Secara berkala, hardware mengirimkan update status NAT untuk aliran yang sedang aktif ke framework, yang memperbarui entri status pelacakan koneksi kernel yang sesuai.

Untuk IPv6, framework memprogram daftar awalan tujuan IPv6 yang trafficnya tidak boleh di-offload. Semua paket yang di-tether lainnya dapat di-offload.

Untuk penghitungan penggunaan data, polling penggunaan data NetworkStatsService menyebabkan framework meminta statistik traffic dari hardware. Framework ini juga mengirimkan batas penggunaan data ke hardware melalui HAL.

Persyaratan hardware

Untuk menerapkan offload tethering, hardware Anda harus dapat meneruskan paket IP antara modem dan Wi-Fi/USB tanpa mengirimkan traffic melalui prosesor utama.

Implementasi

Untuk mengaktifkan fitur offload tethering, Anda harus menerapkan dua HAL berikut, yaitu HAL konfigurasi (IOffloadConfig) dan HAL kontrol (IOffloadControl).

HAL Konfigurasi: IOffloadConfig

HAL IOffloadConfig memulai penerapan pelepasan tethering. Framework menyediakan implementasi HAL dengan soket NF_NETLINK_CONNTRACK yang telah terhubung sebelumnya yang dapat digunakan implementasi untuk mengamati alur IPv4. Hanya alur yang diteruskan yang harus dipercepat.

HAL Kontrol: IOffloadControl

HAL IOffloadControl mengontrol penerapan pelepasan beban. Metode berikut harus diterapkan:

  • Mulai/berhenti menggunakan hardware offload: Gunakan initOffload/stopOffload dan kecualikan alamat IP lokal atau jaringan lain dari offload dengan setLocalPrefixes.
  • Tetapkan antarmuka upstream, alamat IPv4, dan gateway IPv6: Gunakan setUpstreamParameters dan konfigurasikan rentang alamat IP downstream dengan addDownstream/removeDownstream.
  • Penghitungan penggunaan data: Gunakan getForwardedStats/setDataLimit.

HAL vendor Anda juga harus mengirimkan callback melalui antarmuka ITetheringOffloadCallback, yang memberi tahu framework tentang:

  • Peristiwa asinkron seperti mulai dan berhenti memindahkan data (OffloadCallbackEvent)
  • Update waktu tunggu NAT, yang harus dikirim secara berkala untuk menunjukkan bahwa alur IPv4 tertentu berisi traffic dan tidak boleh ditutup oleh kernel

Validasi

Untuk memvalidasi penerapan offload tethering, gunakan pengujian manual atau otomatis untuk memverifikasi bahwa tethering dan hotspot Wi-Fi berfungsi seperti yang diharapkan. Vendor Test Suite (VTS) berisi pengujian untuk HAL offload tethering.