JoshuaWise.com

HoRNDIS: USB tethering driver for Mac OS X


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
horndis [2017/05/03 05:16]
joshuawise
horndis [2018/09/05 17:54] (current)
joshuawise [Available versions]
Line 1: Line 1:
 ====== HoRNDIS: USB tethering driver for Mac OS X ====== ====== HoRNDIS: USB tethering driver for Mac OS X ======
  
-//HoRNDIS is looking for a new maintainer!  If you would like to volunteer, [[#volunteer|see below]].//+//HoRNDIS is now maintained by [[http://github.com/mikhailai|Mikhail Iakhiaev]], and this page is in a state of transition -- keep your eyes peeled for updates soon ...//
  
-**HoRNDIS** (pronounce: //"horrendous"//) is a driver for Mac OS X that allows you to use your Android phone's native [[http://en.wikipedia.org/wiki/Tethering|USB tethering]] mode to get Internet access.  It is known to work with Mac OS X versions 10.6.8 (Snow Leopard) through 10.12 (Yosemite -- see [[#mavericks|notes below]]), and has been tested on a wide variety of phones.  Although you should be careful with all drivers that you install on your computer, HoRNDIS has been tested at least well enough for the author (and many others) to run full time on their own personal computers.+**HoRNDIS** (pronounce: //"horrendous"//) is a driver for Mac OS X that allows you to use your Android phone's native [[http://en.wikipedia.org/wiki/Tethering|USB tethering]] mode to get Internet access.  It is known to work with Mac OS X versions 10.6.8 (Snow Leopard) through 10.14 (Mojave -- see [[#mavericks|notes below]]), and has been tested on a wide variety of phones.  Although you should be careful with all drivers that you install on your computer, HoRNDIS has been tested at least well enough for the author (and many others) to run full time on their own personal computers.
  
 HoRNDIS is implemented as a kext, rather than as a user-space program that opens a TAP or TUN device; this means that it does not conflict with other TAP/TUN kexts that you might have installed (like OpenVPN, Tunnelblick, or Cisco VPN).  The driver implements Microsoft's [[http://en.wikipedia.org/wiki/RNDIS|proprietary RNDIS protocol]], which is the only protocol supported natively by Android devices; although Linux and Windows users have enjoyed native RNDIS drivers for years, Mac OS X supports only [[http://www.linux-usb.org/usbnet/|CDC Ethernet]] devices out of the box.((You might ask -- if CDC is the standard way to act like a network device over USB, why did Google choose the Microsoft proprietary way?  Sadly, it turns out to have been something of a compromise; in Windows XP, CDC Ethernet devices were not supported, and in the choice between XP users and Mac users, we got the short end of the stick.)) HoRNDIS is implemented as a kext, rather than as a user-space program that opens a TAP or TUN device; this means that it does not conflict with other TAP/TUN kexts that you might have installed (like OpenVPN, Tunnelblick, or Cisco VPN).  The driver implements Microsoft's [[http://en.wikipedia.org/wiki/RNDIS|proprietary RNDIS protocol]], which is the only protocol supported natively by Android devices; although Linux and Windows users have enjoyed native RNDIS drivers for years, Mac OS X supports only [[http://www.linux-usb.org/usbnet/|CDC Ethernet]] devices out of the box.((You might ask -- if CDC is the standard way to act like a network device over USB, why did Google choose the Microsoft proprietary way?  Sadly, it turns out to have been something of a compromise; in Windows XP, CDC Ethernet devices were not supported, and in the choice between XP users and Mac users, we got the short end of the stick.))
Line 9: Line 9:
 The chief advantage of HoRNDIS over other tethering solutions is that it uses the a first-class supported feature in the phone's firmware.  Other solutions either take over the phone's Wi-Fi stack without the Android operating system's knowledge, or create an emulation IP stack in userspace on the phone; in many cases, the built-in USB tethering support can be more stable, more reliable, and faster.((Of course, the downside to using a tethering solution with first-class support is that the phone itself must support USB tethering, and it may need to be explicitly permitted by your carrier.  Consult [[http://www.xda-developers.com|your nearest phone hacking forum]] for instructions on how to bypass such limitations, as needed.)) The chief advantage of HoRNDIS over other tethering solutions is that it uses the a first-class supported feature in the phone's firmware.  Other solutions either take over the phone's Wi-Fi stack without the Android operating system's knowledge, or create an emulation IP stack in userspace on the phone; in many cases, the built-in USB tethering support can be more stable, more reliable, and faster.((Of course, the downside to using a tethering solution with first-class support is that the phone itself must support USB tethering, and it may need to be explicitly permitted by your carrier.  Consult [[http://www.xda-developers.com|your nearest phone hacking forum]] for instructions on how to bypass such limitations, as needed.))
  
-//This page is also available in Russian: [[http://softdroid.net/drayver-usb-modema-mac-os-x|HoRNDIS: драйвер USB-модема для Mac OS X]].  Thank you to Vlad Brownfor his effort in translating it!//+//This page is also available in Russian: [[http://softdroid.net/drayver-usb-modema-mac-os-x|HoRNDIS: драйвер USB-модема для Mac OS X]].  My thanks to Vlad Brown for his effort in translation!//
  
 ===== Downloading and installing HoRNDIS ===== ===== Downloading and installing HoRNDIS =====
 {{ http://joshuawise.com/horndis-screenshot.png?400|}} {{ http://joshuawise.com/horndis-screenshot.png?400|}}
 HoRNDIS is available in source form from its [[http://www.github.com/jwise/horndis|project page on GitHub]], and in binary form [[#available_versions|on this site]].  For quick start instructions: HoRNDIS is available in source form from its [[http://www.github.com/jwise/horndis|project page on GitHub]], and in binary form [[#available_versions|on this site]].  For quick start instructions:
-  * Download [[#available_versions|the latest binary package]], and double-click on it in your Downloads folder.  Follow the instructions in the installer.+  * Download [[#available_versions|the appropriate binary package]], and double-click on it in your Downloads folder.  Follow the instructions in the installer.
   * Assuming that the installation proceeds without errors, after it completes, connect your phone to your Mac by USB.   * Assuming that the installation proceeds without errors, after it completes, connect your phone to your Mac by USB.
   * Enter the settings menu on your phone.   * Enter the settings menu on your phone.
Line 25: Line 25:
 ==== Available versions ==== ==== Available versions ====
  
-  * The latest version available is **release 8**: [[http://joshuawise.com/downloads/HoRNDIS-rel8.pkg|HoRNDIS-rel8.pkg (78985 bytes)]] (md5sum ''8991552bd384a06b7ec775f7198f7bba''; [[http://joshuawise.com/downloads/HoRNDIS-rel8.pkg.sig|GPG signature]]).  Adds support for OS X 10.11 (El Capitan) and 10.12 (Sierra).  Thanks also to [[http://github.com/d235j|David Ryskalczyk]] for his help in wrestling Xcode.+  * The latest version available is **9.2**: [[http://joshuawise.com/downloads/HoRNDIS-9.2.pkg|HoRNDIS-9.2.pkg (46919 bytes)]] (md5sum ''8207800ef89dc1bb0cca530e4ef39009''; [[http://joshuawise.com/downloads/HoRNDIS-9.2.pkg.sig|GPG signature]]).  Improves support for devices including Nokia 7 Plus  This release was developed by [[http://github.com/mikhailai|Mikhail Iakhiaev]], who is the current maintainer of HoRNDIS **This version only supports MacOS 10.11 and up.**
   * Older versions:   * Older versions:
 +    * **Release 9.1**: [[http://joshuawise.com/downloads/HoRNDIS-9.1.pkg|HoRNDIS-9.1.pkg (46924 bytes)]] (md5sum ''a444af529261f4f611986b268d7f9fb7''; [[http://joshuawise.com/downloads/HoRNDIS-9.1.pkg.sig|GPG signature]]).  Improves support for devices including Galaxy S7 Edge and BeagleBone, and fixes some suspend- / resume-related bugs.   This release was developed by [[http://github.com/mikhailai|Mikhail Iakhiaev]], who is the current maintainer of HoRNDIS.
 +    * **Release 9.0**: [[http://joshuawise.com/downloads/HoRNDIS-9.0.pkg|HoRNDIS-9.0.pkg (42820 bytes)]] (md5sum ''8d8e2bc421520b8a264c9962ef3dbbd3''; [[http://joshuawise.com/downloads/HoRNDIS-9.0.pkg.sig|GPG signature]]).  Converts HoRNDIS core code to use more modern MacOS USB interfaces, for improved reliability on newer versions of MacOS.   This release was developed by [[http://github.com/mikhailai|Mikhail Iakhiaev]], who is the current maintainer of HoRNDIS.
 +    *  **Release 8**: [[http://joshuawise.com/downloads/HoRNDIS-rel8.pkg|HoRNDIS-rel8.pkg (78985 bytes)]] (md5sum ''8991552bd384a06b7ec775f7198f7bba''; [[http://joshuawise.com/downloads/HoRNDIS-rel8.pkg.sig|GPG signature]]).  Adds support for OS X 10.11 (El Capitan) and 10.12 (Sierra).  Thanks also to [[http://github.com/d235j|David Ryskalczyk]] for his help in wrestling Xcode.  **This is the newest version that supports OS X 10.10.**
     * **Release 7**: [[http://joshuawise.com/downloads/HoRNDIS-rel7.pkg|HoRNDIS-rel7.pkg (116491 bytes)]] (md5sum ''45a1a7457966b1dc79897af2864f68e4''; [[http://joshuawise.com/downloads/HoRNDIS-rel7.pkg.sig|GPG signature]]).  Adds support for OS X 10.10 (Yosemite).  Fixes issue where unsigned kext would not be installed (restoring support for OS X 10.6 - 10.8).  Thanks also to [[http://github.com/d235j|David Ryskalczyk]] for his help in tracking down the issues with 10.10.     * **Release 7**: [[http://joshuawise.com/downloads/HoRNDIS-rel7.pkg|HoRNDIS-rel7.pkg (116491 bytes)]] (md5sum ''45a1a7457966b1dc79897af2864f68e4''; [[http://joshuawise.com/downloads/HoRNDIS-rel7.pkg.sig|GPG signature]]).  Adds support for OS X 10.10 (Yosemite).  Fixes issue where unsigned kext would not be installed (restoring support for OS X 10.6 - 10.8).  Thanks also to [[http://github.com/d235j|David Ryskalczyk]] for his help in tracking down the issues with 10.10.
     * **Release 6**: [[http://joshuawise.com/downloads/HoRNDIS-rel6.pkg|HoRNDIS-rel6.pkg (116473 bytes)]] (md5sum ''fe3e5ae4c0a509b06cf11ef65b1715da''; [[http://joshuawise.com/downloads/HoRNDIS-rel6.pkg.sig|GPG signature]]).  Adds support for multicast mode, enabling mDNS (thanks to Dan Yocom at Intel).  Adds code signing support in Installer and for kext.     * **Release 6**: [[http://joshuawise.com/downloads/HoRNDIS-rel6.pkg|HoRNDIS-rel6.pkg (116473 bytes)]] (md5sum ''fe3e5ae4c0a509b06cf11ef65b1715da''; [[http://joshuawise.com/downloads/HoRNDIS-rel6.pkg.sig|GPG signature]]).  Adds support for multicast mode, enabling mDNS (thanks to Dan Yocom at Intel).  Adds code signing support in Installer and for kext.
Line 33: Line 36:
     * **Release 3**: [[http://joshuawise.com/downloads/HoRNDIS-rel3.pkg|HoRNDIS-rel3.pkg (60488 bytes)]] (md5sum ''a46960e3cdb2a046e08af00c766b6ff9''; [[http://joshuawise.com/downloads/HoRNDIS-rel3.pkg.sig|GPG signature]]).  Fixes issue #3 (reenabling installation on 32-bit machines).  Adds potential fix for issue #5.     * **Release 3**: [[http://joshuawise.com/downloads/HoRNDIS-rel3.pkg|HoRNDIS-rel3.pkg (60488 bytes)]] (md5sum ''a46960e3cdb2a046e08af00c766b6ff9''; [[http://joshuawise.com/downloads/HoRNDIS-rel3.pkg.sig|GPG signature]]).  Fixes issue #3 (reenabling installation on 32-bit machines).  Adds potential fix for issue #5.
     * **Release 2**: [[http://joshuawise.com/downloads/HoRNDIS-rel2.pkg|HoRNDIS-rel2.pkg (60843 bytes)]] (md5sum ''8b2c371e78ccfe3b07750fbe07f55bb5''; [[http://joshuawise.com/downloads/HoRNDIS-rel2.pkg.sig|GPG signature]]).  Disables installation on 32-bit machines, and includes new device support.     * **Release 2**: [[http://joshuawise.com/downloads/HoRNDIS-rel2.pkg|HoRNDIS-rel2.pkg (60843 bytes)]] (md5sum ''8b2c371e78ccfe3b07750fbe07f55bb5''; [[http://joshuawise.com/downloads/HoRNDIS-rel2.pkg.sig|GPG signature]]).  Disables installation on 32-bit machines, and includes new device support.
-    * **Release 1**: [[http://joshuawise.com/downloads/HoRNDIS-re11.pkg|HoRNDIS-rel1.pkg (38681 bytes)]] (md5sum ''4169c222448e2a2caaa067caf84189d3''; [[http://joshuawise.com/downloads/HoRNDIS-rel1.pkg.sig|GPG signature]]).  Fixes issue #2. +    * **Release 1**: [[http://joshuawise.com/downloads/HoRNDIS-rel1.pkg|HoRNDIS-rel1.pkg (38681 bytes)]] (md5sum ''4169c222448e2a2caaa067caf84189d3''; [[http://joshuawise.com/downloads/HoRNDIS-rel1.pkg.sig|GPG signature]]).  Fixes issue #2. 
-    * **Release 0**: [[http://joshuawise.com/downloads/HoRNDIS-re10.pkg|HoRNDIS-rel0.pkg (36807 bytes)]] (md5sum ''be4e879198d3b6e52af993b008198e8e''; [[http://joshuawise.com/downloads/HoRNDIS-rel0.pkg.sig|GPG signature]]).  Initial release.+    * **Release 0**: [[http://joshuawise.com/downloads/HoRNDIS-rel0.pkg|HoRNDIS-rel0.pkg (36807 bytes)]] (md5sum ''be4e879198d3b6e52af993b008198e8e''; [[http://joshuawise.com/downloads/HoRNDIS-rel0.pkg.sig|GPG signature]]).  Initial release.
  
 <html><a name="64bit"></a></html> <html><a name="64bit"></a></html>
Line 46: Line 49:
 OS X 10.9 (Mavericks) and 10.10 (Yosemite) are supported by HoRNDIS, but there are some gotchas.  If you upgraded from an earlier version of OS X, you may find that phones appear to be replicating with abandon in your network control panel.  If this happens to you, one somewhat heavy-handed workaround is to clean your network configuration files -- take a backup of ''/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist'' and ''/Library/Preferences/SystemConfiguration/preferences.plist'', and then either move them out of the way or delete them.  (Note that this will remove any custom network configuration that you have performed!)  I am still not sure what causes this problem, and so I do not yet have a workaround with finer granularity. OS X 10.9 (Mavericks) and 10.10 (Yosemite) are supported by HoRNDIS, but there are some gotchas.  If you upgraded from an earlier version of OS X, you may find that phones appear to be replicating with abandon in your network control panel.  If this happens to you, one somewhat heavy-handed workaround is to clean your network configuration files -- take a backup of ''/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist'' and ''/Library/Preferences/SystemConfiguration/preferences.plist'', and then either move them out of the way or delete them.  (Note that this will remove any custom network configuration that you have performed!)  I am still not sure what causes this problem, and so I do not yet have a workaround with finer granularity.
  
-Versions of Mac OS X 10.11 and newer have a [[https://www.jwz.org/doc/cadt.html|rewritten USB stack that is substantially less compatible]] than that in 10.10 and below.  Unfortunately, Apple have not published any documentation for the new-style USB interfaces exposed in 10.11, so HoRNDIS can only use the USB APIs available in 10.10 and belowwhich have been broken in newer versions of OS X.  As suchnewer versions of OS X may have difficulty connecting to certain devices.+Versions of Mac OS X 10.11 and newer have a [[https://www.jwz.org/doc/cadt.html|rewritten USB stack that is substantially less compatible]] than that in 10.10 and below.  HoRNDIS 9.0 has been rewritten to support MacOS 10.11 and above (El CapitanSierra, High Sierra, and Mojave); for those versions of MacOSplease try the latest version of HoRNDIS!  The latest version of HoRNDIS that supports older versions of MacOS (Yosemite and below) is HoRNDIS rel8
  
 ==== Uninstalling ==== ==== Uninstalling ====
Line 62: Line 65:
  
 Thanks also to those who helped test HoRNDIS before I released it, as well as all of the other folks from the days of the unrEVOked project, without whom I would likely not be involved in Android development at all... Thanks also to those who helped test HoRNDIS before I released it, as well as all of the other folks from the days of the unrEVOked project, without whom I would likely not be involved in Android development at all...
 +
 +Finally, thanks to [[http://github.com/mikhailai|Mikhail Iakhiaev]], who is the current maintainer of HoRNDIS, and who did the hard work of porting HoRNDIS to the new USB APIs in the latest versions of MacOS.
  
 <html><a name="volunteer"></a></html> <html><a name="volunteer"></a></html>
 ===== Support and contact ===== ===== Support and contact =====
- 
-And, after a tenure of three years, I am looking for a new maintainer for HoRNDIS.  I no longer have the time to keep HoRNDIS up to date the way it deserves.  If you believe that you have the skills to take on maintainership of this software, please let me know, or post in [[https://github.com/jwise/HoRNDIS/issues/58|this GitHub issue]]. 
  
 Being free software, HoRNDIS comes with no warranty (not even a guarantee that it won't break your phone or computer!  But I'm pretty sure it won't.), express or implied.  (For more on that, read [[http://www.gnu.org/licenses/gpl.html|the license]].)  However, I hope that it works for you; if it doesn't, and you're able to assist in debugging, I'd like to hear from you. Being free software, HoRNDIS comes with no warranty (not even a guarantee that it won't break your phone or computer!  But I'm pretty sure it won't.), express or implied.  (For more on that, read [[http://www.gnu.org/licenses/gpl.html|the license]].)  However, I hope that it works for you; if it doesn't, and you're able to assist in debugging, I'd like to hear from you.
  
-So, for feedback, feel free to [[contact|get in touch with me]]; especially if it works for you, or makes your life easier, I'd like to hear about it!+So, for feedback, feel free to [[contact|get in touch with me]], or HoRNDIS's current maintainer, [[http://github.com/mikhailai|Mikhail Iakhiaev]]; especially if it works for you, or makes your life easier, I'd like to hear about it!
  
 ~~DISQUS~~ ~~DISQUS~~