Todays work
Many more of Sven-Ola Tückes's patches. And I localized the netlink variant of the code in src/kernel_routes.c.
B.A.T.M.A.N. vs OLSR
Showdown between B.A.T.M.A.N. and OLSR!
At the wireless community weekend in Graz we are testing B.A.T.M.A.N. and OLSR in a 20 node mesh in parallel.
The result of the tests are that comparisons are very hard to make . Axel is still finding out how to add approx. 20 more virtual nodes to the test mesh. The problem is that both olsrd-0.5.4rc1 and batman as well as batman experimental both use very little CPU in the small 20 node mesh. Something like 0.3%. So... not much to compare unfortunately.
Since I have to leave now we had the following idea how to continue...
1. We will search for test users. Around 50 should be the minimum
2. We will ask these people to install our ssh key
3. We will install batman experimental and olsrd-0.5.4 and collect routing data
4. We will evaluate this routing data and metrik data and therefore we will be able to compare better and make further improvements.
5. The test users will then remove the ssh key again
B.A.T.M.A.N. vs OLSR
Showdown between B.A.T.M.A.N. and OLSR!
At the wireless community weekend in Graz we are testing B.A.T.M.A.N. and OLSR in a 20 node mesh in parallel.
Routingtable Handling Improved
Another big step on the sped improvement front. Hannes Gredler <
hannes@gredler.at> pretty much rewrote the routing table handling. To quote him:
---- snip ----
change list:- get rid of separate routing tables for HNA and per-node routes, everything is now unified in an AVL routing tree (&routingtree)
- introduce walking macros (OLSR_FOR_ALL_RT_ENTRIES()) that hide the internal structure of the RIB for making life of the plugin authors easier.
- get rid of different SPF implementations for LQ and non-LQ code paths. a non-LQ edge is simply substituted with a cost of 1.0
- get rid of host masks - a new data type olsr_prefix is introduced which is basically an ip address plus a prefix length.
do not install the metric in the kernel FIB - for the kernel its pointless if the route gets installed with a metric of N or M.
we do not need to update the kernel FIB if we have hop count only changes (for example if there is a reroute action further downstream)
the only things which triggers a kernel FIB route update is a next hop change (a next hop is neighboring gateway router plus an interface).
all OLSR routes are installed with a metric of 2
- separate between rt_entry and rt_path - the former is a route installed in the kernel with an next hop. the latter is a candidate for best path selection after SPF calculation has been done. in the rt_entry we keep a pointer to the best_path and also to the next hop that was installed in the kernel FIB.
we always keep all originator of a route, if a route originator goes away we can easy recompute the best path for the route.
the next hop in the rt_entry gets only updated upon a successful route_add call - that way we always remember what next hop to delete.
stray routes should be history now.
- tweak the linked list toolkit to operate on circular lists.
- get rid of malloc calls for building the kernel update list. the list node is now embedded in the rt_entry.
- introduce three queues (add/chg/del) for kernel updates.
- for neighbor route dependency tracking the neighbor routes are queued first or last (depending on which queue you work on)
- rework all the plugins which directly manipulate rt entries.
- rework the plugins that read from the routing table (most notably nameserver, httpinfo and quagga plugin)
- lots of comments that explains the intentions and purpose of this code-piece.
non RT related stuff:- use a list rather than a tree for storing the post-SPF results, which further improves the raw-SPF runtime.
- add display of SPF runtime (masked behind #ifdef SPF_PROFILING)
---- snip ----
And Sven-Ola Tuecke tested the beast, found and fixed an instability issue on interface up/down operations (which was referred to as http://download-master.berlin.freifunk.net/sven-ola/nylon/packages/olsrd/files/102-olsrd-rt-refactoring-fixes.patch).
For those who want to see the exact differnece, I tagged the CVS with BEFORE_RT_REFACTORING and AFTER_RT_REFACTORING.