1 poin oleh GN⁺ 2025-06-09 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-06-09
Komentar Hacker News
  • Berbagi pengalaman menulis artikel ini setelah dulu bersusah payah mencoba menghubungkan perangkat Android dengan adaptor CDC Ethernet di tempat kerja sebelumnya; lalu mendengar dari beberapa orang bahwa jika bit tertentu pada alamat MAC diubah, kernel akan memberi nama 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 MAC
    • Tanggapan bahwa informasi ini sepertinya bisa berguna, lalu membagikan tautan terkait setelah menemukan bit yang dimaksud
    • Menyampaikan respons positif terhadap postingan tersebut
  • Dinilai sebagai artikel deep dive yang menarik; setelah memeriksa source, tampaknya regex yang bermasalah diubah dari eth\\d menjadi * 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 mencakup usb\\d+ dan eth%d
    • Dijelaskan bahwa perubahan tersebut kemudian di-rollback karena "ada perangkat yang melakukan tethering lewat antarmuka usbX", lalu segera diterapkan kembali dengan dukungan hanya untuk Android V+ (versi baru); juga dilampirkan tautan rollback dan tautan penerapan akhir
  • Kritik keras terhadap fakta bahwa layanan EthernetTracker Android hanya mengakui antarmuka yang dinamai ethX; 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 seperti udev, dan proses ini bekerja melalui pemanggilan SIOCSIFNAME ioctl di kernel; ditambahkan juga bahwa kernel modern bahkan menyediakan kemudahan penomoran otomatis untuk nama seperti wlan* atau wlan%d
  • Dari riwayat commit LineageOS, dianalisis bahwa masalah ini pernah diperbaiki lalu dikembalikan karena masalah kompatibilitas, dan kini kembali diterapkan di versi Android terbaru; dari isi commit tampak bahwa pihak Google juga terlibat, sehingga ada kemungkinan ini juga berlaku pada build resmi Google
  • Sepakat dengan kalimat dalam artikel bahwa "<i>tidak ada cara lain selain me-root ponsel untuk mengubah nilai config_ethernet_iface_regex</i>", dan menyatakan itu sebagai satu lagi alasan pentingnya hak root pada perangkat yang dimiliki
    • Berpendapat bahwa kemampuan mengalihkan lalu lintas jaringan secara sewenang-wenang adalah alasan terbesar mengapa hak superuser tidak boleh diberikan ke user space; setuju menekan OEM agar mengizinkan unlock bootloader, tetapi merasa sulit menemukan penggunaan root di Android yang benar-benar sebanding dengan luasnya ancaman yang akan terbuka bagi penyerang
  • Pertanyaan tentang apa yang dimaksud dengan "tidak bisa"; berbagi pengalaman bahwa ketika dongle hub USB untuk MacBook dicolokkan ke ponsel Android, port Ethernet bekerja tanpa masalah, dan modem seluler yang dikenali sebagai perangkat Ethernet juga berfungsi baik di Android
    • Diberi tahu bahwa masalah ini sebenarnya sudah diperbaiki, dan artikel aslinya adalah tulisan dari dua tahun lalu
  • Keluhan bahwa Android, dengan cara yang sangat merepotkan, tidak mendukung banyak koneksi jaringan sekaligus; misalnya ingin tersambung bersamaan ke WiFi tanpa internet (bahkan tanpa router default) dan jaringan seluler, tetapi itu tidak bisa; di Linux atau Windows hal seperti itu wajar, tetapi Android memblokirnya secara paksa, dan bahkan di banyak varian Android koneksi akan terputus dengan cara yang membingungkan jika terlalu bertahan pada WiFi tanpa internet; selain itu hanya ada API yang agak bisa dipakai dari aplikasi, sementara pengguna sendiri tidak diberi kendali semacam ini
    • iOS juga serupa; saat terhubung ke WiFi untuk mengambil video dari dashcam, muncul popup "Tidak ada internet, beralih ke seluler?" dan meskipun memilih tetap di WiFi, pada akhirnya iOS tetap memaksa pindah ke jaringan CarPlay; ditambahkan bahwa bahkan tidak ada cara untuk menonaktifkan ini secara manual
    • Disebutkan bahwa Windows juga pada praktiknya tidak bisa terhubung ke dua jaringan WiFi sekaligus dengan dua adaptor nirkabel, setidaknya tidak lewat GUI, dan belum pernah mencoba lewat terminal
    • Pendapat bahwa batasan ini benar-benar menjengkelkan; saat internet bermasalah dan mencoba mendiagnosisnya dengan ponsel, kesulitan muncul karena perangkat tidak mau tetap di WiFi; juga dikeluhkan bahwa pengaturan DNS Android punya masalah rumit lain, seperti tidak menerima dari DHCP
    • Curhat bahwa pengalaman ini lebih tidak nyaman lagi saat masuk ke daratan utama Tiongkok dengan ponsel Android versi Barat; karena Android memeriksa konektivitas internet melalui layanan Google, WiFi lokal terus-menerus ditandai tidak punya internet; setiap kali itu terjadi, pengguna harus menjawab secara manual apakah ingin tetap terhubung
  • Saran agar persyaratan firmware juga обязательно diperiksa; beberapa perangkat bisa terdeteksi normal tetapi jika firmware tidak tersedia maka akan gagal saat ifup, dan UI Android sama sekali tidak bisa menampilkan situasi ini sehingga masalahnya hanya terlihat lewat log dmesg; 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
  • Pengalaman memiliki lebih dari 15 adaptor USB Ethernet, dengan chipset berbeda seperti Realtek dan AXIS, dan semuanya bekerja sangat baik; keyakinan bahwa jika di Linux memilih model yang tidak membutuhkan driver, pada dasarnya perangkat itu akan berjalan mulus di hampir semua OS dan BIOS
    • Disertakan info bahwa isu ini telah diperbaiki pada 2023 serta tautan Hacker News terkait
    • Pengalaman tambahan bahwa adaptor Ethernet pada dock Thunderbolt/USB bekerja baik di kedua ponsel, Pixel 5 maupun Pixel 9
  • Kekaguman bahwa ini adalah perjalanan debugging yang sempurna, dan menarik melihat bagaimana satu regex bisa membuat seluruh keluarga perangkat tidak berfungsi; teringat pengalaman baru-baru ini saat menemui keterbatasan struktural serupa dalam sistem alignment/escalation milik GPT-4 dan OpenAI; dijelaskan bahwa meskipun sudah menyiapkan dokumentasi resmi dan log untuk memicu logika internal, pada akhirnya tetap terhambat karena secara masuk akal bagi manusia namun tidak cocok dengan regex pada antarmuka internal yang tak terlihat; rekamannya dibagikan lewat tautan terpisah, dan mengajak siapa pun yang tertarik pada arsitektur sistem atau batas antarmuka yang tak terlihat untuk berbagi pendapat