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 periferal, sehingga mengabaikan prosesor aplikasi.

Spesifikasi

Mulai Android 8.1, perangkat dapat menggunakan offload tethering untuk mengalihkan penerusan IPv4, IPv6, atau IPv4+IPv6 ke hardware.

Fitur offload tidak perlu men-offload semua paket. Framework ini mampu menangani paket apa pun dalam software. Paket kontrol biasanya diproses dalam software. Karena port IPv4 digunakan bersama antara traffic tethered dan traffic perangkat, paket penyiapan/pembubaran sesi IPv4 (misalnya, SYN/SYN+ACK, FIN) harus diproses dalam software agar kernel dapat membuat status alur. Framework ini menyediakan bidang kontrol dan mesin status. Hal ini juga memberikan informasi tentang antarmuka/awalan upstream dan downstream ke hardware.

Untuk IPv4, hardware memungkinkan paket penyiapan sesi terjemahan alamat jaringan (NAT) IPv4 menjangkau CPU. Kernel membuat entri NAT, dan implementasi HAL mengamati entri dari deskripsi file yang disediakan framework dan menangani alur ini di hardware. Artinya, implementasi HAL tidak memerlukan CAP_NET_* karena HAL membuka soket NF_NETLINK_CONNTRACK dari framework. Secara berkala, hardware mengirimkan pembaruan status NAT untuk aliran yang saat ini aktif ke framework, yang memuat ulang entri status pelacakan koneksi kernel yang sesuai.

Untuk IPv6, framework memprogram daftar awalan tujuan IPv6 yang tidak boleh di-offload oleh traffic. Semua paket tethering lainnya dapat di-offload.

Untuk pencatatan penggunaan data, polling penggunaan data NetworkStatsService menyebabkan framework meminta statistik traffic dari hardware. Framework ini juga menyampaikan 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 mengirim traffic melalui prosesor utama.

Implementasi

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

HAL Konfigurasi: IOffloadConfig

HAL IOffloadConfig memulai penerapan offload tethering. Framework ini 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 offload. Metode berikut harus diimplementasikan:

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

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

  • Peristiwa asinkron seperti offload yang dimulai dan dihentikan (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.