DECserver 90TL V1.1D: CIDR (supernet) masks for the DECserver 90TL ================================================================== A patched DECserver 90TL software image, for units with 1 MB of memory, that uses the subnet mask stored in NVRAM as it is, so a unit can run on a network such as 192.168.20.0/22. Douglas P. Fields, Jr. (symbolics@lisp.engineer), November 2026. The post https://symbolics.lisp.engineer/decserver-90tl-cidr/ Which units ----------- A DECserver 90TL with 1 MB of memory (the ROM shows "Available Memory 1 Mbyte" at power-up) can run only MNENG1.SYS, whose last release is V1.1C. This patch is for those units. A 90TL upgraded to 4 MB (DEC option 4A-MS40-WB, module 20-41141-05, a 72-pin 1Mx36 80 ns SIMM; generic 4 MB SIMMs are reported not to work) can run DEC's later DNAS software (MNENG2/MNENG3). The DNAS V2.4 release notes allow class C masks as short as 255.255.0.0, so such a unit should not need this patch (not tested by us). The problem ----------- DECserver 90TL V1.1C (BL46-13) accepts DEFINE INTERNET MASK 255.255.252.0 and shows it in LIST INTERNET, but at every boot it ORs the address's natural class mask into the stored mask. A /22 on a class C address runs as /24, and a gateway outside that /24 cannot be set (-353-). Masks longer than the class mask, such as /25, are not affected. The patch --------- Four bytes of MNENG1.SYS V1.1C, nothing else; the file length is unchanged. 0x41C45 2C -> 34 move.l $2C(a4),d0 -> move.l $34(a4),d0 (VA $07841C42) The next instruction, or.l d0,$34(a4), ORed the natural mask into the stored mask; it now ORs the stored mask into itself, which changes nothing. 0x88808 43 -> 44 banner and version strings: V1.1C -> V1.1D, so the 0x88850 43 -> 44 console shows which image a unit loaded 0x889CE 43 -> 44 Files ----- MNENG1P.SYS the patched image, 593,408 bytes (transfer in BINARY) patch-manifest.tsv the four edits above mkpatch.py builds MNENG1P.SYS from the stock image and the manifest; checks every original byte first and refuses any edit that changes the length README.TXT this file index.md SHA256SUMS.TXT SHA-256 of the stock V1.1C MNENG1.SYS (DEC kit DS9C011.ZIP, June 1997): d4f5b755514cde7bb4840f27e35e3ea6a129bf1f8266f587aae3e708023e2226 SHA-256 of MNENG1P.SYS: 25d9a2042540bce666439de37e8cee098abb0c359b6823357462a9bcdaa8571e To build it yourself instead (Python 3): python3 mkpatch.py MNENG1.SYS patch-manifest.tsv MNENG1P.SYS Installing on an OpenVMS load host (LANCP) ------------------------------------------ The 90TL has no firmware flash. It loads its software over MOP from the load host at every boot, so installing means changing the file the load host serves, and rolling back means changing it back. 1. Transfer MNENG1P.SYS to the load host by BINARY FTP, to a plain file name (an FTP target such as [MOM$SYSTEM]MNENG1P.SYS does not change directory; it makes a file with the brackets in its name). Do not use rcp to send it: the bytes arrive, but RMS reports the file structure as corrupt. 2. Copy it into the load directory and check it: $ COPY MNENG1P.SYS SYS$SYSROOT:[MOM$SYSTEM] $ ANALYZE/RMS_FILE MOM$LOAD:MNENG1P.SYS ! must report no errors $ SEARCH/EXACT MOM$LOAD:MNENG1P.SYS "Communications Server V1.1D" 3. Serve it as MNENG1.SYS. The unit asks for MNENG1 by name, and in our tests LAN$ACP served the requested file whatever /FILE the LANCP node entry gave. Keep the stock file for rollback: $ RENAME SYS$SYSROOT:[MOM$SYSTEM]MNENG1.SYS;1 MNENG1.STK $ COPY SYS$SYSROOT:[MOM$SYSTEM]MNENG1P.SYS SYS$SYSROOT:[MOM$SYSTEM]MNENG1.SYS Every 90TL that loads from this host gets the patched image at its next boot. SYS$STARTUP:LAN$ACP.LOG shows each load and the file requested. 4. On the unit (privileged): Local> SET PRIVILEGED Local> DEFINE INTERNET MASK 255.255.252.0 Local> INITIALIZE DELAY 0 After about 25 seconds the banner says V1.1D, and SHOW INTERNET shows the stored mask. SET INTERNET MASK does not work once the unit has an address (-358-): use DEFINE and reboot. Rollback: delete the patched MNENG1.SYS, rename MNENG1.STK back to MNENG1.SYS, and reboot the unit. The banner says V1.1C again. Warning ------- Never store a mask of NONE on a unit running this image. The stock image turned a zero mask into the class mask; this one leaves it zero, and the unit then treats every IPv4 address as local. If it happens, the serial console and the MOP console still work: DEFINE INTERNET MASK 255.255.255.0 and reboot. A patched unit with a /24 (or any mask at least as long as its class mask) behaves exactly like the stock software. Tested ------ On two DECserver 90TL units (DSRVE-M, ROM FW V2.0.0 HW 3.0, 1 Mbyte), loaded from OpenVMS Alpha V8.4 LANCP, November 2026: a /22 survives boot (twice), the gateway stays, and PING to the gateway, to another subnet of the /22 through the gateway, and to the Internet succeeds; LAT announcements and the Telnet console work. Not yet tested: a full LAT session regression from a terminal on a serial port. Licence ------- MNENG1P.SYS is Digital's DECserver 90TL V1.1C software (kit DS9C011.ZIP) with the four bytes above changed. mkpatch.py, patch-manifest.tsv and this README are public domain (CC0).