			  ARCHIVE OF XROUTER - CHANGES
			  ============================

                 172a  21/11/01   to   186b 16/04/04
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Version 186b 16/04/04
~~~~~~~~~~~~~~~~~~~~~

- FTP proxy was disabled when access control was enabled - fixed.

- Fixed recently-intoduced bug in ARP that would cause crash when ARP
  LEARN was enabled with too small a MAXARP.

- Changed LOG [ON|OFF] to LOG [0-255]. Any non-zero value enables logging.

- Made HTTP server more resistant to attacks.

- Some reduction of INP3 data volume.

- Ports above 32 can now be monitored.

- More safety measures to resist excess memory usage.

- Auto-reboot upon LOWMEM now works slightly differently. It should now
  only reboot when memory gets critically low.  A setting of 5000 should
  be a reasonable value.

- Selective monitoring extended to include TCP / UDP port numbers. To
  enable this, use the syntax: MTO <ipaddr>[:port]
  If a port is not specified, all traffic to/from that IP address is
  monitored.
  If port is specified, only TCP and UDP frames to and from the specified
  IP address are monitored, and only if the source or dest port match the
  specified one.

- HTTP banning now checks all requests, and checks the whole request
  instead of the URL alone. By default it is now case sensitive, but can
  be made to perform a case-independent test by preceding the template
  with the keyword "anycase". e.g. "anycase connect" will ban CONNECT,
  connect, CoNnEcT etc.

- Locked-in neighbours were being tried indefinitely. This was not
  supposed to happen, but I'd written the code in a hurry and had never
  tested it! Well that's your job as beta testers :-) I've hopefully
  fixed it, but I still haven't tested it.

- Non-working neighbour routes are now indicated by "x" to distinguish
  them from untried ones.

- CTRL port may now be read from web interface, but can only be written
  by a sysop.

- Upgraded PMS to generate and understand SIDs, MIDS and BIDS,
  hierarchical addressing, bulletins, MBL forwarding and reverse forwarding.

- The PMS "unread messages" indicators now flash only for unread private
  mail, not for bulletins or mail pending transit.

- New PMS status markers:

	Status ' ' indicates unread "local" private mail.
	Status '$' indicates unforwarded non-local mail.
	Status 'F' indicates forwarded non-local mail.
	Status 'R' indicates read local private mail.

- The PMS message files now have 5 figure filenames with leading zeros, so
  if you have any messages in your PMS directory you must rename them to
  the new format before runnning v186b.


v185t	16/2/04
~~~~~~~~~~~~~~~
- Fixed bug which caused occasional crashes after failure of L2 interlink
  when INP3 was enabled.


Version 185r 13/02/04    
~~~~~~~~~~~~~~~~~~~~~		      

- Fixed a problem whereby unsolicited chat peers could leave zombie
  chat sessions.

- When there was echoed text on the console, review mode would collapse
  some of the vertical whitespace and it wouldn't be restored when review
  ended - fixed.

- After a review had ended, the next received line was appended to the
  last line, instead of starting on a fresh line - fixed.

- Text was sometimes disappearing altogether upon review - fixed.

- Text from different consoles was sometimes getting mixed up - fixed.

- Added rudimentary "split DNS", to allow private domains to be resolved
  using their own servers.

  The "DNS=<ipaddr>" directive has been expanded to "DNS=<ipaddr> [domain]"
  where [domain] is the domain for which this server should be used.

  The DNS ADD command similarly takes the optional domain argument,
  e.g. "DNS ADD <ipaddr> [domain]"

  The [domain] argument may be specified with or without a trailing dot.
  e.g. ".ampr.org" or ".ampr.org.".

  If [domain] is specified, the server will only be used to resolve
  hostnames in that domain, and the hostnames in that domain will only
  be resolved using that server and no others.

  For example: "DNS=44.131.91.245 .ampr.org." tells XRouter to exclusively
  use the server 44.131.91.245 to resolve all ampr.org hostnames. That
  server will not be used to resolve hosts outside the ampr.org domain,
  and ampr.org will not be resolved using any other server.



Version 185q   9/2/04
~~~~~~~~~~~~~~~~~~~~~
- AGW: Limited the no. of ports which can be seen by AGW apps to 16,
  because UI-View can't accept more than 16 - it displays no ports.
  UI-View32 has been fixed, but it may be a while before UI-View16 is
  fixed. Only the first 16 ports are now visible to apps, so sysop will
  need to organise his ports to number the ones he wants accessible by
  AGW applications below 17.

- Igate: SERVER can now be specified as hostname instead of IP address if
  desired.

- Stats: Bytes sent/rcvd was only able to display up to 2Gb before going
  negative on busy systems. It and many other counters now have a capacity
  of 65,535 Gb - Let's see who can overrun first :-)

- Initialisation will now abort immediately a bad callsign is detected,
  instead of waiting till the end. This will make it easier to spot the
  error.

- If chat server networking is not wanted, CHATCALL and CHATALIAS can
  simply be omitted, instead of setting them the same as NODECALL and
  NODEALIAS.

- Added another flag (bit 1) to APPLFLAGS. If set, it allows guest users
  to access the application by typing APPLNAME at the command prompt.
  Default is to deny access. Previous versions allowed guests to access
  the applications by name, which was a security hole.
  (A quick fix for this was to remove the APPLNAME and replace its function
  by using an aliased connect command)

- Since v182h, duplicate chatlinks had resulted in zombie sessions and L4
  links which never died - fixed.

- Added DOMAIN keyword to XROUTER.CFG, to override the default domain
  suffix (ampr.org.) Note the final dot is important. This was necessary
  to allow Xrouter to operate in CB packet networks.

- Port ID texts containing semicolons could crash AGW applications - fixed.

- Also Xrouter's port ID's can be of unlimited length, which might be a
  problem for some AGW applications, so the ID texts sent to apps are now
  limited to 80 chars.

- IP ROUTE LOAD would cause a crash if there were any dynamic NAT entries
  in the table - fixed.

- Previous RIP refuse entries were not removed by IP ROUTE LOAD - fixed.

- If there were any OVERLOAD entries in the NAT table, STATIC entries
  added at runtime would not be actioned corectly - fixed.

- If RFBAUDS was set greater than 3276799, nodes broadcasts on that port
  were suppressed - fixed.

- Added ARP LEARN command. This can be used by sysops, or placed in
  BOOTCMDS.SYS, to control learning of hardware addresses from overheard
  packets. Syntax is as follows:
  ARP LEARN DEFAULT [on | off]
  ARP LEARN <portnum> [on | off]
  The former specifies the default for any port not otherwise specified.
  The latter specifies the setting for an individual port.

- Added ARP TIMEOUT [0-32767] to specify the lifetime of a dynamic entry
  (default 900 secs).

- Added ARP WAIT [0-32767] to specify how long XRouter waits for a reply
  to its ARP requests. (default 30 secs).

- Added ARP MAXQ [0-32767] to limit the no. of datagrams which may be
  queued pending resolution (default 100).

- Added MAXARP directive to XROUTER.CFG. This limits the number of ARP
  entries which may be stored. Default is 20. You may use this to limit
  the number of dynamic and "learned" entries. Make sure that MAXARP is
  large enough to store all your static entries plus dynamic entries
  for other systems with which you are likely to exchange IP traffic. 

- Many modifications to improve chat server, which has been a bit broken
  for a year or so.

- ACL rules now interpret 0.0.0.0/32 or just 0.0.0.0 as meaning "any of
  XRouter's IP addresses", allowing it to cope with dynamically-assigned
  IP addreses and any applications which have their own IP address.

- Lots of changes to reduce the amount of dynamic memory allocation. This
  reduces free memory, but means XRouter requires less memory to run.

- Domain cache uses a lot of memory. The cache size, and thus the amount
  of memory used, can now be specified by new DCACHE= directive in
  XROUTER.CFG. Default is 10, using around 3kb. You can reduce this if
  you don't need domain resolution, or increase it if you have lots of
  AXUDP partners using dynamic hostnames.

- Fixed a bug in ICMP ping, which would have caused a memory leak in rare
  circumstances.

- Fixed a memory leak in ip route load.

- AXUDP transmissions were being traced twice - fixed.

- Reduced memory requirements for nodes broadcasts.

- Added new command to control usage of the ARP command. "ARP CMD [0-255]"
  can be used in BOOTCMDS.SYS, IPROUTE.SYS and at the command prompt.
  Flags are currently:

	1 = Command is available to secure sysops (e.g. wire links)
	2 = Command available to non-secure sysops (e.g. rf links)
	4 = Command is available to users
	8 = Private addr's visible to secure sysops
	16 = Private addr's visible to non-secure sysops
	32 = Private addresses visible to all users

	default is 255.

- Commands often had different syntax if they were used in BOOTCMDS.SYS,
  IPROUTE.SYS and at command line. They are now harmonised, and many more
  commands can now be used in BOOTCMDS.SYS.
  As a consequence, some of the commands in IPROUTE.SYS must now be
  prefixed by "IP", i.e. "IP ROUTE ADD ..." instead of "ROUTE ADD" and
  "IP QUIET" instead of "QUIET". The ARP, RIP, DUN, ACL and NAT command
  aren't affected. "NETROM ROUTE ADD" now becomes "ROUTE ADD".

- Fixed problem with CTEXT end of line characters, broken since v176d.

- Since v176, the response to "R X" was showing the same figure for
  "now%" and "max%", both being the now% figure - fixed.

- Time domain network information is now saved in XRNODES file, to
  reduce the settling time when a node is restarted. The file is no
  longer 100% BPQ compatible, but I don't feel there's any need to be.


Version 184e  8/12/03	
~~~~~~~~~~~~~~~~~~~~~
- Fixed finger security bug.


Version 184d   24/10/03	
~~~~~~~~~~~~~~~~~~~~~~~
- Added APRS DX logging, enabled by setting bit 1 in DXFLAGS.
  If bit 1 is set, Bits 3 - 14 specify the minimum distance which will
  be logged, from 4Km to 32764Km in 8Km steps, e.g. DXFLAGS=502 enables
  DX logging, with threshold of 500Km. If bit 1 is not set, bits 3-14
  are ignored.
  If DX logging is enabled, any received APRS positions which exceed the
  threshold distance are logged to LOG\DXLOG.TXT
  if bit 2 is set, the frame contents are logged too.

