-
Notifications
You must be signed in to change notification settings - Fork 35
/
HISTORY_pre_framework
1810 lines (1351 loc) · 68.2 KB
/
HISTORY_pre_framework
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
This file states changes as of version 0.2.4:
0.6.2 --------------------------------------------------------------------
Bugfix release for 0.6.1
- Compatibility for Linux kernel 3.x
- Lots of small fixes
- reworked makefile output
- updates for some plugins
- repair for Smartgateway feature
Read GIT changelog at http://olsr.org/git to see a complete history.
0.6.1 --------------------------------------------------------------------
Bugfix release for 0.6.0
Markus Kittenberger <[email protected]>
- Major bugfix for the neighbor table when a neighbor gets a new main IP.
- add /interface command to txtinfo, allow multiple commands per request
Henning Rogge <[email protected]>
- wait up to four seconds for aquiring the OLSRd lock. This helps to
shutdown OLSRd with a script and restart it at once (kill <pid> is
asynchrone, and kill -w is not available in busybox)
- add md5 has of all source/headers into version string
Mitar<[email protected]>
- lot's of small changes for Android. Slowly Android gets a fully
supported platform for OLSRd.
and a lot more small bugfixes. Read GIT changelog at http://olsr.org/git
to see a complete history.
0.6.0 --------------------------------------------------------------------
Change in version number system. No more -rcX for release candidates and
-rX for bugfix releases. In future bugfix releases or updates of plugins
will increase the third digit of the version string while feature releases
will increase the first and/or the second one.
Markus Kittenberger <[email protected]>
Henning Rogge <[email protected]>
- added NIIT kernel module support for sending IPv4 traffic over
IPv6 mesh networks. See README-Olsr-Extensions for more information.
- added SmartGateway support. OLSRd can now automatically build
IPIP tunnels towards the gateway to prevent gateway flapping.
See README-Olsr-Extensions for more information.
- complete rewrite of linux netlink routing code. New code should be
more understandable and easier to debug/improve.
Teco Boots <[email protected]>
- new dyngw plugin. More flexible and more features.
- new p2pd plugin (generalized mdns plugin)
Vasilis Tsiligiannis <[email protected]>
- new version of quagga plugin (with IPv6 support !)
Sven-Ola Tuecke <[email protected]>
- fixes for improved uClibc support
- fixes for better linux kernel 2.4 support
Saverio Proto <[email protected]>
- new mdns plugin. (backport from master branch)
Eric Tromps <[email protected]>
- new version of bmf plugin. NO pthreads are necessary anymore
and a lot more small bugfixes. Read GIT changelog at http://olsr.org/git
to see a complete history.
0.5.6-r8 ---------------------------------------------------------------------
Alina Friedrichsen <[email protected]>
- patch for using deticated output socket for OLSR packages. This allows
to set the src-ip of OLSR packages, which is useful for interfaces
with multiple IPs
Bruce Ford <[email protected]>
- fixes for compiling olsrd for win32
Henning Rogge <[email protected]>
- fix for memoryleak during MID processing
- patch series for "network logoff" of OLSRd, other nodes now get
notified if an OLSR node switch down to remove it from their database.
- cleanup of naming conventions for settings src/dst-ips of OLSR-packets
for ipv4/6. See example config files.
- patch to ignore HNA4 for IPv6 and HNA6 for IPv4
Markus Kittenberger <[email protected]>
- patch series for MID handling cleanup
- compiletime switch for txtinfo to always allow localhost access
- add "InterfaceDefaults" section to config files to allow setting values
which are shared by all interfaces but can be overwritten in specific
config file settings
- patch series to allow OLSRd handle multiple config files
(multiple "-f <cfgfile>" options)
0.5.6 ---------------------------------------------------------------------
PATCHES and BUGFIXES from Henning Rogge <[email protected]>
- Bugfix for fragmented TC sequence numbers
- eliminate second timer for edge garbage collection (aka border code).
- fix SPF bug
- fix for jitter calculation
- refactor linkset code
- add netsimpcap, a network simulation device
- parser refactoring
- fix for possible overflow in fpm plugin
- prevent Originator-IP from changing during runtime
- fix several compiler warnings
- fix hanging TC entry from lost onehop neighbor
- fix drop package with same seqno in etx_ff
- fix segfault in parsing HNA package with bad netmask
- fix avl_comparator for route_paths
- fix alignment problem in packet buffers
- fix: segfault in neighbor/neighbor-2 table
- fix: lqmult default parsing
- HACK: MinTCVTime parameter hack for Berlin FF network...
feel free to ask on the mailing list.
- add Watchdog plugin
- add explicit runtime lock for OLSR.
- remove lq-hysteresis for tc on the receiver side.
- enhance protection against malformed packages to prevent
OLSR parsing uninitialized data. Thank you Markus and Keks for the LONG
debugging session
- block tc-redundancy 0/1, it doesn't work with the current dijkstra code
- convert httpinfo/txtinfo/dotdraw to nonblocking and autobuf to
prevent blocking outgoing connections
- fix some bugs with lq-mult
- fix bug in duplicate set sequencenumber handling
- add Debian/KFreeBSD support (Thanks to Holger Levsen and friends for help)
- fix segfault in 'interface lost' monitor
- add LQ hysteresis to etx-ff metric
PATCH from Markus Kittenberger <[email protected]>:
- txtinfo plugin: add more http options
- allow configuration of OLSR UDP port
- allow configuration of proto Tag for Routes (RtProto)
- add fallback policy rule (priority 65536) if RtTable is used,
to ensure that routes can be added to this table
- resolve many error conditions while adding routes to the linux kernel
(Warning this will also delete any conflicting routes made by other routing daemons or admins)
- interface modes mesh (default) and ether (no retransmit of olsr-messages back into a broadcastdomain)
- fix olsr_times() to handle different OS implementations (Linux, BSD, OS X)
- fix several compiler warnings
- fix olsr_times() to handle different OS implementations (Linux, BSD, OS X)
- create policy rule later during startup
- send MID also with one interface, if its ip different from originator-id
- linux rtnetlink code cleanup
- workaround: generate routes to single hop neighbours on the fly when inserting routes via them
(active only with fib_metric=flat)
- testing: insert routes with source-ip set to originator ip
- testing: syslog numbering (e.g. useful to detect lost syslog messages when using remote-syslog)
- testing: custom library path (default /usr/testlib)
Testing features must be activated in olsr_cfg.h before compiling olsrd.
This features are used to run a test network in Vienna parallel to the existing
OLSR network.
- more RT-Netlink cleanups and fixes
- backport of timejump patch from TIP
- Add detection for vanishing interfaces to Linux netlink code
- fix incorret route sorting on new neighbours. use only delete and add/change avl tree,
instead of 3 trees
- learn neighbours interface alias adress from received hellos
PATCHES from Hannes Gredler <[email protected]>:
- add small valgrind howto
- remove the per tc_edge timer
- add some basic infrastructure for cookies
cookies are used to track usage of timer and memory resources
- add a lightweight memory manager to reduce malloc() churn.
- eliminate data field from avl_node and list_node and
replace this via inline recasts
- add indentation dotfile for future code cleanup
- refactor the timer implementation, get rid of timeout functions
all manipulations done in constant time.
- use calloc rather than malloc for lazy callers
- log RIB add/del transactions only if there is an actual route change
- fix to to always insert a HNA Net when receiving a HNA refresh
- fix delete all routes if the last IP address is gone
- reduce TC vtime jitter from 25% down to 5%
PATCHES and BUGFIXES from Sven-Ola Tuecke <[email protected]>:
- add a fixed-point math implementation, which saves
a great deal of CPU on embedded devices
- fix for Link quality dijkstra limit
- nameservice plugin supports mac addresses
- fix fork/restart code
- fix olsr_times() to handle different OS implementations (Linux, BSD, OS X)
- fix several compiler warnings
- fix olsr_times() to handle different OS implementations (Linux, BSD, OS X)
- add makefile support for google android
- fix default olsrd.conf examples
PATCHES and BUGFIXES from Aaron Kaplan <[email protected]>:
- fix openbsd warnings / compile errors about sprintf strcpy
- fix string overflow in dyn_gw plugin
- fix string overflow in pgraph plugin
- fix openbsd/osx coompile errors
BUGFIX by Peter Tarjan <[email protected]>:
- Do not remember LQ information UNSPEC_LINK neighbors in Hellos.
- ignore UNSPEC link for linktype if there is an ASYM/LOST/SYM Link in the
same Hello message
- ignore UNSPEC_LINKS during MPR lookup
- broken MID route handling: we also check the data structures for routing,
even if a MID entry exists.
BUGFIX by John Hay <[email protected]>:
- FIX: IPv6 MTU in BSD
- Another BSD ipv6 Patch by John Hay
- fixes for 64 Bit FreeBSD
- fixes for NetBSD
BUGFIX from Erik Tromp <[email protected]>:
- update in bmf due to new flags field in tc_edge_entry
PATCH from Clemens Hopfer <[email protected]>:
- dot_draw plugin: close the connection after graph output.
PATCH from Joe Gio <[email protected]>:
- track if AC power is connected/disconnected
PATCH from Hagen Paul Pfeifer <[email protected]>:
- import jenkins hash for good hash calculations
PATCH from Andres Ambrois <[email protected]>:
- nameservice plugin: add parameters for SIGHUPing other daemons, or calling scripts
BUGFIX by Benny Tops <[email protected]>:
- fix wrong order of drop_tc checkt in olsr_input_tc
Felix (OpenWRT NBD):
- fix bison problem for OpenWRT
Sebastian Harl:
- add LISTEN parameter for httpinfo/txtinfo/dotdraw
0.5.5 ---------------------------------------------------------------------
BUGFIX from Andreas Jacobs <[email protected]>:
- calculate correct sleeptime
BUGFIX from Dario Borriello <[email protected]>:
- do not update LQ if not configured
BUGFIX from Jo-Philipp Wich <[email protected]:
- fix olsr_ip_to_string() buffer quirk
- fix txtinfo format quirks in HNA table
- name-service plugin - write MID entries to hosts file
- avoid infinite loop in the message parser
PATCH by John Hay <[email protected]>:
- compile clean on FreeBSD
- bugfix: do not account for IP headers when building MID6 messages
PATCHES from Henning Rogge <[email protected]>:
- join LQ and non-LQ Hello execution paths
PATCHES from otti <[email protected]>:
- rttable-default: configures a new policy routing table for the default route
BUGFIXES and PATCHES by Sven-Ola Tuecke <[email protected]>:
- Windows Vista: add interface metric to SPF computed metric
- lqtc-seqno: Optimize check for old seqno numbers in LQTC messages
- lqnatthresh: maintain an advantage for the current (NAT) inet gw
- fisheye-startup: Changed to MAX_TTL for the first 32 LQTCs
- Added and removed files necessary for win32 compile
- Fix for hg: do not remove anything in .hg with 'make uberclean'
- 104-olsrd-verysmallfix
- 105-fix-lq-buffer-quirks
- 106-fix-seqnocheck
- 110-bmf-v152
- 121-olsrd-fib-metric-approx
- 133-fix-lqneigh
- 136-optimize-invalidip-check
- 138-optimize-message-generation
BUGFIX from Lorenz Shori <[email protected]>:
- Mac OSX compile fixes
BUGFIXES and PATCHES by Hannes Gredler <[email protected]>
- fix not deleted tc entry.
- avoid setting routes with an invalid/impossible netmask.
- refactoring of TC parsing to kill another pile of malloc()/free()s
saving (again) code and especially run.time performance.
- RIB Refactoring, Part 2:
- avoid the periodical rib-tree insertion
- add a FOR_ALL_HNA_RT_ENTRIES() macro for the snmp folks
(or any parties who want to walk HNA entries).
- add an olsr_cnf option 'flat_fib_metrics' which defaults to TRUE.
- fix broken prefix insertion (regression of the RIB refactoring)
- squelsh compiler warnings on Mac OSX
PATCH by John Hay <[email protected]>:
- also printout our own HNAs in the dotdraw plugin.
PATCH by Patrick McCarty <[email protected]>:
- fixed compile errors in the BSD port
PATCHES by Sven-Ola Tuecke <[email protected]>:
- 102-olsrd-cvs-fixes.patch: use different buffers in the same printf()
- 103-olsrd-rt-exportroute-cleanup.patch: avoid a malloc()ed list of functions
- 132-save-the-fish.patch: really save the fish and avoid to forward invalid
messages from older olsrd versions
- 135-georss-map-for-nameservice.patch: fixes and extensions for the namesaervice plugin
- 138-olsrd-fixdotdraw.patch: fix the dot_draw plugin
(all to be found on http://download-master.berlin.freifunk.net/sven-ola/nylon/packages/olsrd/files/)
- Replaced "which" with a /bin/sh script snippet
PATCHES and CLEANUPS by Bernd Petrovitsch <[email protected]>
- Jens Nachtigall <[email protected]> suggested (and reminded) to use
olsrd.conf.default.lq as the default installed one.
It makes much more sense as - to the best of my(bernd's) knowledge - all
larger networks uses the LQ extensions. And new customers should better
be pushed in that direction.
- with the help of Patrick McCarty <[email protected]>, we got olsr to build
on OpenBSD again:
* OpenBSD'd `sed` is pretty conservative and doesn't understand 's|re|sub|'.
So we fall back to the old 's/re/sub/' and quote all '/' and '.' correctly
(which was the main reason to use '|').
And while I'm at it: Remove the useless $(CCACHE) from the $(CC) for
dependency generation and beautify (read: "$(strip)") $(CPPFLAGS).
* OpenBSD needs an explicit "#include <sys/types.h>" before
"#include <netinet/in.h>".
- fixed lib/secure/src/md5.h: This was broken as it had
"typedef unsigned long int UINT4;". "unsigned long int" is 8 bytes on x86_64.
We are using now the standardized types from <inttypes.h>.
- fixed warnings and improved lib/secure/src/md5.c:
* we are using memcpy() and memset() instead of the open-coded loops as
suggested
* const'ified
* added function prototypes for static functions
* moved static functions to the top so that their declaration is before
their use to allow gcc to inline if only used once.
It remains ugly - God knows why there are that so many useless
type-casts.
- Some minor and trivial cleanup: Added two functions to calculate the ETX
value from a struct tc_edge_entry and a struct link_entry, respectively.
And use them everywhere.
- added http://meshcube.org/nylon/utils/olsr-topology-view.pl into
lib/httpinfo/misc as suggested by Jens Nachtigall <[email protected]>
- Killed "struct olsrd_config *cnf" in src/cfgparser/olsrd_conf.h and replaced
it's usage with "olsr_cnf" from src/defs.h.
Serious cleanup: olsrd_get_default_cnf() does no longer initialize the global
"cnf" variable" but uses a local one which is returned as before. And
olsrd_parse_cnf() does no longer return the global variable it is working on.
- Merged "struct hna4_entry" and "struct hna6_entry" into
"struct local_hna_entry" (as "struct hna_entry" is a different thing)
Both have almost the same data (IP address + netmask/prefix) so we use
the quite new "struct olsr_ip_prefix" to store it.
Also merged the "hna4" and "hna6" pointer in "struct olsr_config" -
look at the global "olsr_cnf->ip_version".
- added a olsr_ip_prefix_to_string() function
- .h file cleanup: def.h does not longer include net_olsr.h because it
doesn't needs it.
- more type safety: the macros COPY_IP() and COMP_IP are gone and replaced
with "=" or similar "normal" C operations. There are also now the inline
functions ip4cmp() and ip4equal() to work on "struct in_addr", ip6cmp()
and ip6equal() to work on "struct in6_addr" and ipcmp() and ip6equal()
to work on "union olsr_ip_addr".
Most (or even more precise: almost all) uses of COPY_IP() and COMP_IP()
are in "if (olsr_cnf->ip_version) { ... } else { ... }" anyway to
there is no reson to copy an IPv4 address effectively with
"memcpy(&dst, &src, 4)" or compare with memcmp(&a, &b, 4)" wher the
always "4" is stored in a variable inhibiting compiler optimization.
There is also the deprecated function genipcopy() mimicking the old
typeless COPY_IP() macro for the last few places where a cleanup is
needed anyways.
There also lots of old macros left over (commented out of course) until
we are confident that everything works. And then I will kill them too.
- Fixed the misleading definition of "v4" in "struct olsr_ip_addr" fom
"olsr_u32_t" (in network-byteorder!) to "struct in_addr". Lots of
temporary variables to call inet_ntoa()/inet_ptoa() vanished .....
- We have now ip4_to_string(), ip6_to_string() and olsr_ip_to_string()
to print a "struct in_addr", "struct in6_addr" and "union olsr_ip_addr"
into a string buffer.
- cleanup: olsr_ip_to_string() and similar non-reentrant functions now must
get a target buffer. To ease that, there is the "struct ipaddr_str"
which is large enough for all of them (read: for an IPv6 address). This
also removes the cyclic buffer there.
All of these function return a "const char *" which can be directly used
for printf(3) and friends.
- const'ified more functions
- converted the source to UTF-8.
- "struct sig_msg" uses an olsr_u8_t for a byte array (and not "char")
- force the few inline function to always be inlined.
- #ifdef the body of the olsr_print_hna_set() and olsr_print_neighbor_table()
if nothing is done
- declare "int_addr", "int_netmask" and "int_broadaddr" in "struct interface"
as "struct sockaddr_in" since it is that what we actually want there (and
it is similar to the IPv6 code).
- updated the olsrd.conf.default.lq-fisheye to the Debian-deliverd version
after recent discussions [email protected]
- use "inline_avl_comp_ipv4()" in "avl_comp_ipv4()"
- clean up the routes on more signals. Basically we want to do this on all
signals which terminate the program.
- killed a superflous global buffer in src/main.c
- made inline functions from avl_walk_{first,last,next,prev} and created
"const" versions of it. inline_avl_comp_ipv4() is now also an inline function
(and not a macro)
- created a typedef's for various function pointers - much easier to read.
- cleanup: compare tree->comp (adn other pointers)) to NULL (and not 0)
- killed superflous "return"s at the end of void functions
- const'ified more parameters in many more functions in the .h and
.c files
- init-functions with constant or ignored return values are "void"
- created a typedef fro the callback in "struct export_route_entry"
and using it!
- moved the initialization of the {add,chg,del}_kernel_list variables
into process_routes.c. So they are now "static" there.
- olsr_export_{add,del}_route{,6} are now static in process_routes.c
since they are not used elsewhere.
- olsr_addroute_add_function() and olsr_deldroute_add_function() were
almost identical - made one function out of it.
Same for olsr_addroute_del_function() and olsr_deldroute_del_function().
- fixed the sort order in avl_comp_ipv4_prefix(): We compare now the IPv4
values in host byte order (and not network byte order). So the route
list in the e.g. httpinfo plugin is now nicely sorted.
- fixed and improved the `gcc-warnings` script:
* support older gcc's (as on Debian/Sarge) as they have slightly different
error messages
* removed superflous lines
* replaced the call of `sed` with shell built-in features fixing syntax
errors on Debian/Sarge
* set all locale-relevant variables to "C" (just to be sure)
- consolidated ip{4,6,}{cmp,equal}: all are nwo inline functions using only
the minimal necessary operations. Thanks to Hannes Gredler
<[email protected]> and Sven-Ola Tuecke <[email protected]> for pointing
that out and suggesting the `inline`, respectively.
use ip{4,}cmp in lq_avl.[ch] to resue the code. inline_avl_comp_ipv4
is superflous now (and replaced by ip4cmp) and use the global MIN and MAX
macro instead of AVLMIN and AVLMAX
- killed netmasks from the IPv4 part of the code and use the prefixlen there
(similar to thte IPv6 part). Manymore details on
http://lists.olsr.org/pipermail/olsr-dev/2007-November/001464.html
- removed the superflous "open_ipc" field from the "struct olsrd_config" as
it contains only the equivalent of "olsr_cnf->debug_level > 1".
- inspired by Sven-Ola Tuecke: avoid a bash'ism (i.e. "OPTS="${OPTS//$opt}") in
gcc-warnings and ld-warnings. But we do not replace it with `sed` (since it
costs a fork(2) and an exec(3)) but also with shell code which doesn't use
any external program.
- added configuration file support for "flat fib metrics".
0.5.4 ---------------------------------------------------------------------
QUAGGA by Immo 'FaUl' Wehrenberg <[email protected]>
- updated to svn version 33
BMF PLUGIN by Erik Tromp <[email protected]>
- updated to 1.5.1
- updated to latest plugin interfaces changes and killed warnings (by Bernd
Petrovitsch <[email protected]>)
PATCH by Hannes Gredler <[email protected]> which rewrites the route 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)
- http://gredler.at/download/olsrd/neighbor_routes3.diff: This updates the own
IP address (read: the main address) after changes (e.g. on
`ifup wlan0; sleep 1; ifdown wlan0`) and kills the
olsr_fill_routing_table_with_neighbors() function.
---- snip ----
And Sven-Ola Tuecke <[email protected]> fixed an instability issue on interface
up/down operations (see 102-olsrd-rt-refactoring-fixes.patch below) and a missing
initialization.
PATCH by Hannes Gredler <[email protected]> which "consolidates
the link-state database and the spf-calculation in order
to calculate routes more efficiently".
To quote him (more):
---- snip ----
- use the link-state (tc) database for SPF calculations rather than
replicating the notion of vertices and edges for a SPF run.
this heavily reduces malloc() calls and shrinks the total CPU
load of the route calculation path between 60%-80%.
---- snip ----
PATCHES by Sven-Ola Tuecke <[email protected]> to be found on from
http://download-master.berlin.freifunk.net/sven-ola/nylon/packages/olsrd/files/
- 102-olsrd-rt-refactoring-fixes.patch
Because you changed a lot of basics: It's time to handle a general
flaw in the routing system. Plase take a look at chk_if_changed(). This
will free() any "struct interface" pointer without warning at any time.
This is why it's possile to SEGV olsrd with a simple "ifdown xxx".
The patch replaces the (maybe) invalid pointer with an index reference
"iif_index". You can always ask the OS for a name. Please note, that I do
not have a working BSD toolchain, so I've placed an #error in the IPv6
BSD-part where the author/porter has started to hack something funny.
- 110-olsrd-double-wlancard-neigh-hack.patch:
This is a hack for Nodes having to wifi cards with the same channel,
bssid, IP-Range etc. If two nodes can see each other by means of two
possible links (here: two wifi cards with equal config), a bug is triggered
with the Neigh-is-SYM detections. This small little hack prevents this.
- 112-olsrd-nameservice-fixemptyname.patch:
This is an addon to my lat/lon stuff which will prevent olsrd from
running (oops?) if no hostname is given and the nameservice plugin
is loaded.
- 113-olsrd-dyngwplain-pluginvers5.patch:
This updates the dyngwplain plugin to the new Plugin Iface
- 140-olsrd-arprefreshed.patch:
This is a new one. Opens a packet socket and listen to UDP(698), extract
the sender MAC and refreshes the ARP cache whith that. Should speedup
especially in cases, if you initially try to use a longer routing path which
normally triggers a "ARP-Lookup-Chain".
- 106-olsrd-nameserviceparams.patch:
This patch converts more plugins to the new interface version.
- 104-olsrd-policy-routing.patch
Reworked this one to discard GPL helper functions. Also checked IPv6 and
re-included the IPC hookup. The patch adds a "RtTable [number]" for
/etc/olsrd.conf which is simply the Linux
policy routing table to use. Defaults to 254 (== main).
This patch was modified/clenaed up by <[email protected]> to use "#if"
instead of "#ifdef" as it's more robust against typos.
- 110-olsrd-fixpacketprint.patch, 112-olsrd-nameservice-fixemptyname.patch,
113-olsrd-txtinfo-fixhttpget.patch, 114-olsrd-timeoutlimit.patch,
115-olsrd-nameserviceparamfix.patch and
116-olsrd-fix-pluginparam-addons.patch fixing the compilation warning
on 64bit and lots of other improvements.
- "Save the fish" patch: Avoid forwarding of packets with too low TTL. This
kills lots of packet forwarding storms.
NB: The oneliner was applied by hand by BP and formatted to look (in BPs O)
more readable.
PATCH by Arnd Hannemann <[email protected]>
olsr_makefile_make_use_of_exename.patch
- This patch makes sure that the EXENAME variable of Makefile.inc is used
in Makefile.
PATCHES by John Hay <[email protected]>
- update to new FreeBSD WLAN API
- do not require /bin/bash, use /bin/sh
- Fixed alignment so that olsrd runs on FreeBSD/arm
- allow more interface in an IPv6 subnet on FreeBSD
- use PREFIX and DESTDIR as all the other Makefile.$OS also for FreeBSD
- make txtinfo plugin work with IPv6
PATCH by Andreas Jacobs <[email protected]>
- fix the loss link quality calculation for "windows size % 4 != 0"
PATCH by Acinonyx <[email protected]>
- Bug fix: include $(TOPDIR)/Makefile.inc at the begin in the Quagga plugin
PATCH by David Cornejo <[email protected]>
- fixed an "+=" of an uninitialized variable (detected with/by the
scan.coverty.com).
BUG reported by Aaron Kaplan <[email protected]>
- BSD-xargs doesn't know "-r".
PATCHES and CLEANUPS by Bernd Petrovitsch <[email protected]>
- Made a function from the ME_TO_DOUBLE() macro (in src/mantissa.h).
This saves code throughout the code even on i386 and will even more
on architectures without floating point units and "-msoft-float".
- And the mathemathics in src/mantissa.h is reformulated to minimize
floating point operations to save CPU power - especially on embedded
devices.
- I rewrote the half of src/lq_packet.[ch] which deals with incoming
packets. This was triggered with performance output of gcc produced
by Sven-Ola Tuecke at CCCamp07.
This kills *lots* of (more than) superflous malloc()s and the same
number of (free()s). And it also kills some code and copying around of
data.
- Make it compile without warning with flex-2.5.33 (to be found on Fedora 7
and Gentoo in Sep-2007) again.
- converted the dyn_gw plugin to plugin interface version 5 (which leaves
the quagga plugion as the last with the old one).
- paving the way to activate -Wshadow, much more to do
- const-ify parameters here and there
- use NULL for pointers (and not "0")
- Killed "extern" declarations in (not generated) .c files
- Based on a patch by Gianni Costanzi <[email protected]> (so credits
and thanks have to go there):
added OS_CFLAG_PTHREAD Makefile variable since gcc (on Linux) requests this
in the manual page.
Changes/additions:
- I added definitions to all OS-specific Makefile.$OS with the value similar
to the value in OS_LIB_PTHREAD (either empty or "-pthread").
- The variable is added to CPPFLAGS (and not CFLAGS) since CPPFLAGS is used
for all cpp and gcc calls (and gcc's man page indicates that it sets
variables for both of them).
0.5.3 ---------------------------------------------------------------------
URGENT BUG FIX
Ignacio García Pérez <[email protected]> found a serious bug in the dot-draw
plugin and identified it's source.
BUG FIX
The bmf plugin wanted to kill a not-started thread and this causes a segmentation
violation. This happens if the old plugin interface support is not compiled in
and one uses - or more asccurate: wants to use - the bmf plugin which uses that
ATM. Thanks to Cedric Krier <[email protected]> for reporting this.
DEPENDENCIES FIXED
The dependencies (*.d files) are now properly generated and used. And they also
dependen on the Makefile in the current directory and the Makefile.inc so that
changes there also lead to new compilation.
Remember: We support "ccache" so install it to save lot of meaningless recompiles
if nothing (as seen by the real C compiler, i.e. after the C preprocessor) has
changed.
BUILD FIX
Linux/IA64 and Linux/HPPA also need "-fPIC".
CLEANUPS
- olsr_switch does no longer generate warnings
- olsr_switch is also built with "build_all" and cleaned with "uberclean"
- More "const" all over the place.
- More "static" for local functions and variables.
- Killed an unnecessary "static" variable.
0.5.2 ---------------------------------------------------------------------
URGENT BUG FIX
Sven-Ola Tuecke found a serious bug of the class "show stopper" and sent a patch.
PLUGIN CLEANUP
Plugins handle parameters quite individually (case-sensitive vs case-insensitive,
different parsing functions for the same values, etc.). Plugin Interface version 5
now exports a table of { parameter-name, parsing-function, addr-of-storage } and
it's size. Common functions should be shared.
0.5.1 ---------------------------------------------------------------------
MISC
Upgrade to olsr-bmf 1.5 from Erik Tromp <[email protected]>
latitude/longitude support is now in the nameservice plugin done by
Sven-Ola Tuecke <[email protected]>
added the spf refactoring patch from Hannes Gredler <[email protected]> which
saves a noteworthy amount of CPU time. To quote him:
---- snip ----
1. use of an AVL tree as a min-heap implementation
as a means for efficient sorting.
(the etx metric is used as the key in the candidate tree)
2. next-hop propagation
rather than tracking the previous node in olsr_relax()
i have changed that model and pre-populate all one-hop neighbors
with their own IP adress as 'next-hop' and pull that
pointer up once new paths are explored.
as a result no walker for counting hops and extracting next-hops
is required - it turns out at this is slighly more efficient
than the existing behaviour (even with the cache applied).
---- snip ----
CLEANUPS
* moved a only locally needed hack from "union olsr_ip_addr" into the only place
where it is needed in hashing.c
0.5.0 ---------------------------------------------------------------------
APPLIED PATCHES FROM FREIFUNK-FIRMWARE
libsmake, dyngwplain, nameservices+services, tzxtinfo, quagga, quagga-routehandler,
optimize, fixes from Eric Tromp and Sven-Ola Tuecke, CPU-optimize, secure key, HNA-IP
CLEANUPS
removed hardcoded limit on the number of interfaces (at least in the Unix part)
made Makefile targets much more consistent
MISC
put Bmf-1.3 plugin into it
FreeBSD IPv6 SUPPORT
Patch from John Hay applied.
BUGFIXES
0.4.10 --------------------------------------------------------------------
OLSR NETWORK SIMULATOR
An application called olsr_switch(sorry for the nameclash with the win32
GUI) has been added. If olsrd is ran using the -hint option it can now
connect to olsr_switch and be part of a virtual network. This means
that multiple instances can be ran at the same host! The olsr_switch
application allows the user to define link variables on all viritual
links in the network, creating all possible topologies. Read more in
the readme file.
EXPERIMENTAL FISH EYE ALGORITHM
An experimental algorithm for TTL settings on TC messages has
been added. Read more in the corresponding README file.
OPENBSD SUPPORT
olsrd now also compiles on OpenBSD systems. Thanks a lot to Holger
Mauermann for the patches!
BUILDSYSTEM REWRITE
Bruno has rewritten the make system. OS detection is now done
automagically and the general design is much improved.
IP ADDRESS VALIDATION
Olsrd now maintains a set of IP addresses that is considered
invalid. Checks against this set is done on all received
OLSR packets announced originator addresses. The dataset can
be updated dynamically.
PLUGIN INTERFACE
Updated interface version to 3 and added more noticeable warning
for version missmatch.
MATH LIB DEPENDENCY
The dependency on the math lib came from the use of pow(3) in the
mantissa/exponent calculation. The calls to pow in this long forgotten
code, was very unnessecarry. The pow calls are replaced with bitwise
shifts and -lm is no longer needed.
ICMP REDIRECTS ON LINUX
On Linux systems "0" is now also written to the all/send_redirects
procfile and not only the pr. interface ones. Hopefully this resolves
problems reported with systems still sending ICMP redirects.
BUGFIXES
- Fixed init of IPv6 addrtype variable. It used to be uninitialized,
causing it to default to site-local and have some weird side-effects.
- Fixed crash when changing IPv6 address at run-time
- Fixed a bug that prevented setting willingness 0 in the configfile
- Fixed bad handling of missing command line arguments
- Did various updates to prevent assertion when a neighbor
has changed IP and sends HELLO before its olsrd precess has detected
the change.
- Fixed return value check on times(2) calls in the scheduler
- Fixed bug(s) that could cause crash when an interface was brought
down while olsrd was running.
- Removed the silent (read: unchecked) hard limit of 16 interfaces.
- Compiles now cleanly on 64bit (e.g. x86_64).
0.4.9 ---------------------------------------------------------------------
OPTIMIZATIONS
The MID database is now also indexed by alias addresses. this makes
look-ups of main addresses based on alias addresses _much_ faster.
The mid_lookup_main_addr function alone has gone from >30% of the
total CPU time used by olsrd to <1%.
PLUGIN DEVELOPERS: datatypes for MID entries has been changed.
Routing table calculation in the LQ case now uses balanced binary
trees instead of linked lists, which makes look-ups much faster.
The debug output function olsr_printf() is not used by olsrd
internals any more. Instead the macro OLSR_PRINTF is to be used.
This macro does debug level testing _before_ doing any function
calls(both printf itself and parameters to printf). This is a much
more optimized way of doing debug output. In addition olsrd can
be built without any debug output code if doing 'make NODEBUG=1'.
TIMEOUT OF DATASETS
Validity times for dataset entries are now set using the clock_t type
(used to be struct timeval). This data is now fetched from the times(2)
function instead of gettimeofday(2). This prevents possible problems
if the system time is changed.
PLUGIN DEVELOPERS: Note that datatypes for close to all dataset entries
(link, neighbor, mid, hna, tc etc.) has been changed!!
CONFIGURATION FILE
Multiple interfaces can now use the same interface configuration block.
Example:
Interface "if0" "if1" "if2"
{
.....
}
Interface configurations now also support the "Weight" directive. When
olsrd finds multiple links to a neighbor it will choose the link
going via the interface with the lowest weight. Olsrd normally
sets this weight dynamically based on interface characteristics,
but if the user wishes to set a fixed weight in a interface(or
a group of interfaces), this directive is now available.
Moreover, interface configurations now support the "LinkQualityMult"
directive. It takes an IP address and a multiplier as arguments.
Example:
Interface "if0"
{
[...]
LinkQualityMult 192.168.0.1 0.7
LinkQualityMult default 0.5
[...]
}
The idea is to make certain links via the configured interface
artificially worse or better than they really are. The first parameter
specifies the IP address of a neighbour interface. The second
parameter is the multiplier to be applied to the link to the specified
neighbour interface.
After we have derived the link quality from the packet loss among the
packets received from the specified neighbour interface, we multiply
the link quality by the given multiplier. So, the multiplier changes
the LQ value that we use when determining the ETX, which is 1 / (LQ *
NLQ).
If "default" is given as the IP address then the multiplier applies to
all links via the configured interface. Note, however, that olsrd only
assigns one multiplier to each link. It does so in the following way.
* If there is a "LinkQualityMult" line that matches the IP address of
the link's neighbour interface, then use the multiplier in this
line.
* If there isn't any matching line, then look for a "default" line. If
there is a "default" line, then use the multiplier in this "default"
line.
* Otherwise use 1.0, i.e. do not modify the LQ value at all.
Hence, a line with an IP address has priority over a "default" line.
In the above example, the LQ value of the link between the local
interface if0 and the neighbour interface 192.168.0.1 would be
multiplied by 0.7. All other links between the local interface if0 and
a neighbour interface would be multiplied by 0.5.
IPV6 SOCKETS
The socket option IPV6_V6ONLY is now set on IPv6 sockets in linux.
This means that olsrd will no longer receive IPv4 traffic when
running in IPv6 mode.
This should enable users to actually run one olsrd instance using
IPv6 and one using IPv4 at the same time :)
PLUGINS
The httpinfo, dyn_gw and dot_draw plugins now all include olsrd
headerfiles directly. A plugin should define OLSR_PLUGIN before
including olsrd headers. Doing things this way removed the
redundant datatype definitions that has so often caused trouble
when things has been updated in olsrd.
NETBSD SUPPORT
olsrd now also compiles on NetBSD systems. Use 'make OS=nbsd' to
build. This port is not very well tested and feedback is greatly
appreciated.
EXPERIMENTAL MULTI-INTERFACE CODE FOR FREEBSD
Experimental code using libnet can be compiled in allowing multiple
interfaces to be used in FreeBSD. You enable this by compiling using
OS=fbsd-ll. You must have libnet-devel installed for this to work
(/usr/ports/net/libnet-devel).
OTHER UPDATES
- WLAN devices are now detected in FreeBSD
- First specified interfaces IP is used as main address.
- Broadcastflag is not checked on interface if fixed broadcast is
set in config.
- Removed Linux link layer code as this was not really in use.
- Added -nofork command line option
BUGFIXES
- Link sensing now works according to announced vtime from
neighbors. Previously links going symmetric->asymmetric
were not necessarily detected until the holding time expired.
- A bug in route addition/removal that could lead to routes
using GWs being added before the actual route to the GW
was set up, has been fixed.
- A bug in the interface selection in route calculation has been
fixed. New routes are no longer added prior to deleting old ones,
since this caused trouble.
- A bug in the IPv6 multicast address configuration has been fixed.
This caused olsrd not to work with global IPv6 addresses.
- A bug in the IPv6 prefix-from IPaddr function has been fixed. This
bug caused HNA prefixes to always be calculated to 0.
- If a 2-hop neighbor is also a 1-hop neighbor, a bug made olsrd
prefer a bad direct link to a better link via an MPR.
- If a link or interface lookup failed, olsrd crashed.
- Fixed a crash in the LQ packet generation code based on a
signed/unsigned integer comparison.
0.4.8 ---------------------------------------------------------------------
LICENSE CHANGE
Olsrd is now distributed under a BSD style license. We believe olsrd will
be better off using this license as it opens up for commercial players
to use olsrd freely in their products. In the end this will lead to
this kind of users doing serious testing and bug fixing of olsrd.
ETX-LIKE LINK QUALITY DETECTION
We can now determine the packet loss on a link by looking at the serial
numbers of the OLSR messages received from a neighbor. This tells us how
many packets get through from our neighbor to us. We use a new extended
kind of HELLO messages (LQ_HELLO messages, LQ = link quality) to broadcast
the link quality that we have determined on our end of the link to our
neighbors. So do our neighbors, and we as well as they end up with an
idea of how good the link is in both directions. From the LQ_HELLOs we
also learn the link quality between our neighbors and our two-hop neigh-
bors. In this way we can select those neighbors as MPRs that have the
best links to our two-hop neighbors. To distribute the link quality
throughout the network, we use a new extended version of TC messages
(LQ_TC messages). They contain the qualities at both ends of each of our
links. Nodes can then run Dijkstra's algorithm to find a path between
themselves and other nodes that minimizes the packet loss.
If the newly introduced "LinkQualityLevel" is set to zero in the
configuration file, link quality is not used and the daemon behaves as
before, i.e. as specified by the OLSR RFC. If this parameter is set
to 1, LQ_HELLOs and LQ_TCs are used instead of HELLOs and TCs, link
quality is measured and MPRs are selected based on the link qualities.
If this parameter is set to 2, the routing table is additionally
calculated based on the link qualities.
Setting "LinkQualityLevel" to a non-zero value BREAKS COMPATIBILITY. You
will then not be able to participate in RFC-conformant OLSR networks
any longer. This is because we use LQ_HELLOs and LQ_TCs instead of HELLOs
and TCs in this case.