Hi
Recently I cloned one of my MicroVAX 7.3 simh servers and removed DECnet
phase IV from it (which works perfectly) and installed DECnet-Plus from the
distribution. I set it up with the same details as for Phase IV and
configured the same MAC and area/node - clearly I will not boot both at the
same time! The simh setup is identical for both version of the server apart
for my having increased memory from 128M to 256M to see if that helped (it
didn't).
It sort-of works, there is connectivity and adjacencies as I would expect
but it is extremely slow. If I "set host" to another machine, or from
another machine to it, it works extremely slowly, I see 3 second retries
happening all the time.
The command "SHOW NSP LOCAL NSAP <local_nsap> REMOTE NSAP * retransmitted
pdus, duplicate pdus received" suggested here
https://community.hpe.com/t5/operating-system-openvms/very-bad-performance-o
ver-native-decnet/td-p/5000605 shows the retransmit count going up.
The adjacencies are on ethernet LAN - has anyone got any experience of this
problem which might suggest what is happening?
Thanks
Peter
Peter R Whisker BA BAI CEng MIET
Chartered Engineer - IT Technical Architect
T: +44 1932 842536
M: +44 7870 171768
E: peter(a)whisker.org.uk
Time for a new release announcement of TCP/IP for RSX-11M-PLUS.
This is version 2.17 of BQTCP/IP.
It's been a while since the last release, and quite some improvements
have been done in several subsystems. Some of them are rather
significant, and a recommendation to update to this new version soon is
recommended.
Highlights:
. Improved handling of situation when there is a resource shortage in
the IPPOOL which could lead to the system stopping communication.
. Rewritten DNS resolver with much better functionality.
. Improved DHCP handling which now makes the system properly handle if
the network address changes (for example, if network cable is unplugged
and plugged into a different network).
Detailed information on things that have been done since the last release:
ETHACP:
. Added a timer in ETHACP in case we don't have any active receivers
because pool full.
. Rewritten DHCP trigger conditions in ARP handler.
IF:
. Bugfix in IF: driver. IO.SIF function accidentally could set the
interface to DHCP managed.
. Added DHCP server information to IF: UCB.
. Added detecting of interface network change and request DHCP if needed.
IP:
. Added trimming of incoming packets when forwarded to higher level
protocols.
IGMP:
. Expanded IGMP with more statistics. Fixed small bugs.
. Added support for IGMP V3.
UDP:
. Changed UDP buffer size limits to be in packets instead of bytes.
. Added IO.SRS function to UD: to be able to set receive buffer size.
TCP:
. The logic of TCP high throughput and high latency was reversed.
. In TCP push-on-read handling, an unconditional push was requested,
while it should just a push at the end of currently outstanding data.
. Bugfix in TCP. Sometimes the retransmit timer was being activated when
there was no actual outstanding data.
. Improved TCP sending to flush full buffers in more circumstances.
IFCONFIG:
. Bugfix in IFCONFIG. Changing parameters on an interface could
accidentally enable DHCP on the interface.
. Fixed IFCONFIG to force RESOLVER rescan when routing table change.
. Bugfix in IFCONFIG. When showing multicast table, we could show some
garbage.
NETSTAT:
. Added showing buffer size of UDP sockets in NETSTAT.
DNS/RESOLVER:
. Added setting a larger UDP buffer size for resolver.
. Improved DNS resolver to clean out bad servers list if IP address changes.
. Improved DNS resolving to handle caching better.
. Corrected a few details in the mDNS protocol based on RFC 6762.
. Rewritten DNS name resolver. Improved response handling, CNAME
following and mDNS querying and response processing.
. Fixed RESACP to always do multicast join. It might not have worked on
first attempt, if no default routed existed.
. Cleaned up DHCP and RESACP more for handling changing addresses.
. Added new logicalname for DNS served from DHCP.
. Added that DHCP force reevaluation of own address in DNS when IP
address changes.
DHCP:
. Added sanity checks to DHCP renew time.
. Bugfix DHCP receive function. Timeout was missing.
. Correct DHCP to fall back to broadcast requests if renew is failing.
. Correct which fields are included in a DHCP request based on which
state it is in.
. Improved DHCP behavior. Some retry mechanisms were broken, and some
fields in packets were not set up optimally.
. Improved DHCP resilience against badly formatted packets.
. Improved DHCP messages.
. Fixed so that DHCP don't request a refresh of RESACP until all done.
. Correct DHCP handling if DHCP server stops answering.
. Correct DHCP handling of renew to work from scratch.
. Cleaned up DHCP and RESACP more for handling changing addresses.
. Bugfix in DHCP. If we got a new IP address, DHCP crashed.
. Added new logicalname for DNS served from DHCP.
. Added that DHCP force reevaluation of own address in DNS when IP
address changes.
TELNETD:
. Added a reset of the CLI for a terminal if needed when a telnet
connection is closed.
. Bugfix in telnetd. Under some circumstances, telnetd could hang.
. Additional improvemnts on telnet server buffering.
. Improve telnet daemon to better buffer output.
MAILD:
. Added supression of newline at end of mail program running.
. Improved mail submission to detect if there are any actual problems
talking to the submission task by the client.
. Bugfix. Mail submission from unprivilged users had become broken.
. Fixed a cleanup in MAILD when we get an error while receiving a mail
over DECnet. We got a register dump because of it.
. Bugfix in smtp sending. If there are multiple MX hosts, and the first
ones accepts a connection, but gives an error, the mail is marked as
pending with a connect fail, even if a later MX host connection worked fine.
. Changed mail server task to not allow any operation by non-priv.
. Improved smtp sent mail header processing.
Multinet:
. Improved multinet to not have outstanding I/O when accepting passive
TRACERT:
. Bugfix in TRACERT. End detection was looking at the result of the last
ping instead of the actual address.
PDP-11 C header files:
. Added a couple of external ints in the PDP-11 C inet.h header file, to
expand the interfacing to the resolver.
Some additional notes:
As usual, I would recommend people to update as soon as possible.
The changes are somewhat critical, but will also lead to a much better
experience.
The patches to the TT: driver cannot be applied automatically, but
requires users to apply the patches themselves, and then run SYSGEN to
generate a new system.
Once added, the TNC2 task can be run at login, and will define logical
names for the user telling where he is connected from, if using telnet
or LAT.
TNC2 can get information about remote connections over DECnet as well,
but this requires updates to DECnet. Such patches are not available
separately at this time, but are included in the RSX image provided from
Johnny Billquist.
The TT: driver patches also allows the updated MCR to give more
information with the DEV command (SHOW TERMINAL in DCL).
The patched TT: driver also makes is possible to get telnetd fully
vectorized, as this version provides two more addresses that are
required by telnetd to access information in the kernel.
The other patches to RSX can be applied automatically by IPGEN, either
if used interactively when answering YES to the question about applying
RSX patches, or by running IPGEN explicitly to do the patches, with the
command:
@IPGEN PATCH
Specific information about the patches:
LAT: Fixes a memory leak, and adds the ability to read where a terminal
connection comes from when using LAT, using SF.GMC.
RMSDAP: Fixes a bug in getting the file protection, so the XAB gets
filled in correctly for remote files.
RMSDSP: Fixes that some numbers were displayed in signed octal, which
should have been displayed in decimal or unsigned octal, depending on
number.
DCL: Added terminal attributes for COLOR.
MCR: Too many fixes to be listed here...
INS: Fixes that users cannot circumvent protection on common regions.
HEL: Fix that users can login with session ID, or with directory, in
addition to name and UIC.
ACNT: Add no password change attribute to accounts.
PSW: Add no password change handling.
SYL (SYSLOG): Add terminal idle tracking on accounts without idle logout.
ECL: If the receiving machine is very slow, and the sending machine is
very fast, and the receiver announce several large buffers available,
ECL cannot keep up, and drops packets. This is a problem with the DECnet
flow control, as it is used in RSX. The simple solution is to allow more
outstanding buffers when receiving. A more complex solution would be to
change how RSX DECnet do flow control, but that would require rewriting
a fair chunk of the ECL module.
NMVACP: Fix handling of "show known nodes" command, which could skip
some nodes.
NVP: Add ability to use session ID or directory name for user identity
in DECnet nodename specifications.
EPM: Fix handling of ethernet multicast.
NTDEMO: Fix that hosts without names should display DECnet address.
NCP: Parse of additional information types in NICE messages.
As usual, the distribution is available from:
ftp://mim.stupi.net/bqtcp.dskftp://mim.stupi.net/bqtcp.tap
!!! BQTCP is also available through RPM !!!
(As an additional note, if there are any problems communicating with Mim
using port 21, the ftp service is also available at port 10021)
The documentation is also available through ftp on Mim, or also at
http://mim.stupi.net/tcpipdoc
I hope people find this update useful.
Johnny
--
Johnny Billquist || "I'm on a bus
|| on a psychedelic trip
email: bqt(a)softjar.se || Reading murder books
pdp is alive! || tryin' to stay hip" - B. Idol
Hi
I'm thinking about running up further machines and wonder if anyone would
object to me using my own area (eg either 40. or 50.) both of which are
available according to the database. I have a permanent static L2 pyDecnet
router.
I currently peer with Keith's area 29 router and would also seek to peer
with area 1 and any others looking for redundancy.
Best wishes
Peter Whisker
Peter R Whisker BA BAI CEng MIET
Chartered Engineer - IT Technical Architect
E: peter(a)whisker.org.uk
Hi,
It has been mentioned elsewhere and maybe a while back too but I'm not quite sure when DECnet (VAX/VMS 7.3) started serving up jewels like:
%%%%%%%%%%% OPCOM 13-NOV-2024 15:15:13.82 %%%%%%%%%%%
Message from user DECNET on TUPILE
DECnet event 4.10, circuit up
From node 29.109 (TUPILE), 1-JAN-1977 00:00:53.64
Circuit UNA-0
Regards
Keith
I was just made aware that there is a bug in the proxy access handling
under RSX.
If you enable incoming proxy access, but do not have a proxy database
set up, RSX will actually allow remote users to gain access to files (or
whatever) as any user they specify, without having to give any password.
This is a bug in the network verification program. I just fixed this,
and a fixed version is available on MIM::LB:[5,54]NVPFSL.TSK. People
should be able to just copy that one over, and then either remove NVP...
and then install LB:[5,54]NVPFSL, or just reboot, and the fixed version
should be active.
You can verify if you have the correct version by checking the version
of NVP, like this:
.tas nvp...
NVP... V08.20 GEN 150. 00021400 DU0:-00012167042
.
The fixed version is V08.20.
Johnny
--
Johnny Billquist || "I'm on a bus
|| on a psychedelic trip
email: bqt(a)softjar.se || Reading murder books
pdp is alive! || tryin' to stay hip" - B. Idol
[I previously sent this reply from an email address not registered
on this list, so presumaby it got bit-binned.]
On 2024-11-13 14:20, Paul Koning wrote:
> By "bug" I meant "specification bug". The author of the DNA NetMan
> spec messed up here. Yes, VMS faithfully follows that bad design.
>
> The bugfix amounts to fixing the text of the spec, then changing the
> implementations to match the corrected text. I don't know if the
> former has ever been done but obviously a number of DECnet
> implementations acted as if had been. :-)
I have Alpha VMS listings kits, but stupidly gave away my VAX listings.
Should someone send me a pointer to where a 7.3 listings kit can be
found, I'll try to find and fix it when I get back from vacation next
month.
On VMS, DECnet is a System Integrated Product (SIP) so it _should_ be
in the listings kit, but no guarantees.
Yes, I do have a listings license and had VAX/VMS on support at the
time V7.3 came out, so if someone wants me to "show my papers" be-
fore they'll give me access, I can do that...
>> On Nov 13, 2024, at 1:53 PM, Johnny Billquist <bqt(a)softjar.se> wrote:
>>
>> I would not call it a bug. It was initially defined that way. However,
>> RSX officially decided to start treating it as an unsigned 16-bit
>> value with the last releases, and documented this.
>>
>> And it's a change that do make sense.
>>
>> But if others have not applied the same update, then it makes sense
>> that they would zero the value if it have the high bit set.
>>
>> Johnny
>>
>> On 2024-11-13 19:26, Paul Koning wrote:
>>> The statement in the DECnet spec that julian half-day is 15 bits is
>>> an obvious bug with an obvious fix; clearly RSX and others have made
>>> that fix. VMS needs to do likewise.
>>> paul
>>>> On Nov 13, 2024, at 12:50 PM, John Forecast <john(a)forecast.name
>>>> <mailto:john@forecast.name>> wrote:
>>>>
>>>> Depends on the implementation. Nov 9, 2021 on VMS, Ultrix and
>>>> probably some others. RSX is good until 2065.
>>>>
>>>> John.
>>>>
>>>>> On Nov 13, 2024, at 10:24 AM, Keith Halewood
>>>>> <Keith.Halewood(a)pitbulluk.org
>>>>> <mailto:Keith.Halewood@pitbulluk.org>> wrote:
>>>>>
>>>>> Hi,
>>>>> It has been mentioned elsewhere and maybe a while back too but I’m
>>>>> not quite sure when DECnet (VAX/VMS 7.3) started serving up jewels
>>>>> like:
>>>>> %%%%%%%%%%% OPCOM 13-NOV-2024 15:15:13.82 %%%%%%%%%%%
>>>>> Message from user DECNET on TUPILE
>>>>> DECnet event 4.10, circuit up
>>>>> From node 29.109 (TUPILE), 1-JAN-1977 00:00:53.64
>>>>> Circuit UNA-0
>>>>> Regards
>>>>> Keith
>>>>> _______________________________________________
>>>>> HECnet mailing list --hecnet(a)lists.dfupdate.se
>>>>> <mailto:hecnet@lists.dfupdate.se>
>>>>> To unsubscribe send an email tohecnet-leave(a)lists.dfupdate.se
>>>>> <mailto:hecnet-leave@lists.dfupdate.se>
>>>>
>>>> _______________________________________________
>>>> HECnet mailing list -- hecnet(a)lists.dfupdate.se
>>>> <mailto:hecnet@lists.dfupdate.se>
>>>> To unsubscribe send an email to hecnet-leave(a)lists.dfupdate.se
>>>> <mailto:hecnet-leave@lists.dfupdate.se>
>>> _______________________________________________
>>> HECnet mailing list -- hecnet(a)lists.dfupdate.se
>>> To unsubscribe send an email to hecnet-leave(a)lists.dfupdate.se
>>
>> --
>> Johnny Billquist || "I'm on a bus
>> || on a psychedelic trip
>> email: bqt(a)softjar.se || Reading murder books
>> pdp is alive! || tryin' to stay hip" - B. Idol
>> _______________________________________________
>> HECnet mailing list -- hecnet(a)lists.dfupdate.se
>> To unsubscribe send an email to hecnet-leave(a)lists.dfupdate.se
>
> _______________________________________________
> HECnet mailing list -- hecnet(a)lists.dfupdate.se
> To unsubscribe send an email to hecnet-leave(a)lists.dfupdate.se
I've gotten far enough along with the Tops-20 finger server that I
thought it would be a good idea to capture some of the common
assumptions and requirements into a DECnet finger specification document
of a sorts. The current working version can be found at:
_VENTI2::DECNET-FINGER-SPECIFICATION.TXT_.
I emphasize /WORKING VERSION/ as I have been working with (a very
patient) Johnny to run tests, and chase down documentation bugs, gaps,
inaccuracies and other delusions. It's an active work in progress.
In particular, the limits of certain connections field are based what is
documented in the January 1980 version of the TOPS-20 DECnet-20
Programmer's Guide and Operations Manual, Order Number AA-5091A-TM.Â
This is quite old as it is based on Tops-20 version 4 and Tops-20 DECnet
version 2. However, it is what I had handy and what I remember coding
to, back in the day. Connection parameters are partially specified as
attributes and are as follows:
* ;*USERID*:/userid/ where /userid/ consists of 1 to 16 contiguous
alphanumeric ASCII characters (including the hyphen, dollar sign,
and underscore) identifying the source task. _Example_: ;USERID:ALIBABA
* ;*PASSWORD*:/password/ where /password/ consists of 1 to a
contiguous alphanumeric ASCII characters (including the hyphen,
dollar sign, and underscore) required by the target task to validate
the connection. _Example_: ;PASSWORD:SESAME
* *;CHARGE*:/acctno/Â where /acctno/ consists of 1 to 16 contiguous
alphanumeric ASCII characters (including the hyphen, dollar sign,
and underscore) representing the source task's account
identification. _Example_: ;CHARGE:ACCT-13C
* *;DATA*:/userdata/ where /userdata/ consists of 1 to 16 contiguous
alphanumeric ASCII characters (including the hyphen, dollar sign,
and underscore) representing user data. _Example_: ;DATA:THIS-IS-A-TEST
I've since found out that I'm *wrong* about USERID, and that it actually
allows up to 39 characters and have tested this.
What specification has these field definitions and limits? I'd like to
look at it before I go digging into Tops-20 and, of course, fixing the
finger server.
I've seen/heard of various stories about how people update their
nodename databases on their machines, hacking together scripts, and
processing files. So I figured I should write a small mail about the
topic (I should create a web-page with this information as well).
The main/basic point is that people are creating work for themselves
they really don't need.
Exactly how you update your nodename database on your machine depends on
what OS you are running, but there are basically prepared tools and
scripts already existing for pretty much any scenario. And if you happen
to have a system or need not currently covered, I can easily create one
for you as well.
But before going into the solutions, let me explain a bit about the
source of the data here.
DECnet phase IV do not have a centralized nodename system like DNS. Each
node in the DECnet network has its own nodename database, and every
machine can have its own name for another machine, independent of what
that other machine thinks its own nodename is.
However, in order to make it easier for multiple people and machines to
talk, it helps if everyone have a somewhat similar database. And here is
where the nodename database in MIM comes it. The nodename database that
I have on MIM is not the regular DECnet nodename database. Instead I'm
using DATATRIEVE to maintain a nodename database, which contains more
information than just the number and name. It contains the owner,
information about the software and hardware of the node, the location,
and when things were updated. This database is what is queried when
someone goes to http://mim.stupi.net/nodedb . And that page is generated
by just making queries in DATATRIEVE. If someone have a host with
DATATRIEVE on it, it is even possible to remotely access this DATATRIEVE
database over DECnet (you'll only have read-only access).
I have been considering possibly adding a web interface for people to
possibly be able to update their own information remotely, but so far
that's been a low priority thing. Maybe one day...
From this DATATRIEVE database I can then generate the DECnet nodename
database on MIM. This is a simple makefile actually. Whenever I run it,
it will create a bunch of different files (I'll get to that in a
moment), and detect if any changes have happened on the DECnet level of
things. If so, it will send a mail to people who have requested it,
informing them that the nodename database have been updated, and they
should update the nodename database of their own machines.
I hope this makes it apparent that creating various files based on the
nodename database is actually very simple. This is in a sense what
DATATRIEVE is good at. Creating reports is sortof what all these output
files are.
So - what files do I create today? Well, here is a short list:
FIX.CMD - This is a script file suitable for RSX systems using CFE.
However, it's sortof specially tailored for MIM, so it's not a file I
would recommend anyone else to use.
FIX.COM - This is a script for VMS systems using phase IV.
FIX.PHV - This is a script for VMS systems using phase V.
FIX.IMP - This is a script for VMS for anyone using DECdns.
FIX.T20 - This is a script for TOPS-20.
HECNET.PY - This is a definition file for PyDECnet.
FIX.RST - This is a script for RSTS/E.
NODENAMES.DAT - This is basically just the basic information is a simple
output form from DATATRIEVE. It exist mostly for historical reasons, but
I understand that lots of people actually take this file, and then write
code to process, extract and apply information from this file.
In addition, some systems can directly import nodenames from another
machine on DECnet, meaning you do not have to fetch and run any scripts
at all.
So here is the actioins you need to do on each system in a summarized form:
RSX:
In RSX, there is a tool called NNC which copies definitions from another
node. Copy over MIM::HECNET:NNC.BAT which is a batch file you can use
which does all the work of importing the latest definitions from MIM and
updating your local system. All you need to do is just "SUBMIT NNC.BAT"
and you are done.
VMS:
With phase IV, the node copy capability is build into NCP. All you need
to do is: "NCP COPY KNOWN NODES FROM MIM TO BOTH" and you are done.
With phase V, copy over FIX.PHV and run it, or just directly run it from
MIM like this: "@MIM::HECNET:FIX.PHV"
If you run DECdns, grab FIX.IMP, and run it with whatever tool is used
to manage this (sorry that I can't help more, I don't really have any
experience with DECdns).
TOPS-20:
Grab MIM::HECNET:FIX.T20 and run in in the NCP submode of OPR (if I
remember the setup correctly).
RSTS/E:
Grab MIM::HECNET:FIX.RST, and run it with "@FIX.RST".
PyDECnet:
Fetch hecnet.py by doing "wget mim.stupi.net/hecnet.py". Place that
where you have configured PyDECnet to get the nodenames from, and you
are good (not sure if you need to restart PyDECnet).
Now. If you have some other system with some specific format you need,
just let me know, and I'll create such a file as well. It's trivial for
me to do this from DATATRIEVE. If you spot something wrong/bad in some
file created today, let me know, and we'll fix it. If you see any errors
or omissions in the information in this mail, let me know, and I'll get
it corrected. I will create a web page with this information as well.
If you want to get a mail whenever the nodename database is updated,
just let me know and I'll add you to the list.
And HECnet is slowly growing. Occasionally a completely new person/site
gets connected. Occasionally people add more nodes. The online presence
seems pretty constant. At the moment 19 areas are online. In area 1,
currently there are 19 machines online. Looking at Paul's HECnet map
(http://akdesign.dyndns.org:8080/map), there are machines online in
quite different locations, covering a large part of the world. I find
this cool, and even though there isn't a lot being done, it's still fun.
Well. Have a nice weekend everyone, and I hope some people find this
information useful.
Johnny
--
Johnny Billquist || "I'm on a bus
|| on a psychedelic trip
email: bqt(a)softjar.se || Reading murder books
pdp is alive! || tryin' to stay hip" - B. Idol
I've finished the timeout functionality so that the Tops-20 finger
server will only wait so long before punting the connection (don't
worry, I'm very generous...)
I'm now working on the logging functionality. Again, on a connection
interrupt, the finger server grabs a bunch of meta-data about the
connection and displays it:
FNGSRV(1): Sunday, 6-October-2024 12:23:36.52412 AM-EDT
   From: VENTI2, User: SLOGIN, Data: STREAM*
   Object Type: Generic (FINGER), Segment Size: 1459
   Local Flow Control: Segment, Remote Flow Control: Segment
   Link Quota: Input Percentage: 50, Buffers: 16, Input Goal: 0
I have three concerns here (or maybe two and a half)
1)I want to write this information to a log file,
2)Since the data is written by concurrent server sub-forks,
a)Data can get overwritten
b)Latency to start the finger sub-sub-forks is increased
The solution is simple enough, I grab everything in the server sub-fork
and ship it up to the controller through shared memory for later
formatting and storage (and maybe printing).
When reviewing what meta-data can be gotten, I noticed that an explicit
connection confirm (MTOPR% function .MOCC) can take a pointer to an
optional sixteen bytes of data. What I can't quite tell from the
documentation is whether the server reads this or whether the server
writes it. I find myself being unsure of the wording.
1. If the former (server sends), how does the client read it?
2. If the latter (server reads), how does the client send it?
I don't see a single instance of any Tops-20 DECnet program using this,
so no help there. I /think/ this is case 1., that is, the server has
the option of writing it. However, I was wondering what specification
this is in (maybe NSP 4?) and where, so I could read it before I look at
the monitor sources to see how the client would read it. I'm assuming
it would show up at the client as optional data?
I thought I would update everyone with where things stand with the
Tops-20 finger server.
Johnny and I agreed that, by default, the response to a DECnet finger
query is a sequences of records, each no longer than 132 bytes (more
typically 90), terminated by a line-feed.  If the remote finger client
or operating system can handle larger buffers, then it can connect with
optional data=STREAM. Tops-20 will then dump everything in one giant
record. Only the Tops-20 finger client can handle this, although I
suspect maybe a VAX client might also be able to do it.
I had been making steady progress until I started stress testing it,
meaning having a session active on MIM::, TOMMYT::, and VENTI2::
(local), each having a finger command in ready to go and then pushing
carriage return on all three as simultaneously as possible.
This started generating errors on MIM:: that the "object wasn't
available". What was going on was that the structure of the Tops-20
finger server really wasn't architected to have real time response for
that much curiosity. It only opens a single SRV:117 (finger) object at a
time, waits for a connection, reads the data, hands it off to an idle
finger client fork via a pipe, and then gets a new SRV:117 object.
In other words, it isn't until the finger client is started with the
connection redirected to DECnet that the server is ready to accept
another connection. That has what I would consider to be noticeable
latency, particularly on failure.   An error doesn't really matter for
SMTP as it is a background task and just tries again, later. An
interactive finger on the other hand, has a user sitting there waiting
for a response, so it seemed to me that this wasn't really going to cut it.
I took the model of the Tops-20 FAL server, which has a single control
fork, looking for illness in sub-forks, all of which open their own FAL
server object. The new finger controller now starts separate FNGSRV
sub-server forks, creating a FINGER sub-fork for each, gets all the
communications lined up, and starts all the FNGSRV sub-forks to listen
for connections.
This has the advantage of not clobbering the system on FNGSRV startup
because resources are gotten or creating sequentially, so there isn't
much for a FNGSRV sub-fork to do except wait for a connection and manage
its own single FINGER sub-fork.
Startup resource allocation looks like this:
   [Fork FNGSRV opening PIP:1;RECORD-LENGTH:200 for writing]
   [Fork FNGSRV opening PIP:1.1 for reading]
   [Fork FNGSRV opening SRV:117 for reading, writing]
   [Fork FNGSRV opening PIP:2;RECORD-LENGTH:200 for writing]
   [Fork FNGSRV opening PIP:2.2 for reading]
   [Fork FNGSRV opening SRV:117 for reading, writing]
   [Fork FNGSRV opening PIP:3;RECORD-LENGTH:200 for writing]
   [Fork FNGSRV opening PIP:3.3 for reading]
   [Fork FNGSRV opening SRV:117 for reading, writing]