Version 184c   19/10/03
~~~~~~~~~~~~~~~~~~~~~~~                
- Added capability for http proxy to pass traffic to a downstream proxy.
  This is enabled by putting the following line in HTTP.SYS:

      proxy <ipaddr> <port> <subnet_mask>

      e.g. "proxy 44.131.91.245  80  255.0.0.0"

  <ipaddr> and <port> are those of the next proxy, while <subnet_mask>
  when combined with the proxy address specifies the range of addresses
  which are on the same subnet as the proxy.  These addressess will bypass
  the proxy, i.e. our proxy will connect directly to them instead of via
  the next proxy.

  This is all a quick bodge to enable amprnet systems to use a further
  proxy to gain a commercial ip address when contacting non-amprnet
  websites. It was necessary because amprnet routing is useless, i.e.
  if a 44-land browser tries to directly use google, the reply probably
  won't get routed back.

  For example, consider a browser (using Internet Explorer) whose IP
  address is 192.168.0.5, ethernet-linked to an Xrouter, whose ethernet
  IP address is 192.168.0.3, and radio IP address is 44.131.91.3. This
  station is radio linked to the KIDDER network access point. KIDDER is
  linked to the Internet, and via radio to other amprnet systems.

  The browser has been set up to use Xrouter's HTTP proxy, which means
  all outgoing http traffic now originates from 44.131.91.3.  This
  traffic will work fine on amprnet websites, but is unlikely to work on
  commercial internet sites.  But if the Xrouter has been set up with the
  above configuration, the amprnet (44.x.x.x) sites will be routed
  directly by the proxy, whilst the non-44 sites will be passed to
  KIDDER's http proxy, where they will gain a 62.31.206.176 source
  address, which is reliably routable and doesn't rely on the
  co-operation of others in the ampr net.

  The obvious question is, why not use KIDDER's proxy directly, using NAT
  to translate the 192.168.0.5 to 44.131.91.3?  The answer is that Win95's
  TCP/IP settings are really useless for packet radio, so the intermediate
  proxy makes it radio-friendly.  Also, it would not otherwise have been
  possible to use the 44 address for selectively working ampr web sites.

- Added another directive to HTTP.SYS:

     proxytimeout 30

  Specifies the maximum wait interval for a connection in seconds.  If a
  proxy connection takes longer than this to establish, an error is returned.
  Default is 30 secs, which was the previous fixed value.  It probably needs
  > 60 sec on a radio channel, and it probably needs to vary according to
  the destination address, e.g. 30 secs for internet and 180 sec for amprnet

- TCP window now depends on interface rf baud rate - to limit the maximum
  transmission time.  Long transmissions delay the acks and cause retries.

- Prevented destination address of 255.255.255.255 from being routed,
  or processed by NAT.

- Recent reorganisation of I/O (182j) had broken the PPP receive - fixed.

- Fixed a bug which was causing incoming TCP/IP datagrams to be rejected
  if a PAT entry applied.

- Enabled Dynamic NAT for ICMP, AXIP etc. It's not perfect, in that it
  may not perform reliably if two hosts ping an outside address at the
  same time, but it's a start!

- Added protection against zero source address if dynamic nat is invoked
  before port IP address has been negotiated.

- Added stuff to allow static entries with public ipaddr of 0.0.0.0 to
  respond to incoming frames addressed to any of our IP addresses, thus
  coping with dynamic IP. This allows ports to be "opened" through to
  LAN hosts. Thus to "open" a TCP port, use an entry like this:-

	NAT ADD STATIC 192.168.0.4:23   0.0.0.0:88  TCP

	This would "open" public TCP port 88 through to local host
	192.168.0.2 port 23.


- Fixed another bug in static NAT.

- Fixed a little problem which prevented downlinks from NAT router to a
  host on LAN when a NAT entry local addr matched the host.

- Added FTP Proxy.

- Fixed a bug which may have caused crashes if out of memory.

- Added "MTO [call | ipaddr]" which allows selective monitoring. Use
  "MTO ALL" to disable selective monitoring.

- Changed trace flags to separate ethernet from KISS and TCP from UDP.

- Added dynamic dns update client (see dyndns.txt)

- DHCP now attempts to re-obtain the previous IP address when rebooted.

- Dynamic DNS update now works on PPP ports too.

- Changed the ARKTILL scc info because the original info from the TVIPUG
  website was wrong.  Also added a little section to write 4 bytes to the
  addressable latch to enable the IRQ's.

- Netrom->ax25 proxy was broken in recent versions - fixed.

- At request of VK3TE and VK3ZZT, added HEADERLN to TNC2 emulation.

- SEND command was not working when invoked from CRONTAB.SYS - fixed.

- AGW interface wouldn't allow transmission on any port other than the
  first - fixed.

- Sysop passwords less than 5 characters were causing XRouter to crash
  when "@" command was used. It clearly states in the password.sys
  file that passwords must be over 5 characters, but I've added
  protection in case people don't take heed of my warnings.           

Version 183a  23/03/03
~~~~~~~~~~~~~~~~~~~~~~

Polled KISS was allegedly broken somewhere between v176 and v179.
Apparently it would work on the first interface but not on the second.
I was not able to reproduce the effect, but have changed the code anyway,
so the problem should hopefully have gone away.  However, the code
changes have been substantial, so look out for problems.  I would
appreciate either positive or negative feedback so I can close this
matter and move on.

It was also reported that KISS slave mode no longer worked, but again
despite extensive testing of several versions, I was not able to
demonstrate any problem.  If this was a mis-interpretation of the
effects of the previous problem, it may now have been resolved.

After a reboot, all PMS messages reverted to unread status - fixed.

Added a flashing "*" in top left corner of screen if PMS contains
unread mail.  The scroll lock LED is also flashed.

Added Forward Error Correction (FEC) for AX25 inter-node radio links.
This can only be used with SCC cards, YAM modems, or specially modified
multidrop KISS Eproms.  It will correct several errors per packet,
allowing a marginal link to perform much better, or an acceptable link
to use larger paclens, which in either case should improve throughput.
FEC will only work if *both* ends of a link are using it, and the
transmissions are *NOT* compatible with normal AX25.  I stress again
that this is intended for *inter-node* links, not on user access
channels.  There is no other software capable of using FEC, so it can
only be used between two Xrouters.  There is no point in using it on
AXUDP links, because those links do not suffer bit errors.
FEC is enabled on a port by including FEC=1 in the PORT configuration.

The file KISSFEC.BIN, included in this archive, is a binary image for a
multidrop polled KISS eprom suitable for use with FEC.  It is not
suitable for normal AX25 operations.  In usual BPQKISS style, the byte
at offset 20h should be changed to suit the KISS channel number.  The
supplied image defaults to channel A.

Added another bit to CFLAGS - 16 = allow L2 fragmentation.  Previously
it would only use fragmentation if the link partner was using it, and
had therefore proved itself capable of understanding it.  If
fragmentation is enabled, large Netrom packets are split to fit
the L2 link paclen.



Version 182i   08/03/03
~~~~~~~~~~~~~~~~~~~~~~~
This is a very minor upgrade, mainly of interest to those who are running
the HTTP server.  The only differences between this and 182g are a small
bugfix in the HTTP server code, and a slight rearrangement of the chat
server code.  There are no functional changes other than the fact that
the chat peer links now time out after 15 minutes of inactivity.

The main purpose of this package is to "officially" release the Java
applet which can be used to access Xrouter from a web page.  A number of
you had already "lifted" the prototype v0.11 applet from my site, but
you will find this version (v0.12) offers you more flexibility.

For instance, with v0.12 you can change the applet colours and font,
the number of rows and columns displayed, and the connection mode (normal
or http tunneled).

I have included the new XWEB.CLA file, plus 3 rudimentary .HTM pages for
you to examine or experiment with.  CONNECT.HTM is the menu page for 3
types of connection, and would typically be accessed via a "connect" link
on the main page.  You may however wish to put the 3 connect options
directly on the main page, it's up to you.  CONN23.HTM uses the Java
applet to perform a normal telnet connect to port 23.  The port number
is configurable (see below), so you could clone the page for use with
your chat server.  CONN80.HTM uses the Java applet to perform a
"tunnelled" connection, which can be used via corporate firewalls.

The parameters which can be used with the applet are as follows:

   Param name     Default      Description
   ----------------------------------------------------------------
   rows           22           No. of rows in text window
   cols           80           No. of columns in text window
   bgcolor        Dark grey    Applet background colour.
   borderColor	  Light grey   Applet framework colour.
   textBackground Black        Background for text window and cmd line.
   textColor      White        Colour of sent / rcvd text.
   font           Times        Font style used for sent / rcvd text
   port           9999         TCP port number for connections.
   mode           Normal       Connection mode (normal / proxy).

The only mandatory parameter (unless you happen to use port 9999 for
telnet :-) is "port".  This should normall be 23 for a normal telnet
connect or 80 for an http-tunnelled connect, but you may use other
values if you have mapped your TCP ports.

Colours should be specified as a 24 bit hexadecimal number in 'C' style,
e.g. 0xEECCFF, where the first 2 digits represent the RED value, the
second two digits represent the GREEN value and the last two digits
represent the BLUE value.  Some browsers can only display 216 discrete
colours, so you should prefarably use the "browser-safe" values, which
are all formed from combinations of 00, 33, 66, 99, CC and FF.

The default font is quite small, and the characters are not of a
constant width, which means tables sent by Xrouter will not line up
correctly.  You may use the "font" parameter to override the default.
The recommended font is "Courier", which is slightly larger and uses
constant width.  Note: if the chosen font is not found on the client's
computer, the default will be used, so stick to the common ones.

You may need to reduce the number of rows or columns displayed by the
applet if you find it won't fit on a 640*480 screen (I haven't tested
it on 640*480 but the applet is smaller than those limits.  It fits
nicely on 800*600, but you may wish to optimise it for another screen
size, or even offer users the choice.

