Major changes between version 0.9 and 0.10.
-------------------------------------------

* Fixed a bug in the buffering code that would cause diald
  to seg fault and disappear in the middle of the night.

* Fixed a bug that allowed diald to get confused about weather
  or not pppd was still running.

* Fixed a bug in the restrict statement interpretation that
  caused diald to parse times with "00" in them as being
  much later than intended.

* Fixed a bug in the restrict timeout code that caused links to
  come up as requested, but never go down.

* Fixed a bug that caused diald to think "chat" failed when it didn't.

* Added fifo options "forced/unforced". Issuing a "force" command
  will bring the link up until an "unforced" command is issued.
  After the unforced command the state of the link will float
  up or down by the normal rules.

* Added a primitive Tk graphical tool for monitoring diald.
  See the file dctrl. You must have tcl/tk installed for to use this.

* Some changes to allow diald to compile with libc-5.x.

Major changes between version 0.8 and 0.9.
------------------------------------------

* Fixed bugs that prevented the FIFO options from working properly.

* Fixed a bug in non-dynamic SLIP mode that made diald attempt to
  get the dynamic address, even though it was not needed.

* Added ip-up and ip-down script options. These serve the same
  purpose as the ip-up and ip-down scritps in pppd, but work
  for both slip and ppp mode. Also, unlike for pppd, these
  scripts are not given hard-coded path names, you specify
  the script name so different copies of diald can run different
  scripts.

* Fixed bug that caused diald to leave a litter of old point to
  point routes around when running in dynamic mode, also fixed
  a bug that causes diald to fail when used in dynamic mode
  with UNSAFE_ROUTING turned off.

* Fixed several bugs in the new zero overhead slip code that
  caused it to fail if UNSAFE_ROUTING was turned off or if
  any compress was used on the link.

* Made a partial fix to failure to count transmitted bytes when
  UNSAFE_ROUTING option is in use. There is no complete fix for both
  SLIP and PPP without changes in the kernel. I could use the pppstats
  structure to fix this for PPP. I have not done so yet.
  In any case, the counts will be correct unless you are forwarding
  packets from another machine across the demand dialed link.

* Added the "rotate-devices" option, originally requested by
  Chuck Mattern <cmattern@mindspring.com>. This causes diald
  to rotate the list of possible devices by one each time it
  attempts a call, thus preventing diald from getting stuck
  if the first device in the list is damaged.

* Added in BOOTP support for dynamic slip mode. See the man page
  under dslip-mode and the config.h file setting for PATH_BOOTPC.

Major changes between version 0.7 and 0.8.
------------------------------------------

* Changed the SLIP code to get rid of the major overhead of moving
  packets from kernel space to user space and back to kernel space.
  The overhead is now the same as for PPP (i.e. only on outgoing packets).
  Also of note, in kernels after 1.3.13, it should be completely
  safe to use the UNSAFE_ROUTING option. With this option
  set there should be no overhead to using diald! (Thanks to Alan Cox
  for getting this change into the kernel!)

* Adding compile time options to make diald work with the PPP 2.2 beta
  releases. Sorry, I can't see a way to make a compiled copy of diald
  work with both ppp-2.1.2 and ppp-2.2, they've gone and changed the
  kernel interface. I'll talk to Al Longyear about it, but I don't
  really expect any miracles.

* Added an "impulse" option to control link up time in larger time
  units than a second. See the manual page.

* Added a way to issue control commands to a running diald via a FIFO.
  I've been meaning to do this for a while, but when 
  Mike Jagdis <jaggy@purplet.demon.co.uk> sent me a patch that was a good
  start on what I wanted. I plugged in bits of his patch and then ran with it.
  See the "fifo" option on the man page for complete details.
  The major bonus here is a way to get a running diald to attach
  to a device that was opened by another program, for example by getty
  in response to an incoming call. You can also block and unblock
  diald's activity and issue all of the commands that can be issued
  to diald with signals. As time goes on I'll probably add more commands
  to this interaction channel.

