Alat Konfigurasi Tumpukan Jaringan

Sistem operasi Android berisi utilitas jaringan Linux standar seperti ifconfig , ip , dan ip6tables . Utilitas ini berada pada citra sistem dan memungkinkan konfigurasi seluruh tumpukan jaringan Linux. Pada perangkat yang menjalankan Android 7.x dan yang lebih rendah, kode vendor diizinkan untuk memanggil biner ini secara langsung, yang menimbulkan masalah berikut:

  • Karena utilitas jaringan diperbarui dalam citra sistem, mereka tidak memberikan implementasi yang stabil.
  • Cakupan utilitas jaringan sangat luas sehingga sulit untuk mengembangkan citra sistem sambil menjamin perilaku yang dapat diprediksi.

Pada perangkat yang menjalankan Android 8.0 dan lebih tinggi, partisi vendor tetap sama saat partisi sistem menerima pembaruan. Untuk mencapai hal ini, Android 8.0 menyediakan kemampuan untuk mendefinisikan antarmuka yang stabil dan berversi sementara juga menggunakan batasan SELinux untuk menjaga interdependensi vendor dan citra sistem ke set yang diketahui dengan baik.

Vendor dapat menggunakan utilitas konfigurasi jaringan yang disediakan platform untuk mengonfigurasi tumpukan jaringan Linux, tetapi utilitas ini belum menyertakan pembungkus antarmuka HIDL. Untuk mendefinisikan antarmuka seperti itu, Android 8.0 menyertakan alat netutils-wrapper-1.0 .

Pembungkus Netutils

Utilitas pembungkus netutils menyediakan subset konfigurasi tumpukan jaringan Linux yang tidak terpengaruh oleh pembaruan partisi sistem. Android 8.0 berisi wrapper versi 1.0, yang memungkinkan Anda meneruskan argumen yang sama dengan utilitas yang dibungkus, yang diinstal di partisi sistem di /system/bin sebagai berikut:

u:object_r:system_file:s0           /system/bin/ip-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/ip6tables-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/iptables-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/ndc-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/tc-wrapper-1.0 -> netutils-wrapper-1.0

Symlinks menunjukkan utilitas jaringan yang dibungkus oleh pembungkus netutils , yang meliputi:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

Untuk menggunakan utilitas ini di Android 8.0 dan yang lebih tinggi, implementasi vendor harus mematuhi aturan berikut:

  • Proses vendor tidak boleh menjalankan /system/bin/netutils-wrapper-1.0 secara langsung; upaya untuk melakukannya akan menghasilkan kesalahan.
  • Semua utilitas yang dibungkus oleh netutils-wrapper-1.0 harus diluncurkan menggunakan symlink mereka. Misalnya, ubah kode vendor yang melakukan ini sebelumnya ( /system/bin/ip <FOO> <BAR> ) menjadi /system/bin/ip-wrapper-1.0 <FOO> <BAR> .
  • Menjalankan pembungkus tanpa transisi domain dilarang dalam kebijakan platform SELinux. Aturan ini tidak boleh diubah dan diuji di Android Compatibility Test Suite (CTS) .
  • Mengeksekusi utilitas secara langsung (misalnya, /system/bin/ip <FOO> <BAR> ) dari proses vendor juga dilarang dalam kebijakan platform SELinux. Aturan ini tidak boleh diubah dan diuji di CTS.
  • Setiap domain vendor (proses) yang perlu meluncurkan pembungkus harus menambahkan aturan transisi domain berikut dalam kebijakan SELinux: domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper) .

Filter pembungkus Netutils

Utilitas yang dibungkus dapat digunakan untuk mengonfigurasi hampir semua aspek tumpukan jaringan Linux. Namun, untuk memastikan bahwa mungkin untuk mempertahankan antarmuka yang stabil dan memungkinkan pembaruan ke partisi sistem, hanya kombinasi tertentu dari argumen baris perintah yang diizinkan; perintah lain akan ditolak.

Antarmuka dan rantai vendor

Pembungkus memiliki konsep antarmuka vendor . Ini adalah antarmuka yang biasanya dikelola oleh kode vendor, seperti antarmuka data seluler. Biasanya, jenis antarmuka lain (seperti Wi-Fi) dikelola oleh HAL dan kerangka kerja. Pembungkus mengenali antarmuka vendor dengan nama (menggunakan ekspresi reguler) dan memungkinkan kode vendor untuk melakukan banyak operasi pada mereka. Saat ini, antarmuka vendor adalah:

  • Antarmuka yang namanya diakhiri dengan "oem" diikuti dengan angka, seperti oem0 atau r_oem1234 .
  • Antarmuka yang digunakan oleh implementasi SOC dan OEM saat ini, seperti rmnet_data[0-9] .

Nama antarmuka yang biasanya dikelola oleh kerangka kerja (seperti wlan0 ) tidak pernah menjadi antarmuka vendor.

Pembungkusnya memiliki konsep rantai vendor yang serupa. Ini digunakan dalam perintah iptables dan juga dikenali dengan namanya. Saat ini, rantai vendor:

  • Mulai dengan oem_ .
  • Digunakan oleh implementasi SOC dan OEM saat ini, misalnya, rantai yang dimulai dari qcom_ nm_

Perintah yang diizinkan

Perintah yang saat ini diizinkan tercantum di bawah ini. Pembatasan diimplementasikan melalui serangkaian ekspresi reguler pada baris perintah yang dieksekusi. Untuk detailnya, lihat system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp .

aku p

Perintah ip digunakan untuk mengkonfigurasi alamat IP, perutean, enkripsi IPsec, dan sejumlah parameter jaringan lainnya. Pembungkus memungkinkan perintah berikut:

  • Tambahkan dan hapus alamat IP dari antarmuka yang dikelola vendor.
  • Konfigurasikan enkripsi IPsec.

iptables/ip6tables

Perintah iptables dan ip6tables digunakan untuk mengkonfigurasi firewall, packet mangling, NAT, dan pemrosesan per-paket lainnya. Pembungkus memungkinkan perintah berikut:

  • Menambah dan menghapus rantai vendor.
  • Tambahkan dan hapus aturan dalam rantai apa pun yang merujuk pada paket yang masuk ke ( -i ) atau keluar dari ( -o ) antarmuka vendor.
  • Lompat ke rantai vendor dari titik mana pun di rantai lainnya.

ndc

ndc digunakan untuk berkomunikasi dengan daemon netd yang melakukan sebagian besar konfigurasi jaringan di Android. Pembungkus memungkinkan perintah berikut:

  • Buat dan hancurkan jaringan OEM ( oemXX ).
  • Tambahkan antarmuka yang dikelola vendor ke jaringan OEM.
  • Tambahkan rute ke jaringan OEM.
  • Mengaktifkan atau menonaktifkan penerusan IP secara global dan pada antarmuka vendor.

tc

Perintah tc digunakan untuk mengkonfigurasi antrian lalu lintas dan membentuk pada antarmuka vendor.