Diffusion 3.2.0
---------------

- Added support for blacklisting neighbor nodes to the Filter API. The
  two new API functions (addToBlacklist() and clearBlacklist()) were added
  to dr.cc and supporting code was added to the filter_core.
- Added the first alpha version of RMST (Reliable Multi-Segment Transport).
  The sendRmst() API function was added to dr.cc. This filter is located
  in the filters directory and there are sample rmst applications in
  the apps directory.
- Changed the node id environment variable from scadds_addr
  to node_addr.
- Added support for emstar-class devices with the --with-emstar
  configure option.
- Added --disable-stats and --with-emsim options to configure.
  --with-emsim is a super-set of --with-emstar, but also adds
  support running diffusion under emsim. It will try to detect
  if it's being executed under emsim and then get node and
  group ids from the corresponding environment variables. When compiled
  with --with-emsim, Gear will also try to get node location information
  from emsim's SIM_LOC environment variable.
  --disable-stats will remove all iostats code from the filter_core
  (and the two stats-related command-line options -s and -i).
- Added the DiffPrintWithTime function. It works the same way as
  DiffPrint, but will print a timestamp before the message.
- Added support for gear to forward messages to geographic points
  (in addition to regions).
- Changed diffusion so it outputs stats to /tmp/diffusion-%d.out,
  allowing multiple nodes running on a single machine to create
  separate files (removed the ifdef for ns to it will do it also
  inside ns).
- Changed the directory structure to group diffusion filters and
  applications in separate directories. Also moved stats.cc from the
  library to the filter_core directory.
- Renamed gradient --> two_phase_pull and diffusion --> filter_core
  to avoid confusion. Some gear files were also renamed to match files
  in other directories.
- Removed support for the old rpc_stats mechanism (from lib/drivers)

Diffusion 3.1.3
---------------