* Changed the syntax for the "restrict" command.
  The command syntax is now
  restrict <start-time> <end-time> <weekday> <day> <month>
  the <weekday>, <day> and <month> parameters are still in the
  crontab style format, but the <start-time> and <end-time>
  are given in HH:MM:SS format. I think this allows better
  specification of time ranges than the crontab format.
  As a shortcut you can use "*" for either start or end time,
  in which case they default to 00:00:00 and 23:59:59 respectively.

* Changed the semantics of "accept" filters with timeout 0.
  Timeout 0 used to mean that the accept rule behaved exactly
  like and ignore rule. Timeout 0 now means to kill the matched
  connection immediately.
  ******* WARNING ********
  This is an incompatible change! You must change all rules in your
  /etc/diald.conf that have timeout 0 to ignore rule! For example,
  the rule "accept tcp 0 tcp.fin" should become "ignore tcp tcp.fin".

* Changed the timer code so that it should be immue to changes
  in the wall clock. This should allow diald to be run along with
  xntpd or other time adjusting protocols.

* Added the BUFFER_PACKETS configuration option. If you define
  this option diald will store packets that get sent when the link
  is down and forward them once it manages to establish the link.
  This should fix the response delay people see on the first
  attempt at a telnet or rlogin when the link is down.
  Note that if your connect takes a long time to start up you
  might still want to muck with the kernel setting of TCP_SYN_RETRIES.

* Added in pidfile option. Made diald write out it's pid to /var/run/diald.pid
  by default. Be careful to use the pidfile option if you want
  to run multiple copies of diald, or they will all write to /var/run/daild.pid.

* Made diald re-open the modem line just before running the disconnect
  script. This means those users who want to can use the disconnect
  script to query the modem for state flags, e.g. to determine why
  the connection was terminated.

Major changes between version 0.6 and 0.7.
------------------------------------------

* Fixed routing so that when the connection goes down the
  point to point route to the proxy device is restored.

* Fixed minor bug in code to read dynamic IP address off the
  banner send by dynamic SLIP. If the buffer has a non IP
  address number in it, it used to be interpreted as an IP number.
  Now it just gets skipped over.

* Configuration parsing imposed an artificial limit on the size
  of timeouts. The restriction has been removed. If you want
  a 2^31-1 second timeout, now you can have it.

* Added in UNSAFE_ROUTING configuration option. Using this
  option eliminates the overhead of reading packets off the
  proxy and forwarding them to the physical link by changing
  all routes to point to the physical link while it is up.
  Note without this option diald does not introduce an overhead on
  incoming packets, only on going packets.

  Be warned that I am not at all sure this option works safely.
  I'd be interested to hear how it works for people, but don't
  use it unless you are willing to chance TCP lockups.

* Added time restrictions to filter rules. See the "restrict"
  option in the man page.

* Added four new classes of filter rules, and got rid of reject rules.
  Accept rules are the same as before. I've added in "bringup",
  "keepup" and "ignore" rules. I have also added the rules "up" and "down",
  which force the link up or down during the currently applicable time
  restriction. See the manual page for more information.

* I have exchanged the meaning of SIGTERM and SIGINT as signals to diald.
  SIGTERM now terminates diald and SIGINT now shuts down the link if
  it is up. This is so diald will terminate cleanly on shutdown.

* Changed accounting log code to open the file before each update,
  and then close it again after the update. This allows atomic
  rotation of the accounting logs without shutting down diald.
  Look in the contrib directory for some interesting scripts that
  process the accouting logs.

Major changes between version 0.5 and 0.6.
------------------------------------------

* None

Major changes between version 0.4 and 0.5.
------------------------------------------

* Fixed bugs in the options file parser that caused core dumps
  when compiled as a QMAGIC executable.

* Fixed various bugs in the timer code that caused early timeouts.

* Fixed bugs in the filter code that caused IP packets to get ignored
  when determining the idle timeout.

Major changes between version 0.3 and 0.4.
------------------------------------------

* ANSIized the code. This caught a bunch of coding inconsistencies,
  but did not result in any major changes. Things compile clean
  with -Wall now.

* Added in addroute and delroute script options to allow users to do local
  routing work when diald starts and ends.