The resulting JFN's being:
       JFN File Mode     Bytes(Size)
        2  FNGSRV.EXE.330            Read, Execute
        3  FINGER.EXE.116            Read, Execute
        15 PIP:1;RECORD-LENGTH:200   Append         0.(8)
        16 PIP:1.1                   Read           0.(8)
        17 SRV:117                   Read, Append   0.(8)
        20 PIP:2;RECORD-LENGTH:200   Append         0.(8)
        21 PIP:2.2                   Read           0.(8)
        22 SRV:117                   Read, Append   0.(8)
        23 PIP:3;RECORD-LENGTH:200   Append         0.(8)
        24 PIP:3.3                   Read           0.(8)
        25 SRV:117                   Read, Append   0.(8)
The resulting fork structure is:
   => FNGSRV (2): HALT at STARTS+13, 0.02719
         Fork 12: HALT at 0, 0.00018
            Fork 13: HALT at 0, 0.00016
         Fork 10: HALT at 0, 0.00012
            Fork 11: HALT at 0, 0.00012
         Fork 6: HALT at 0, 0.00008
            Fork 7: HALT at 0, 0.00007
So fork 2 is the finger server controller, forks 12, 10, and 6 are
finger server sub-forks, and forks 13, 11, and 7 are the respective
Tops-20 finger clients. Times are in tens of microseconds, the maximum
resolution that Tops-20 supports. What can be seen is that fork
creation is happening in sub-millisecond time. This was not the case in
the 1980's with KL10's (I /think/), and modifications were necessary to
Tops-20 and the EXEC to capture the increased resolution.
I guess I'll have another version ready in about two weeks.