- Diffusion now compiles with GCC 3.1 without any warnings.
- Updated the autoconf/automake scripts to work with autoconf 2.52,
  automake 1.6.3 and libtool 1.4.2. These versions are now required if
  users want to re-create the configure script. make dist now includes
  all other files (CHANGES, VERSION, COPYRIGHT, doc/*, and config/*).
  In addition, the --with-sh4 and --with-ipaq configure options were
  removed (the new autoconf version uses --host for cross-compiling).
- Changed the sendPacket function in the WINSNG driver to print the
  destination node if it is not cached.
- Fixed a bug in gradient.cc that caused positive reinforcements to also
  go to local sources.
- Updated parameters in config.hh to optimize diffusion for the various
  supported radios.
- Changed the iolog module to also output time information, allowing
  logs to be merged later offline if node's clocks are synchronized
  (this requires users to upgrade to Diffusion Visualization Tools 1.0.1
  as this release will not work with prior versions).
- Merged a few ns related fixes from the ns distribution.
- Updated push_sender and push_receiver to work with gear.
- Added new addTimer function to the diffusion API. Old addTimer still
  works but it is now obsolete and support will be removed in future
  releases. Refer to the updated diffusion API document for more details.
- Changed the event management functions in diffusion/library. There is
  a new class (TimersManager) that now controls the event queue. Changed
  all applications that use timers (diffusion, gradient, and gear) to
  use the new addTimer API.
- removeTimer is now supported in ns.
- Removed all timer references from config.hh in lib/main.
- Changed gradient.cc not to forward data back to where it comes from.
  This will suppress duplicate traffic when we have a lot of cross
  subscriptions.
- Improved debugging in Gear. All debug messages now have a timestamp.

Diffusion 3.1.2
---------------

- Fixed timing issue in dr.cc (ns related issue).
- Added support for gear to work with push.
- Added an iohook layer that allows code to work between diffusion core
  and the device drivers.
- Added support for an iolog layer that logs incoming and outgoing
  packets as they are received/sent to the various device drivers.
- Removed support for the BBN logger.

Diffusion 3.1.1
---------------

- Added support for the new Sensoria RF API (Tested with Sensoria
  software version 2.0.1).
- Changed the filter add/update scheme so diffusion can be
  started after filters.

Diffusion 3.1
-------------

- Revised GEAR to add support for all four operators (GE, GT, LE, LT)
  for declaring a closed geographic region.
- Added support for PUSH in the library API and in the gradient filter.
- Added push_sender and push_receiver to the pingapp directory. These
  are the 'push' versions of ping_sender and ping_receiver.
- Removed agent1/agent2 from the distribution.
- Changed the log filter to also print the packet size.
- Included a revised (release 9.0) API document, with examples of
  PUSH and GEAR subscriptions/publications.
- Diffusion now uses autoconf/automake. It simplifies configuring/
  compiling diffusion for the different hardware platforms and
  rf device options.

Diffusion 3.0.7
---------------

- Added the first alpha version GEAR in the apps directory. Diffusion
  now should be able to use geographic information to route packets,
  not requiring all interest messages to be flooded.
- Changed the filter scheme so now each filter has to have a
  distinct priority (i.e. we don't support two filters with the
  same priority value anymore).
- Merged SendMessage and SendMessageToNext into a single function,
  (SendMessage). It now allows filters to specify the next filter's
  priority and therefore allows filters to be bypassed.
- Changed the message class not to include a copy of the raw packet
  anymore.
- Changed all instances of FLAGGED_DATA to EXPLORATORY_DATA, in order
  to be consistent with the names used elsewhere.
- Added functionality to the API allowing filters work to in a single
  thread mode. Added the doIt() and doOne() API functions to allow
  the application/filter to give up its thread (either permanently
  or just for a moment) for the library API to receive packets and
  manage timers.
- Added the DiffApp class that applications and filters can derive
  from. It adds basic command line parsing code and keeps some of
  the library's interface code.
- Fixed a bug in agent1/agent2 when running in multi-threaded mode
  (there's a lock inside libc that blocks fflush when also doing a
  getc).
- Added the iPaq ARM platform to the supported systems (in config.mk).

Diffusion 3.0.6
---------------

- Added support for BBN's distributed logger.
- Changed the diffPrint function to use the variable argument
  list syntax, as suggested by Peter Boettcher.
- Renamed the agent applications to ping_sender and ping_receiver,
  and added some extra functionality to measure latency and packet
  loss.
- Included the Steel Knight Applications (sk_sensorApp and
  sk_gatewayApp).
- Fixed bug when receiving an incoming message from the MoteNIC.
- Included the nested queries applications in the distribution under
  apps/nested.

Diffusion 3.0.5
---------------

- Changed several makefiles to ease code integration.
- Changed diffusion statistics to include total number of messages sent
  to a neighbor (unicast + broadcast).
- Changed some internal names to allow easier NS integration.
- Added wrappers for time and output functions to allow distributed
  logging and easier NS integration.
- Added option to support delayed positive reinforcement messages in
  response to an exploratory data message.

Diffusion 3.0.4
---------------

- Fixed the code to work when only a single data packet is sent in
  response to an interest message.
- Added more randomization to the code so it works better when clocks
  are synchronized.
- The distribution now includes a source routing filter that can be
  used to send a message along a pre-specified path.
- Tuned diffusion parameters for optimal operation on the SensIT
  hardware.

Diffusion 3.0.3
---------------

- Diffusion can now use alternate ports (instead of the default 2000)
  with the new command line option '-p port'. Other apps will have to
  be changed to use this feature.
- The '-s' command line option has been removed.
- This version features an initial implementation of the device independent
  layer in diffusion along with diffusion drivers for the RPC, the MoteNic
  Wired UDP and UDP communication with local modules/apps. Everything has
  been moved to main/drivers.
- Diffusion/and the API library now use dynamically allocated buffers for
  both incoming and outgoing packets.
- Fixed the code to compile without warnings on gcc 2.97 (used to cross
  compile code for the new Sensoria nodes).
- Fixed all Makefiles to include the config.mk configuration file.
- The UDP driver now can support diffusion running on port other than
  2000. The config file for the wired diffusion now accepts the port
  number along with the host ip address. This allows one to run multiple
  'diffusion nodes' on a single machine.
- Diffusion now has a driver for the WINSNG 2.0 nodes' radios.

Diffusion 3.0.2
---------------

- Removed all dependencies from the radiometrix library.
  It should compile fine now with Red Hat 7.1. This version
  of diffusion does not support the old 'userland' implementation
  of the radiometrix drivers.

Diffusion 3.0.1
---------------

- Initial release of diffusion 3.