If you change the font, rows or cols, you may need to tweak the WIDTH
and HEIGHT attributes in the APPLET tag to prevent parts of the applet
from being obscured.

Don't forget, although the Java applet is called XWEB.CLA (because DOS
can't display long file extensions), it must be called "xweb.class" in
any link, otherwise the browser will not recognise it as an applet.

Version 182f - 1/3/03
~~~~~~~~~~~~~~~~~~~~~

Version 182f is supplied as a model 3 executable only.  If you are not
already running v182b, you must first follow the upgrade trail and
get your system up to 182b, then simply use v182f executable in place
of the 182b executable.  No configuration changes are necessary (as a
general rule, if the version *number* is the same, the new exe will
always be a drop-in replacement).

It's not a long list of changes this time, but if you are thinking it's
not worth the bother of upgrading, I advise you to so so, because the
nodes entries were a little unstable in the last few versions.  And,
as the table is now more stable, there is a lot less INP3 traffic.


- Changes made a couple of versions ago had resulted in a small but
  noticeable delay in netrom traffic - fixed.

- Since the introduction of Time Domain Routing some node entries have
  been a little volatile, with strange effects such as obsolescence
  counts which suddenly drop to zero - fixed.

- Changes in the TCP module to minimise the chances of previously used
  sequence and port numbers being re-used after a dirty restart, i.e.
  where TCP sessions were not closed before restarting Xrouter, possibly
  leaving half-open connections on neighbours.

- Chat users who accessed via TCP port 3600 were not having their stored
  details recovered - fixed.

- TXOK now works differently.  The 0 and 1 states are backward compatible,
  but states 2 and 3 allow the RX to be disabled.  This saves having an
  RXOK command.  State 2 would typically be used to disable all traffic on
  a port, to time out troublesome connections, or to do tests.

	0 = RX ok, no TX
	1 = RX and TX ok
	2 = No TX or RX
	3 = TX ok, no RX

- L4 connection rejects were using the wrong L4 source address - fixed.

- The QUALADJUST default was broken since v182b (it was defaulting to 0).
  This caused neigbour nodes to be omitted from table if there was no
  QUALADJUST line in config - fixed.

- A zero MAXTT wasn't preventing neighours from sending INP3 - fixed.

- As a further concession to Luddites, setting a route's MAXTT to 65535
  will prevent Xrouter from sending RTT measurement frames on that route
  and allow the interlinks to time out.  I can't imagine why anyone would
  *want* links to time out, as they are not actually being metered like
  telephone calls, but there's no accounting for taste.  Like MAXTT=0,
  this prevents all INP3 activity, but it goes one step further and
  returns Xrouter to the bad old BPQ days.. Use it at your peril, as I'm
  not sure the backward emulation is perfect yet.  It wasn't just a case
  of disabling new code, I had to re-install a lot of old code that I
  had happily consigned to the rubbish bin, and try to make the old and
  new code co-exist.

- The "N +" response was listed "long" instead of "wide" - fixed.

- Added two new stats: Nodes free and possible.  The former shows how full
  the table is, and the latter shows how much bigger the table could be if
  uncapped, i.e. it gives an indication of potential table size or suitable
  MAXNODES.  It's not incredibly accurate, more of a guide to help you
  adjust your qualities, minquals, maxtt's and maxhops to get your node
  count to fit within the table size, thus preventing the node entry
  recycling algorithms from being invoked.

- TALK was still broken - it was now allowing *remote* sysops to talk, but
  not *console* sysops! - fixed.


Version 182a  20/02/03
----------------------

Please read this file carefully before running version 182a.  At the
very least you must rename your PZTNODES file to XRNODES, and I advise
you to add the 4 new keywords to XROUTER.CFG.  If you don't do this,
the defaults should be OK (they're ok on my 32 port system), but you
may be using more memory than you need to, and at some time in the
future you might wish to adjust them.

- Added MAXCIRCUITS keyword to XROUTER.CFG.  This specifies the maximum
  allowed number of concurrent Netrom L4 circuits.  The default is 20.
  The higher the figure, the more memory you will use and vice versa.

- Added MAXSESSIONS keyword to XROUTER.CFG. This specifies the maximum
  allowed number of concurrent sessions of any type.  The default is 20.

- Added MAXROUTES keyword to XROUTER.CFG.  This specifies the maximum
  allowed Netrom neighbours.  Default is 30 neighbours.

- Added MAXTCP keyword to XROUTER.CFG.  This specifies the maximum
  allowed number of concurrent TCP circuits, and defaults to 20.

- The memory count on status line is now a more accurate measure of the
  true memory.  Previously it only displayed the amount of unfragmented
  memory, and that figure is is still displayed on stats.

- TALK was seriously broken since v180c, causing Xrouter to crash - fixed.

- Previously, only console sysop was able to use the TALK command.  It
  can now be used by all sysops.

- PMS call:alias were not displayed in nodes list if PMS was empty - fixed.

- Lots of changes to reduce peak memory demand and memory fragmentation.
  It will start with less memory than before, but the fluctuations will
  be smaller.

- The YELL command now displays an error message if Numconsoles=0 (i.e.
  when working in Desqview).

- Added IP TraceRoute function.  This adds a new cmd:
  "TR[acert] <host> [maxhops [maxwait(ms)]]". <host> is target hostname
  or IP address, <maxhops> is the maximum number of hops to test, and
  <maxwait> specifies the maximum interval, in milliseconds, to wait for
  each reply.  Default is 30 hops and 4 seconds.

- Internet-connected HTTP servers tend to get hit with malicious HTTP
  requests from hackers and various worms such as "Code Red".  Xrouter
  is not vulverable to these attacks but they make me angry so I have
  added the facility to block them.  This uses a new file HTTPBAN.SYS,
  which is a simple text file located in the Xrouter directory. It can
  contain URL templates which are used in a case-independent sliding
  match with a requested URL.  Each template can be up to 127 bytes long.
  The match must occur within the first 256 bytes of the requested URL.
  If any part of the requested URL matches the template, the sender's
  IP address is entered into a ban list and all further IP from that
  host is ignored until xrouter is restarted. Up to 20 hosts can be
  banned simultaneously.  If there is a need for more, I can adjust
  this later.  You can find out which are the common hacks by examining
  your daily logfiles, looking for the "HR ... " (HttpRequest) lines.
  Common ones are "/default.ida" and "/scripts"

- HTTP requests did not show session number in log - fixed.

- Added another flag to ACCESS.SYS: 4 = allow guest access.  This flag
  works in conjunction with the "password_required" flag (2) in the
  following way:

  If neither flag is set (i.e. access_flags is decimal 0 or 1), no
  password is required and no password challenge is made.  Users have
  unrestricted access.

  If "password required" is set, but "allow guest" is not set (i.e.
  decimal 2 or 3), a password is required and no guest option is allowed.
  No password = no access. Valid password = full user access.

  If "allow guest" is set, but "password required" is not set (i.e.
  decimal 4 or 5), a password is not required, and is not requested.
  All users have guest access, i.e. they cannot downlink.

  if both flags are set (i.e. decimal 6 or 7), a password challenge is
  made, but the option to use "guest" is available.  If the user gives
  a valid password she gets full access, but if she answers with "guest"
  she only gets guest access.

  Guests are prevented from using the SEND, CHAT and CONNECT commands,
  and from sending APRS messages using the APRS messaging shell.  For
  TELNET they are restricted by the rules in new file TELGUEST.ACL, which
  uses the same format as TELPROXY.ACL.  If the former file is not
  present, guests cannot use the TELNET command at all.

- Added "TCP RESET" command, to kill zombie TCP circuits.

- If nodes table was potentially larger than MAXNODES, Xrouter would
  sacrifice the lowest quality nodes to keep the table size to the
  intended maximum.  Unfortunately, Inferred nodes, i.e. those obtained
  from in-transit datagrams, were usually the first to be lost because
  they had lowest quality - fixed.

- Added layer 1 sent/rcvd bytes in stats.

- Nodes were being downgraded and broadcast with quality 0 - fixed.

- When used in IPROUTE.SYS and BOOTCMDS.SYS, the ARP PUBLISH directive
  was acting like ARP ADD and vice versa.  When used at the command
  prompt they acted normally - Fixed.

- The PZTNODES file is now XRNODES.  You must copy or rename your
  existing PZTNODES file before starting version 182.


Version 181h  (01/02/03)
~~~~~~~~~~~~~~~~~~~~
- Allowed EXTERN interface to use PROTOCOL=SLIP, for use with Xpipe.
  (You may find that earlier versions would receive SLIP over EXTERN but
  wouldn't transmit).
  

Version 181f
~~~~~~~~~~~~~~~~~~~~
- Added WX command, and decoding of up to 5 APRS wx stations.

- Added HTTPPORT keyword to xrouter.cfg, enabling the http server to be
  moved to any TCP port number.

- Modifications to EAX25 to prevent assymetric links in the event of
  simultaneous opening when one station requests the use of EAX25 and
  the other wants to use old AX25.

- Added Server Side Includes (SSI) to HTTP server, providing another
  method of generating dynamic HTML.  The SSI commands currently accepted
  are as follows:

  Command    Attribute 	Attribute value
  ~~~~~~~    ~~~~~~~~~	~~~~~~~~~~~~~~~~~
  ECHO       VAR        DATE_LOCAL
  ECHO	     VAR        LAST_MODIFIED
  EXEC       CMD        <any node cmd string>
  FLASTMOD   FILE       <relative filename>
  FSIZE      FILE       <relative filename>
  INCLUDE    FILE       <any file under current dir>
  INCLUDE    VIRTUAL    <any file within http tree>

  There are plenty of SSI tutorials on the web, so I won't waste time
  trying to explain these.  It has to be remembered that Xrouter's
  prime purpose is to be a packet router *not* a server, hence the
  limited scope of these commands and the reason I don't include full
  cgi-bin capability.  XServ provides that if you need a DOS mail / web
  server.

- Memory blocks counts weren't cleared upon restart, so after several
  restarts the figures were high - fixed.

- HTTP proxy sessions were being prematurely closed when the FIN was
  received from the target before all the data had been transmitted to
  the browser - fixed (v181g).

Version 181e  18/01/03
~~~~~~~~~~~~~~~~~~~~~~
There are only minor changes this time, so I'm sorry to foist yet another
version upon you, but I felt the HTTP memory leak was important enough to
warrant an emergency release....




Version 181a                
~~~~~~~~~~~~~~~~~~~~~~

1) Added AGW TCP/IP host interface on TCP port 8000.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   This allows those applications (e.g. AGWTERM, UI-View etc.) which
   are capable of using AGWPE's TCP/IP host interface, to use Xrouter
   instead of AGW "Packet Engine".

   Thus you may for example run your Xrouter 24/7 on any old DOS machine,
   Ethernet linked into your home LAN, whilst using modern Windows-based
   applications on another LAN machine to access the radios.

   Unfortunately, although Xrouter will run in a DOS window within Windows
   there is no known way, at present, of interfacing Xrouter directly
   (i.e. internally) to the Windows TCP/IP stack, so you cannot use the
   LOCALHOST address to communicate with the Xrouter's AGW host interface.

   I have personally tested it with AGWMON, AGWTERM and UI-View, and would
   appreciate reports from anyone who can test it with other AGW apps.


2) Added http url rewriting.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  This allows invisible proxying of external http servers, and is
  controlled by REWRITE entries in a new HTTP.SYS file.

  For example, if you only have one public ip address, but you have more
  than one HTTP server on your LAN which you wish to make visible to the
  outside world, you could use non-standard port numbers, e.g.
  http://g8pzt.atx.cx:8081, but that is messy.  You can't expect people
  to remember the port numbers, and no-one can be bothered to type them
  in!

  This is where Xrouter can come to the rescue, using the URL rewriting
  facility plus the http proxy to redirect requests to any number of
  alternate servers based upon the first part of the URL.  For example,
  on my system, the standard HTTP port 80 is directed to Xrouter, and
  Xrouter proxies the web server on my separate Xserv machine.

  The syntax of entries in HTTP.SYS is "REWRITE <oldstring> <newstring>",
  where <oldstring> is a partial URL, always starting at the beginning
  of the URL, and <newstring> is a string of characters which will be
  substituted in that URL.  Entries are case-insensitive.

  For example: "REWRITE /bbs http://192.168.0.4" would replace "/bbs" at
  the start of a URL with "http://192.168.0.4", so that a url like:
  "/bbs/cgi-bin/menu.pz" becomes: "http://192.168.0.4/cgi-bin/menu.pz".
  The resulting url then treated as if it was a proxy request, and is
  directed to the approriate server.

  When using the rewrite feature to proxy another web server, the
  resultant url *must* start with "http://<address>[:port]" where
  <address> can be either a hostname or ip address.  Use an IP
  address or local machine nickname for machines on your LAN.

  The rewrite feature can also be used to create pseudo directories
  which are not where they appear to be, e.g.
  "rewrite  /bbs  /systems/gb7pzt".

  There are no validity checks, so you *must* be careful not to
  inadvertently remove "/" characters from the rewritten string, e.g.
  the entry "rewrite /bbs/  http://192.168.0.4" would cause
  "/bbs/index.htm" to be rewriten as "http://192.168.0.4index.htm",
  which will clearly fail.


