retrocmp

Font Size

Layout

Menu Style

Cpanel
You are here: Home -> DECnet -> How-to's -> DECnet

DECnet

 

How to link Linuxes and VAXes together.

DECNet

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 VAXdescribes 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

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", with area 1..63 and node 1..1023. Here I choosed the address “2.10”. A computer is also identified by a six-letter name, I use “linux1” in this example.

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

 

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

You see:

  • 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


nodeusername 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 options sourcefile targetfile

or

dncopy options sourcefile targetdirectory

Both source and target can reside on any machine, so you can work on a DECnet node “linux1” and copy files from ”linux2” to ”linux3”.

Here I generate a dummy-textfile “test.out” and copy it from “linux1:/home/joerg” to “linux2:/home/joerg”

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)

Be aware of file types: VMS files sometimes have an internal block structure, they are not just a stream of bytes.
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

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.

 

microvax3200_front03

microvax3200_back

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 console

After 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 DECnet

There are two tools to use:

  • The installation procedure “NETCONFIG” guides you through first-time installation of DECnet.
  • All DECnet setup is done with the “Network Control Program”, short “NCP”.
    Google for “DECnet for Open VMS Network Management Utilities” to get the full NCP -Manual.

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
NCP> set executor state off

 

2) Setup a new DECnet configuration

$ @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?          [oldnam]: simvax
What do you want your DECnet address to be?                  : 2.20
Do you want to operate as a router?        [NO (nonrouting)]:
Do you want a default DECnet account?                    [NO]: yes
Do you want default access to the TASK object disabled? [YES]: no
Do you want a default account for the MAIL object?     [YES]:
Do you want a default account for the FAL object?        [NO]: yes
Do you want a default account for the PHONE object?    [YES]:
Do you want a default account for the NML object?      [YES]:

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> clear node *
NCP> purge node *
NCP> exit

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
NCP>define node 2.10 name linux1
NCP>define node 2.11 name linux2
NCP>define node 2.21 name vx3200
NCP>set known nodes all
NCP>show node *

Known Node Volatile Summary as of 21-MAR-1999 15:45:26

Executor node = 2.20 (SIMVAX)

State                    = on
Identification           = SIMHVAX

Node           State     Active Delay  Circuit    Next node
Links
2.10 (LINUX1)                               QNA-0          0
2.11 (LINUX2)                               QNA-0          0
2.21 (VX3200)                               QNA-0          0

 

5) Reboot

I 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,
and executing

 “NCP>define node ...” 

on VMS nodes.

7) Test

Just 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] 

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
You are here: Home -> DECnet -> How-to's -> DECnet