* fixed SIGSEGV reported by Cedric Krier <ced@ced.homedns.org>
[olsrd.git] / CHANGELOG
1 This file states changes as of version 0.2.4:
2 $Id: CHANGELOG,v 1.68 2007/07/31 12:02:18 bernd67 Exp $
3
4 0.5.3 ---------------------------------------------------------------------
5
6 URGENT BUG FIX
7 Ignacio García Pérez <iggarpe@terra.es> found a serious bug in the dot-draw
8 plugin and identified it's source.
9
10 BUG FIX
11 The bmf plugin wanted to kill a not-started thread and this causes a segmentation
12 violation. This happens if the old plugin interface support is not compiled in
13 and one uses - or more asccurate: wants to use - the bmf plugin which uses that
14 ATM. Thanks to Cedric Krier <ced@ced.homedns.org> for reporting this.
15
16 DEPENDENCIES FIXED
17 The dependencies (*.d files) are now properly generated and used. Nd they also
18 dependen on the Makefile in the current directory and the Makefile.inc so that
19 changes there also lead to new compilation.
20 Remeber: We support "ccache" so install it to save lot of meaningkless recompiles
21 if nothing (as seen by the real C compiler, i.e. the C preprocessor) has changed.
22
23 CLEANUPS
24 - olsr_switch does no longer generate warnings
25 - olsr_switch is also built with "build_all" and cleaned with "uberclean"
26
27 0.5.2 ---------------------------------------------------------------------
28
29 URGENT BUG FIX
30 Sven-Ola Tuecke found a serious bug of the class "show stopper" and sent a patch.
31
32 PLUGIN CLEANUP
33 Plugins handle parameters quite individually (case-sensitive vs case-insensitive,
34 different parsing functions for the same values, etc.). Plugin Interface version 5
35 now exports a table of { parameter-name, parsing-function, addr-of-storage } and
36 it's size. Common functions should be shared.
37
38 0.5.1 ---------------------------------------------------------------------
39
40 MISC
41 Upgrade to olsr-bmf 1.5 from Erik Tromp <erik_tromp@hotmail.com>
42
43 latitude/longitude support is now in the nameservice plugin done by
44 Sven-Ola Tuecke <mail2news@commando.de>
45
46 added the spf refactoring patch from  Hannes Gredler <hannes@gredler.at> whicht saves
47 a noteworthy amount of CPU time. To quite him:
48 ----  snip  ----
49 1. use of an AVL tree as a min-heap implementation
50
51    as a means for efficient sorting.
52    (the etx metric is used as the key in the candidate tree)
53
54 2. next-hop propagation
55
56    rather than tracking the previous node in olsr_relax()
57    i have changed that model and pre-populate all one-hop neighbors
58    with their own IP adress as 'next-hop' and pull that
59    pointer up once new paths are explored.
60
61    as a result no walker for counting hops and extracting next-hops
62    is required - it turns out at this is slighly more efficient
63    than the existing behaviour (even with the cache applied).
64 ----  snip  ----
65
66 CLEANUPS
67 * moved a only locally needed hack from "union olsr_ip_addr" into the only place
68   where it is needed in hashing.c
69
70 0.5.0 ---------------------------------------------------------------------
71
72 APPLIED PATCHES FROM FREIFUNK-FIRMWARE
73 libsmake, dyngwplain, nameservices+services, tzxtinfo, quagga, quagga-routehandler,
74 optimize, fixes from Eric Tromp and Sven-Ola Tuecke, CPU-optimize, secure key, HNA-IP
75
76 CLEANUPS
77 removed hardcoded limit on the number of interfaces (at least in the Unix part)
78 made Makefile targets much more consistent
79
80 MISC
81 put Bmf-1.3 plugin into it
82
83 FreeBSD IPv6 SUPPORT
84
85 Patch from John Hay applied.
86
87 BUGFIXES
88
89 0.4.10 --------------------------------------------------------------------
90
91 OLSR NETWORK SIMULATOR
92
93 An application called olsr_switch(sorry for the nameclash with the win32 
94 GUI) has been added. If olsrd is ran using the -hint option it can now
95 connect to olsr_switch and be part of a virtual network. This means
96 that multiple instances can be ran at the same host! The olsr_switch
97 application allows the user to define link variables on all viritual
98 links in the network, creating all possible topologies. Read more in 
99 the readme file.
100
101 EXPERIMENTAL FISH EYE ALGORITHM
102
103 An experimental algorithm for TTL settings on TC messages has
104 been added. Read more in the corresponding README file.
105
106 OPENBSD SUPPORT
107
108 olsrd now also compiles on OpenBSD systems. Thanks a lot to Holger
109 Mauermann for the patches! 
110
111 BUILDSYSTEM REWRITE
112
113 Bruno has rewritten the make system. OS detection is now done
114 automagically and the general design is much improved.
115
116 IP ADDRESS VALIDATION
117
118 Olsrd now maintains a set of IP addresses that is considered
119 invalid. Checks against this set is done on all received
120 OLSR packets announced originator addresses. The dataset can
121 be updated dynamically.
122
123 PLUGIN INTERFACE
124
125 Updated interface version to 3 and added more noticeable warning 
126 for version missmatch.
127
128 MATH LIB DEPENDENCY
129
130 The dependency on the math lib came from the use of pow(3) in the
131 mantissa/exponent calculation. The calls to pow in this long forgotten 
132 code, was very unnessecarry. The pow calls are replaced with bitwise 
133 shifts and -lm is no longer needed.
134
135 ICMP REDIRECTS ON LINUX
136
137 On Linux systems "0" is now also written to the all/send_redirects
138 procfile and not only the pr. interface ones. Hopefully this resolves
139 problems reported with systems still sending ICMP redirects.
140
141 BUGFIXES
142
143 - Fixed init of IPv6 addrtype variable. It used to be uninitialized,
144   causing it to default to site-local and have some weird side-effects.
145 - Fixed crash when changing IPv6 address at run-time
146 - Fixed a bug that prevented setting willingness 0 in the configfile
147 - Fixed bad handling of missing command line arguments
148 - Did various updates to prevent assertion when a neighbor
149   has changed IP and sends HELLO before its olsrd precess has detected
150   the change.
151 - Fixed return value check on times(2) calls in the scheduler
152 - Fixed bug(s) that could cause crash when an interface was brought
153   down while olsrd was running.
154 - Removed the silent (read: unchecked) hard limit of 16 interfaces.
155 - Compiles now cleanly on 64bit (e.g. x86_64).
156
157 0.4.9 ---------------------------------------------------------------------
158
159 OPTIMIZATIONS
160
161 The MID database is now also indexed by alias addresses. this makes
162 look-ups of main addresses based on alias addresses _much_ faster.
163 The mid_lookup_main_addr function alone has gone from >30% of the
164 total CPU time used by olsrd to <1%.
165 PLUGIN DEVELOPERS: datatypes for MID entries has been changed.
166
167 Routing table calculation in the LQ case now uses balanced binary
168 trees instead of linked lists, which makes look-ups much faster.
169
170 The debug output function olsr_printf() is not used by olsrd
171 internals any more. Instead the macro OLSR_PRINTF is to be used.
172 This macro does debug level testing _before_ doing any function
173 calls(both printf itself and parameters to printf). This is a much 
174 more optimized way of doing debug output. In addition olsrd can
175 be built without any debug output code if doing 'make NODEBUG=1'.
176
177 TIMEOUT OF DATASETS
178
179 Validity times for dataset entries are now set using the clock_t type
180 (used to be struct timeval). This data is now fetched from the times(2)
181 function instead of gettimeofday(2). This prevents possible problems
182 if the system time is changed.
183 PLUGIN DEVELOPERS: Note that datatypes for close to all dataset entries
184 (link, neighbor, mid, hna, tc etc.) has been changed!!
185
186 CONFIGURATION FILE
187
188 Multiple interfaces can now use the same interface configuration block.
189 Example:
190 Interface "if0" "if1" "if2"
191 {
192         .....
193 }
194
195 Interface configurations now also support the "Weight" directive. When
196 olsrd finds multiple links to a neighbor it will choose the link
197 going via the interface with the lowest weight. Olsrd normally
198 sets this weight dynamically based on interface characteristics,
199 but if the user wishes to set a fixed weight in a interface(or
200 a group of interfaces), this directive is now available.
201
202 Moreover, interface configurations now support the "LinkQualityMult"
203 directive. It takes an IP address and a multiplier as arguments.
204
205 Example:
206
207 Interface "if0"
208 {
209   [...]
210
211   LinkQualityMult 192.168.0.1 0.7
212   LinkQualityMult default 0.5
213
214   [...]
215 }
216
217 The idea is to make certain links via the configured interface
218 artificially worse or better than they really are. The first parameter
219 specifies the IP address of a neighbour interface. The second
220 parameter is the multiplier to be applied to the link to the specified
221 neighbour interface.
222
223 After we have derived the link quality from the packet loss among the
224 packets received from the specified neighbour interface, we multiply
225 the link quality by the given multiplier. So, the multiplier changes
226 the LQ value that we use when determining the ETX, which is 1 / (LQ *
227 NLQ).
228
229 If "default" is given as the IP address then the multiplier applies to
230 all links via the configured interface. Note, however, that olsrd only
231 assigns one multiplier to each link. It does so in the following way.
232
233 * If there is a "LinkQualityMult" line that matches the IP address of
234   the link's neighbour interface, then use the multiplier in this
235   line.
236
237 * If there isn't any matching line, then look for a "default" line. If
238   there is a "default" line, then use the multiplier in this "default"
239   line.
240
241 * Otherwise use 1.0, i.e. do not modify the LQ value at all.
242
243 Hence, a line with an IP address has priority over a "default" line.
244
245 In the above example, the LQ value of the link between the local
246 interface if0 and the neighbour interface 192.168.0.1 would be
247 multiplied by 0.7. All other links between the local interface if0 and
248 a neighbour interface would be multiplied by 0.5.
249
250 IPV6 SOCKETS
251
252 The socket option IPV6_V6ONLY is now set on IPv6 sockets in linux.
253 This means that olsrd will no longer receive IPv4 traffic when
254 running in IPv6 mode.
255 This should enable users to actually run one olsrd instance using
256 IPv6 and one using IPv4 at the same time :)
257
258 PLUGINS
259
260 The httpinfo, dyn_gw and dot_draw plugins now all include olsrd
261 headerfiles directly. A plugin should define OLSR_PLUGIN before
262 including olsrd headers. Doing things this way removed the 
263 redundant datatype definitions that has so often caused trouble
264 when things has been updated in olsrd.
265
266 NETBSD SUPPORT
267
268 olsrd now also compiles on NetBSD systems. Use 'make OS=nbsd' to
269 build. This port is not very well tested and feedback is greatly
270 appreciated.
271
272 EXPERIMENTAL MULTI-INTERFACE CODE FOR FREEBSD
273
274 Experimental code using libnet can be compiled in allowing multiple
275 interfaces to be used in FreeBSD.  You enable this by compiling using
276 OS=fbsd-ll.  You must have libnet-devel installed for this to work
277 (/usr/ports/net/libnet-devel).
278
279 OTHER UPDATES
280
281 - WLAN devices are now detected in FreeBSD
282 - First specified interfaces IP is used as main address.
283 - Broadcastflag is not checked on interface if fixed broadcast is
284   set in config.
285 - Removed Linux link layer code as this was not really in use.
286 - Added -nofork command line option
287
288 BUGFIXES
289
290 - Link sensing now works according to announced vtime from
291   neighbors. Previously links going symmetric->asymmetric
292   were not necessarily detected until the holding time expired.
293 - A bug in route addition/removal that could lead to routes
294   using GWs being added before the actual route to the GW
295   was set up, has been fixed.
296 - A bug in the interface selection in route calculation has been
297   fixed. New routes are no longer added prior to deleting old ones,
298   since this caused trouble.
299 - A bug in the IPv6 multicast address configuration has been fixed.
300   This caused olsrd not to work with global IPv6 addresses.
301 - A bug in the IPv6 prefix-from IPaddr function has been fixed. This
302   bug caused HNA prefixes to always be calculated to 0.
303 - If a 2-hop neighbor is also a 1-hop neighbor, a bug made olsrd
304   prefer a bad direct link to a better link via an MPR.
305 - If a link or interface lookup failed, olsrd crashed.
306 - Fixed a crash in the LQ packet generation code based on a
307   signed/unsigned integer comparison.
308
309
310 0.4.8 ---------------------------------------------------------------------
311
312 LICENSE CHANGE
313
314 Olsrd is now distributed under a BSD style license. We believe olsrd will
315 be better off using this license as it opens up for commercial players
316 to use olsrd freely in their products. In the end this will lead to
317 this kind of users doing serious testing and bug fixing of olsrd. 
318
319 ETX-LIKE LINK QUALITY DETECTION
320
321 We can now determine the packet loss on a link by looking at the serial
322 numbers of the OLSR messages received from a neighbor. This tells us how
323 many packets get through from our neighbor to us. We use a new extended
324 kind of HELLO messages (LQ_HELLO messages, LQ = link quality) to broadcast
325 the link quality that we have determined on our end of the link to our
326 neighbors. So do our neighbors, and we as well as they end up with an
327 idea of how good the link is in both directions. From the LQ_HELLOs we
328 also learn the link quality between our neighbors and our two-hop neigh-
329 bors. In this way we can select those neighbors as MPRs that have the
330 best links to our two-hop neighbors. To distribute the link quality
331 throughout the network, we use a new extended version of TC messages
332 (LQ_TC messages). They contain the qualities at both ends of each of our
333 links. Nodes can then run Dijkstra's algorithm to find a path between
334 themselves and other nodes that minimizes the packet loss.
335
336 If the newly introduced "LinkQualityLevel" is set to zero in the
337 configuration file, link quality is not used and the daemon behaves as
338 before, i.e. as specified by the OLSR RFC. If this parameter is set
339 to 1, LQ_HELLOs and LQ_TCs are used instead of HELLOs and TCs, link
340 quality is measured and MPRs are selected based on the link qualities.
341 If this parameter is set to 2, the routing table is additionally
342 calculated based on the link qualities.
343
344 Setting "LinkQualityLevel" to a non-zero value BREAKS COMPATIBILITY. You
345 will then not be able to participate in RFC-conformant OLSR networks
346 any longer. This is because we use LQ_HELLOs and LQ_TCs instead of HELLOs
347 and TCs in this case.
348
349 It's best practice to set "LinkQualityLevel" to the same value on all
350 nodes in a network.
351
352 When determining the quality of a link olsrd only considers a given
353 number of most recent OLSR packets received from its neighbors. By
354 default, olsrd looks at the 10 most recent OLSR packets. This can be
355 changed via the "LinkQualityWinSize" configuration option. Values
356 between 3 and 128 are legal.
357
358 NEW CONFIGFILE PARSER/FORMAT/SCHEME
359
360 A whole new config file syntax and parser is introduced with this
361 release. The parser is generated using flex and bison and it is 
362 designed to be very modular. The parser can be compiled as either
363 a standalone binary, a shared library or as part of olsrd. This way
364 other applications can parse and generate olsrd configuration files
365 only by linking to the dynamic library.
366 In the new configfile options can be set pr. interface, plugin
367 parameters can be set, more IPC options can be set...and more.
368 The syntax is documented in the olsrd.conf(5) manual page found
369 in the files/ directory.
370 Olsrd internals now uses a single struct, as returned by the config
371 parser, for all configuration in runtime. this means that updating
372 values in this struct will dynamically update olsrd operation. It
373 also means that all configuration is now kept in one place instead
374 of spread all across the place.
375
376 FREEBSD AND MAC OSX PORT
377
378 This version offers an initial port of olsrd to FreeBSD and Mac OS
379 X. Like the Windows port it currently does not support IPv6. As this
380 is a very first try at supporting FreeBSD and Mac OS X, this port is
381 probably not as reliable as the Linux version. We'd greatly appreciate
382 feedback and bug reports. To compile you need GNU make. Then simply
383 run "gmake OS=fbsd" to build the executable.
384
385 NEW MAKEFILE(S)
386
387 The makefiles used to build olsrd have been rewritten and now includes
388 dependency file generation using makedep.
389
390 DEBUG OUTPUT
391
392 Tables are now only printed if changes occur, so there are no longer 
393 any periodical output when using a debuglevel >0. A "heartbeat" is 
394 now printed to STDOUT(if it is a terminal) in the form of a rotating 
395 line to show that olsrd is actually operating.
396 Adding "ClearScreen yes" to the configuration file clears the screen
397 each time before the debug output shows updated information. This
398 makes the debug output easier to read in many cases. "ClearScreen no"
399 is the default, if no "ClearScreen" directive is given in the
400 configuration file.
401
402 PLUGIN INTERFACE
403
404 There are some changes in the plugin interface. It is now at
405 version 2. Plugin specific parameters from the configfile 
406 using the PlParam option, will now be passed on to plugins.
407 To receive such parameters a plugin must implement a function:
408 int
409 register_olsr_param(char *key, char *value)
410 to which parameter pairs will be passed.
411
412 NO MORE THREADS
413
414 Olsrd no longer uses any thread library on its operation. Everything
415 now happens in the main thread allowing for use of olsrd on platforms
416 with no thread library.
417
418 ACPI SUPPORT IN WILLINGNESS CALCULATION(LINUX)
419
420 The willingness calculation for Linux, now also supports the more
421 modern ACPI proc interface in addition to APM. This is not well
422 tested and feedback is appreciated!
423
424 IPC OPTIONS
425
426 Various options regarding IPC connections can now be set in the 
427 configfile. The options are max connections, allowed unicast
428 hosts and allowed net-ranges.
429
430 CODE REWRITES
431
432 Much of the message generation and net output code is rewritten.
433 Sending of partial messages should now work 100%. Also TC, MID 
434 and HNA messages are now cached for a random amount of time
435 before transmitted - this often leads to the situation where these
436 messages are sent together with an HELLO message, which is highly
437 desirable since it saves network resources.
438 PLUGIN DEVELOPERS must note that the buffers and size variables
439 used in net output is no longer directly accessible!
440
441 NET OUTPUT CODE REWRITTEN
442
443 Every interface now has one outputbuffer registered. This allows
444 messages to be "cached" as explained above, so that multiple
445 messages are stacked together.
446 Also the outputbuffer and size are no longer accessible directly,
447 an API is available to plugins(and olsr code).
448
449 OS DEPENDENT NETWORK INTERFACE
450
451 The OS dependent network functions are now defined in net_os.h
452 instead of being mixed up with internal network functions
453 in net.h.
454
455 BUGFIXES
456
457 A bug that caused the announced ANSN sequence number to never stop
458 being increased when a change in the MPR selector set was detected
459 has been fixed. Another TC related bug that caused timed out TC
460 entries not to be deleted from the routing table in certain cases
461 has also been fixed. These bugs could cause unstable routes.
462 A bug that in many cases caused the wrong routes to be deleted 
463 when using IPv6 has been fixed.
464
465
466 0.4.7 ---------------------------------------------------------------------
467
468 NATIVE WINDOWS GUI AND INSTALLER
469
470 We now have a native Windows GUI. The GTK+ version is no longer
471 supported on Windows. The new native GUI is pretty compact as it does
472 not require the GTK+ runtime DLLs. In addition to monitoring olsrds
473 state the GUI offers an easy way for novice users to configure
474 olsrd. It's pretty self-explanatory. Have a look at README-WIN32.txt
475 for details. The Windows version now also comes with an installer
476 based on the freely available Nullsoft Scriptable Install System
477 (NSIS). Looks like the Windows port is becoming more and more
478 Windows-ish. :-)
479
480 WIRELESS INTERFACE DETECTION ON WINDOWS
481
482 Like the Linux version the Windows port is now able to tell WLAN
483 interfaces from wired interfaces. We can now, for example, set
484 different HELLO intervals for WLAN interfaces and wired interfaces,
485 respectively.
486
487 ROUTE UPDATES
488
489 The order of updates of calculated routes is swapped. Now new routes
490 are added prior to deleting old ones. This could fix issues where
491 in some very very few cases one could experiment loss of routes.
492
493 BUGFIXES
494
495 There were quite some bugs in IPv6 operation in 0.4.6. These are
496 the bugs that were fixed:
497 - HNA message parsing did not work.
498 - Some IPv6 addresses were printed as IPv4 addresses in the
499   debug output.
500 - The '-dispin' option now works again.
501 - A filedescriptor leak in the IPv6 interface detection caused
502   olsrd to crash.
503
504
505 0.4.6 ---------------------------------------------------------------------
506
507 WINDOWS PORT!
508
509 Read the README-WIN32.txt file!
510
511 DYNAMIC NETWORK INTERFACE UPDATES
512
513 Network interfaces can now be updated and removed/added at
514 runtime. Olsrd will check all interfaces specified in the config 
515 file or on the command-line, every 5 seconds. If updates
516 occur, olsrd will register this and update the necessary data.
517 If interfaces are removed or added, olsrd will detect this
518 and configure the interfaces. If an interface is removed
519 olsrd will continue to check the interface, so if say, a PCMCIA
520 card is removed and later on reinserted(and given the same name),
521 olsrd will detect this and start running on it again.
522
523 Note that olsrd will now run even if no interfaces are detected.
524
525 ROUTE CALCULATION UPDATE
526
527 All 1 hop neighbor addresses that are not directly reachable trough
528 a symmetric link in the link set will now be added with a GW in the 
529 routing table. this GW will be an interface address from a registered
530 symmetric link to the neighbor.
531
532 MID UPDATE
533
534 Alias addresses are now registered in the link set processing
535 if available. This is not to pretty(since the vtime has to
536 be a mere guess) but it gives faster initial route updates.
537 If a HELLO is received(at initial registration) from an IP 
538 that is not the same as the one set as main address in the 
539 received HELLO header, then the IP from which the HELLO was 
540 received will be registered as an alias of the main address 
541 set in the HELLO header. The default vtime is set to 15 secs.
542
543 CODE RESTRUCTURING
544
545 All OS dependent interface configuration code is now located in
546 OS/ifnet.c(that would be linux/ifnet.c if using GNU/Linux).
547 The functions are available trough the headerfile src/ifnet.h
548
549 CODE CLEANUPS
550
551 - Some timer issues fixed
552 - Got rid of the global socket descriptors
553 - Updated indexing of network interfaces
554 - Introduced a global socket to use for ioctl calls(ioctl_s)
555 - Removed upper limit for interfaces to use
556 - Point-to-point interfaces are now allowed
557 - The main select(2) loop now uses a timeout
558 - A small bugfix in the select fd-set update code
559 - Some bugfixes in the configuration file parsing
560 - stdout/stderr are now set to not be buffered
561 - A bugfix in the MID generation regarding seq. numbering
562
563 PLUGIN INTERFCAE
564
565 A new set of functions that are called whenever a change in the 
566 interface configuration(update, addition, removal) is made is 
567 introduced.
568 These functions are added and removed very much like the ptf
569 functions. Available trough the functions add_ifchgf and del_ifchgf.
570
571 OBS OBS OBS!!! PLUGIN DEVELOPERS READ THIS!!!!
572
573 The interface struct(declared in interfaces.h) has changed.
574 Plugin developers must update plugins that uses the interface
575 struct!
576
577 The headerfile olsr_plugin_io.h which contains the plugin interface
578 commands now contains a revision list where all changes are
579 stated.
580
581
582 0.4.5 ---------------------------------------------------------------------
583
584 PLUGIN: SECURE OLSR
585
586 A plugin that generates and checks message signatures is added.
587 Check lib/secure
588
589 PLUGIN: TOPOLOGY GRAPH
590
591 A plugin that generates output of the topology in the dot format
592 is added. See lib/dot_draw
593
594 OPTIMIZATIONS
595
596 Some optimizations done that should cause fewer route recalculations.
597
598 BUGFIXES
599
600 Some bugs reported by Takafumi Tanaka fixed.
601
602 RESTORATION OF NETWORK SETTINGS
603
604 Network settings like disabling of ICMP redirects and spoof filter, are
605 now restored at exit by olsrd.
606
607 RFC COMPLIANCE FIX
608
609 Nodes would in certain scenarios retransmit messages originating for
610 themselves. This was a RFC incompliance. Reported by Ingmar Baumgart.
611
612 NON-WLAN TIMERS
613
614 No longer setting the HELLO interval of non-wlan interfaces as a multiplier
615 of the wlan interval. The interval is set seperatly now.
616 Due to this there are some updates in the configfile imperatives.
617
618 CODE CLEANUPS
619
620 Some new macros introduced for table insertion and removal and IP
621 copying and comparison.
622
623 FRONT END BUGFIXES
624
625 IPv6 bugfixes in the GUI.
626
627
628 0.4.4 ---------------------------------------------------------------------
629
630 ROUTE CALCULATION
631
632 Routes are no longer added via neighbors declaring a willingness
633 of WILL_NEVER.
634
635 LINK SENSING AND ROUTE CALCULATION
636
637 Link sensing and route calculation has been updated to handle
638 multiple links between hosts in a sane way.
639
640 IP SPOOF FILTERING
641
642 IP spoof filtering is disabled on the interfaces which olsrd runs.
643 These settings are not restored!
644
645 ICMP REDIRECTS
646
647 ICMP redirect message generation is disabled on the interfaces
648 which olsrd runs.
649 These settings are not restored!
650
651 CONFIGFILE OPTIONS FOR MID AND HNA ADDED
652
653 Options to set the MID and HNA emission intervals and
654 validity time in the configfile added.
655
656 IPv6 ADDRESS SCOPE
657
658 Option to set what IPv6 address type(scope) to use in the 
659 configfile added. It can be set to either global or site-local.
660
661 IPv6 MULTICAST
662
663 Options to set site-local and global multicast addresses
664 in the configfile added.
665
666 EMISSION INTERVAL FUNCTION
667
668 Functions to set emission intervals at runtime added.
669
670 LINK LAYER NOTIFICATIONS
671
672 If started with the -llinfo switch olsrd will collect and display
673 link-layer information on neighbors. This is no longer limited to
674 one interface. But no action is taken based on this info - and
675 there is a upper limit of 8 neighbors from which this info can
676 be collected pr. interface. This limitation is inherited from the
677 WLAN drivers and is not something imposed by the olsrd code!
678
679 IPv6 HNA MESSAGE FORMAT
680
681 IPv6 HNA messages now contains 128-bit netmask instead of prefix.
682
683 PLUGIN FUNCTIONS
684
685 Added "packet transform functions" which allow plugins to alter all
686 outgoing OLSR traffic.
687
688 RESTRUCTURING
689
690 Moved most headers out of OS dependent directories. The tunneling
691 and link-layer notification interface is not yet separated from
692 the /linux directory.
693
694 MANUALPAGE
695
696 A manpage(olsrd(8)) describing olsrd has been created. It is installed
697 when using 'make install'.
698
699
700 0.4.3 ---------------------------------------------------------------------
701
702 PLUGIN SUPPORT
703
704 Olsrd now supports runtime-loadable plugins! A couple of example plugins
705 are located in the lib/ directory. Read the README files in the various 
706 plugin directories for more info. A directive to load plugins have been
707 added to the configfile as well. 
708 Documentation of the plugin interface can be fount at http://www.olsr.org.
709
710 The plugin interface is designed to be extendable. But it should _always_
711 be backwards compatible with the interface used in this release!
712
713 LINK-LAYER NOTIFICATION
714
715 Some preliminary link-layer notification code has been added. Link quality
716 can be written to stdout if olsrd is started with the -llinfo switch.
717 No action is currently taken based on this info. And info will only
718 be retrieved from the interface named "eth1".
719 This code is not usable for users as of yet!
720
721 MPR UPDATES
722
723 Neighbors with willingness set to WILL_ALWAYS is now always added. The
724 MPR selection is optimized as described in RFC3626 section 8.3.1
725 point 5.
726
727 MPR BUGS
728
729 There was a couple of bugs in the MPR selection code. All fixed.
730
731 LINUX 2.6 BUG
732
733 Users could not run olsrd on multiple interfaces using the Linux 2.6 kernel
734 series. This is now fixed.
735
736 MINOR BUGS
737
738 One small bug in link hysteresis initialization and one in HNA route
739 deletion.
740
741 MESSAGE-SEQUENCENUMBER INCOMPLIANCE
742
743 Message-seqnos was implemented on a pr. messagetype and pr. interface
744 basis. This is not RFC3626 compliant and has been updates. All messages
745 and interfaces now uses a global seuencenumber.
746
747 RANDOM SEQUENCENUMBERS
748
749 Sequencenumbers are now initialized using a random value.
750
751 DAEMON MODE
752
753 Fixes for running olsrd in daemon mode(debug 0).
754
755 OPTIMIZATIONS
756
757 Optimizations based on profiling implemented.
758
759 SANITATION
760
761 Message size is checked for every message before passing it to the
762 appropriate message parsing function. If the size is bigger than the
763 remaining size of the olsr packet then the message is discarded.
764
765 GUI FRONT-END
766
767 Some minor modifications done to the gui.
768
769 INTERNAL CHANGES
770
771 Lots of changes in handling of registration and unregistration of
772 scheduler, socketparser, parser and local hna set.
773 Some restructuring and movement of functions.
774
775
776 0.4.2 ---------------------------------------------------------------------
777
778 No public release
779
780 0.4.1 ---------------------------------------------------------------------
781
782 No public release
783
784 0.4.0 ---------------------------------------------------------------------
785
786 LINK HYSTERESIS
787
788 Link hysteresis as described in the RFC added.
789
790 TC REDUNDANCY
791
792 TC redundancy as described in the RFC added
793
794 MPR REDUNDANCY
795
796 MPR redundancy as described in the RFC added
797
798 SCHEDULER REWRITE
799
800 The scheduler has been rewritten to register scheduled
801 events(function pointers) dynamically.
802
803 PARSER REWRITE
804
805 The parser has been rewritten to register parse functions
806 on a pr. messagetype dynamically
807
808 MALLOC WRAPPER
809
810 A wrapper for the malloc(3) syscal has been introduced.
811 olsr_malloc(size_t, const char *) should ALWAYS be used.
812
813 CODE RESTRUCTURING
814
815 Lots of restructuring in headerfiles.
816 Linux spesific code moved to subdirectory linux/
817 FreeBSD code to be put in freebsd/
818 LOTS of code restructured due to the rexrite of the scheduler
819 and parser.
820
821 MPR CALCULATION
822
823 Optimizing the MPR set as suggested in the RFC section
824 8.3.1 point 5 added.
825
826 BUGFIXES
827
828 Some bugs in MPR selection fixed.
829
830
831 0.3.8 ---------------------------------------------------------------------
832
833 CODE REWRITES
834
835 HNA code completely rewritten!
836 The old code was really bad! Now it is much cleaner implemented and
837 should work fine.
838 One- and two-hop neighbor list structures rewritten. They now use
839 the same hashed double-linked lists as the rest of the information
840 sets use.
841
842 CODE RESTRUCTURING
843
844 Some code restructuring which resulted in the new files: timer.h,
845 mantissa.c, mantissa.h, hashing.c, hashing.h, linux/net.c 
846 linux/net.h, linux/kernel_routes.c, linux/kernel_routes.h and some 
847 renamed files
848
849 BUG FIXES
850
851 The bug causing errormessages on exit is fixed.
852 The bug that caused initial HNA routes in the GUI to display a hopcount
853 of 0 fixed.
854 IPv6 HNA netmasks were all added as /128. It's fixed now.
855
856 IPv6
857
858 Turns out sitelocal address had to be preferred to avoid IPv6 header
859 messing up link-sensing. Bug fixed
860
861
862 0.3.7 ---------------------------------------------------------------------
863
864 CODE REWRITES
865
866 The entire TC set and MPR selector set code rewritten. Hashing and
867 double linked lists added to the MID code.
868 Lots of HNA code has been rewritten as well.
869
870 HNA bugfix
871
872 When a node lost connectivity to a HNA GW all HNA entries to that gw
873 was deleted. This has been fixed - and HNA entries only gets deleted
874 on timeout now.
875 Other HNA bugs have been fixed as well. But the whole HNA implementation
876 needs a rewrite!
877
878 Holdingtime BUGfix
879
880 There was a bug that caused holdingtime not to be properly recalculated
881 when using non-default emission intervals.
882
883 Forwarding and symmetric neighbors
884
885 Seems I had misread the RFC on what a 1-hop symmetric neighbor is.
886 Now the link-set is checked when a check for a symmetric neighbor
887 is done. Not the 1 hop neighbor set as it used to be. This way
888 the hack when receiving MID messages could be removed.
889
890 IPv6
891
892 Global addresses are now preferred. Sitelocal addresses are only used
893 if no global addresses are found. There have been problems where
894 the address set in the IP header of IPv6 packets do not match the
895 address chosen by OLSR.
896
897 GUI - 0.2.5
898
899 The GUI is finally updated! It can now handle piggybacked messages
900 and link sensing HELLO message format.
901
902
903 0.3.6 ---------------------------------------------------------------------
904
905 HNA support using IPv6
906
907 HNA now works using IPv6 as well! Just add the network address and
908 prefix in the HNA6 section in the configfile. The IPv6 HNA packets differ
909 some from the IPv4 as they don't send the netmask but the prefix.
910
911
912 NEW FILENAME FOR THE BINARY AND CONFIG FILE
913
914 They are now called olsrd and olsrd.conf. I figured I'd use the olsrd
915 name before somebody else started using it ;-)
916
917
918 Config file
919
920 New options: DEBUG, HNA6 and IPC-CONNECT added to config file.
921
922
923 Output
924
925 A printf-wrapper has been introduced - debug level output handling
926 is much more uniform now.
927 The daemon should run fine in detached mode now(DEBUG 0)
928
929 GUI front-end
930
931 The GUI front-end can now connect and disconnect at any time while the
932 daemon is running, if started using the -ipc switch or with IPC set to
933 'yes' in the configfile.
934
935
936 BUGS
937
938 A small HNA bug fixed.
939
940
941 0.3.5 ---------------------------------------------------------------------
942
943 Forwarding jitter
944
945 Forwarding jitter added. Messages are piggybacked if they arrive(and are to 
946 be forwarded) while there is data to be forwarded buffered.
947 Added some bugfixes to support parsing of piggybacked messages as well.
948
949 Route calculation
950
951 Fixed route calculation so that 2 hop neighbors are added. This smooths
952 changes from 1 hop to 2 hop neighbor out. The old way one had to wait for 
953 a TC before the 2 hop neighbors were added.
954
955 2 hop neighbor set
956
957 All neighbors received in HELLO messages are added to the two hop 
958 neighborhood. This helps smoothing out the 1-to-2 hop transition as well.
959
960 MID calculation
961
962 MID calculation had to be updated due to the registering of two hop neighbors
963 that are already one hop neighbors. They should not be considered when calculating
964 two hop coverage.
965
966 Optimizations
967
968 Deletion of possible one hop neighbors registered on non main-addresses when
969 first registering MID info from a node removed. This can not occur due
970 to the fact that registering of neighbor nodes are done on main addresses
971 from link-sensing
972 Option to not forward messages on wired links on which they arrived removed.
973 This is no longer usable to any degree when adding support for piggybacking
974 of forwarded messages is to be implemented.
975
976 Cleanups
977
978 Some unused parameters and commandline options were removed.
979
980
981
982 0.3.3 ---------------------------------------------------------------------
983
984 TC MESSAGEING
985
986 Added sending of empty TC messages if all MPR selectors are removed. Empty
987 TC messages are sent for a TC_HOLD_TIME period as described in section
988 9.3 in the RFC.
989
990 HNA
991
992 Fixed HNA route calculations for IPv6. I forgot to upgrade this in 0.3.2
993
994 OPTIONS
995
996 -hnaint and -midint command line optionas added to set the interval
997 of HNA and MID generation.
998
999 FORWARDING
1000
1001 As an optimization messages have not been forwarded on the received interface
1002 if this is registered as a non-WLAN interface. This causes problems for
1003 people using Ethernet-to-WLAN adapters. This optimization is now turned
1004 off by default. It can be activated using the -nofwlan option.
1005
1006 BUGS
1007
1008 THERE ARE SOME NASTY BUGS IN 0.3.2!
1009 Fixed a bug that caused 2 hop neighbors not to time out.
1010 Fixed a bug that caused a 1 hop neighbor timeout not to recalculate
1011 the routing table.
1012 Fixed a small memleak in the MID set
1013 Fixed some smaller bugs.
1014
1015 IPv6 functioning is not well tested in this release.
1016
1017 0.3.2 ---------------------------------------------------------------------
1018
1019 HNA
1020
1021 Updated HNA to be RFC compliant. This means that all received HNA tuples
1022 are registered and only the subset of unique entries(net/netmask) with
1023 the smallest hopcount is inserted into the routing table.
1024
1025 Config file
1026
1027 User can specify configfile name using the -f switch.
1028
1029 Bugs
1030
1031 Fixed a link-sensing bug that caused problems when using MID nodes.
1032
1033 0.3.1 ---------------------------------------------------------------------
1034
1035 MPR calculation
1036
1037 MPR calculation is now based on the willingness announced by nodes.
1038
1039 Neighbor set
1040
1041 The neighbor set does not have timeouts on entries any more. Creation
1042 and deletion of neighbor entries is done from the link-set as suggested
1043 in the RFC.
1044
1045 Cleanups
1046
1047 Gotten rid of a lot of code that became more or less obsolete due to
1048 all the changes introduced in 0.3.0.
1049
1050 Bugs
1051
1052 Fixed a nasty bug concerning the sequence numbering of TC packets.
1053 Fixed some bugs regarding MPR calculation - and probably introduced 
1054 a whole new species when implementing the willingness-based calculation ;-)
1055
1056
1057 0.3.0 ---------------------------------------------------------------------
1058
1059 Due to the extensive amount of updates this release is versioned 0.3.0
1060
1061 Duplicate table and forwarding
1062
1063 The duplicate table functionality is totally rewritten in 100% RFC
1064 compliance. The forward algorithm specified in the RFC is implemented
1065 this meant rewriting much of the packet processing code. The daemon
1066 also forwards unknown packettypes now.
1067
1068 Link sensing and neighbor processing
1069
1070 Link sensing and neighbor processing was done in the same operation in the
1071 old code. Link sensing is now a mechanism of its own which is 100% RFC
1072 compliant. Neighbor processing and HELLO generation has been partly 
1073 rewritten to be RFC compliant. Neighbors are now registered as either
1074 SYN or NOT_SYM. The NOT_NEIGH, SYM_NEIGH and MPR_NEIGH values are only
1075 used when building HELLO messages. Links are in one of the following states:
1076 UNSPEC_LINK, ASYM_LINK or SYM_LINK.
1077 HELLO messages now advertise link status of neighbors on the interface
1078 the message is transmitted.
1079
1080 Willingness
1081
1082 A node now dynamically calculates willingness based on powersource and
1083 possibly battery power. If the node is AC powered it announces a willingness
1084 of 6. If batterypowered the willingness is calculated as:
1085 P / 26
1086 Where P is percentage of power left.
1087
1088 Configuration file
1089
1090 The daemon now tries to read its configuration from the file /etc/uolsrd.conf
1091 A "standard" configuration file is installed when doing 'make install'.
1092 This file should be edited to fit your needs.
1093 Command-line options can still be used to override the configuration form
1094 the file(ore if no config file is present).
1095 The -f switch can also be used to specify a configuration file.
1096
1097 Willingness
1098
1099 If AdvancedPowerManagemant(APM) is supported on your system the willingness
1100 of the node is dynamically calculated based upon the powerstatus of the node.
1101 MPR calculation based upon willingness is not done as of yet.
1102
1103 TC ANSN
1104
1105 A bugs in the TC processing fixed.
1106
1107 HNA
1108
1109 Some serious HNA bugs fixed. These bugs caused a node to always choos the 
1110 gateway with the larges hopcout :) More seriously - a bug caused looping
1111 of HNA messages in certain scenarios.
1112
1113 Package sequence numbers
1114
1115 These were added. Not much use as of now - but they're there(as specified 
1116 in the RFC).
1117
1118 Broadcast address
1119
1120 Users can now specify the broadcast address to use. Useful if one wishes to
1121 use the 255.255.255.255 broadcast.
1122
1123
1124
1125 0.2.5 ---------------------------------------------------------------------
1126
1127 Htime and Vtime
1128
1129 Htime and Vtime processing and handling added. Holding times used to be 
1130 a static value for all nodes. Now every node can signal its vlidity time
1131 to others.
1132 To achieve this mantissa/exponent calculation functionality was added.
1133 Messages now include Vtime(and Htime in HELLO) values in mantissa/exponent
1134 format instead of just zero. These values are as stated above, used as holding
1135 time for nodes.
1136 the GUI should be upgraded as well...
1137
1138 Jitter
1139
1140 The use of jitter in message generation intervals vere fixed.
1141
1142
1143 0.2.4 ---------------------------------------------------------------------
1144
1145 Seqno bugs
1146
1147 Some bugs concerning sequence numbers in HELLO and MID message handling 
1148 was fixed. Newly registered nodes in the neighbor and MID sets were
1149 initialized with a seqno of 0. When using a "wraparound" sequencenumber
1150 check(as defined in olsr_protocol.h) this can produce errors if a new
1151 node joins a network where existing nodes has seqnos >0x00FF.
1152
1153 IPv6 related bugs
1154
1155 Some checks and copying of node addresses where done using sizeof(u_olsr32_t)
1156 which is 32 bits. This caused only the 32 firs bits of IPv6 addresses to
1157 be copied and checked.