3) Added "template" file for HTTP command interface.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In my usual haste to release v180 I forgot to include this feature,
   but I didn't realise my mistake because the inbuilt template used
   the same colours as my main menu page!

   Once again, I am giving you an unfinished feature to play with,
   because I've had to rush v181 to you :-(  If you wish to override the
   inbuilt html template for the URLs which begin with "/exec", edit the
   enclosed file EXEC.HTM and put it either in the same directory as
   Xrouter, or preferably on a Ramdisk configured as drive "R:". When
   the server encounters a URL beginning with "/exec?cmd=", it will
   serve the EXEC.HTM file, replacing the <TEXT> tag with the result of
   the executed command.


4) Fixed memory leaks in HTTP and CHAT servers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The HTTP server was losing a small amount of memory with each request,
  and this memory was not recoverable, so Xrouter would eventually run
  out of memory.  This has been fixed.  There were also similar problems
  when users logged out of the chat server back to the command prompt.


Version 180b 10/1/03
~~~~~~~~~~~~~~~~~~~~

- Added very rudimentary HTTP server / user interface.  This will serve
  files off disk, and also provides a means to run certain node commands
  and view the output as web pages.  It includes tunnelling and proxy
  tunnelling support, with egress control.  The HTTP server is located
  on port 80.

  When servicing a request which does not include a filename in the URL,
  (e.g. "http://g8pzt.ath.cx/") the web server looks in the HTTP root
  directory for a file called INDEX.HTM.  If that file is not present, it
  will look for DEFAULT.HTM.  I have supplied a simple example INDEX.HTM,
  for your guidance.  It is by no means a perfect web page, just something
  thrown together to test a concept. You may alter it to suit your own
  preferences if you have some HTML skill.  You may need to alter the
  address in the "Connect" link to suit your own IP address/hostname.
  The connect function is normally performed by a Java applet, but I am
  not including that at present, as someone has reported that their
  browser doesn't display it properly.  I'll post it to the group when
  I've had a look at the problem.

  INDEX.HTM is meant as a default entry point for your Xrouter-hosted web
  site.  Although Xrouter's primary purpose is a router not a server,
  and the primary purpose of Xrouter's HTTP server is to provide a web
  interface to the system, you may choose to create a complex web site,
  of which the command interface is but a small part.  You may prefer to
  use index.htm as a splash or menu page for your site, putting the
  command interface on one or more linked sub-pages.  Or you may choose
  the opposite approach, putting all the commands on the main page along
  with links to other sites.  I leave the creativity to you...

  The web server root directory is specified using the HTTPROOT directive
  in Xrouter.cfg, e.g. "HTTPROOT=C:\WEB".  If you omit this directive,
  the default will be a directory called "HTTP" within the xrouter
  directory.  For security reasons it is important that you don't use the
  Xrouter directory as the HTTP root!

  A new HTTP.ACL file holds the egress control rules for the proxy/tunnel,
  and should preferably be located on a ramdisk configured as drive R: for
  best results. If a ramdisk is not used, locate the file in the same
  directory as Xrouter.  If the file not present, all egress is blocked.

- The SEND command caused crashing when used in CRONTAB.SYS - fixed.

- In networks where there are a lot of unreliable nodes, Xrouter could
  waste a lot of airtime trying to connect to them, not only for link
  checking but also when trying to route traffic for nodes advertised
  by those neighbours.

  For non-locked routes therefore, Xrouter now zeros the route quality
  if it fails to connect, which prevents it from trying again until the
  next nodes broadcast is heard from that neighbour.

  There is a caveat... a *good* non-locked route could be disabled for
  up to an hour by a temporary outage, so the sysop must now lock in all
  the wanted routes to ensure best reliability.

- Added "-a" switch to Netrom/ax25->telnet proxy.  This must be the
  LAST argument, and if present it opens an ascii (i.e. normal telnet)
  downlink instead of a binary one. This is to allow it to be used with
  DxSpider.

- The "R X" command was displaying the wrong caption probably since
  v179a - fixed.

- Added new file TELPROXY.ACL to provide TCP/IP egress control for the
  Telnet proxy server.  This should preferably be located on a ramdisk
  configured as drive R: for best results. If a ramdisk is not used,
  locate the file in the same directory as Xrouter.  If the file not
  present, all egress is blocked.

- Added comprehensive TCP/IP packet filtering controlled by ACL rules
  located in IPROUTE.SYS.  This acts upon both incoming datagrams and
  those originated by xrouter, and can filter packets based on any
  combination of source or destination IP addresses, Layer 4 protocols
  and layer 4 service port numbers.  It can for example be used to
  control access to the HTTP server, telnet proxy etc., or as a firewall
  for other systems.  If no ACL rules are specified, no filtering is
  performed.  Even if you don't need this at the moment, you might like
  to cut the following and append it to your IPROUTE.SYS file to keep
  it up to date.

  ------------------------------ Cut -------------------------------

# ==================================================================
# TCP/IP filter control rules
#
# Fields: ACL <action> <src_ip>[/mask][:port] <dst_ip>[/mask][:port] [proto]
#
# <action>      PERMIT  Allow routing / access
#               DENY    Prevent routing / access
# <src_ip>      Source IP address of datagrams
# <dst_ip>      Destination IP address of datagrams
# [mask]        Either: No. of bits (0-32) to match from left to right
#               Or:     Subnet mask in form n.n.n.n
# [port]        TCP / UDP service numbers (0-65535) 0 = all ports.
# [proto]	Protocol number (TCP=6, UDP=17. 0=all protocols)
#
;acl permit	192.168.0.0/16	44.131.91.0/24
;
; prevent tcp access to test xrouter web server from bbs
;acl deny	192.168.0.4	192.168.0.2:80	6
;acl permit	192.168.0.0/24	0.0.0.0/0

  ----------------------------  End -------------------------------


- The L3ONLY configuration keyword was obsoleted by CFLAGS two years ago
  and should have been removed because it no longer had any effect - now
  removed.

- If CFLAGS was configured to prevent users from downlinking on a port,
  it also prevented applications from downlinking on that port.  This
  was intentional, because some applications contain gateways which
  allow users to connect from the application to the node, thus any
  users which do so must not be able to override security.  However,
  some applications may have valid reasons for needing to override a
  downlink ban, so I have added a new flag to CFLAGS:

     4  - Applications may downlink unconditionally.

  If this flag is set, applications may downlink whatever the setting
  of the "Enable L2 downlinks" flag. e.g. CFLAGS=1 prevents everyone
  except sysops from downlinking, whereas CFLAGS=5 prevents everyone
  except sysops and applications from downlinking.

- The ability to give an application sysop privileges might be useful
  for those who run tsthost or pac4 as a sysop console, so I have added
  a new keyword APPLFLAGS to the APPL configuration block.  If
  APPLFLAGS=1, the application gets sysop privileges.  This required a
  minor change to PZTHOST.EXE v1.5, the new version being v1.6.  You must
  use pzthost1.5 with xrouter179 and pzthost1.6 with xrouter180.

