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