Hi guys,
I've been working on this driver for quite a long time and managed to make my device (Centrino N-130) catch beacon frames, displaying SSID of network where this beacon comes from.
Source code is here:
https://github.com/rpeshkov/IntelWifi
Topic starter was working on MVM-based cards, but since mine card is quite old and DVM-based, I've been developing for DVM-based cards.
Regarding DVM what's currently done:
- Full firmware parsing
- EEPROM reads/writes
- RX partially
- TX partially
With this things done, my card gets fully initialized and able to receive frames from outside.
Now, the sad part: I'm stuck with this project. Even if I port whole of the driver this won't make the magic happen, because I need to wire it together with OS network stack (IEEE 802.11), which is closed in MacOS. Just to clarify: all things related to encryption/decryption, wireless network association and many other stuff are in network stack, not in the driver.
Basically, there are 2 options on how to proceed:
- Port IEEE 802.11 stack from BSD system, since it's the closest stack for MacOS (MacOS networking is built on BSD stack with some changes).
- Disassemble IO80211Family.kext and try to reverse-engineer MacOS IEEE 802.11 headers.
Option 2 is better, because it will be possible to use everything that the MacOS has for working with WiFi: widget on top, settings, etc. I've tried to reverse-engineer those headers aggregating everything that was done in Voodoo80211 project, old open-sourced headers for IEEE 802.11 from Apple and Hopper disassembler. I was able to build the kext that at least is able to launch, but it crashes right after the launch stating about pure virtual call.
Option 1 is quite hard and doesn't give tight integration with the system. You'll need to write custom utilities for displaying network lists, signal strength, choosing which network you want to connect to, entering WEP/WPA/WPA2 keys and so on.
Currently I'm not working on this project, waiting for enthusiasm to come back
If someone is aware of writing drivers, wants to help, etc., please write me, maybe together we will be able to finish this
P.S. Code in repository is a bit messy. Sorry for that. That's my first huge project on C/C++ and driver development. In my job I mostly work with C# + TypeScript and developing enterprise systems
.