Alat konfigurasi stack jaringan

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

  • Karena utilitas jaringan diupdate dalam image sistem, utilitas tersebut tidak memberikan implementasi yang stabil.
  • Cakupan utilitas jaringan sangat luas sehingga sulit untuk mengembangkan image sistem sekaligus menjamin perilaku yang dapat diprediksi.

Pada perangkat yang menjalankan Android 8.0 dan yang lebih baru, partisi vendor tetap sama saat partisi sistem menerima update. Untuk mencapai hal ini, Android 8.0 memberikan kemampuan untuk menentukan antarmuka stabil yang diberi versi sekaligus menggunakan batasan SELinux untuk menjaga interdependensi vendor dan image sistem ke set yang dikenal baik.

Vendor dapat menggunakan utilitas konfigurasi jaringan yang disediakan platform untuk mengonfigurasi stack jaringan Linux, tetapi utilitas ini belum menyertakan wrapper antarmuka HIDL. Untuk menentukan antarmuka tersebut, Android 8.0 menyertakan alat netutils-wrapper-1.0.

Wrapper netutils

Utilitas wrapper netutils menyediakan subset konfigurasi stack jaringan Linux yang tidak terpengaruh oleh update partisi sistem. Android 8.0 berisi wrapper versi 1.0, yang memungkinkan Anda meneruskan argumen yang sama dengan utilitas yang digabungkan, 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

Link simbolis menampilkan utilitas jaringan yang digabungkan oleh wrapper netutils, yang mencakup:

  • 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 mengeksekusi /system/bin/netutils-wrapper-1.0 secara langsung; upaya untuk melakukannya akan menyebabkan error.
  • Semua utilitas yang digabungkan oleh netutils-wrapper-1.0 harus diluncurkan menggunakan symlink-nya. Misalnya, ubah kode vendor yang melakukannya sebelumnya (/system/bin/ip <FOO> <BAR>) menjadi /system/bin/ip-wrapper-1.0 <FOO> <BAR>.
  • Menjalankan wrapper tanpa transisi domain dilarang dalam kebijakan SELinux platform. Aturan ini tidak boleh diubah dan diuji di Compatibility Test Suite (CTS) Android.
  • Menjalankan utilitas secara langsung (mis., /system/bin/ip <FOO> <BAR>) dari proses vendor juga dilarang dalam kebijakan SELinux platform. Aturan ini tidak boleh diubah dan diuji di CTS.
  • Setiap domain vendor (proses) yang perlu meluncurkan wrapper harus menambahkan aturan transisi domain berikut dalam kebijakan SELinux: domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper).

Filter wrapper Netutils

Utilitas yang digabungkan dapat digunakan untuk mengonfigurasi hampir semua aspek stack jaringan Linux. Namun, untuk memastikan antarmuka yang stabil dan mengizinkan update ke partisi sistem, hanya kombinasi argumen command line tertentu yang diizinkan; perintah lainnya akan ditolak.

Antarmuka dan rantai vendor

Wrapper memiliki konsep antarmuka vendor. Ini adalah antarmuka yang biasanya dikelola oleh kode vendor, seperti antarmuka data seluler. Biasanya, jenis antarmuka lainnya (seperti Wi-Fi) dikelola oleh HAL dan framework. Wrapper mengenali antarmuka vendor berdasarkan nama (menggunakan ekspresi reguler) dan memungkinkan kode vendor melakukan banyak operasi pada antarmuka tersebut. 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 framework (seperti wlan0) tidak pernah menjadi antarmuka vendor.

Wrapper memiliki konsep rantai vendor yang serupa. Ini digunakan dalam perintah iptables dan juga dikenali berdasarkan nama. Saat ini, rantai vendor:

  • Diawali dengan oem_.
  • Digunakan oleh penerapan SOC dan OEM saat ini, misalnya, rantai yang dimulai di nm_ atau qcom_.

Perintah yang diizinkan

Perintah yang saat ini diizinkan tercantum di bawah. Batasan diterapkan melalui kumpulan ekspresi reguler pada command line yang dieksekusi. Untuk mengetahui detailnya, lihat system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp.

ip

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

  • Menambahkan dan menghapus alamat IP dari antarmuka yang dikelola vendor.
  • Konfigurasikan enkripsi IPsec.

iptables dan ip6tables

Perintah iptables dan ip6tables digunakan untuk mengonfigurasi firewall, pemotongan paket, NAT, dan pemrosesan per paket lainnya. Wrapper memungkinkan perintah berikut:

  • Menambahkan dan menghapus rantai vendor.
  • Menambahkan dan menghapus aturan dalam rantai apa pun yang merujuk ke paket yang masuk ke (-i) atau keluar dari (-o) antarmuka vendor.
  • Beralih ke rantai vendor dari titik mana pun di rantai lain.

ndc

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

  • Membuat dan menghancurkan jaringan OEM (oemXX).
  • Menambahkan antarmuka yang dikelola vendor ke jaringan OEM.
  • Menambahkan rute ke jaringan OEM.
  • Mengaktifkan atau menonaktifkan penerusan IP secara global dan di antarmuka vendor.

tc

Perintah tc digunakan untuk mengonfigurasi antrean dan pembentukan traffic di antarmuka vendor.