DECnet
How to link Linuxes and VAXes together.
DECNet
- Details
- Parent Category: How-to's
- Category: DECnet
- Administrator
Here I’m documenting some procedures for connecting modern and vintage Computers over DECnet. Wikipedia knows about it.
DECnet is an old network protocol, used from 70’ to 90’ by Digital Equipment Cororation.
Motivation
I got an old µVAX 3200 from my vintage computer club “CCG”. The system drive was a 160MB Maxtor RD54 SMD disk, and there was a running OpenVMS 5.2-1 installation on it.
Before playing with the VAX I had to find a way to exchange data between the VAX and the modern world. At first I bootstrapped “C-Kermit” to the machine.
But then I decided to get DECnet running, so the machine would be accessible from a Linux node.
The Network
This is the network I setup here:
|
DECnet addr
|
DECnet name
|
Info
|
| 2.10 | linux1 | A Ubuntu 9.10 installation |
|
2.11
|
linux2
|
A Ubuntu 9.10 installation
|
|
2.20
|
simvax
|
A VAX 3500 simulated with SimH running on “linux1”
|
|
2.21
|
vx3200
|
A physical microVAX 3200, connected over ethernet
|
Tutorial
The following chapters present a course with several lessons.
“DECnet on Ubuntu ” : here I describe how to connect two virtual Ubuntu 9.10 installations over DECnet. This is also an introduction into DECnet logic. So it is pretty much text, I split it into the parts “Setup” and “Tools”.
Connecting two Linuxes over DECnet guarantees that we have a working Linux-DECnet node for the next steps
- “DECnet on a VAX” describes how to setup DECnet on an old VAX 3200 running OpenVMS 5.2. The VAX is running simulated under SimH under Ubuntu.
- “VAX and Linux connected”, how to integrate a µVAX and a modern Ubuntu over DECnet.
This is necessary to get control over the VAX’s software installation.
DECnet on Ubuntu - Setup
- Details
- Parent Category: How-to's
- Category: DECnet
- Administrator
Here I describe how to connect two virtual Ubuntu 9.10 installations over DECnet.
Since I do not have two PC’s running Ubuntu, I use virtual installations running under VMWare Workstation. But this should not make any difference to physical Ubuntu-computers.
Using virtual installations has the advantage that you easily can clone one installation to get another network member. So backup your Ubuntu base installation BEFORE you install DECnet onto it, and later use the clone to setup a second system.
Installation
DECnet has always been part of Debian, but nowadays it’s not installed by default anymore. Here is some documentation.
Under UBUNTU, use the “Synaptic Package Manager” and install the packages “dnet-common” and “dnet-progs”. You will be asked for a node name and a node address.
DECnet addressing and MAC-ID
Under “DECnet Phase IV”, a computer (node) address in the network is given in the form "area.node"
Setting a DECnet address changes the MAC-ID of your network card. Here is a MAC-ID calculator. So before installation, “ifconfig” shows something like
eth0 Link encap:Ethernet Hardware Adresse 00:0c:29:ef:18:55
inet Adresse:192.168.1.187 Bcast:192.168.1.255 Maske:255.255.255.0
and after installation, this changes to
eth0 Link encap:Ethernet Hardware Adresse aa:00:04:00:0a:08
inet Adresse:192.168.1.196 Bcast:192.168.1.255 Maske:255.255.255.0
Attention: To force the new MAC-ID, I had also to edit /etc/network/interfaces (as described here):
$ sudo gedit /etc/network/interfaces
Add the two lines beginning with “iface”
auto eth0
iface eth0 inet dhcp
hwaddress ether AA:00:04:00:0A:08
Then execute:
$ sudo /etc/init.d/networking restart
Twiddling with the MAC-ID maybe confuse your network router, so Reboot!
Setting up a 2nd Ubuntu.
To test this setup, we need a second node in the DECnet. Use a copy of your original Ubuntu installation. Give the copy another hostname! I called this node “linux2”, and gave it a DECnet address of “2.11”, so it’s MAC-id is AA:00:04:00:0B:08.
DECnet setup
DECnet is configured with three configuration files, each must be edited on both Ubuntu installations. They are pretty simple and self-explanatory
1) “/etc/decnet.conf” is like “/etc/hosts” for TCP/IP. It lists all nodes in the network and specifes the “localhost”
Here is /etc/decnet.conf on node “linux1”. It lists the other Ubuntu “linux” and a two nodes “simvax” and “vx3200”, wich we will add later.
#
# DECnet hosts file
#
#Node Node Name Node Line Line
#Type Address Tag Name Tag Device
#----- ------- ----- ------- ----- ----
executor 2.10 name linux1 line eth0
node 2.11 name linux2
node 2.20 name simvax
node 2.21 name vx3200
And here the same for node “linux2”. Now “linux2” is “executor” and “linux1” is just a normal node.
#
# DECnet hosts file
#
#Node Node Name Node Line Line
#Type Address Tag Name Tag Device
#----- ------- ----- ------- ----- ----
executor 2.11 name linux2 line eth0
node 2.10 name linux1
node 2.20 name simvax
node 2.21 name vx3200
All users must read decnet.conf:
# chmod a+r /etc/decnet.conf
2) “/etc/decnet.proxy” . This file controls access to the local machine and maps remote users to local users. Here it is for both “linux1” and “linux2”:
# /etc/decnet.proxy
#
# DECnet proxy database.
# The format of this file is (one entry per line)
# node::remoteuser localuser
#
# ...
#
# ^tramp$::^test$ chrissie # Explicitly convert 'test' on tramp to chrissie
# ^zaphod$::.* none # Disable proxies from zaphod
.*::.* */DEFAULT
# associate all remote users with a
# similarly named user on the local VMS machine
# # a user called 'none')
# .*::.* decnet # Like a default DECnet account
# .*::.* * # Equivalent to VMS *::* * proxy (make this last
# # if you use it)
I added only the rule: “.*::.* */DEFAULT”. This means, that each remote user is authenticated by his remote username and password. So if a user has an identical account on local host and remote host, everything is fine and there is no need to give user name and password for each command (see below).
3) “/etc/dnet.conf” specifies services (“objects”) for remote users. It’s like the old “/etc/inetd.conf” for TCP/IP. The default configuration is fine:
# /etc/dnetd.conf
#
# Define DECnet objects
#
# Fields
# name: object name (or * for any named object, number must be 0)
# number: object number (or 0 for a named object)
# options: auth[,auto accept]:
# auth: Whether to authenticate users: Y or N
# auto accept: Should we accept incoming connections
# This is needed for non-decnet daemons
# (not calling dnet_accept)
# user: If auth is N then use this user
# daemon: program to run or 'internal'
#
# name number options user daemon
#
FAL 17 Y,N none fal
MIRROR 25 Y,N root internal
MAIL 27 N,N vmsmail vmsmaild
CTERM 42 N,N root ctermd
DTERM 23 N,N root rmtermd
NML 19 N,N nobody dnetnml
* * Y,R none internal
“FAL” is the “File Access Listener”, the service for remote file access. “CTERM” and “DTERM” are two flavours of remote login. “MIRROR” is used for DECnet-Ping.
DECnet on Ubuntu - Tools
- Details
- Parent Category: How-to's
- Category: DECnet
- Administrator
Now we will use the DECnet installation. Make sure both Ubuntu installation ("linux1" and "linux2") are up and running on the same network - be it physical or virtual.
For all examples, I will work on "linux1" and contact "linux2" over network. My username and my password are both "joerg".
There are "man" pages for each command below!
"dneigh" - Show other nodes on the net
The command "dneigh" shows other nodes on the same DECnet.
joerg@linux1:~$ dneigh
linux2 ether AA:00:04:00:0B:08 --- 1498 eth0
linux1 loop AA:00:04:00:0A:08 --- 16434 lo
joerg@linux1:~$
Attention: in my tests, I found that "dneigh" shows other nodes only after other applications like "phone" where run.
"dnping" - test "MIRROR" object on remote node.
dnping is not as low-level as TCP/IP ping. It needs an active service on the remote host, and you must also authenticate on the remote host with username and password.
joerg@linux1:~$ dnping linux2 -u joerg -p joerg
Sent 10 packets, Received 10 packets
If something is wrong, the error is "socket: Connection refused.
"phone" - chat with other user
This is pretty cool ... at least it was so in the '80s! You can see who's logged on, and can "ring" him to talk with you over a graphical application.
1) Start phone utiltiy:
joerg@linux1:~$phone
(Inside phone, all commands start with "%".)
2) see, who is logged on:
%dir linux2
3) Ring him:
%dial linux2::joerg
4) on the other side, see it "ringing". No matter what you do, your terminal display is every 10 seconds disturbed by the message
LINUX1::JOERG is phoning you on LINUX2:: (17:12:20)
5) on the other node, answer the call :
joerg@linux2:~$phone
%answer
Now type text, it appears directly in your panel of the "phone" screen on both local and remote host.
6) Hang up
Type
%quit
"sethost" - remote login
This is like "telnet". See me logging on from linux1 to linux2:
joerg@linux1:~$ sethost linux2
sethost V1.0.4
Connecting to linux2
Cterm connection. Escape Sequence is ^]
CTERM Version 1.0.6
DECnet for Linux
linux2 login: joerg
Password:
Last login: Sat Mar 20 19:51:25 CET 2010 on pts/1
Linux linux2 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009 i686
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
0 packages can be updated.
0 updates are security updates.
joerg@linux2:~$
"dndir" - show directory on remote node
This is the first file related command I expercise, so things are getting more VMS-like now.
All file-related DECnet commands use OpenVMS syntax for files and directories. Even if both local and remote nodes are Linuxes, the remote node is always accessed as if it would using OpenVMS.
The OpenVMS file path syntax is quite different from UNIX path logic. The generic form for VMS-file names is
node::device :[rootdir .subdir .subdir ...]file .ext ;version
Most parts of the path are optional.
I have an Eclipse-Installation in "/usr/joerg/eclipse" on "linux2". To list its installation directory, type
joerg@linux1:~$ dndir linux2::[home.joerg.eclipse]*.*
and get:
Directory of HOME:[JOERG.ECLIPSE]
ABOUT.HTML;1 ABOUT_FILES.DIR;1 ARTIFACTS.XML;1 CONFIGURATION.DIR;1
DROPINS.DIR;1 ECLIPSE.;1 ECLIPSE.INI;1 EPL-V10.HTML;1
FEATURES.DIR;1 ICON.XPM;1 LIBCAIRO-SWT.SO;1 NOTICE.HTML;1
P2.DIR;1 PLUGINS.DIR;1 README.DIR;1
VMS file names are NOT case-sensitive. Filenames are ALWAYS mapped to uppercase, even if this generates duplicate filenames on the remote Linux node.
Subdirectories are listed as normal files, with a ".DIR" extension.
the VMS version number is always "1" for Linux nodes.
"/home" can also be accessed as device "HOME:"
You wonder about missing authentication? No log-in on the remote "linux2" is required here because
we have the rule ".*::.* */DEFAULT" in "/etc/dnet-proxy"
AND we have user "joerg" with password "joerg" on both "linux1" and "linux2".
Normally you must give username and password (for the remote node!) as part of the remote node name. So
node
becomes
node ”username password”
and the generic filename path is now
node”username password”::device:[rootdir.subdir,subdir...]file.ext;version
Whoa! To squeeze all this through the Unix-shell parameter expansion, better surround the whole stuff with single quotes:
joerg@linux1:~$ dndir 'linux2"joerg joerg"::home:[joerg.eclipse]*.*'
"dncopy" - Copy files over DECnet
This is why we're dealing with DECnet!
After managing "dndir", using "dncopy" is easy. The dncopy-Command has the usual syntax
dncopy optionssourcefile targetfile
or
dncopy options sourcefile targetdirectory
joerg@linux1:~$ ls -l >test.out
joerg@linux1:~$ ls -l *.out
-rw-r--r-- 1 joerg joerg 1308 2010-03-25 10:55 test.out
joerg@linux1:~$ dncopy -s test.out 'linux2"joerg joerg"::home:[joerg]'
Sent 1308 bytes in 0.00 seconds: infK/s
joerg@linux1:~$ dndir -l 'linux2"joerg joerg"::home:[joerg]*.out'
Directory of HOME:[JOERG]
TEST.OUT;1 1308 25-MAR-2010 10:55:57 [1750,1750] (RWED,RWD,R,R)
At least VMS-executables (with .EXE-Extension) must be copied with the “-mblock” Option. And other binary files, as backup-dumps, too.
Read “man dncopy” and try experimenting with “-mrecord”,” -mblock” and “-b” options.
Other commands
There are still more DECnet commands. See the man pages of
- dntype,
- dndel,
- dntask,
- dnsubmit
- and dnprint.
DECnet on a VAX
- Details
- Parent Category: How-to's
- Category: DECnet
- Administrator
Using DECnet under VMS is of course much easier then using it under Linux. But you have to deal with that vintage VMS/VAX stuff. VMS is a very rich and comfortable operating system, but some of its concepts are now rather unfamiliar.
This tutorial is valid for simulated and physical VAXes.
The simulated VAX becomes node address 2.20, and is named “SIMVAX”.
The physical VAX 3200 is node 2.21 and is named “VX3200”.
Setup a VAX emulation with SimH
Before trashing the physical VAX, I setup a SimH-Simulation.
Explaining SimH is far beyond the scope of this tutorial.
Here is the startup file:
; uvax.vaxsim
;
; See also: http://www.wherry.com/gadgets/retrocomputing/vax-simh.html
; simulates my uVAX, 3200 (label on box says "uVAX II/GPX")
load -r ../../../emulation/simh/ka655x.bin
; I have 2x 8MB
set cpu 16m
; save NVR in file
attach nvr nvram.bin
; I have aTK50
set TQ0 enable
set TQ0 WRITEENABLE
set TQ TK50
set TQ1 disable
set TQ2 disable
set TQ3 disable
sh tq
sh tq0
; I have one RD54
set RQ0 enable
set RQ0 writeenable
set RQ0 RD54
set RQ1 disable
set RQ2 disable
set RQ3 cdrom
attach RQ0 vms5.2-1.durd_54
attach RQ3 ../../../os/openvms/openvms-vax-7.3.iso
sh rq
sh rq0
; no rl01/02
set rl disable
; Network on UBUNTU
set xq enabled
set xq
; MAC-ID for DECnet addr 2.20
set xq mac=AA-00-04-00-14-08
attach xq0 eth0
sh xq
echo
echo ### Booting VAX CPU ....
echo ###
echo ### After the >>> prompt enter:
echo ### >>> b dua0 /r5:1
echo ###
set console telnet=23
boot cpu
You see that the network card’s MAC-ID is already defined by a DECnet node address. The VAX gets DECnet node address “2.20”, so the MAC-ID is AA-00-04-00-14-08.
I let this simulation run on an Ubuntu host, here “linux1”:
Attention: Due to limitations of SimH’s network drivers, the simulated VAX can not connect to the machine it is running on. So if the simulated VAX “SIMVAX” runs onUbuntu installation “linux1”, there will be no network connection between SIMVAX and linux1. All other connection (SIMVAX - linux2, linux1 - linux2, etc) will work well.!
You start the simulated vax by running something like
$ sudo ~/simh/vax uvax.vaxsim
Then you have to start a VT100-emulation and connect it over telnet to SimH’s host machine. The simulated VAX will then start running.
Setup a physical VAX
On the physical VAX, no MAC-ID setup is necessary. But you have to connect it to your network.
The VAX 3200 network adapter is a DEQNA, the connector on the BA23 box is a “AUI” SubD -connector. It is “10baseT”, meaning running at 10MBit/sec. To connect it to modern ethernet, a “Medium Attachement Unit” (MAUI) is required, this is the grey box on the picture. It is an 1$ eBay item. Booting the VAX from consoleAfter the (physical or virtual) VAX is powered on, it self-tests and then waits for a boot-command. On the >>> prompt type >>>boot DUA0: and wait until you’re able to “Login:”. Then login as SYSTEM, you should get the “$” prompt. Setup DECnetThere are two tools to use:
We do only minimal configuration: set name and node address of local host, and define some other node addresses. The DECnet term for “localhost” is “executor”. I show the input for the virtual VAX “simvax”. For the physical “vx3200”, you have to exchange “simvax” with “vx3200” and “2.20” with 2.21” 1) Stop DECnet $ run sys$system:ncp
2) Setup a new DECnet configuration $ @sys$manager:netconfig DECnet-VAX network configuration procedure Then scroll through the generated script files, and agree to execute it. 3) Clear all existing node settings with NCP:$ run sys$system:ncp NCP has a permanent and a volatile configuration database, so you must both CLEAR and PURGE . 4) Use NCP to define other DECnet nodes We will add three nodes (2 Ubuntu, 1 other VAX) to the VAX’s name table:
$ run sys$system:ncp
5) RebootI found this necessary sometimes ...
That’s it. 6) Enter the new SIMVAX node into other DECnet nodes In this test setup, all nodes must have a list of all other nodes (until I understand more about DECnet administration). This means editing “/etc/decnet.conf” on Linux nodes, “NCP>define node ...” on VMS nodes. 7) TestJust look at another machine with the “directory” command. For example, look onto my Eclipse installation on Ubuntu node “linux2”. Beware: If you doing this on a simulated VAX running under SimH on “linux1”, you can not access “linux1” itself! But other nodes (like “linux2”) must be reachable. Type $ dir linux2"joerg joerg"::[home.joerg.eclipse] and get:
Directory LINUX2"joerg password"::HOME:[JOERG.ECLIPSE] |

