[HN Gopher] Why Android can't use CDC Ethernet (2023)
       ___________________________________________________________________
        
       Why Android can't use CDC Ethernet (2023)
        
       Author : goodburb
       Score  : 326 points
       Date   : 2025-06-08 20:49 UTC (1 days ago)
        
 (HTM) web link (jordemort.dev)
 (TXT) w3m dump (jordemort.dev)
        
       | progbits wrote:
       | 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 wrote:
         | 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 wrote:
           | What are Android T+, U+ and V+?
        
             | charcircuit wrote:
             | T = Android 13
             | 
             | U = Android 14
             | 
             | V = Android 15
        
               | NooneAtAll3 wrote:
               | I wonder what was the need for this obfuscation
        
               | isiahl wrote:
               | It's not really obfuscation. It goes back to when Android
               | OS's used to be named after desserts. While in
               | development they would be referred to just by the letter
               | as the dessert name wasn't usually finalized
        
               | throwaway314155 wrote:
               | It's not deliberate obfuscation. But the end result is
               | still obfuscated.
        
               | IshKebab wrote:
               | Not as bad as Ubuntu/Debian code names at least.
        
               | tough wrote:
               | at least follows alphabetic order!
        
               | KeplerBoy wrote:
               | As does android.
        
               | shadowgovt wrote:
               | Numbers are exactly as obfuscatory as letters. "Android
               | 14" doesn't tell me anything other than it comes after 13
               | and before 15, and "V" tells me the same relative to U
               | and W.
        
               | fc417fc802 wrote:
               | I have the same thought every time marketing at a major
               | OEM changes a systematic naming scheme.
        
           | gbil wrote:
           | a few months ago I was given a unihiker board that uses cdc
           | and didn't work with my android devices, now that I read this
           | I tried again since I got them upgraded to android 15 in
           | between but still doesn't work and I'm afraid this is due to
           | samsung implementation of android 15! Works on ipad though
           | which was a surprise to me!
        
           | shadowgovt wrote:
           | So the meta question is: Why does the device API require the
           | system to play these name games instead of giving enough
           | information to discover whether the thing is an honest-to-God
           | Ethernet device?
        
       | MBCook wrote:
       | 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 wrote:
         | 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 wrote:
           | 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 wrote:
             | 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.
        
       | tripdout wrote:
       | cs.android.com is a simpler alternative than downloading the
       | whole 100+ Gb source.
        
       | ck2 wrote:
       | 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 wrote:
         | 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 wrote:
         | What's old is new again; Windows Phone devices did USB charging
         | + ethernet (+ display) a decade ago.
        
           | p0w3n3d wrote:
           | I was really shocked when they stopped making android phones
           | with USB micro hdmi support, which basically allowed playing
           | games on TV
        
             | AStonesThrow wrote:
             | My HDMI Philips monitor supported MHL. And DVI-D,
             | incidentally.
             | 
             | However, I was never able to use MHL display. None of my
             | devices seemed to support it. Android Kitkat/Lollipop,
             | Samsung Galaxy Tab.
             | 
             | I've no idea what sort of cable would've been needed. There
             | was no USB connector on the monitor.
        
               | p0w3n3d wrote:
               | I had a micro-usb to MHL adapter added to my nexus tablet
               | (forgot already which version)
        
             | izacus wrote:
             | That's because a lot of new phones (and tablets) support
             | video via USB-C just like laptops.
        
               | AStonesThrow wrote:
               | Pedantic nitpick to say: USB is a serial protocol, but
               | video is not serial? It's a Displayport or Thunderbolt
               | connection, using a USB-C-shaped connector and cable
               | 
               | https://en.wikipedia.org/wiki/Thunderbolt_(interface)
        
       | franga2000 wrote:
       | 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...
        
         | luca020400 wrote:
         | As Lineage is concerned I found that a while ago and made
         | https://review.lineageos.org/c/LineageOS/android_packages_mo...
         | But no one bothered to test, and I had no way to verify so it's
         | in a limbo for now :)
         | 
         | It's always a mix of things people report to us, things someone
         | randomly pick up, but then we need real users testing them out
         | lol
        
       | hypercube33 wrote:
       | 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 wrote:
         | Fixed in 2023:
         | 
         | https://news.ycombinator.com/item?id=44219502
        
         | Grazester wrote:
         | 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
        
       | userbinator wrote:
       | _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 wrote:
         | 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.
        
           | userbinator wrote:
           | 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 wrote:
             | 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.
        
               | bigyabai wrote:
               | 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 wrote:
               | 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.
        
               | EvanAnderson wrote:
               | 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 wrote:
               | 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.
        
               | dwattttt wrote:
               | There's plenty of actually granular permissions; they're
               | just not used by anyone.
               | 
               | How many people on Windows create separate user accounts,
               | run programs as those accounts (hello runas), & set ACLs?
        
               | ranger_danger wrote:
               | Not many, but I have found Sandboxie to be quite useful
               | for this purpose.
        
               | ClumsyPilot wrote:
               | It's not user friendly
        
               | ben0x539 wrote:
               | Five minutes after this popup exists, you won't be able
               | to run any of the big "can't participate in your social
               | life without these" apps anymore without granting them
               | those elevated privileges.
        
               | stavros wrote:
               | I'm in the EU, that doesn't fly here.
        
               | Gigachad wrote:
               | This is half the reason I pick Apple stuff. Having a huge
               | company fight the bullshit from Meta and Google for you.
        
             | lucasban wrote:
             | 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 wrote:
               | 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 wrote:
               | 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 wrote:
               | often times we're lucky if a user reads those popups at
               | all. :)
        
               | spaqin wrote:
               | Ever since I remember if you wanted root on Android, you
               | had to go out your way by flashing SuperSU, then Magisk
               | or KernelSU; most users don't ever use that. Even more
               | so, with few recent solutions like KernelSU or some
               | Magisk forks you have to go out of your way again to
               | whitelist the app before it can even ask for root -
               | mostly for avoiding detection, but that does act as an
               | extra layer of security.
               | 
               | I'm not too worried about security for normal users if we
               | kept it that way. I just want not to have any extra
               | roadblocks for the powerusers from the banks, Authy or
               | McDonald's.
        
               | ruszki wrote:
               | The problem is that the bar needs to be moved higher and
               | higher, to a level nowadays which would be annoying to
               | most of us who know what they are doing.
               | 
               | 20 years ago if I started to list ip addresses to my ISP
               | on the phone I got somebody technical immediately. This
               | doesn't work anymore, because people know more about
               | this. This caused that for example I could only turn WiFi
               | on or off on my ISP's router and nothing else without a
               | specific request to them, a manual restart to my router
               | days later, and I need to use a terrible buggy software.
               | 
               | These kind of things unfortunately also restrict
               | beginners, or people who without such barriers would
               | start to tinker, and eventually learn to do these safely.
               | Even I waited for weeks with the call, who have been
               | configuring routers for 25 years.
               | 
               | I'm installing now a self hosted OwnTracks on docker. A
               | lot of beginner started to do the same. They make rookie
               | mistakes all the time. Let them make those mistakes.
               | 
               | I would have never learned what I know without the
               | freedom of making mistakes.
        
           | Zak wrote:
           | Do you believe the same thing about desktop PCs?
        
             | bigyabai wrote:
             | Yes? I don't use a single computer I own as root.
        
               | Zak wrote:
               | 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 wrote:
               | 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 wrote:
               | Oh wow, you got on the Windows 12 Preview somehow?
        
               | Wowfunhappy wrote:
               | ...you're clearly being sarcastic but I don't get the
               | joke.
        
               | EvanAnderson wrote:
               | 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...
        
               | SSLy wrote:
               | Ah, the vCenter Server Appliance web gui!
        
               | 1231232131231 wrote:
               | Every person I know who uses a Windows computer uses an
               | account with Administrator privileges on their own
               | computer.
        
               | baby_souffle wrote:
               | 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.
        
               | zorgmonkey wrote:
               | UAC is not a security boundary, it is instead considered
               | a defense-in-depth feature (aka best effort but
               | bypassable). This is officially documented by Microsoft
               | in multiple places. [0] https://www.microsoft.com/en-
               | us/msrc/windows-security-servic... [1]
               | https://learn.microsoft.com/en-us/troubleshoot/windows-
               | serve...
        
               | fc417fc802 wrote:
               | Administrator on windows has been _severely_ restricted
               | since at least the debut of windows 7 if not earlier.
        
               | jimmaswell wrote:
               | It feels ontologically wrong to me to constantly beg my
               | own computer for permissions to do things. I always use
               | root on Linux, and my Gentoo machines don't even have a
               | non-root account. (I get great satisfaction from
               | compiling VLC to let me run it as root as well as
               | patching Dolphin and other apps to not complain about
               | it.) On Windows I always use an admin account and disable
               | all UAC prompts. I've managed to have no incidents since
               | I started this policy a decade ago by simply not
               | downloading malware or using 123 as my password on an
               | open SSH port. Go figure.
        
               | smt88 wrote:
               | So you don't understand why seatbelts were invented and
               | your evidence that they're unnecessary is that you
               | personally haven't gotten into a car accident.
               | 
               | "Not downloading malware" is everyone's default stance,
               | but no one can identify all of it.
               | 
               | And that's only a single vector out of many. Security
               | flaws exist in even the best operating systems that make
               | you vulnerable even when doing everything "right" (which
               | you emphatically are not).
        
               | jimmaswell wrote:
               | I wear seatbelts (but I'm proud of my state for being the
               | only one not to force adults to) because a car crash is
               | much more likely than being victim to a zero-day
               | vulnerability.
        
               | josephg wrote:
               | My problem with this argument is that my user data is by
               | far the most valuable thing on my computer. Almost
               | nothing that gets protected by "root" really matters
               | much. What I really want is a way to protect all my user
               | data from rogue programs, but I have no way to do that on
               | modern computers. Any program I run with my regular user
               | account can steal or delete all of my data already. When
               | my data is so trivially at risk, who cares if a bad
               | program can also wipe my OS or something? I can reinstall
               | Linux. I can't get my data back if someone steals it.
        
               | j0057 wrote:
               | macOS does ask you if you want to allow a program to
               | access your files in $HOME. Not sure if it's a perfect
               | solution, but still, it's something.
               | 
               | As a more additive approach than just giving up and
               | running everything as root, I think in Linux you could do
               | the same with (a fair amount of effort and) SELinux or
               | AppArmor.
        
               | anthk wrote:
               | Check Fedora Silveblue, or Kinoite (or the Budgie
               | edition) if you don't like neither KDE nor Gnome.
               | Inmutable OS, it can be set to a rolling channel to get
               | daily updates, you can rollback it from GRUB in case of
               | disasters and, even better, everything non-desktop
               | environment based it's installed from Flatpak and
               | containerized.
        
               | ndriscoll wrote:
               | That's why you run programs as different users.
               | Background services like nginx or jellyfin get their own
               | users. Have a separate `games` user if you play video
               | games. If you're going to mess with untrustworthy code,
               | make another user first. Don't give world permissions to
               | your home directory.
        
               | josephg wrote:
               | That might help if nginx has a security vulnerability.
               | But what about all the programs I run as a user? Nobody
               | runs their IDE or "npm install" under separate user
               | accounts. Nor should we have to in order to prevent a
               | package from interacting with my filesystem outside of
               | the project directory.
        
               | fsflover wrote:
               | > What I really want is a way to protect all my user data
               | from rogue programs, but I have no way to do that on
               | modern computers
               | 
               | This is exactly why Qubes OS was created: https://qubes-
               | os.org. My daily driver, can't recommend it enough.
        
               | diogocp wrote:
               | There's a difference between choosing to wear a seatbelt
               | and being chained to the seat by the car manufacturer,
               | who then refuses to release you "for your own safety".
        
               | Wowfunhappy wrote:
               | The difference is that you can take off your seatbelt for
               | a moment if you need to reach into glove compartment.
               | 
               | Also, you're statistically much more likely to die from a
               | car crash than a malware attack.
        
               | Y_Y wrote:
               | > you're statistically much more likely to die from a car
               | crash than a malware attack
               | 
               | That's true now, but I honestly don't think it'll be the
               | case in twenty years.
        
               | StopDisinfo910 wrote:
               | I mean, ok, but why?
               | 
               | The point of lowering application permission is not to
               | prevent _you_ from doing things. It's to prevent _the
               | application_ to do things you don't want.
               | 
               | That's why people try to give apps as little permission
               | as possible and only grant them when they are required.
               | 
               | Technically you are one vulnerability away from
               | irremediably losing everything after opening a seemingly
               | innocent file. I am actually convinced the sole reason it
               | doesn't happen is because it doesn't make sense to target
               | people doing that because they virtually don't exist.
        
               | gsich wrote:
               | That wasn't the question.
        
           | msgodel wrote:
           | Do you also live in a padded room because hardwood floors are
           | potentially slippery and unsafe?
           | 
           | Jesus Christ.
        
           | greenavocado wrote:
           | God forbid system developers allow for personal agency.
        
             | bigyabai wrote:
             | System developers develop systems. If you want to enforce
             | personal agency, go to the polls and vote for it.
        
         | preisschild wrote:
         | "Rooting" removes a lot of Android security features, though.
         | Instead of Apps only having the necessary permissions, apps can
         | have ALL permissions with root and thus are a huge security
         | vulnerability.
         | 
         | https://www.reddit.com/r/GrapheneOS/comments/13264di/is_root...
        
           | ndriscoll wrote:
           | If you give that app root, sure. That linked post is silly;
           | your UI layer does not need root to grant privileges. e.g.
           | `kdesu` asks for your password and hands it to `su`. The UI
           | portion doesn't itself need setuid/root. A keyboard could of
           | course keylog you. Don't install random keyboards.
        
       | russellbeattie wrote:
       | 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 wrote:
         | 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 wrote:
           | 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.
        
       | hansjorg wrote:
       | > 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 wrote:
         | 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 wrote:
         | 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 wrote:
           | I doesn't surprise me that Android doesn't support any
           | Ethernet hardware made by Control Data Corporation.
        
             | MBCook wrote:
             | This was the name I had been reading until the post
             | explained it as well.
        
           | p0w3n3d wrote:
           | Colonial Defence Committee
        
         | bede wrote:
         | I assumed that the article must be about a frustrated CDC
         | employee just trying to get internet access at work.
        
       | secondcoming wrote:
       | 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 wrote:
         | 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 wrote:
           | 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.
        
         | yeth0099 wrote:
         | Unfortunately, test interfaces have to match `testtap\d+`
        
       | Zak wrote:
       | 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.
        
       | jordemort wrote:
       | 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 wrote:
         | 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 wrote:
           | 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/c20e6aa237e1f123ddf968
           | 6a07...
        
         | chews wrote:
         | yes to this post!
        
       | rcxdude wrote:
       | 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 wrote:
         | 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.
        
           | raron wrote:
           | 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
        
             | rcxdude wrote:
             | Only if you have an app. It could well be the _only reason_
             | you would want to make a custom app, because of this
             | irritating behaviour by the OS.
        
           | Aurornis wrote:
           | 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.
        
             | shakna wrote:
             | The phone is the network manager, though.
             | 
             | It relying on a specific optional part of the spec to be
             | implemented on a different device seems to be a huge flaw.
        
             | rcxdude wrote:
             | The point is it shouldn't need a damn app, much less one to
             | implement it "correctly".
        
         | roygbiv2 wrote:
         | This is incredibly annoying. If my internet goes down I'm
         | unable to diagnose it from my phone because it won't stay
         | connected to the WiFi that doesn't have internet. DNS is also
         | messed up on Android, it refuses to use the Dhcp supplied dns
         | without having to set multiple options and even then some
         | internal dns refuses to resolve.
        
         | spaqin wrote:
         | It's even more annoying when you go to mainland China with your
         | western Android phone. They determine internet connection by
         | trying to connect to Google services. If you connect to a local
         | WiFi, of course it won't go through the Great Firewall, and
         | every single time will prompt you asking if you want to keep
         | the internet-less connection.
        
         | mrheosuper wrote:
         | Windows also cant do it, right ?, If i have 2 Wireless adapter
         | on Windows, i can not connect to 2 seperate Wifi networks(at
         | least with using the GUI, did not try using terminal)
        
           | rcxdude wrote:
           | Yeah, you can! If both if them advertise a default route via
           | DHCP, it can get confused (it's basically random which one it
           | will try to connect to the internet with), but it will
           | otherwise work. It also needs the local IP ranges to not
           | overlap. And if the wifi network without internet doesn't
           | advertise a default route, it'll work just fine by default.
        
       | kimixa wrote:
       | 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.
        
       | ahepp wrote:
       | I'm working on an embedded system right now that has two CDC
       | ethernet devices. One shows up as ethX and the other shows up as
       | usbX. Maybe it's because one is CDC EEM and the other is CDC ECM?
       | But I don't think this is generally true for all CDC ethernet.
        
       | throwaway314155 wrote:
       | Truly curious to why this is the top article when even the author
       | admits it's no longer accurate. Slow news day I guess.
        
         | kiwijamo wrote:
         | There's still plenty of phones out there still running the
         | older kernels. My S21 is probably one of them unfortunately.
        
       | 0xbadcafebee wrote:
       | > Android's EthernetTracker service only acknowledges interfaces
       | that are named ethX
       | 
       | If this is true, this is the stupidest goddamn thing I have ever
       | heard of. We fixed this with linux distributions _in the 2000s_.
       | It was obvious even back then that some device drivers just made
       | up their own device name prefix, so you had to probe the system
       | to find what kind of device it was. (I know the wifi stack has
       | changed a lot over the years, but there 's always been a way to
       | detect if a device was wireless or not)
       | 
       | Because consistency is kind of useful, there are also multiple
       | tools which can rename an interface, and I think most linux
       | distros today use udev to make this automatic. Under the hood
       | it's just calling the kernel's _SIOCSIFNAME_ ioctl. Modern
       | kernels even have a fancy feature so you can change the name to
       | "wlan*" (actually "wlan%d") and it will just assign a new number
       | after "wifi".
        
         | preisschild wrote:
         | I wonder if it would make sense to use NetworkManager on
         | Android (with the Android Wireless Settings UI acting as the
         | NetworkManager GUI)
        
         | literalAardvark wrote:
         | It's because some usbX devices must be used by other modules,
         | and managing the list is something they didn't want to do. So
         | ethX it is.
        
       | sollewitt wrote:
       | > How do you know what chipsets are compatible with your phone?
       | >Hearsay!
       | 
       | At least for straight USB-C to Ethernet adapters, despite all the
       | manufacturers there are really only two chipsets, one by Asix and
       | one by Realtek. If you manage to get one of each you cover all
       | the likely bases.
        
       | 404Escalation wrote:
       | This is a fantastic debugging journey -- love how it leads to a
       | single overlooked regex bringing down a whole class of devices.
       | 
       | Oddly enough, I recently hit something structurally similar in a
       | totally different context: OpenAI's alignment/escalation system.
       | I tried triggering a formal routing escalation within GPT-4's
       | recursive logic (SR-Route_Breach_1stOrder), with full
       | documentation and logs, only to be met by structurally sound --
       | but ultimately non-human -- responses.
       | 
       | It felt like my escalation never matched the system's internal
       | interface regex, so to speak.
       | 
       | I documented the whole case here:
       | https://news.ycombinator.com/item?id=44221458 Would love your
       | thoughts if you're into structural boundaries and invisible
       | interface contracts.
        
       | grishka wrote:
       | What do you mean can't? I have one of those USB hub dongles for
       | my MacBook and every Android phone I plugged it into can use the
       | Ethernet port on it just fine. I also have a USB cellular modem
       | that pretends to be an Ethernet device, and that works on Android
       | too.
        
         | gambiting wrote:
         | It's been fixed since, the article is 2 years old.
        
           | grishka wrote:
           | The USB modem worked on a Nexus 5 in 2016.
        
             | gambiting wrote:
             | It probably identified itself as an Eth device then.
        
           | goodburb wrote:
           | Non-generic adapters are fixed in custom ROMs/LOS, on stock
           | Android 16 my ZTE modem is still reporting as usb0 due to MAC
           | address local bit, while Huawei dongle works just fine.
           | 
           | Android phone to android tablet USB tethering is also local
           | MAC and non-functional.
        
       | vbezhenar wrote:
       | Another similarly stupid thing is when you're trying to connect
       | USB Serial device to your Android Smartphone.
       | 
       | Well, you connect it, it appears to work. Then you want to write
       | an application to use that USB serial interface. But apparently
       | you can't. You start to dig in and it appears that you just don't
       | have permissions to access `/dev/ttyACM0` (or whatever the name
       | of the serial device is, sorry, I might have misspell it).
       | 
       | Serial support is built into the kernel, but inaccessible to user
       | program, not without rooting anyway.
       | 
       | Dig further and it appears that Android has userspace USB access.
       | Similar to libusb, or may be it's built on top of libusb?.
       | Matters not.
       | 
       | So you can open "raw" USB device from your Android program. But
       | you can't open serial USB device. Serial USB is just a protocol
       | on top of USB. Actually it's a set of half-proprietary protocols.
       | FTDI, some other protocols. I didn't dig into it much. But there
       | are half-backed libraries for Android, which actually implement
       | those protocols in the userspace, so in the end you can access
       | USB serial device... At least some of them.
       | 
       | Also I think that you can open raw USB device from your Android
       | Chrome browser, using WebUSB! But not WebSerial. Probably for the
       | same reason.
       | 
       | What surprised me in the end: why even enable USB serial support
       | in the kernel? For debugging?
        
       | m463 wrote:
       | on a related note, iphones work well with lightning ethernet
       | adapters.
       | 
       | haven't tested anything with a newer usb-c based phone.
        
       | blueflow wrote:
       | Recompiling the Kernel like its 2005 to get driver support...
       | this article gives some retro-computing vibes.
        
       ___________________________________________________________________
       (page generated 2025-06-09 23:01 UTC)