- Added another flag to CFLAGS, to keep the Luddites happy.  Setting this
  flag (bit 4, decimal 8) will prevent L3RTT frames from being originated
  on the port.  It will not prevent Xrouter from trying to hold L2 links
  open, as that is a retrograde step.  This flag is not set by default.
  Without L3RTT frames, INP3-capable neighbours will not send INP3 to you.

- If global MAXTT or all port MAXTT's were set to 0, the "internal" nodes
  such as chat, pms, proxies etc. were not entered into nodes table - fixed.


Version 179c	18/12/02
~~~~~~~~~~~~~~~~~~~~~~~~~~
- Allowed '#' to be used to denote comments in addition to ';' in file
  XROUTER.CFG.

- Added the ability to schedule commands using a CRONTAB.SYS file.  This
  can be used for example to send APRS "object" beacons at certain times,
  add / remove routing entries, reboot the system etc.

- Added "Exit <0-255>" command for scheduled exits.  The argument is the
  "errorlevel" the program will return for use in batch file processing.

- Added TNC2 emulation for rs232, i.e. a feature which allows RS232
  devices such as weather stations, dumb terminals, GPS and telemetry
  devices to send and receive packets as if connected to a real TNC2.
  The interface is TYPE=ASYNC, and PROTOCOL=TNC2.  Commands recognised
  are Ctrl-C, AUTOLF, CONNECT, CONVERSE, DISCONNECT, ECHO, FLOW, K, MCON,
  MONITOR, MYCALL, PORT, UNPROTO.
  All settings are saved to the file TNCn.CFG where 'n' is the interface
  number.  This file is read at start up, so the TNC always returns to its
  previous configuration.
  You can have as many TNC emulators as you wish, providing you have an
  RS232 port for each one.  You should preferably use a different MYCALL
  or SSID for each one if there is any chance of more than one TNC being
  used on the same radio port.

- Added proxies to allow L2 and TCP/IP systems to be proxied onto NetRom,
  i.e. to give them a L4 visibility.  These are activated by new
  global PROXY= commands in XROUTER.CFG as follows:

	PROXY=<call> <alias> <qual> <ipaddr> <tcpport> [pass]
	PROXY=<call> <alias> <qual> <l2call> <rfport>

  The first form is for Netrom->TCP and the second is for NetRom->Ax25.
  Note that the password is not used in the Netrom->ax25 case.  I'm
  not sure I agree with giving every Tom, Dick and Harry ax25 system a
  L4 presence because the node tables are already full enough!
  The optional [pass] argument can be up to 8 characters, and is sent
  after the callsign on the first line sent upon connection, to verify
  that the connection is coming from the proxy.  Examples:

	PROXY=gb7pzt kdrbbs 150 192.168.0.4 8888 mypass
	PROXY=mb7uyl tstbbs 120 g8pzt-3 7

  If you wish the TCP/IP system to be visible to AX25 but not Netrom,
  set the quality to zero.

- Added a telnet proxy on port 2323.  This is the reverse of the above,
  allowing an intranet TCP/IP host to make fully binary downlinks with
  extranet TCP/IP, Netrom and AX25 hosts.  If the TELPROXY.MSG file is
  present, it sends the contents upon login.

- Fixed a bug in LAPB which was causing sessions to persist in a zombie
  state long after the user had gone away.  This was only happening when
  the user switched off whilst in an RNR condition.

- In the case of a circuit formed of an L2 uplink and L4 downlink, if the
  downlink closed but the uplink tx couldn't be cleared (e.g. the user
  had switched off their terminal and left their TNC to fill up), the
  session would persist forever waiting for the uplink TX to clear.
  Strictly speaking, this is correct behaviour, because there is data
  queued for the user which must be delivered - but in amateur practice
  no-one cares about data integrity, so it is more usual to kill the
  uplink when the downlink closes.  As a compromise, I have enabled the
  session inactivity timer on this state which gives the user a 15
  minutes grace period to collect their data, after which it will be
  dumped and the circuit killed.

- FTP downloads were slower than uploads - fixed. It seems to be limited
  by the HD transfer rate now.

- Added PASV mode to FTP.  I had originally omitted this because I
  considered it a security risk, but I was asked to add it.

- If a L2 link goes down, that link may be carrying 20 L3/L4 circuits,
  each of which has a maxq of 4096 bytes.  This could drive Xrouter out
  of memory, so I've added another limit - when the free memory is getting
  dangerously low and the queue looks like it is not moving, L3/L4 frames
  will not be queued for that link.

- DNS timeout was backing off to very high values when it couldn't get a
  response from the server. I don't think this had a major effect other
  than causing it to try only once per resolution session. Removed the
  timeout backoff, because it is not really necessary these days.

- The "Tries" figure in "DNS LIST" signifies the number of consecutive
  requests sent without getting a reply.  It is incremented for each
  request sent, and reset when a reply is received.

- Added per-console command history.  Ctrl-leftArrow goes backwards and
  ctrl-rightArrow goes forwards. History is only 5 lines at present.

- Fixed a bug which caused sysop commands to appear in scrollback without
  CRLF's, thus jumbling the display.

- If ENABLE_LINKED was set to 'A' it wasn't allowing host apps and remote
  sysops to use the "*** Linked ..." command - fixed.

- After much soul-searching I have reluctantly added Netrom quality
  derating by callsign.  This dangerous tool allows you to reduce the
  quality of "foreign" nodes on your system, and uses the global
  QUALADJUST keyword as follows:  QUALADJUST <call | "default"> <0-255>

  e.g.	QUALADJUST default 120
	QUALADJUST G* 255
	QUALADJUST ZL* 200

  The "default" argument sets the default value which will be used to
  de-rate all nodes not matched by any other qualadjust statement.  The
  normal netrom de-rate algorithm is used, so 255 gives no de-rate and
  0 gives full de-rate (i.e. lock out a call or group of calls). If there
  are no qualadjust statements the default is 255.  Qualadjust is applied
  to neighbour nodes and all nodes learned from netrom broadcasts.  It is
  not applied to nodes learned by INP3 because they have no quality to
  derate, and is not applied to nodes entered by a NODE ADD command or an
  entry in the PZTNODES file.

- Added current circuits, allocated memory blocks, warm restarts and max
  nodes counts to stats.

- Several internal storage structures, including Nodes table and L2 links
  converted to use pre-allocated instead of dynamically allocated memory,
  in an attempt to reduce memory fragmentation.  I've thought long and
  hard about this - I wanted everything to be dynamic, but as the program
  has grown, memory has become more scarce.  Additionally, it has become
  obvious that there is no point in allowing nodes tables to grow beyond
  150 or so nodes, because it causes big problems for neighbours running
  older software, takes too long to broadcast on slow radio links, and is
  too much data for users to deal with.  The maximum nodes table size now
  defaults to 200, and the maximum L2 links defaults to 30.

- Added MAXNODES and MAXLINKS to Xrouter.cfg.  You can set these as high
  or low as you like, to override the defaults.  The higher you set them
  the less free memory you will have available - the choice is yours.

- Added P)rev and N)ext page list commands to line editor.

- Added H)ash and U)nhash commands to line editor - these are useful for
  "commenting-out" lines without retyping.

- The "R T" command now shows the time of last nodes broadcast received
  from each neighbour instead of the time of last L3 activity - which is
  now added to the "R Z" response.

- Added "R Y" mode to display STT (Smoothed Trip Time) and flags for each
  neighbour route.  It reports two nodes counts.  The first is the number
  of nodes of any type whose best route is via the neighbour.  The second
  is the number of time-domain-only nodes whose best route is that
  neighbour.

- Netrom obsolescence counts are no longer refreshed if the node quality
  falls below the port minqual.  This allows the nodes to go obsolete if
  the minqual is raised after the nodes have been accepted into the table.

- Added LOWMEM keyword in Xrouter.cfg.  This specifies the lowest free
  memory before automatic restart.

- The maxmem and minmem stats were being set to -8 when it ran out of
  memory, due to a Turbo-C bug - fixed.

- The "N V <call>" command was showing nodes who *could* be routed via
  the neighbour, i.e. those nodes where the neighbour was one of the
  possible routes.  It now shows only the nodes whose *preferred* choice
  is the neighbour, but the original behaviour is made available by
  a new N A <call> command, i.e nodes advertised

- Added "N +" to show nodes which have both netrom and time domain
  information.

- On "N" displays, replaced "End of list" with the number of nodes found.

- Added wildcard node listing command, e.g. "N GB7*". Only the "*" and
  "?" wildcards are accepted at present.

- Obsolete nodes (all routes with obscnt < obsmin) are no longer
  displayed by plain "N" command, to avoid confusing users and sending
  long lists of unusable nodes.

- Obsolete nodes can now be displayed alone by "N O", or along with
  other hidden nodes by "N *".

- Added "N I" to list the nodes for whom ip addresses are known.

- Added trip time and hop count to each route in the "N <call>" display.
  This is not the same as the "RTT" (Round Trip Time) and "Hops" which
  were already displayed, and are measured and propogated by different
  mechanisms.

- Added ip routing mode "r" (reject).  This allows the sysop to reject
  datagrams for which there is no route.  For example, if the destination
  address of a received datagram is known not to exist, it is a waste of
  resources to send the datagram anywhere, and if we did send it, it could
  end up looping back to us.  So it is better to dump it and send an ICMP
  "destination unreachable" report to the sender.
  An entry such as "route add 44.131.91.0/24 0.0.0.0 0 r" will reject all
  unroutable 44.131.91.x datagrams.

- Added IP routing mode "s" - as above but silently discards the packets,
  which is useful when dealing with malicious network probes.

- For IP routing modes "e" and "n" a zero port number was acceptable - now
  "r", "s" and "u" can also have zero port number.  It doesn't make much
  difference because the port number was ignored anyway.

- I was asked to add the ability to read "encap.txt", so I have done so.
  I don't recommend its use unless you absolutely need to do so, as it
  fills up the memory with almost 600 route entries, which may have an
  effect on performance.

