Boggles my mind how Asus cannot fix networkmap .........
The new RT-AX88U firmware claims to have fixed it. We'll know for sure once that fix trickles down various GPL releases I guess...
Some backstory on networkmap:
The original implementation was written in the early days of Asus's routers - the code was just as badly written as infosvr. When I began working on Asuswrt-Merlin, I fixed a LOT of bugs in it:
- Buffer overruns causing the router to crash if you had a WDTV, or a Windows Home Server on your LAN
- More and more buffer overruns all over the place, no string boundary checks on data obtained through UPNP/SMB/Netbios/etc...
- Failure to scan anything because it was starting too early at boot time
At one point it seems Asus decided they didn't even feel like tracking down all those issues, and one firmware release I saw that they had simply replaced their networkmap code with mine (it included some code they didn't use, which is how I know they just copied the files from my repo). By then, networkmap worked fairly well.
Then in the late 380 days, they started rewriting the httpd/networkmap sharing by storing data into json structures. The networkmap code on the httpd (and webui side) became MUCH more complicated to follow.
And then came the 382 release.
- Networkmap got tied to the Trend Micro DPI engine (to better identify clients)
- Networkmap got tied to the Broadcom wireless code, to retrieve info such as link rates
- And because of these two, networkmap then became closed source.
Since then, networkmap stability/reliability has gone downhill, after having started to regain some semblance of reliability...
If that whole httpd-related backend wasn't so damn complicated, I would have reconsidered maybe reverting back to my old code, and building on top of it. But adapting it to the new data structure (and all this info it now retrieves from DPI/BCM and which I have no idea how to access) pretty much closed down that door.
Why a simple network mapping daemon has to be a) so complicated, and b) so unreliable is beyond me. It used to be horribly unstable, then it got better. Then a whole layer of bloat/features (based on your point of view) got added to it, and it's once again unreliable.
And we haven't mentioned the fact that it's hardcoded to only handle a /24 network.
In my personal opinion, having a fairly global understanding of the code in general (and only a very good understanding of some very specific areas of the code), Asuswrt has become unmanageable. Large portions of the code need to be thrown away, and rewritten from scratch. More specifically:
- The wanduck daemon (it needs to be taken behind the shed, and shot in the head. Twice.)
- The watchdog (lots of that stuff should be rewritten as cron events, and only a few select events kept in a constantly running watchdog)
- networkmap
- Portions of httpd (a few weeks ago I spent two days devoted to tracking down how settings were applied after a user clicked on Apply, as I was trying to track down the issues about those OpenVPN key/certs ending up in nvram in addition to jffs - let's just say it was a maze to follow)
The event notification system (rc_notify) could also see some redesign. Right now the system is a two-slot queue. If an event is underway while a second is sent, that second is queued for a limited amount of time. Send a third one, and it gets lost. This needs to be redesigned in a FIFO queue, not just that two-slot queue.
On the webui front:
- The webui needs a pass at consistency. Some things are presented as pages (the USB page), others as tabs (most pages), other as dropdown items (the QoS page), others as buttons (the OpenVPN pages)...
- All lists (DHCP, Port Forward, etc...) should be redone as editable tables. Looks to me like that was the idea behind their Table module, but it never got fully realized. Recently they redid the port forwarding page, which is a great improvement.
- All the System Log pages need to be redesigned as actual webpage, not just textareas with unformatted text. (this is what I have done with my firmware, redesigning each System Log pages one after another)
- A lot of obsolete code needs to be dropped (all the old DrAsus code that dates back to the 1.xx "Blue Webui"). The DDNS page still uses Alert() calls to notify you about the DDNS status instead of embedding it in the webui like everything else (that's something I'd like to take care of myself with 384.11)
Part of the problem is that's a LOT of thing to do, none of which actually sell routers, compared to all the ROG eye candy, or IFTTT support. As a business, it's probably hard to justify investing a whole team of engineers to doing these.
And on top of this all, it doesn't make things easy that they have to support so many VERY different products with the same Asuswrt codebase. So when you change something for one model, who knows what effect it will have on every other models. Or, they have to embed a bunch of conditional sections to handle some things differently depending on the router model.