* Added in primitive ability to use more than one device. diald searches
  for an unlocked device on a list and uses that one. Note that it
  will try to run the same connect script regardless of the device
  it gets. This isn't really ideal. Eventually I'll have to rewrite
  the option syntax to accommodate a proper modem server format.

* Fixed modem locking bugs. You can all stop sending me messages
  about this now.

* Added in an option to allow diald to work with dynamic slip and ppp
  addresses.

* Added in an accounting log file. This is intended to record information
  salient to getting charges reimbursed by an accounting department.
  Check out the option "-accounting-log" in the man page.

* Added a "netmask" option to diald, acts like "netmask" in pppd.

* Changed name of "default" option to "defaultroute" to match pppd.

* Fixed some more problems with the modem hanging for 30 seconds when
  dialing went wrong, or some other process mucked up the modem device.

* Rewrote the packet filtering code. The goal of the rewrite was a redesign
  to accommodate a possible future move of the packet filtering code into
  the kernel. This would allow diald to act as a firewall as well as a
  dialer daemon. There are some minor user visible differences as a result.
  The most notable is that the "filter" command has been replaced
  with the commands "accept" and "reject". Note that the "reject" command
  does not actually do anything yet, for now it is equivalent to an
  accept command with timeout 0.  The other visible change is the
  ability to define variable names and protocol rule names in the
  configuration files. Note that diald does NOT yet actually act as 
  a firewall, and will never do so without kernel modifications.

* Added options to allow run time definition of variable names for
  filter rules, as well as named protocol rules. As a result I have
  moved the default definitions out of the code and into the file
  /etc/diald.defs. This file is the first file read when diald starts.

Major changes between version 0.2 and 0.3.
------------------------------------------
This is a bug fix release.

* I think I finally tracked down the cause of those intermittent
  modem "hangs" were the OS waited 30 seconds for some buffers to drain
  before finishing a close. This problem should be gone.

* Spelling fixes thanks to Hugues Lafarge <hugues@afp.com>.

* Stupid bug that causes SLIP mode to hang up immediately fixed.
  SLIP mode should actually work now.

* Diald wasn't seeing SIGHUP's in SLIP mode. I forgot to set the
  session group and controlling tty. Fixing this caused, pppd SIGHUP's
  to break. The solution is to give pppd the controlling tty in fork
  just before exec.

* Added a "disconnect" script ala pppd. I don't need this myself,
  but maybe someone out there will.

Major changes between version 0.1 and 0.2.
------------------------------------------
diald has been almost completely rewritten (twice!) since the
first release. There are many changes. Here are the high points:

* The ppp-on script is no longer used. Diald will run a connect
  script (chat works nicely) by itself, and then run pppd if needed.
  This is so diald can know the pid of the pppd process, which allows
  diald to know what ppp interface (ppp0, ppp1, etc.) the pppd is
  running on, and allows diald to know what process to kill to take
  down the link. The old diald just issued a killall -INT pppd,
  which prohibited more than one diald running, or a diald controlled
  pppd running together with a non-diald controlled pppd.

* There are LOTS of configurable options now. Look at the usage
  line (just run diald without any options) or read the man page.
  The man page still needs some work, but I hope it will be enough
  to get experienced users up and running. (Hey, this is still ALPHA
  software, I only have so much spare time).

* The entire mechanism for controlling the state of the link has been
  replaced by a formal state machine. I think this machine guarantees
  that no more than one child process can be active at a time, and
  will even kill off child processes that are taking to long to do
  their tasks. Let me know if you have problems with this. The old diald
  could be forced to spawn hundreds of chat scripts or pppd daemons.

* Diald no longer uses slattach to set up the slip link. It just does it
  by itself. This allows it to know which slip device it is using,
  which should allow multiple diald's to run at the same time.

* The policy for bringing up and shutting down the link is now very
  configurable, down to the level of choosing what packets
  should bring the link up and keep it alive, together with
  multiple timeouts on connections over the link.
  Look at the manual page and the sample diald.conf files in the
  doc subdirectory. Ask me if you are having problems configuring
  diald to do something you want. It will help me to write a better
  manual page, and will point deficiencies in the current design.

* UUCP style locks are now placed on the call-out device.
