Skip to content

XROUT - the SINTRAN name and routing service

Generated from xrout-services.json - do not edit this file. Run python generate.py after 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