			XROUTER - RECENT CHANGES
			========================


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.


