Back onto HECnet

Connecting to MIM

Connecting to MIM

After much fighting, and apparently being blocked by one of my ISP’s, I got back onto HECnet!  Even better I was able to verify operation with HECnetNT!

Selective binding for DECnet

Like last time I was able to bind Pathworks 32’s DECnet onto a MS Loopback adapter, and then use the bridge to connect onto that loopback to a local Linux bridge (which is also hosting a virtual SIMH VAX instance).

The big problems I ran into is that I originally had setup SIMH to use a tap interface, and connect into a bridge, as mentioned on the raspberrypi.org forums, however the HECnet bridge program seems to have difficulty injecting packets onto the bridge interface.  I suspect the ‘correct’ thing to do is to remove libpcap from the bridge, and re-write it to be a tuntap client.  There is enough examples, I should be able to do this, but I just wanted the thing to work, so I didn’t want to tackle this just yet.

Instead I had SIMH attach to the Linux lo adapter (typically where 127.0.0.1 lives), and the HECnet bridge program, and success!  Even better the interface has been up now over 12 hours since it was brought online.

SIMH VAX VMS 4.7

SIMH VAX VMS 4.7

Well wasn’t that fun?

Want to learn more about HECnet?  simply check it out!  But as the short order goes it’s a hobbyist DECnet of machines spread out across the globe running the ancient DECnet protocol on various legacy style systems.

what is more fringe than a telnet bbs?

Synchronet over decnet

Synchronet over decnet

A bbs over decnet!

 

I found a simple c server and client program that was ported to decnet.  And it was easy enough to follow I thought I’d try something fun.  So I took Synchronet 3.00c and started to identify the winsock tcpip portions and then slowly alter them to either stubs or being more decnet friendly.

Surprisingly this wasn’t so hard.

The hard part is that decnet doesn’t have a telnet like protocol,  and I don’t have enough patience to try to reverse how ctermd works, so with a lot of searching I found a semi simple telnet client and mostly got it running on decnet.   Right now I have issues resolving address,  so it is hardcoded.

I have to admit it was pretty cool to see the first connection,  even though it aborted when it couldn’t figure out my ip address.   I made some more changes, and it worked!!

The next step was to fire up gns3 and build a simple 2 area decnet network and see if a NT box from area one could connect to a bbs in area two.  And with a few false starts I finally got a working multi area network (decnet isn’t like tcpip!!) This document on cisco’s site was invaluable.

Simple GNS DECnet network

Simple GNS DECnet network

As you can see this is pretty simple.  I wanted two serial connections so I could run DECnet on one serial connection, and TCP/IP on the other.  This way I could shut down the TCP/IP connection to ensure my conversation was 100% over DECnet.

R1:

decnet routing iv-prime 1.1
decnet node-type area
!
interface FastEthernet0/0
ip address 192.168.0.1 255.255.255.0
duplex auto
speed auto
decnet cost 20
!
interface Serial1/0
no ip address
decnet cost 20
serial restart-delay 0
!
interface Serial1/1
ip address 10.5.0.1 255.255.255.252
serial restart-delay 0
!
router rip
network 10.0.0.0
network 192.168.0.0

 And R2:

decnet routing iv-prime 2.1
decnet node-type area
!
interface FastEthernet0/0
ip address 192.168.2.1 255.255.255.0
duplex auto
speed auto
decnet cost 10
!
interface FastEthernet0/1
ip address dhcp
duplex auto
speed auto
!
interface Serial1/0
no ip address
decnet cost 10
serial restart-delay 0
!
interface Serial1/1
ip address 10.5.0.2 255.255.255.252
serial restart-delay 0
!
router rip
redistribute static
network 10.0.0.0
network 192.168.2.0

 As you can see the configuration is pretty simple.  I went with RIP because it’s a small network, and I only need a few routes.  EIRP, OSPF and friends are just pure overkill.  And recall VMNet8 is the NAT interface provided by VMWare Player.

Checking output from the routers, shows that DECnet is routing, and that I can ping both of my test NT boxes:

R1#show decnet route
Area Cost Hops Next Hop to Node Expires Prio
*1 0 0 (Local) -> 1.1
*2 20 1 Serial1/0 -> 2.1 44 64 A+
Node Cost Hops Next Hop to Node Expires Prio
*(Area) 0 0 (Local) -> 1.1
*1.1 0 0 (Local) -> 1.1
*1.3 20 1 FastEthernet0/0 -> 1.3 65
R1#ping decnet 1.3