- Routes marked as "private" i.e. entered from encap.txt or with the
  'P' flag, are no longer displayed to non-sysops.  There are two
  reasons for this: Firstly we don't want to spew 600 lines of text to
  anyone who uses the "IPR" command, and secondly, there is great
  secrecy about "encap.txt" and the IP addresses contained within it,
  lest us mere non-linux mortals should learn how the great gateway
  gods are (mis)routing our datagrams.

- The "gateway" field in IP "ROUTE ADD" commands can now accept either
  hostname or IP address, which makes it possible to route to gateways
  which use dynamic IP addresses via dynamic dns servers.

- Added a bodge to prevent corrupt L3 frames from Xnet systems from being
  routed to neighbours.

- Modified console to bleep when ASCII "bell" character rvcd.

- Added limited interconnectivity between Xrouter Chat and Tampa Ping-Pong
  converse systems.  Chat links are specified as follows:
  CHATLINK=brmcht 80.195.22.67:3601 or /LI ADD brmcht 80.195.22.67:3601
  Because the channel layouts and topologies of the two systems are
  completely incompatible, interconnection of channels is not possible.
  Ping-pong channels are mapped as negative channel numbers from 0 to
  -32767, and Xrouter chat as positive numbers from 1 to 32767.  The
  default channel for Xrouter chat is now 1 not 0.  Data received from
  Ping-pong is not propogated via the Xrouter chat interlinks and vice
  versa.  In effect, Xrouter can become a stub Ping-Pong host, but not
  part of the Ping-Pong network.  Users may listen to channels on both
  systems simultaneously.  Xrouter chat was specifically designed for
  use on an anarchic, slow radio network, whereas Ping-Pong requires a
  more planned network topology to avoid loops.  The amount of data in
  the Ping-Pong system would overwhelm radio links.

- Chatserver now allows several incarnations of the same user, providing
  each one is logged onto a different chat host.  Previously (and
  deliberately), only one incarnation was allowed, so if a user changed
  name on one server, it would update it on all others.  The user must now
  set name and personal texts separately on each server he's logged to.
  This change was necessary because of the common practice of users
  logging onto several chat servers at once for test purposes.

- If a peer set their consolecall to the same SSID as the chatcall, its
  immediate neighbour chat server would relay two slightly different
  copies of each frame sent by that peer - fixed.

- Added callsign validity check for chat server TCP/IP login.  If the
  entered call is not a valid callsign, it dumps the connection.

- Added new chat commands to enable the user to control the type of
  display she requires:

  /ANSI [on | off] controls the use of ANSI colour.  If the user has an
  ansi-compatible display (Xrouter and Linux consoles are ansi-compliant),
  and ANSI is ON, each user will be displayed in a different colour to
  aid identification.

  /BELL [0-3] controls whether or not ascii BELL characters are sent to
  alert the user when something happens. 0=no bell, 1=alerts only, 2=text
  only, 3=both.

  /ECHO toggles the echoing of the user's text.

  /HEA[derln] [on | off] controls whether or not the header is displayed
  on a separate line to text.  Default is OFF, i.e. header and text on
  the same line.

  /S[tamp] [on | off] controls whether or not the message timestamps,
  channel number and sender's chat host are displayed on messages.
  Default is ON, i.e. all information is present.  If set "off", only
  the sender's call and name are displayed.

  (The display can be butchered to look like Tampa Ping-Pong by setting
  ECHO OFF and STAMP OFF)

- Chat: Names are now normalised.

- CHAT: timestamp now displays the sender's local time, instead of GMT.

- Added local timestamp to chatserver, so that captured text can be put
  into context.  This also helps if you walk away from the screen and
  come back some time later, and helps to show the time delays, time
  zone differences and clock errors.

- On chatserver /LINKS display, "first-login" and "last-heard" were
  always the same - fixed.

- Chatserver "/W *" display modified to show user's server, and "since"
  is replaced by "idle".

- Added link add / drop subcommands, e.g. "/LINK [Add | Drop] <peercall>",
  to chatserver.

- Chatserver code rewritten to save some bytes and add new bugs :-)

- Callsigns reported to host applications are now normalised to upper
  case because some applications treats lower case callsigns as invalid.

- ROUTE ADD now accepts two extra arguments: maxtt and maxhops, which can
  be used to limit the no. of nodes learned via that route. Syntax:
  ROUTE ADD <call> <port> <qual> [!] <max> <frack> <pac> <maxtt> <maxhops>
  e.g.: route add g8pzt 5 100 ! 0 0 0 2000 5

- Added global and port MAXTT to XROUTER.CFG.  This sets the maximum
  accepted trip time for nodes, creating a network horizon for Time
  Domain routing.  Route maxtt defaults to port maxtt, which defaults to
  global maxtt, which defaults to 5000.

- Added global and port MAXHOPS to XROUTER.CFG.  This sets the maximum
  accepted hop count for nodes, as another means of limiting the Time
  Domain network horizon.

- Added automatic neighbour route quality calculation, activated by
  entering 256 as a route quality in a ROUTE ADD command, or in the
  ROUTES section of xrouter.cfg.  Use this at your own risk! It will
  track RQ changes due to propogation changes, faults and traffic load,
  and may result in traffic being re-routed via a better quality route.
  It is better to use fixed qualities if you need to guarantee use of
  one particular route instead of another, but you may like to use the
  autoqual for a while to give you an idea of the link quality and
  its variability. Note: This uses the British notion of "quality",
  which gives lower and more realistic figures than the outdated
  "192 for everything" scheme or the equally stupid schemes which
  result in a painfully slow (20 second RTT) link being assigned a
  quality of 204!

- Routes which are learned, rather than locked in, may also use autoqual
  by specifying port QUALITY > 255. e.g. QUALITY=276 would set the default
  RQ for learned routes to 20, which would be gradually adjusted as quality
  calculations are made.

- Locked nodes were able to have quality overwritten to 0 by received
  broadcasts - fixed.

- The "T/o" figure on "Links" display was only maintained for links
  which supported L3 traffic, but is now maintained for all L2 links and
  is captioned "Idle" instead.  It shows the number of seconds elapsed
  since data was last passed on the link.

- New command can be used in bootcmds.sys:
  "netrom node add <call[:alias]> <viacall> <port> <qual> [!]
  (Not yet tested)

- Bug in netrom quality calculation resulted in very little derating at
  high quals.  e.g. if port qual was 254 and it received a node entry of
  quality 255, it would store a qual of 254, whereas it should have been
  253 - fixed.

- Instead of a single NODESINTERVAL, there is now one per port and they
  can operate asynchronously.  Thus it is possible to broadcast every
  10 minutes on ports which link to Xnet neighbours, whilst maintaining
  a one hour broadcast on netrom network.

- Setting port NODESINTERVAL to 0 prevents Xrouter from making nodes
  broadcasts on that port, and also to ignore received nodes broadcasts.
  If QUALITY is non-zero it will still accept netrom traffic and INP3
  unicasts.  Setting QUALITY to 0 will suppress all L3 activity.  To
  allow netrom but suppress INP3, set QUALITY and NODESINTERVAL to
  non-zero, and set MAXTT to zero.

- The inter-packet timer for netrom nodes broadcasts was fixed at 5 secs,
  but is now dependent on port RFBAUDS.  It is approximately 5 secs for
  1200 bauds, 900ms for 9600 bauds, down to 200ms for anything over
  30Kbauds.

- If a link is one way, e.g. the tx is broken but the rx is still hearing
  nodes broadcasts, the nodes learned from that neighbour are ignored and
  not propogated.

- Added automatic link establishment for all neighbour nodes with a
  non-zero quality in the routes table, and added display of interlink
  state to the ROUTES display.

- Someone reported seeing <CONN NAK> <CHOKE> in response to his connect
  requests, and was wondering why they aren't logged in the "chokes_rcvd"
  stats.  <CHOKE> with <CACK> is Netrom's <CONN NAK>, i.e. their way of
  refusing a connect request, so I have now suppressed the <CHOKE>
  display on <CACK> frames to avoid confusing people!

- Added INP3 compatibility to my existing peer information exchange code.

- AXIP and AXUDP can now accept either domain names or IP addresses for
  the port IPLINK address.  This allows AXIP/UDP links to be made with
  partners who use dynamic dns services.

- Removed the 16 channel limitation on AXIP and AXUDP interfaces.
  CHANNEL is no longer needed for ports which use these interfaces.

- Added checks for missing / duplicate IPLINK addresses in AXIP and AXUDP.

- When AXUDP link partners are accessing the Internet via NAT routers
  the UDP source port number is sometimes translated, so that it
  doesn't match the UDPREMOTE number.  Some NAT routers can be configured
  to "open" specific UDP ports, i.e. route the traffic without
  modification, but some cannot.  Therefore I have removed the
  requirement for the UDP source port on incoming AXUDP frames to match
  the UDPREMOTE number.  This now means that only one AXUDP session can
  be held per IPLINK address, but I can't forsee that being a problem.

- Users may now connect directly to PMS, Chat, and proxied Netrom calls
  by issuing a normal "connect to callsign" command from the main
  command prompt, e.g. "C KDRCHT".

- NCMP and NRR now respond on behalf of Chat, PMS, applications and
  proxies.

- Transmitted unproto frames were not displayed via BPQHOST "raw" receive
  function - fixed.  It now displays all transmitted and received frames
  *except* ones which are piped from other ports.

- Upon connection to an application, the application callsign is now
  reported instead of "host08" etc.

- Corrected wording of F3 prompt to reflect the fact that port number
  is now decimal not hex.

- Added "(f1=help)" to F3 and F4 prompts.

- Started implemented alternative models to minimise memory usage.
  Model 1 is the full version, Model 2 omits Dial Up Networking,
  Model 3 omits DUN and PPP, Model 4 omits DUN, PPP, PMS, Applications,
  YAM and SCC support, and Model 5 omits DUN, PPP, PMS and SCC.

- Someone using an ADSL router reported that he wasn't able to telnet
  out via that router, whereas incoming connects were possible.  This
  was due to a precedence mismatch.  Like many others I had interpreted
  the TOS byte back to front.  This was causing a precedence mismatch
  and consequent reset as specified by RFC793 p 31. It only came to
  light because the ADSL router was setting some bits in the TOS which
  are usually zero - fixed.

- Added saving and reloading of stats across a restart.  To be improved.

