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