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
ataur_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_
atauqcom_
.
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.