Current version: 1.0.19 1.0.15 (as of 2018-12-10)
Realtek GBE USB
- Gigabit ethernet
- USB hub
- Launch
System Preferences
->Network
- See
USB 10/100/1000 LAN
- https://i.imgur.com/Bm7D0Ld.png (mirror)
- https://i.imgur.com/wcMZFh8.png (mirror)
- Launch
System Information
(also known asSystem Profiler
) ->Hardware
->USB
- https://i.imgur.com/NJi9yC4.png (mirror)
- Launch
System Information
(also known asSystem Profiler
) ->Software
->Extensions
- https://i.imgur.com/64QCxxS.png (mirror)
- Launch a terminal/shell
ioreg -p IOUSB -w0
ioreg -p IOUSB -w0 -l
: For more info
+-o Root <class IORegistryEntry, id 0x100000100, retain 14>
+-o Root Hub Simulation Simulation@14000000 <class AppleUSBRootHubDevice, id 0x1000002fa, registered, matched, active, busy 0 (6 ms), retain 13>
+-o USB2.0 Hub @14100000 <class AppleUSBDevice, id 0x1000002fb, registered, matched, active, busy 0 (43 ms), retain 14>
+-o Apple Internal Keyboard / Trackpad@14400000 <class AppleUSBDevice, id 0x1000002ff, registered, matched, active, busy 0 (96 ms), retain 22>
+-o USB3.0 Hub @14500000 <class AppleUSBDevice, id 0x100000363, registered, matched, active, busy 0 (54 ms), retain 15>
| +-o USB 10/100/1000 LAN@14540000 <class AppleUSBDevice, id 0x100000418, registered, matched, active, busy 0 (73 ms), retain 18>
+-o Bluetooth USB Host Controller@14300000 <class AppleUSBDevice, id 0x1000003d8, registered, matched, active, busy 0 (58 ms), retain 24>
Terminal output snippet from `ioreg -p IOUSB -w0 -l`
+-o USB3.0 Hub @14500000 <class AppleUSBDevice, id 0x100000363, registered, matched, active, busy 0 (54 ms), retain 15>
| | {
| | "sessionID" = 2480892594
| | "iManufacturer" = 1
| | "bNumConfigurations" = 1
| | "idProduct" = 2066
| | "bcdDevice" = 37009
| | "Bus Power Available" = 900
| | "USB Address" = 5
| | "bMaxPacketSize0" = 9
| | "iProduct" = 2
| | "iSerialNumber" = 0
| | "bDeviceClass" = 9
| | "Built-In" = No
| | "locationID" = 340787200
| | "bDeviceSubClass" = 0
| | "bcdUSB" = 768
| | "USB Product Name" = "USB3.0 Hub "
| | "PortNum" = 5
| | "non-removable" = "no"
| | "IOCFPlugInTypes" = {"9dc7b780-9ec0-11d4-a54f-000a27052861"="IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle"}
| | "bDeviceProtocol" = 3
| | "IOUserClientClass" = "IOUSBDeviceUserClientV2"
| | "IOPowerManagement" = {"DevicePowerState"=0,"CurrentPowerState"=3,"CapabilityFlags"=65536,"MaxPowerState"=4,"DriverPowerState"=3}
| | "Device Speed" = 3
| | "USB Vendor Name" = "VIA Labs, Inc. "
| | "idVendor" = 8457
| | "IOGeneralInterest" = "IOCommand is not serializable"
| | "IOClassNameOverride" = "IOUSBDevice"
| | }
| |
| +-o USB 10/100/1000 LAN@14540000 <class AppleUSBDevice, id 0x100000418, registered, matched, active, busy 0 (73 ms), retain 18>
| {
| "sessionID" = 3379212797
| "iManufacturer" = 1
| "bNumConfigurations" = 2
| "idProduct" = 33107
| "bcdDevice" = 12288
| "Bus Power Available" = 900
| "USB Address" = 8
| "bMaxPacketSize0" = 9
| "iProduct" = 2
| "iSerialNumber" = 3
| "bDeviceClass" = 0
| "Built-In" = No
| "locationID" = 341049344
| "bDeviceSubClass" = 0
| "bcdUSB" = 768
| "USB Product Name" = "USB 10/100/1000 LAN"
| "PortNum" = 4
| "non-removable" = "no"
| "IOCFPlugInTypes" = {"9dc7b780-9ec0-11d4-a54f-000a27052861"="IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle"}
| "bDeviceProtocol" = 0
| "IOUserClientClass" = "IOUSBDeviceUserClientV2"
| "IOPowerManagement" = {"ChildrenPowerState"=4,"DevicePowerState"=0,"CurrentPowerState"=4,"CapabilityFlags"=32768,"MaxPowerState"=4,"DriverPowerState"=4}
| "Device Speed" = 3
| "USB Vendor Name" = "Realtek"
| "idVendor" = 3034
| "IOGeneralInterest" = "IOCommand is not serializable"
| "USB Serial Number" = "002427FE48F6"
| "IOClassNameOverride" = "IOUSBDevice"
| }
|
- Launch a terminal/shell
ifconfig
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=2b<RXCSUM,TXCSUM,VLAN_HWTAGGING,TSO4>
ether 00:24:27:fe:48:f6
inet 192.168.1.135 netmask 0xffffff00 broadcast 192.168.1.255
media: autoselect (1000baseT <full-duplex,flow-control>)
status: active
The driver is located at
/System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/AppleRTL815X*.kext
/Library/Extensions/AppleRTL815X*.kext
Here are the namespaces:
com.realtek.driver.AppleRTL815XEthernet
com.realtek.driver.AppleRTL815XComposite
See http://osxdaily.com/2015/06/24/load-unload-kernel-extensions-mac-os-x/
With normal operation with only the network cable plugged in, I only see com.realtek.driver.AppleRTL815XEthernet
loaded.
# Unload
sudo kextunload /Library/Extensions/AppleRTL815XEthernet109.kext
sudo kextunload /Library/Extensions/AppleRTL815XComposite109.kext
# Load
sudo kextload /Library/Extensions/AppleRTL815XEthernet109.kext
sudo kextload /Library/Extensions/AppleRTL815XComposite109.kext
# Find if loaded
kextstat | grep com.realtek.driver.AppleRTL815XEthernet
kextstat | grep com.realtek.driver.AppleRTL815XComposite
Perhaps clear the Kernel cache
sudo rm -rf /System/Library/Caches/com.apple.kext.caches
I got a new USB ethernet adapter because the old one had lots of issues (hence the gist in the first place). But it still uses the same Realtek 8153 chip although am using the native driver though now, AppleUSBECM.kext
In terms of my previous issues, I remember that when I clicked the little lock in the browser to view the cert, it would crash my computer. But the disconnects that required a restart were the bigger issue. (personal reference link)
I'm currently running macOS Mojave 10.14
USB CDC NCM (and ECM & EEM) are protocols.
They're meant to be plug and play.
The USB device (the USB ethernet dongle) reports itself as being a USB CDC NCM capable device, and the OS provided NCM driver just works.
If both the device (whatever it may be) and the OS implement the protocol correctly that's it - things just work.
Similar to how you plug in a USB keyboard or USB mouse and it just works.
(normal USB keyboards/mice/joysticks all use USB HID protocol)
USB HID does actually require a driver - it's just that all modern OSes have one built-in.
Now, technically you could build a USB keyboard/mice/joystick that doesn't report itself as a HID device, and requires an extra driver, but why would you ever want to subject yourself to the pain of installing drivers in your OS (and your BIOS for the BIOS setup screen)?
So, of course, no keyboard/... manufacturer does that. It would be suicide.
(note: there are most likely some manufacturer specific extensions to support things like programming a gaming mouse's extra buttons, or led lighting - that may need an extra driver/program)
The device side of the NCM spec is something basically implemented inside of the (firmware of the) usb/ethernet chip.
Now, technically it could be outside of the ethernet chip, but solutions minimize the number of programmable chips to cut costs...
so (for usb ethernet dongles) you (will basically always) end up with just the main chip...
AFAIK the USB ethernet 2.5/5gbps dongle market is covered by 3 chips (and their revisions) from Realtek (2.5gbps) and Aquantia (2.5gbps, 5gbps). I'm hearing rumours there may also be some ASIX chip - I've yet to run into one, in spite of having dozens of 2.5+ gbps usb ethernet dongles.
Also worth mentioning: Standard 5gbps USB is really only 4Gbps capable (20% loss due to use of 8b10b coding). 10Gbps USB is actually capable of 9.6969Gbps (much more efficient 128b132b coding). However, I'm not (yet) aware of any USB 10gbps capable usb ethernet chips, so in practice any 'USB 5Gbps ethernet dongle' is limitted to the 4Gbps speed of the USB connection. Add in some extra required/unavoidable USB protocol framing overhead, and it's more like 3.6 Gbps tops. Combined with the 5Gbps stuff requiring much more power and running hot, and you're usually better off just sticking with the 2.5Gbps stuff - at least until proper "SuperSpeed USB 10Gbps" capable usb ethernet chips materlize. See the table on https://en.wikipedia.org/wiki/USB_3.0 for the gory details.
This [using a single chip] is not the case if you're connecting something 'big' / 'complex' - like tethering over USB off of a Pixel 6+ - in which case the 'device side' is the phone, and the device (a.k.a. gadget) side of the NCM protocol is actually implemented by the phone's Linux kernel's ncm gadget driver.
NCM is a much better protocol than ECM/EEM (and I can't remember which of those two is better),
but it still doesn't provide real hardware offload.
This is why you'll often find custom drivers for something that works just fine as NCM/ECM/EEM.
Many USB devices (really read: usb ethernet chips, or their firmware) will actually implement multiple alternative USB configurations.
The client side (ie. your OS) is free to choose any one of them.
For example you could have a device with:
Normally (assuming the driver is good) you'll get best performance (higher throughput, more functionality, lower cpu use) with the native driver - as this will support all functionality and offloads. Similarly NCM will win over ECM/EEM because it supports better USB framing and more aggregation (even though it doesn't support trivial things like checksum offload or more advanced things like tso/lro).