- Netrom PINGS were being responded to by target, but not routed through
  intermediate xrouters - fixed.

- IGATE: Frames we injected into APRS_IS were sometimes coming back to
  us and being retransmitted - fixed.

- Under certain circumstances, PING sessions would continue in the
  background even after they had been aborted - fixed.

- DNS: Timeout and SRTT figures returned by "dns list" command are now
  displayed in milliseconds instead of seconds because Internet
  connectivity has made DNS access a lot faster than it used to be.

- Fixed two potentially serious bugs in NRR which were causing endless
  ping-pongs of nrr, and multiple replies.  These bugs were recently
  introduced, so older versions are not affected.

- Added IPUDP - i.e. amateur IP encapsulated within commercial UDP/IP.
  IPUDP links are specified simply by adding an IP routing entry
  with mode "u".  The "gateway" field is the peer's public ip address.
  The main ip address is used as the source address of the encapsulated
  datagram, and the interface address for the encapsulating datagram.

- Added session type mnemonics and idle times to "users" display.

- Although main ID msg was sent with a CR on the end, the port ID
  messages were not.  Fixed - they all have CR on the end now.

- AX25L2 supervisory frames were originally traced without a trailing
  newline, to fit more frames on the screen similar to BPQ's display.
  But it was very difficult to read the trace display, especially as
  other frames were terminated in CR, making it inconsistent.  Added a
  CRLF after the supervisory frame.  Also added a conditional CRLF after
  the L2 text trace.  If the packet already ends with CR it doesn't add
  an extra one.

- AX25 T3 timer now has a +/- 20 sec uncertainty factor in 4 sec steps,
  to reduce the likelihood of two stations sending link check frames to
  each other at the same time.

- APRS: Added response to ?IGATE? general query.

- Added recording of local aprs users, so that the igate now transmits
  only messages for local users.

- Igate now removes unused digis and Q contructs from frames transmitted
  to RF.

- APRS frames from aprsserve containing qAX construct are not propogated
  to rf.

- Raised the number of ports which can be traced, from 16 to 32.  The
  port combination for tracing can now be specified in one of 3 ways:

	"#xxxx	- hex bitfield, up to 32 bits.
	"n"	- Decimal port number, 1 - 32 or 0 to disable.
	"n+n+n"	- Combination of port numbers (no gaps).
			e.g. 	"#22"	will monitor ports 6 and 2
				"17"	will monitor port 17 only
				"1+5"	will monitor ports 1 and 5
	Note the compulsory use of # where previously it was not
	necessary.  Whilst I like to maintain backward compatibility
	with previous versions, one sometimes has to move forward!

- Added MPORTS and MMASK keywords to console definition, allowing the
  defaults to be overridden on a per-console basis.

- L4: <CREQ>'s from the chat server were sent with the nodecall as the
  source node e.g. "G8PZT-8 at G8PZT", which was incorrect - the chat
  server has its own L4 cal, so it should be sent as "G8PZT-8 at G8PZT-8".
  - fixed.

- Added "BELL [n]" command where n follows the same rules as for the
  MPORT command.  This sets the hours at which the connect / disconnect
  and sysop paging bells are allowed to ring.  Bit 0 of the value
  represents hour 0 and bit 23 represents hour 23.  If any bit is set,
  the bell is enabled for that hour.  This command can also be used in
  BOOTCMDS.SYS.

- Users of the APRS server are now identified on the Users display.

- Added RADIUS <km> command to IGATE.CFG. This defines a radius in Km
  within which position reports which satisfy filtering rules will be
  gated from Internet to packet.  Default is 100km.  Setting it to 0
  allows unlimited gating of position reoprts unless they are blocked
  by the filter rules.

- IP datagram mode wasn't working via AXUDP - fixed.

- Added domain resolution to "host" command, so it can now look up any
  hostname, not just those in domain file.

- Disabled chatserver flow control. This was originally intended to
  guarantee that no-one would lose any frames, but in today's mixed
  fast internet/slow RF environment it meant that one slow RF user link
  was able to stop all other users from sending anything to the server.
  It is of course the slow links who should be penalised, not the fast
  ones, so if a user link can't keep up with the traffic, frames are
  now dumped.

- Added MINTXQUAL <port> [0-255] command.  This is used to display or set
  the minimum quality of node which will be transmitted on the port, and
  would typically be used to limit the number of nodes broadcast to a
  neighbour node with limited table capability.  The neighbour could
  achieve the same effect by setting his MINQUAL higher, but MINTXQUAL
  also reduces the size of the NODES broadcasts, thus saving RF resources.

- Added MINTXQUAL keyword to PORT blocks in Xrouter.cfg.

- Added Netrom L4 "reset" function.  This immediately kills a L4 circuit,
  and is used when one end of a circuit has lost its circuit table (e.g
  because it has been rebooted).  Vanilla Netrom would usually take
  (L4T1 * L4RETRIES) seconds to detect that one end had died, and would
  then take a similar interval trying to close it.  Since hams are always
  taking their systems on and off line, this is a significant problem.

- Added YELL command to page sysop - does a star trek door bell sound on
  console.

- Added TALK <session> command.  This allows sysop to talk to any user,
  breaking in on their command-line session.  It will not break in on
  any other session, e.g. if the user is downloading messages from a BBS.

- Big rewrite of initialisation code because it kept failing to compile
  due to lack of memory.

- Fixed a bug which was causing a failure to receive MSS-sized TCP/IP
  packets on Ethernet.

- Port ID text was fixed at 30 chars (same as BPQ) - it is now variable.

- Added connect / disconnect bells, hardcoded to ring only between 7am
  and 11pm local time.

- Added GlobalNet(r) routing protocol.


Version 176c 30/7/02
~~~~~~~~~~~~~~~~~~~~
- "IP QUIET 1" was having the opposite effect to the intended one, i.e.
  it enabled ICMP echo replies instead of suppressing them. Fixed.

Version 176b 25/7/02
~~~~~~~~~~~~~~~~~~~~
- NAT commands are no longer sub-commands of the IP command.

- BOOTCMDS.SYS now accepts ARP, DUN, IP, NAT, PPP, and RIP configuration
  commands.

- While rooting around the code, I found a long forgotten DIAL command,
  left over from DUN development.  This caused a dialer script to run,
  but was hardwired for port 1.  Added a <port> argument, so the
  syntax is now "DIAL <port> <script>".  You would use it to manually
  trigger a dial-up connection.

- PZTHOST and PZTSOCK drivers now accept the switch "-8", to restrict
  them to 8 bit application support only.  When the driver is loaded
  before Windows, using the -8 switch prevents Windows from attempting
  to load BPQ's 16 bit drivers.  You need the 16 bit drivers for UI-View
  and Winpack, but DOS applications like PAC4, PZTBBS, and DOSFBB don't
  need them.

- When PZTHOST / PZTSOCK are loaded before Windows itself, when Windows
  booted, it would look in "\WINDOWS\SYSTEM\" to find BPQCODE.386.  This
  was *exactly* the same behaviour as BPQ.  But I was asked to hard-code
  the drive letter, so the path is now "C:\WINDOWS\SYSTEM\".  If your
  Windoze is not on C: you will now have to create a dummy directory on
  on the C: drive and stick BPQCODE.386 in it.

- ENABLE_LINKED now defaults to N instead of Y.  If your applications
  don't work with this version, it's because you have omitted the
  keyword.

- On big systems with lots of ports and very large nodes tables, there
  was not enough time to broadcast the entire table on all ports before
  the next broadcast was due.  In order to alleviate this, nodes
  broadcasts no longer honour the port PACLEN, using maximum sized
  packets instead.  The interval between frames is halved from 10 to 5
  seconds.  This is a bodge, and I will fix it properly in a later
  version.


Version 176a 18/7/02
~~~~~~~~~~~~~~~~~~~~
- Added DHCP client. This allows Xrouter to obtain IP, gateway and DNS
  addresses dynamically from a DHCP server, therefore enabling it to be
  connected directly to a cable modem as used by broadband cable ISP's.
  DHCP client action is enabled by putting "DHCP=1" in the appropriate
  PORT block in xrouter.cfg. The port IPADDR will then be set by
  DHCP.  If no global IPADDR is specified, it will also be set by dhcp.

- DNS: Modified to accommodate the situation whereby, if DHCP is used,
  the router's IP address(es) may change dynamically.

- DNS: External queries which returned a CNAME record would not resolve,
  although CNAME records in the DOMAIN.SYS file resolved normally - fixed.

- TCP: Fixed problem whereby outgoing TCP sockets were getting stuck in
  state 7 (CLOSE_WAIT) if the other end initiated link closure.

- APRS: Added an APRS server, enabling clients to exchange APRS frames
  with each other, with RF ports, with Internet servers, and with users
  of Xrouter's APRS messaging system.

- Initialisation of PSTN modems is no longer hardwired.  Now uses new
  INITSTR keyword in PORT section of xrouter.cfg.




Version 175f 5/7/02 (Restricted release)
~~~~~~~~~~~~~~~~~~~
- AXUDP: Initialisation wouldn't allow more than one AXUDP port to use
  the same local socket (IP address / UDP port number pair) - fixed.


Version 175e 29/6/02
~~~~~~~~~~~~~~~~~~~~
- When the router had been running for a long time, such that the total
  of incoming and outgoing AX25 L4 connects exceeded 32767, L4 connect
  commands issued at the command prompt were returning "Node Busy"
  message - fixed.


Version 175d 30/3/02
~~~~~~~~~~~~~~~~~~~~
- Added IP QUIET <value> command.  If non-zero, this suppresses
  responses to port probes etc.

- DNS: Minor bugfixes.

- NAT: Some changes to accommodate dynamic port IP addresses, e.g. if
  port obtains its IP address from an ISP using dialup PPP.  It no
  longer needs a special routing entry directing the public IP address
  onto a private port.


Version 175c 29/3/02
~~~~~~~~~~~~~~~~~~~~
- Modem callers: The command "XLINK PPP" now causes it to read file
  "ppphost.x" where x is the incoming port number.  This file can
  contain any PPP commmand, and is used to configure the resulting
  PPP link before it starts.

