XROUT - the SINTRAN name and routing service¶
Generated from
xrout-services.json- do not edit this file. Runpython generate.pyafter changing the registry.
How a name becomes an address, how a letter is forwarded, and the SEAT accounting that goes with it. The seat rule is here because getting it wrong costs nothing visible at the time and closes a service hours later.
Where it sits: XROUT requests ride as ordinary XMSG messages with the Route option set. See sintran-wire.json for the header.
| Status | Means |
|---|---|
| MEASURED | Observed on the wire or against a live machine, with the evidence named. |
| inferred | Follows from something measured, or read from the ND manuals, but not itself observed here. |
| UNKNOWN | Copied or mirrored. Never computed or varied. |
| ~~superseded~~ | Believed once, disproved. Kept so it is not re-derived. |
The seat law¶
XROUT holds a FREE-CONNECTION count for a registered connection port, forwards a letter only while it is above zero, and DECREMENTS IT ON FORWARD - before the receiver has seen a byte of the body.
MEASURED - the real file access server builds its 30 seats this way, captured; and ChatSeatAccountingTests reproduces the whole rule
- The seat belongs to the ARRIVAL, never to a kind of message. A letter carrying something other than the expected request, or a body too damaged to decode, never reaches a handler - so no handler can give the seat back. Settling seats per message kind leaks one every time.
- Keep the seat only if the arrival put somebody NEW in the room. 'Became a member', not 'was accepted': a member sending a second letter spends a second seat and only one of them is theirs.
- A leaked seat is invisible when it happens. No error, no log line, nobody refused. The service is simply one seat smaller for ever, and it surfaces much later as XROUT turning requests away from a service that visibly has room.
The only marker: message type XMROU - the ONLY thing telling a receiver that a seat was spent on this arrival
both sample servers in the COSMOS Programmer Guide (ND-60.164.3) refuse anything that is not XMROU - 'IF MSGTYPE >< XMROU THEN' in PLANC and the same test in FORTRAN - and each then reads the CLIENT's magic from the arrived message to reply directly
Services¶
Service codes are DECIMAL here and octal in the ND manuals - the manual's XSRME=106 is 70. Mixing the two bases is an easy and silent error.
| Name | Value | What it does | Status | Evidence |
|---|---|---|---|---|
XSNUL |
64 |
do nothing - the no-op | inferred | ND-60.134.2 Communication Guide service table |
XSLET |
65 |
deliver this letter to a service I only know by NAME. XROUT looks the name up, spends one of that service's free slots, and passes the letter on - after which the two sides talk directly and XROUT is out of the way | MEASURED | every chat join and FA connect; the forward that spends a seat |
XSNAM |
66 |
claim a name for my port, so others can find me by asking for it instead of needing my address | MEASURED | our servers claim their names this way |
XSCNM |
67 |
give my name back, so nobody is sent to a port that has closed | MEASURED | ChatServer.Close releases its name |
XSGNM |
68 |
tell me the name registered for this address | inferred | service table |
XSGNI |
69 |
tell me more about a registered name - who holds it and how much room it has | inferred | service table |
XSRME |
70 |
find me the address of a named port on ANOTHER machine. Asked of our own XROUT, which does the asking onwards | inferred | Communication Guide section 4.4.2.9; manual gives it as octal 106 |
XSGMG |
71 |
give me the address behind this name | inferred | service table |
XSCMG |
72 |
forget that address - one XROUT telling another that a port is gone. Privileged, and not something a normal program sends | inferred | Communication Guide section 4.4.2.11; octal 110 |
XSDRN |
73 |
record that a remote system exists and what number it has. This is what the DEF-REMOTE operator command does, and it is how D100 was taught that D19999 is us | MEASURED | used to define D19999 on D100 |
XSDMC (same as XSDSY) |
74 |
record how to reach another machine - which link, and how far away it is | inferred | service table |
XSDSY (same as XSDMC) |
74 |
record how to reach another machine - the same service as XSDMC, under a second name | inferred | service table |
XSGMC (same as XSGSY) |
75 |
tell me what you know about that machine - can you reach it, and how | inferred | service table |
XSGSY (same as XSGMC) |
75 |
tell me what you know about that machine - the same service as XSGMC. D100 answers this one live, and its reply carries a counter that changes each time, which is how we know we are talking to something real rather than a cache | MEASURED | answered live by D100; see the XSGSY echo-counter note |
XSLKI |
76 |
tell me about the links this machine has - what is connected and in what state | inferred | service table |
XSTIN |
77 |
tell me the time, as this machine has it | inferred | service table |
XSTCL |
78 |
Close tracing (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSTDC |
79 |
Define tracing conditions (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSCRS |
80 |
Create service (name, init no of SP's) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSNSP |
81 |
New service point(s) (increment/decrement in SP's) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSGIN |
82 |
Get information about name | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSDLO |
83 |
Define local system (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSLEK |
84 |
Send letter and kick if unavailable (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSNET |
85 |
Start/stop gateway (network server) (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSSCI |
86 |
Set crash information (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSGAT |
87 |
Get/check attribute | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSDAT |
88 |
Define/remove attribute (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSNSI |
89 |
Get network server information (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSLIN |
90 |
Get information about a link (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSPIN |
91 |
Get information about named ports | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSLSY |
92 |
Get information about a system (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSGSU |
93 |
Get info about system utilization (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSCRM |
94 |
Start/stop Cosmos routing manager (priv - COSROUT only!) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSGLI |
95 |
Get information from link tables (priv - COSROUT only!) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSGSG |
96 |
Get info about system generation variables (privileged) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
XSMAX |
96 |
Maximum legal service value (alias of XSGSG) | inferred | the ND service table, via the summary on the enum member. Not driven against a machine here |
Errors we act on¶
There are far more of these than we produce. They are PEER-produced by nature: we need to NAME one when it arrives, not to invent it. Only the handful we act on are listed.
| Name | Value | What it does | Status | Evidence |
|---|---|---|---|---|
XRSOK |
0 |
it worked | MEASURED | every successful exchange |
XRUNN |
2 |
nobody here has registered that name - either the service is not running, or the name is spelled differently | MEASURED | returned for a name never registered |
XRNSP |
4 |
that service is full. Its free-slot count is zero, so XROUT will not forward another letter to it until somebody leaves | MEASURED | the room-full path; see the_seat_law |
XRUNM |
7 |
that address means nothing here - the port it named has closed | MEASURED | delivery to a closed port |
XRNCO |
46 |
there is no connection to work with | MEASURED | D100 answered APPEND-REMOTE-BATCH with it, task 30 - a NAMED refusal, which proves the path |
XRISN |
1 |
Illegal service number | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRDDF |
3 |
Another port already has this name | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRIPT |
5 |
Illegal parameter type | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRMMP |
6 |
Missing mandatory parameter | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRMTL |
8 |
Too short message or resulting message too long | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRSMF |
9 |
Standard message format not handled | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRPRV |
10 |
Caller was not privileged | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRISY |
11 |
Illegal system number parameter | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNRO |
12 |
No access to remote system | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRIIV |
13 |
Illegal integer value | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNEI |
14 |
Cannot define route to a neighbour | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNXM |
15 |
Invalid service request - not available to current caller | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRILN |
16 |
Illegal/Reserved Logical Unit Number (LUN) for link | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNXL |
17 |
No more Link Descriptors (XL-blocks) for start-link/netserver | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNXD |
18 |
Not enough resources (XD/XF/XM-Blocks) for start-link/netserver | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNTR |
19 |
No trace generated (no trace buffer available)' | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRTRA |
20 |
Trace already active | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRTRP |
21 |
Trace passive | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRTFE |
22 |
Trace/dump file open error (see parameter 1) | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRTRT |
23 |
Trace RT-prog (XTRACE) not found | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRTIS |
24 |
Illegal trace system number | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRBLK |
25 |
Bad link - open unsuccessful | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRSYD |
26 |
Attempt to redefine local system no | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNLS |
27 |
No local system number defined | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRTRE |
28 |
Too many remote names to this system | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRRNA |
29 |
Old service calls (below 64) cannot go remote | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRBUS |
30 |
Service points busy | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNSE |
31 |
This is not a service port | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRRPN |
32 |
Remote port statically declared | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRUKS |
33 |
Unknown remote system name or number | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRMFL |
34 |
Remote system message table space full | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRROV |
35 |
Remote task message space used up | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRRFU |
36 |
Routing table full (too many systems) | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNRB |
37 |
No remote batch service available | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRURT |
38 |
Unknown RT name | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRSNR |
39 |
This server is not running | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRRND |
40 |
Netserver: remote system is not defined | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNNA |
41 |
Netserver: network not available | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRISE |
42 |
Netserver: internal server error | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRIRQ |
43 |
Netserver: invalid request | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNGA |
44 |
XMSG not congfigurated with gateway code | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRRNL |
45 |
Remote system not on same LAN | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRAMB |
47 |
Ambiguous name | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRFFU |
48 |
Friend system table full (too many friends) | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRNTA |
49 |
Netserver: network temporarily not available | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRMTO |
50 |
Netserver: message too old | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRCNR |
51 |
COSMOS routing manager is not running | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRICR |
52 |
COSMOS routing manager is already running | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRRID |
53 |
Routing information defined (start/stop inhibited) | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRIRR |
54 |
COSMOS routing manager: invalid request | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRILX |
55 |
XRILX - Illegal link number parameter. SOURCE DISCREPANCY: present in XMSG-PL-VALUES-L.INCL ("CONSTANT XRILX=55") but ABSENT from XMSG-VALUES-L.SYMB, whose XROUT error range stops at XRIRR=54. The M-version include file that generated this enum has it, so the value 55 is kept | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
XRXXX |
16960 |
Base for XROUT errors: 41100B | inferred | the ND error table, via the summary on the enum member. PEER-produced: we name these, we do not send them |
Connection types¶
| Name | Value | What it does | Status | Evidence |
|---|---|---|---|---|
Unavailable |
0 |
MEASURED | returned for a system with no route | |
Neighbour |
1 |
the machine is on the same wire - we can talk to it without being told a path | MEASURED | an adjacent system answers without one |
Via |
2 |
the machine is further away, and another machine passes traffic along for us | MEASURED | the 102-via-100-to-103 route-through captures |
ViaNetworkServer |
3 |
UNKNOWN | named in the sources; never observed on this lab | |
Local |
4 |
MEASURED | our own system |
Flows¶
Generated from the registry, so a ladder cannot name an operation that does not exist.
Reaching a service you only know by name¶
The one thing XROUT is for, and where the seat is spent.
Proved: every chat join and every FA connect in this repository
sequenceDiagram
autonumber
participant client
participant XROUT
participant server
server->>XROUT: XSNAM
Note over server,XROUT: at start-up: claim the name, and say how many callers can be held at once
client->>XROUT: XSLET
Note over client,XROUT: deliver this to that name
alt the name is registered and has a free slot
XROUT->>server: XSLET
Note over XROUT,server: the free count DROPS HERE, before the server has seen the body
server-->>client: XRSOK
Note over server,client: the server answers the client DIRECTLY - it learned the address from the arrival
else no such name, or it is full
XROUT-->>client: XRUNN
Note over XROUT,client: or XRNSP when the slots are all taken
end
loop from here on
client->>server: XRSOK
Note over client,server: port to port; XROUT is not involved again
end
server->>XROUT: XSCNM
Note over server,XROUT: at shutdown: give the name back
The slot is spent on FORWARD. Not on acceptance. If the server does not seat the caller, IT must give the slot back - nobody else will.
A leaked slot is silent. The service just becomes one caller smaller, for ever, and refuses people hours later for no visible reason.
Still open¶
| # | Question | Status | What would settle it |
|---|---|---|---|
| X1 | Is echoing the session token REQUIRED, or only observed? | UNKNOWN | answer once without echoing and see whether the peer minds |
| X2 | The XROUT random generator's seed cell | UNKNOWN |