- Layanan EthernetTracker di Android hanya mengenali antarmuka jaringan yang bernama ethX
- Driver CDC Ethernet di Linux membuat nama antarmuka sebagai usbX
- Akibatnya, perangkat CDC Ethernet standar tidak aktif secara otomatis di Android
- Untuk mengatasinya, pengguna harus me-root ponsel dan mengubah nilai config_ethernet_iface_regex secara manual
- Secara realistis, pendekatan yang masuk akal adalah memakai produk dengan chipset tertentu yang memiliki driver khusus vendor, bukan adaptor USB Ethernet standar yang patuh spesifikasi
Pendahuluan dan gambaran masalah
- Penyebab utama CDC Ethernet tidak bekerja di perangkat Android adalah aturan penamaan antarmuka
- Secara sistem, adaptor USB Ethernet didukung, tetapi ada batasan pada syarat agar menu Ethernet aktif
- Sulit mendapatkan informasi chipset yang kompatibel, dan dalam praktiknya strukturnya bergantung pada "kabar dari mulut ke mulut" antar pengguna
- Android memang berbasis kernel Linux, tetapi tidak semua ditentukan hanya oleh konfigurasi kernel
USB debugging dan pengaturan ADB
- Di perangkat Android, perlu mengaktifkan USB debugging lalu memasang ADB
- Untuk menguji adaptor jaringan, ADB harus diubah ke mode jaringan melalui Wi-Fi
- Melalui perintah, kita bisa memeriksa versi kernel dan arsitektur saat ini
Cara memeriksa versi dan konfigurasi kernel
- Ponsel terbaru (Android 11 ke atas) memiliki struktur kernel GKI (Generic Kernel Image)
- Google membangun kernel dasar, lalu produsen hanya menambahkan modul
- Dari berkas konfigurasi kernel terkait (
gki_defconfig), kita bisa mengetahui fitur yang didukung
- Ponsel lama harus diperiksa melalui berkas defconfig di source kernel yang disediakan masing-masing produsen
- Jika beruntung, konfigurasi kernel saat ini juga bisa diperiksa langsung dari path
/proc/config.gz
Cara memeriksa adaptor USB Ethernet yang didukung
- Sebagian besar nilai konfigurasi kernel terkait berbentuk CONFIG_USB_NET_XXX
- Jika
y, artinya tertanam; jika m, dibangun sebagai modul (kemungkinan bisa dipakai); jika is not set, berarti tidak didukung
- Penjelasan untuk tiap nilai konfigurasi bisa dilihat di berkas drivers/net/usb/Kconfig
- Informasi chipset adaptor pun masih jarang ditampilkan dengan jelas
CDC Ethernet (Communications Device Class) dan kasus penerapannya di Android
- CDC adalah standar jaringan USB yang menyediakan beragam protokol EEM/ECM/NCM
- Di Linux, Windows, dan macOS, perangkat CDC Ethernet standar dikenali otomatis tanpa driver tambahan
- Di Android pun, pada level kernel, driver terkait memang sudah dibangun
- Contoh: perangkat Samsung dengan
CONFIG_USB_NET_CDCETHER, EEM, dan NCM semuanya disetel ke y
- Namun, menu Ethernet tetap nonaktif
Logika pelacakan antarmuka jaringan di Android
- Android menggunakan kelas EthernetTracker.java untuk mendeteksi antarmuka jaringan
- Saat antarmuka baru muncul, EthernetTracker mencocokkan pola nama (regular expression)
- Kriteria pencocokan diambil dari resource
config_ethernet_iface_regex
- Nilai default-nya adalah
eth\\d (hanya antarmuka jaringan yang diawali eth dan diikuti angka yang dianggap valid)
- Nama yang dibuat kernel (
usb0) tidak cocok dengan pola tersebut, sehingga diabaikan dalam pelacakan dan aktivasi
Batasan solusi dan kesimpulan
- Regular expression penamaan ini tidak bisa diubah langsung oleh pengguna (tidak mungkin tanpa root)
- Akibatnya, produk CDC Ethernet standar tetap tidak bisa dipakai dari menu jaringan meski terhubung
- Sebaliknya, hanya sebagian adaptor yang didaftarkan langsung melalui driver vendor atau chipset yang bisa digunakan
- Walaupun Google memasukkan kode dukungan standar seperti modul EEM ke kernel, pada praktiknya tetap tidak bisa berfungsi
- Ini sebenarnya masalah sederhana yang bisa diselesaikan setidaknya dengan mengubah regular expression menjadi
(eth|usb)\\d, tetapi sampai sekarang masih dibiarkan seperti itu
Ringkasan
- Penyebab inti: Android bukan mengabaikan standar CDC Ethernet, melainkan memiliki struktur aktivasi yang gagal karena nama antarmuka jaringan tidak cocok dengan regular expression (
eth\\d)
- Solusi sementara: ponsel harus di-root lalu nilai config_ethernet_iface_regex diubah menjadi sesuatu seperti
(eth|usb)\\d
- Pilihan praktis: dibanding adaptor yang hanya mengandalkan dukungan USB CDC standar, lebih realistis memilih produk yang integrasi drivernya jelas untuk chipset tertentu
- Masalah struktural: ini adalah contoh keterbatasan sistem akibat kebijakan penamaan di software stack level atas yang kurang baik dari sisi visibilitas pengguna dan kompatibilitas standar
1 komentar
Komentar Hacker News
ethX; penulis sendiri tidak mengujinya langsung atau memperbarui postingan dengan informasi itu, dan sekarang hampir tidak lagi memakai perangkat Android; ditambahkan pula catatan bahwa metode ini hanya bisa dipakai jika Anda dapat mengendalikan alamat MACeth\\dmenjadi*pada Oktober 2023, sehingga masalah ini diduga telah teratasi; disertakan tautan perubahan kode terkait, serta penjelasan bahwa mulai Android U+ (kemungkinan versi 14) secara default mencakupusb\\d+daneth%dusbX", lalu segera diterapkan kembali dengan dukungan hanya untuk Android V+ (versi baru); juga dilampirkan tautan rollback dan tautan penerapan akhirethX; dijelaskan bahwa distribusi Linux sudah menyelesaikan masalah seperti ini sejak era 2000-an; dikenang pula betapa merepotkannya harus menelusuri seluruh sistem karena tiap driver sering memakai prefiks nama sendiri; distribusi Linux modern kini otomatis mengganti nama antarmuka jaringan dengan alat sepertiudev, dan proses ini bekerja melalui pemanggilanSIOCSIFNAME ioctldi kernel; ditambahkan juga bahwa kernel modern bahkan menyediakan kemudahan penomoran otomatis untuk nama sepertiwlan*atauwlan%dconfig_ethernet_iface_regex</i>", dan menyatakan itu sebagai satu lagi alasan pentingnya hak root pada perangkat yang dimilikiifup, dan UI Android sama sekali tidak bisa menampilkan situasi ini sehingga masalahnya hanya terlihat lewat logdmesg; tidak yakin apakah ini juga berlaku untuk perangkat CDC, tetapi banyak dongle USB Ethernet memakai chipset Realtek atau Kawasaki dan ada kasus yang membutuhkan firmware; perubahan Android ini tampaknya terjadi belum lama ini, namun pada perangkat debug AOSP vanila dongle jaringan USB bisa dipakai dengan baik, sehingga diduga ini lebih terkait konvensi penamaan di sisi kernel atau driver CDC; intinya, chipset dongle dan kebutuhan firmware tetap perlu diperhatikan