Type escape sequence to abort.
Sending 5, 100-byte DECnet echos to atg 0 area.node 1.3, timeout is 5 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/7/12 ms
R1#ping decnet 2.5

Type escape sequence to abort.
Sending 5, 100-byte DECnet echos to atg 0 area.node 2.5, timeout is 5 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/34/60 ms
R1#

 Everything is looking good! I fired up my DECnet telnet and success!!

Success!

Success!

 

Announcing HECnetNT!

HECnetNT in action!

HECnetNT in action!

So I have my little project working well enough to let it out into the world.  I call it HECnetNT, and it’s available out on sourceforge.

It’s a port of  Johnny Billquist‘s bridge program to Windows.  This isn’t a MinGW or Cygwin build, but rather, a native build, compiled in Visual Studio 2003.  I’ve been able to run this build on NT 4.0, 2000 and Windows 7.

I also made some additions to the bridge program, by allowing it to bridge IPX/SPX Ethernet_II frames, so you can now build legacy networks that let you logon to NetWare servers, or even play those old IPX/SPX games.

Back when I first got DOOM v1.1 working on IPX/SPX I noticed that it sent an incredible amount of packets that were mostly empty.  To work around this, I incorporated LZSS to compress data between HECnetNT bridges.  Even better, I don’t see any significant CPU utilization, even with DOOM blasting packets like crazy!

The best part is that you can mix compressed & uncompressed bridges.  So you can have an uncompressed connection to one host, and a compressed connection to another.

I’ve been able to bridge CTERM with SIMH to hosts using compressed, and uncompressed links, and this also includes a LINUX box with the original bridge software!

To take it one more step, I also setup a Windows NT box with an ethernet adapter, and the MS LOOPBack adapter, setup TCP/IP on both interfaces (a dummy address on the loopback is enough, but there needs to be something there), and then installed DEC Pathworks 7, on NT, bound it to the loopback adapter, ran the HECnetNT software, and I’ve been able to connect my NT instance.  Logically I could go one more step, and install PPTP support, so I the NT server could then use PPTP to VPN to a HECnet bridge, and then join it.

So the larger question is, the DECnet enthusiasts have their hecnet, is anyone interested in making a Novell like equivalent?  With older Linux that supports IPX/SPX or even NT we could even do routers, and build a large-ish sized network.

Setting up DECNet on VMS 4.7

Years ago, I was given an image of VMS 4.7.  I only tested it for idle capabilities, and that is as far as I got with it.  I never used it for anything else.

But today I needed to verify my Win32 Hecnet project works, so I needed to generate some legit DECNet traffic.  Luckily I still have the VMS image, and in the prevailing years I managed to get a copy of PathWorks for Windows NT (And one for MS-DOS as well!).

So googling around, I found blinkenbone who mentions the command needed to setup some DECNet love.  Now the one thing that is strange about DECNet is that the MAC address needs to be changed to the DECNet area & node id.  Thankfully there is an online calculator, powerdog.  Since I’m just testing, I’ll put my VAX in area 1, node 1, that means the VAX MAC needs to be set to:

AA-00-04-00-01-04

So in SIMH, I just use the line:

set xq mac=AA-00-04-00-01-04

Cool.  Now I use ansicon, in the hopes it’ll make the console better, and fire up VMS.

VMS 4.7 booted

VMS 4.7 booted

And then login as system/manager

Now I can setup decnet very simply like this:

Username: SYSTEM
Password:
Welcome to VAX/VMS version V4.7
Last interactive login on Saturday, 20-SEP-2008 17:32
$ @sys$manager:netconfig

DECnet-VAX network configuration procedure

This procedure will help you define the parameters needed to get DECnet
running on this machine. You will be shown the changes before they are
executed, in case you wish to perform them manually.

What do you want your DECnet node name to be? : rabbit
What do you want your DECnet address to be? : 1.1
Do you want to operate as a router? [NO (nonrouting)]:
Do you want a default DECnet account? [YES]:

Here are the commands necessary to setup your system.

