Alat konfigurasi stack jaringan

Sistem operasi Android berisi utilitas jaringan Linux standar seperti ifconfig, ip, dan ip6tables. Utilitas ini berada pada {i>image<i} 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 menampilkan masalah berikut:

  • Karena utilitas jaringan diperbarui di {i>image<i} sistem, mereka tidak dan menyediakan implementasi yang stabil.
  • Cakupan utilitas jaringan sangat luas sehingga sulit untuk dikembangkan {i>image<i} sistem sambil menjamin perilaku yang dapat diprediksi.

Pada perangkat yang menjalankan Android 8.0 dan yang lebih tinggi, partisi vendor tetap sama saat partisi sistem menerima pembaruan. Untuk mencapainya, Android 8.0 menyediakan kemampuan untuk mendefinisikan versi antarmuka yang stabil sambil menggunakan Pembatasan SELinux untuk menjaga interdependensi vendor dan image sistem ke yang sudah diketahui.

Vendor dapat menggunakan utilitas konfigurasi jaringan yang disediakan oleh {i>platform<i} untuk mengkonfigurasi tumpukan jaringan Linux, tetapi utilitas ini belum mencakup Wrapper antarmuka HIDL. Untuk mendefinisikan antarmuka demikian, Android 8.0 menyertakan Alat netutils-wrapper-1.0.

Wrapper Netutils

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

Symlink menunjukkan utilitas jaringan yang digabungkan oleh netutils wrapper, 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 dijalankan /system/bin/netutils-wrapper-1.0 secara langsung; mencoba untuk melakukannya akan mengakibatkan error.
  • Semua utilitas yang digabungkan oleh netutils-wrapper-1.0 harus diluncurkan menggunakan symlink mereka. Misalnya, ubah kode vendor yang melakukan ini sebelumnya (/system/bin/ip <FOO> <BAR>) ke /system/bin/ip-wrapper-1.0 <FOO> <BAR>.
  • Mengeksekusi wrapper tanpa transisi domain dilarang di platform Kebijakan SELinux. Aturan ini tidak boleh diubah dan diuji dalam Compatibility Test Suite (CTS) Android.
  • Mengeksekusi utilitas secara langsung (misalnya, /system/bin/ip <FOO> <BAR>) dari proses vendor juga dilarang dalam kebijakan SELinux platform. Aturan ini tidak boleh berubah 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

Gabungan utilitas dapat digunakan untuk mengkonfigurasi hampir semua aspek dari Linux, stack jaringan. Namun, untuk memastikan bahwa stabilitas dan memungkinkan pembaruan pada partisi sistem, hanya kombinasi tertentu argumen command line diizinkan; perintah lain ditolak.

Antarmuka dan rantai vendor

Wrapper memiliki konsep antarmuka vendor. Keduanya merupakan antarmuka biasanya dikelola oleh kode vendor, seperti antarmuka data seluler. Biasanya, jenis antarmuka lain (seperti Wi-Fi) dikelola oleh HAL dan Google Workspace for Education. Wrapper mengenali antarmuka vendor berdasarkan nama (menggunakan ekspresi) 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 penerapan SOC dan OEM saat ini, seperti rmnet_data[0-9].

Nama antarmuka yang biasanya dikelola oleh kerangka kerja (seperti wlan0) bukan merupakan antarmuka vendor.

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

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

Perintah yang diizinkan

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

IP

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

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

iptables dan ip6tables

Perintah iptables dan ip6tables digunakan untuk mengkonfigurasi {i>firewall<i}, kerusakan paket, NAT, dan pemrosesan per paket lainnya. Wrapper mengizinkan perintah berikut:

  • Tambahkan dan hapus jaringan vendor.
  • Menambahkan dan menghapus aturan dalam rantai apa pun yang mengacu pada paket yang masuk (-i) atau di luar (-o) antarmuka vendor.
  • Melompat ke rantai vendor dari titik mana pun di rantai lainnya.

NDC

ndc digunakan untuk berkomunikasi ke daemon netd yang menjalankan sebagian besar konfigurasi jaringan di Android. Wrapper memungkinkan hal berikut berikut:

  • Membuat dan menghancurkan jaringan OEM (oemXX).
  • Menambahkan 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 mengonfigurasi antrean dan pembentukan traffic tentang antarmuka vendor.