- New "<" command (e.g. "< <filename>") reads commands from a text file.
  This can be used to automate frequently used sequences of commands.

- DNS: Added DNS proxy.  In combination with dialup PPP and NAT, this
  allows Xrouter to perform internet connection sharing for a network
  of machines.


Version 175b 20/3/02
~~~~~~~~~~~~~~~~~~~~
- DNS: Added "DNS <ADD | DROP | LIST>" commands, to allow the list of
  domain servers to be managed on the fly.

- PPP: Added lots of sub-commands to allow PPP links to be configured
  on the fly.

- ARP: Added support for ARP over virtual ciruits, which for some reason
  I hadn't included before because I thought that it wasn't valid!  I'm
  still not convinced....

- ARP: was only responding to queries in which the target IP address was
  that of the port on which the request was received, i.e. the ARP on
  each port had no knowledge of the addresses on other ports.  It now
  maps all Xrouter's addresses to the appropriate port's hardware address.


Version 175a 18/3/02
~~~~~~~~~~~~~~~~~~~~
- Added PPP.

- DNS queries are now sent using the PORT address instead of the core
  address, because the core address may be private, which is clearly
  unsuitable for transmitting on a public network.


Version 174c  25/2/02
~~~~~~~~~~~~~~~~~~~~~
- FTP: Further work to accommodate automated FTP clients.  It now seems
  to work OK with "CuteFTP" and "SmartFTP", but in order to make this
  possible, "CoffeeCup FTP" will display PM times as AM - but that's a
  bug in CoffeeCup, not my problem.

- Added support for PSTN modems on ASYNC interfaces. This adds a new
  interface protocol: "MODEM". Initialisation of the modem is hardwired
  at present.  If the modem is set for auto-answer, callers can access
  Xrouter via the PSTN.

- Added new XLINK command (syntax: "XLINK <slip | ppp | kiss>") to allow
  incoming modem callers to switch to a link protocol other than ascii.
  At the moment, only XLINK SLIP is accepted.

- Added dial-up-networking (DUN), allowing Xrouter to dial out and
  establish a SLIP connection with another system on demand, i.e. when
  a packet is routed to a port which has DUN enabled.  The dialling
  and login command sequences are contained in custom script files,
  one for each DUN peer.

- Added "DUN <add | drop | list>" commands, to specify which gateways
  in the IP routing table will be accessed via dial-up links. DUN ADD
  is also recognised in IPROUTE.SYS.

- Using the STOP command without arguments now displays a list of the
  active daemon processes.


Version 174b  20/2/02
~~~~~~~~~~~~~~~~~~~~~
- Rudimentary security intended to prevent Internet users from
  downlinking on Amateur Radio frequencies wasn't working because
  I'd made a minor mistake.  Rather than simply fixing it, after
  considering the widely differing access requirements a new system
  was implemented.  This uses a new file ACCESS.SYS which specifies
  the login requirements appropriate to the caller's IP address.

- Added new file, USERPASS.SYS, which stores any passwords required
  for user access via standard telnet port (23) logins.

- Added RIP LEARN [on | off] command, to control RIP98 route learning.

- Default route is now displayed by IP ROUTES cmd.

- FTP: modified so it can be used by automated FTP clients. At present,
  it works ok with CoffeeCup FTP and WS_FTP, but not with CuteFtp and
  SmartFTP

- This version posted on Yahoo's Xrouter files area.


Version 174a 14/2/02
~~~~~~~~~~~~~~~~~~~~
- Added RIP98 protocol to enable routers to learn each other's addresses
  and routing.  This adds a new "RIP" command, with several sub-commands,
  which can be used either at the command line or in IPROUTE.SYS.

- Added INTERNAL interface type, allowing applications using the BPQHOST
  API to interconnect with Xrouter using HDLC, as if it were a wire link.


Version 173a    9/2/02
~~~~~~~~~~~~~~~~~~~~~~
- Added NAT (Network Address Translation) and PAT (Port Address
  Translation), allowing datagrams to be routed between public and
  private networks, among other benefits.  This adds a new set of
  configuration commands: IP NAT <ADD|DROP|LIST> [...]  of which
  NAT ADD <...> can also be used in IPROUTE.SYS.

- IP datagrams received on hardware multicast address were being routed
  instead of passed up to higher layers - fixed.

- Traceroute programs wouldn't show the IP address of any Xrouter in the
  route - fixed.


Version 172n   6/2/02
~~~~~~~~~~~~~~~~~~~~~
- IP: Route lookup was returning FIRST match not BEST match - fixed.

- Ascii characters > 127 were originally filtered out to keep the
  screen tidy when monitoring FBB compressed forwarding traffic.
  As requested by an Xrouter list member, this filtering has now
  been removed.

- SCC: The channels for card type PC120 were apparently in the wrong
  order. I had assumed that the 8530 at the lower address was for
  channels a/b, and the higher address was for channels c/d, as with
  all other known makes of SCC card.  Having never seen the card, and
  being unable to get any definitive information on it, even from
  PAC-COM, I can only take other peoples' word for the channel layout.
  I've swapped them over, so the IOADDR parameter must now specify
  the higher of the chip addresses.


Version 172l    21/1/02
~~~~~~~~~~~~~~~~~~~~~~~
- I think this one fixed SCC code which I'd seriously broken in 171k.


Version 172k    20/1/02
~~~~~~~~~~~~~~~~~~~~~~~
- SCC: Since v172h, SCC cards wouldn't work if SPEED was set to 0 - fixed.

- SCC: Card type PC120 being initialised like a BAYCOM, which may have
  been wrong - Fixed.

- SCC: Added card type ITACARD.  Currently only the first chip is
  recognised because there's some doubt over the register layouts in
  the second chip.  Released to one person for evaluation, as I don't
  have such a card.  If the first chip works, I can enable the second.

- SCC interfaces can now use CHANNEL=[A|B|C|D] or COM=[1|2|3|4]
  interchangeably.  This makes it compatible with previous versions,
  but alllows those sysops who can't get to grips with "COM=" to use
  the more familiar "CHANNEL=" instead.

- If a ping interval > 32 secs was specified, it generated a
  pingstorm - fixed.


Version 172j    13/1/02
~~~~~~~~~~~~~~~~~~~~~~~
- I was working too fast, and forgot to document what I'd done!


Version 172i    9/1/02
~~~~~~~~~~~~~~~~~~~~~~
- ARP ADD was reporting Error! for ethernet addresses - fixed.

- SCC: Rewrote initialisation code to save bytes, make it easier to
  understand, and create new bugs for me to fix :-)

- SCC: One of the DRSI 8536 registers wasn't being initialised - fixed.

- SCC: Added PC120 type. As with other card types, all PC120 interfaces
  on one card should use the same IOADDR and INTNUM, which should be
  the lower address.

- APRS: Static position report will now be recognised if it starts
  within the first 40 chars of a received beacon.  All other reports
  must start on the first char, as specified in APRS protocol manual.


Version 172f    27/12/01
~~~~~~~~~~~~~~~~~~~~~~~~
- Netrom: Qualities of routes to adjacent nodes were being reset to
  global minqual upon receipt of any Netrom L3 frame with that node
  as source call - fixed.


Version 172e    21/12/01
~~~~~~~~~~~~~~~~~~~~~~~~
- Netrom: "Hidden" nodes (alias beginning with #) were not being
  entered into nodes table, and L2 downlinks to the alias were not
  possible - fixed.

- IP: Added "IP ROUTE LOAD" command, to reload IP/ARP tables from
  IPROUTE.SYS file after making changes.

- Removed the duplicate IRQ check because it was preventing the use
  of shared IRQ async cards.

- IP: Virtual Cicuit routing had somehow become broken - fixed.

- AX25L2: If port paclen was set to 256 it was causing single byte
  frames - fixed.

- AX25L2: The fact that Xrouter used variable Paclens by default
  seemed to un-nerve some sysops, so I've disabled them.  Those who
  are more adventurous may re-enable adaptive parameters by setting
  the port paclen to 0.


Version 172d    6/12/01
~~~~~~~~~~~~~~~~~~~~~~~
- PMS: If no messages were stored on disk, the first message would
  be numbered 0 instead of 1 - fixed.

- Netrom: L4 connects to applications were going to the wrong one - fixed.

- Netrom: Suppressed "Trying hostxx" on L4 connects to applications.

- (probably did other stuff, but I forgot to write it down)


Version 172c    28/11/01
~~~~~~~~~~~~~~~~~~~~~~~~
- Added inbuilt PMS, and PMS command. This adds PMSCALL, PMSALIAS and
  PMSQUAL to xrouter.cfg.

- Netrom: On extended N comands, RTT was displayed as 0.00 if not known.
  It is instead no longer displayed unless it has been measured.

- Netrom: RTT figures were starting high and taking a long time to come
  down.  They also had a tendency towards the high side, but should be
  more accurate now.  Note they will always be inflated by the other
  end's delayed ack timer (often set to 10 secs on BPQ nodes).

- Netrom: At long last, found the bug, introduced in v167b, which would
  occasionally cause the router to crash upon closure of a netrom
  session.

- BPQHOST: Unproto frames sent by applications now have FIRST
  application's callsign as the source. If first application doesn't
  have a callsign, (e.g. it is only available from the command line),
  the source callsign will be that of the port on which the frame is
  transmitted. BPQ's host API spec never envisioned more than one
  "BBS" type application, so it doesn't allow me to do anything better
  than this!


Version 172b    24/11/01
~~~~~~~~~~~~~~~~~~~~~~~~
- Netrom Ping now displays resolved target as in:
  "pinging KIDDER:G8PZT <Return> to quit".

- Netrom: Added RTT to repeating NPING display, and fixed the average
  RTT which was prone to overflow at RTT > 64 sec.

- Netrom: If a "learned" netrom route was obsoleted, further frames
  wouldn't reactivate it - only a node bcast would do so - Fixed.


Version 172a   21/11/01
~~~~~~~~~~~~~~~~~~~~~~~
- SCC: Minor hack of version 172 to test a PC120 card, allowing the
  card to be specified as two separate PC100 cards at different
  IOADDR's but shared IRQ.  Released to one person only.

