Pengurangan beban hardware tethering

Pengalihan tethering memungkinkan perangkat menghemat daya dan meningkatkan performa dengan mengalihkan traffic tethering (melalui USB, Wi-Fi) ke hardware. Traffic tethering dialihkan dengan menyediakan jalur langsung antara modem dan periferal, melewati prosesor aplikasi.

Spesifikasi

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

Fitur pengalihan tidak perlu mengalihkan semua paket. Framework ini mampu menangani paket apa pun dalam software. Paket kontrol biasanya diproses dalam software. Karena port IPv4 dibagikan antara traffic tethering dan traffic perangkat, paket penyiapan/penghancuran sesi IPv4 (misalnya, SYN/SYN+ACK, FIN) harus diproses dalam software sehingga kernel dapat membuat status aliran. Framework ini menyediakan bidang kontrol dan mesin status. Framework ini juga menyediakan informasi tentang antarmuka/awalan upstream dan downstream ke hardware.

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

Untuk IPv6, framework memprogram daftar awalan tujuan IPv6 yang tidak boleh dialihkan traffic-nya. Semua paket tethering lainnya dapat dialihkan.

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

Persyaratan hardware

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

Penerapan

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

HAL konfigurasi: IOffloadConfig

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

HAL kontrol: IOffloadControl

HAL IOffloadControl mengontrol implementasi pengalihan. Metode berikut harus diterapkan:

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

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

  • Peristiwa asinkron seperti pengalihan yang dimulai dan dihentikan (OffloadCallbackEvent)
  • Pembaruan waktu tunggu NAT, yang harus dikirim secara berkala untuk menunjukkan bahwa aliran IPv4 tertentu berisi traffic dan tidak boleh ditutup oleh kernel

Validasi

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