Why Android can't use CDC Ethernet (2023)

131 goodburb 58 6/8/2025, 8:49:07 PM jordemort.dev ↗

Comments (58)

jordemort · 2h ago
I wrote this after a bad week at a previous job trying to get an Android device to work with a CDC Ethernet adapter.

Since writing this, a couple people have let me know that there is a particular bit in the MAC address, that if flipped, will cause the kernel to assign an `ethX` name instead of `usbX` name. I haven't tried it myself or updated the post with that information because I moved on to a different job, and Android devices are no longer a large part of my life.

Of course, that only helps if you have a CDC device where you're in control of the MAC address (i.e. maybe another Linux device pretending to be a CDC adapter)

rcxdude · 2h ago
This might actually help me out! Did you find what bit it is?

(Ah, I think I found it: https://lkml.iu.edu/hypermail/linux/kernel/1103.2/03250.html )

goodburb · 1h ago
Thanks, setting the MAC address to global bit works on my Moto Android 15, Honor Android 9, and GSI 16 from a Raspberry Pi [1].

It now appears as eth0 and routes created only after turning off the Wi-Fi, DHCP is obtained regardless.

ECM scores 270Mbit, RNDIS 150Mbit.

Mobile hotspots/dongles with MAC address modification should work. (currently detected as usb0)

[1]: https://gist.github.com/TalalMash/c20e6aa237e1f123ddf9686a07...

chews · 1h ago
yes to this post!
progbits · 4h ago
Fun deep dive article!

Looked up the source and it appears the regex was changed from `eth\\d` to just `*` in October 2023, presumably fixing this issue:

https://android-review.googlesource.com/c/platform/packages/...

The description says "The default will include both usb\d+ and eth%d named interfaces on Android U+", "U+" being version 14 I think (https://en.wikipedia.org/wiki/Android_version_history)

mshockwave · 3h ago
It was later reverted[1] because "there are devices in the field using usbX interfaces for tethering". Shortly after that, it got re-landed but only supported Android V+[2]

[1]: https://android-review.googlesource.com/c/platform/packages/...

[2]: https://android-review.googlesource.com/c/platform/packages/...

dfc · 2h ago
What are Android T+, U+ and V+?
charcircuit · 2h ago
T = Android 13

U = Android 14

V = Android 15

franga2000 · 3h ago
Looking at the LineageOS commit history, it seems seems this has been fixed [0], reverted [1] due to compatibility issues, then unreverted again [2] but only for the latest Android versions. If I'm reading the commits right, someone at Google was involved, so this might be in the official Google build now.

[0] https://github.com/LineageOS/android_packages_modules_Connec... [1] https://github.com/LineageOS/android_packages_modules_Connec... [2] https://github.com/LineageOS/android_packages_modules_Connec...

userbinator · 3h ago
There is no way to work around this, short of rooting the phone to change the value of config_ethernet_iface_regex.

Another reason why having root is important on a device that you own.

bigyabai · 3h ago
Being able to arbitrarily redirect networking traffic is perhaps the single greatest reason to not have superuser privs in userland. I support anybody that wants to pressure OEMs into allowing bootloader unlocks, but I also can't name a use for root that justifies the insanely expanded surface area for attackers, at least on Android.
Zak · 3h ago
Do you believe the same thing about desktop PCs?
bigyabai · 3h ago
Yes? I don't use a single computer I own as root.
Zak · 2h ago
Few people do; "don't use root as your primary login" has been standard advice for decades. Do you ever use sudo or equivalent?
beeflet · 2h ago
I've used sudo before, but I find that it is really difficult to type with the safety gloves on because I keep fatfingering the password and locking myself out.

My family recently got me a new computer setup that won't require sudo and other practices considered harmful. It even does shapes, colors, and animal sounds, which is good enough for my use case.

zoky · 2h ago
Oh wow, you got on the Windows 12 Preview somehow?
Wowfunhappy · 1h ago
...you're clearly being sarcastic but I don't get the joke.
EvanAnderson · 1h ago
I read it as commentary on PCs being turned into these types of things: https://www.amazon.com/Fisher-Price-Classic-Farmer-Says/dp/B...
1231232131231 · 53m ago
Every person I know who uses a Windows computer uses an account with Administrator privileges on their own computer.
baby_souffle · 13m ago
I think that's just legacy holdover largely mitigated by some of the user account access control stuff introduced with Vista. Also, administrator isn't the same as root. That would be more like system level access which is not the default level for Windows accounts.
gsich · 9m ago
That wasn't the question.
userbinator · 3h ago
The corporate FUD has gotten strong enough that people are getting scared of freedom. That should disturb you more than any perceived paranoia about "attackers".
stavros · 2h ago
Seriously, people are acting like the "do you want to give this application elevated privileges" popup is some arcane magick that we as a race can never hope to possess.
EvanAnderson · 1h ago
While I agree with you, without using a more granular permission paradigm I get more than a little antsy giving third-party software arbitrary access to even my standard user's privileges on Windows.

I've been using a dedicated computer for banking / finance work for a few years now. I also run some software that I consider less trustworthy on my "daily driver" Windows PC as a dedicated user, separate from my "daily driver" account.

I really need to make the jump to Qubes. I've been meaning to for years. The learning curve for their contrivances seems steep and I'm lazy.

stavros · 40m ago
Oh yeah, definitely, but mobile OSes do this fairly well. Windows just asks if you want to give access to everything or not, of course you're always going to click yes, especially if the program doesn't work without it.
bigyabai · 2h ago
That really should not surprise people when their smartphone has been telling them it is the wrong design pattern for over a decade.

Point the finger at whoever you want. If you need to find who broke the bicycle for the mind, I think most of us know who's responsible.

stavros · 2h ago
I'm not sure what you mean, I find smartphones' "do you want to allow this application access to X?" a pretty understandable and secure pattern.
lucasban · 1h ago
Most users have no interest in developing the skills to handle that level of freedom responsibly. I think it should be an option, but it is unfair to say this is only corporate FUD.
lurking_swe · 1h ago
agreed.

for the vast majority of consumers and employees this is like using a bazooka to kill a mosquito. Unnecessary and dangerous. But for some EXPERTS (IT/Tech professionals) and hobbyists, it’s crucial to their workflow.

Having the _option_ is a must.

sroussey · 1h ago
Agree, but how it is enabled is important.

The same popup that asks for microphone access but now says the word root in its place, and a consumer is like “not sure what root is, maybe they meant toot!”

And then their whole machine is compromised.

lurking_swe · 56m ago
often times we’re lucky if a user reads those popups at all. :)
rcxdude · 2h ago
It also, very annoyingly, can't connect to multiple networks at once. e.g. connecting to a wifi network which doesn't have internet access (and doesn't even advertise a default route) and a cell phone network at the same time. Linux can do it, Windows can do it, Android stubbornly refuses (and indeed many variants will refuse to stay connected to a wifi network without internet, if not just make you jump through confusing hoops). There are some APIs which mean that if you write an app, you can do it just in the app, but there's no way as a user to get it to do so.
OptionOfT · 2h ago
Same with iOS. When I connect to my dashcam to download some videos I get a pop-up after a while that is like: "No internet detected, switch to cellular?" I tap remain connected. No option to disable that.

And even though I wanted to stay connected, iOS decides it knows better and reconnects to my Carplay network.

Aurornis · 8m ago
This actually works fine on iOS when the app is implemented properly. I have multiple devices where I do this without issue.

I’m guessing your dash cam app is not implemented correctly.

raron · 42m ago
As far as I remember this have a solution for both Android and iPhone. Probably your dashcam just doesn't implemented them right.

https://developer.apple.com/forums/thread/13164

No comments yet

kimixa · 1h ago
Also check for firmware requirements - some devices enumerate but fail on ifup without firmware available. The android UI naturally can't cope with this, only dmesg tells you what's going on. Though not sure if CDC devices require this? Though a lot of adapters are (were?) based on Realtek or Kawasaki chips that did.

I guess this android change is relatively recent though, as we regularly used USB network dongles on our debug devices (that used 100% "Vanilla" AOSP). Or perhaps a kernel change, or a quirk of the CDC driver to name the device usb*? You just had to be careful which chipset the dongle used and ensure it didn't need any firmware.

hypercube33 · 3h ago
Thats super weird. I have like 15 USB ethernet adapters and all of them work just fine. I'm pretty sure they are a few different chipsets from Realtek and AXIS or something like that, too. If you get ones that dont need drivers on linux you're good to go with pretty much any OS and BIOS
Retric · 3h ago

No comments yet

Grazester · 3h ago
Yeah I came to say ethernet adapter on my thunderbolt/usb dock works just fine on my on my pixel 5 and pixel 9 phones
Zak · 3h ago
A related thing that used to annoy me is that vanilla Android wouldn't connect to ad-hoc WiFi networks. Third-party ROMs usually would, so it wasn't due to a hard problem.

The bug report had a two-digit number and Google steadfastly refused to fix it for years. I haven't seen an ad-hoc network in a long time, but they were common when Android was young.

tripdout · 4h ago
cs.android.com is a simpler alternative than downloading the whole 100+ Gb source.
MBCook · 4h ago
The article says that iOS doesn’t support CDC Ethernet adapters. But I’ve plugged just standard USB ethernet adapters into my phone and had them work.

Does iOS communicate with them using some other standard?

robingchan · 3h ago
yes - ASIX / realtek chipsets are whats in your generic dongle, the drivers for which are bundled in iOS. CDC ECM is not supported.

I found this out when using CAN bus to ethernet on iPhone

brigade · 2h ago
macOS definitely does not ship drivers for Realtek’s vendor protocol, and only supports them via ECM/NCM. Are you claiming iOS is the exact opposite?
kccqzy · 46m ago
Well macOS ships with something called AppleUSBRealtek8153Patcher (aka com.apple.driver.usb.realtek8153patcher). I'm not sure if this uses proprietary Realtek protocols, but it's pretty well known that this patcher does not work reliably on macOS. These days I only use Realtek 8156 on macOS (which uses NCM). And I just tested the 8156 on iOS; in fact this comment is transmitted by iOS to HN via a 8156 dongle.
hansjorg · 3h ago
> CDC stands for Communications Device Class https://en.m.wikipedia.org/wiki/USB_communications_device_cl...

Why is this buried almost at the end of the article? Why even mention it at that point?

andix · 2h ago
Rule of thumb: Explain every abbreviation the first time it is used in an article or a meeting. Only really obvious things like USB or HTTP can be skipped.
stavros · 2h ago
Thank you, I decided to say "fuck it" and read the entire article mentally expanding it into "center for disease control devices", and I have no regrets.
kps · 1h ago
I doesn't surprise me that Android doesn't support any Ethernet hardware made by Control Data Corporation.
secondcoming · 3h ago
The Android code also allowed for 'test interfaces'. I wonder why the author didn't go down that path.

The Android revert message is also interesting:

    there are devices in the field using usbX interfaces for tethering
What's the problem with this?
jeroenhd · 2h ago
From what I can tell, the code that the patch covered is responsible for configuring the network interface as a client.

If another system on the phone brings up the interface as a host device to tether internet to a second device, you end up with the phone trying to configure the interface both as a router and as a client.

rcxdude · 2h ago
This. In general interface names are arbitrary and not a good way to determine anything about what it's connected to, but the usb vs eth distinction is particularly bad, because linux will use either for either 'end' of a link.
ck2 · 3h ago
My tablet with lineageOS works with very few select usb-ethernet adapters (ASIX AX88179 chipset)

But since it doesn't support charging while in OTG host mode, it cannot stay plugged into the adapter for long (old battery)

Some newer devices like Samsung support ACA OTG (Accessory charging adaptor)) with charging while powering the adapter

myself248 · 2h ago
Another fun reason for wireless charging -- sometimes it's just easier to sneak power into the device by a side-channel than to try to find the right chain of adapters.
Marsymars · 2h ago
What’s old is new again; Windows Phone devices did USB charging + ethernet (+ display) a decade ago.
russellbeattie · 3h ago
I had to look it up: CDC stands for "USB Communications Device Class".

I've never once tried to hook any of my many, many Android devices over the last decade+ to wired Ethernet using a USB adapter, but I had assumed it would just work if I did. Interesting.

dfc · 2h ago
Instead of looking it up you could have read the article:

So what’s this about CDC Ethernet and why should I care?

CDC stands for Communications Device Class.

russellbeattie · 1h ago
Right. Beyond half way through the article. I saw it, but was so baffled through the top half, I had already searched for it before I continued. I figured someone else would want to know. There's even another comment saying the exact same thing.

Regardless, my comment was mostly about how I had never run into the issue.