————————————————————————–
$ RUN SYS$SYSTEM:NCP
PURGE KNOWN OBJECTS ALL
PURGE MODULE CONFIGURATOR KNOWN CIRCUITS ALL
$ DEFINE/USER SYS$OUTPUT NL:
$ DEFINE/USER SYS$ERROR NL:
$ RUN SYS$SYSTEM:NCP ! Remove existing entry, if any
PURGE NODE 1.1 ALL
PURGE NODE RABBIT ALL
$ RUN SYS$SYSTEM:NCP
DEFINE EXECUTOR ADDRESS 1.1 STATE ON
DEFINE EXECUTOR NAME RABBIT
DEFINE EXECUTOR MAXIMUM ADDRESS 1023
DEFINE EXECUTOR TYPE NONROUTING IV
DEFINE EXECUTOR NONPRIVILEGED USER DECNET
DEFINE EXECUTOR NONPRIVILEGED PASSWORD DECNET
$ DEFINE/USER_MODE SYSUAF SYS$SYSTEM:SYSUAF.DAT
$ RUN SYS$SYSTEM:AUTHORIZE
ADD DECNET /OWNER=”DECNET DEFAULT” –
/PASSWORD=DECNET –
/UIC=[376,376] /ACCOUNT=DECNET –
/DEVICE=SYS$SPECIFIC: /DIRECTORY=[DECNET] –
/PRIVILEGE=(TMPMBX,NETMBX) –
/DEFPRIVILEGE=(TMPMBX,NETMBX) –
Press RETURN to continue

/FLAGS=(CAPTIVE) /LGICMD=NL: –
/NOBATCH /NOINTERACTIVE
$ CREATE/DIRECTORY SYS$SPECIFIC:[DECNET] /OWNER=[376,376]
$ RUN SYS$SYSTEM:NCP
DEFINE LINE QNA-0 STATE ON
DEFINE CIRCUIT QNA-0 STATE ON COST 4
DEFINE LOGGING MONITOR STATE ON
DEFINE LOGGING MONITOR EVENTS 0.0-9
DEFINE LOGGING MONITOR EVENTS 2.0-1
DEFINE LOGGING MONITOR EVENTS 4.2-13,15-16,18-19
DEFINE LOGGING MONITOR EVENTS 5.0-18
DEFINE LOGGING MONITOR EVENTS 128.0-4
————————————————————————–

Do you want to go ahead and do it? [YES]:
%UAF-I-ADDMSG, user record successfully added
%UAF-I-RDBADDMSGU, identifier DECNET value: [000376,000376] added to RIGHTSLIST.
DAT
%UAF-I-DONEMSG, system authorization file modified
%UAF-I-RDBDONEMSG, rights database modified
%NCP-I-NMLRSP, listener response – Success
Logging sink type = monitor
%NML-I-RECADDED, Database entry added

The changes have been made.

If you have not already installed the DECnet-VAX license, then do so now.

After the license has been installed, you should invoke the procedure
SYS$MANAGER:STARTNET.COM to startup DECnet-VAX with these changes.

(If the license is already installed) Do you want DECnet started? [YES]:
%%%%%%%%%%% OPCOM 28-OCT-1987 15:42:37.64 %%%%%%%%%%%
Message from user DECNET
DECnet starting

%RUN-S-PROC_ID, identification of created process is 00000109
%RUN-S-PROC_ID, identification of created process is 0000010B
$
%%%%%%%%%%% OPCOM 28-OCT-1987 15:42:42.67 %%%%%%%%%%%
Message from user DECNET
DECnet event 4.10, circuit up
From node 1.1 (RABBIT), 28-OCT-1987 15:42:37.69
Circuit QNA-0

It basically set itself up.

And on the Windows NT side, I simply set itself up as node 2 in area 1.

Windows NT + Pathworks

Windows NT + Pathworks

And now I can use CTERM to connect to the VAX.

CTERM

CTERM

Nice!.  And it even works through my port of HECNet.

On reboots you have to manually start the network.  I don’t have EDT, or I don’t know where to find it (remember the gold key? ugh).

Manually starting the network

Manually starting the network

But it’s a simple command:

@SYS$MANAGER:startnet.com

And you are good to go!

Likewise shutting down is accomplished with this:

@SYS$SYSTEM:SHUTDOWN.COM

And that’s about all I know about VMS.  But it’s good to see that configuring this was pain free!