Hi,
That macro version that Brian posted doesn't seem to be working (no output) under OpenVMS 8.4 IA64 but this other version he posted does:
https://mail.encompasserve.org/anon/htnotes/note?f1=DEC_NETWORKING&f2=1247.…
The code he posted does have this comment:
; Read function options (RTFM. Sec 6.8 of DNA NML Network Mgt Spec #AA-X437A-TK)
which is a manual officially titled "DECnet Digital Network Architecture Phase IV Network Management Functional Specification", AA-X437A-TK and a scan is available online at:
http://bitsavers.trailing-edge.com/www.computer.museum.uq.edu.au/pdf/AA-X43…
Regards,
Dave
Quoting "Brian Schenkenberger, VAXman-" <system at tmesis.com>:
"Bob Armstrong" <bob at jfcl.com> writes:
Hey, thanks, Brian, for the example! Where are these NML$ library
routines documented? That's what I was looking for...
Source code? It's been so long since I wrote that example that I really do
not recall where *that* info was found. I typically document my code with
a RTFM reference. Of course, the only thin in that didty I posted was the
DNA NML Network Management Specification. There are only 3 entry points in
NMLSHR.EXE which you can see with an ANALYZE/IMAGE command.
Call NML$INITIALIZE; no parameters.
Call NML$PROCESS_NICE; NML request by descriptor, callback routine
Call NML$TERMINATE; no parameters.
The "Callback routine" is handed a descriptor. The first byte of the data
in the descriptor is a status. The status values, along with all of the
rest of the NMA constants, can be found in the library module "$NMADEF" in
the system called LIB. SYS$LIBRARY:LIB.MLB for macro; LIB.REQ for Bliss;
SYS$LIB_C.TLB for C.
If you Google NML$PROCESS_NICE, you will find some other tidbits of info.
One that was found when I did this is by friend Nick De Smith. It can be
found in the DECUS Library Compendium (DECUSlib.COM) which I too maintain.
NDS's example is written in C. I'd suggest NOT following NDS's example
too closely. Avoid the nameless constant values; include NMADEF from the
library and use its constant definitions.
Also, these calls will only work if you have DECnet phase IV installed on
your system. DECnet Phase V interface is a whole 'nother ball o' wax.
--
VAXman- A Bored Certified VMS Kernel Mode Hacker VAXman(at)TMESIS(dot)ORG
I speak to machines with the voice of humanity.
Source code?
You mean the VMS fiche ? Sorry - at one time I had access to a set, but
no more...
If you Google NML$PROCESS_NICE
Did that last night :-) There's not a lot, but I did find Nick deSmith's
netname.c example, and one other little code fragment, which was helpful.
The "Callback routine" is handed a descriptor.
I saw that. I was really hoping that the callback routine received an
extra generic parameter (like a Windows lParam or a VMS AST parameter) so
that the caller of NML$PROCESS_NICE could pass arbitrary additional
arguments to the callback. It doesn't look like that happens, though, so if
the callback wants to store or save any of the data that it gets, then it
has to do it globally.
library module "$NMADEF" in the system called LIB.
Got that. Actually on OVMS 7.3 I don't have SYS$LIB_C.TLB or nmadef.h -
from some of the web comments I found, it sounds like those might exist only
on Alpha. No matter, though - $NMADEF is in MACRO32 is in LIB and it's
simple to extract $NMADEF to a MAR file. A little bit of emacs magic turned
it into a .h.
The real problem is that there are no comments in $NMADEF, and my NICE
spec (AA-X437A-TK) only gives numeric values for everything. It's kind of
"take your best guess" as to which named constant actually corresponds to
the item you want.
Avoid the nameless constant values; include NMADEF from the library and use
its constant definitions.
Agreed!
Call NML$INITIALIZE; no parameters.
Call NML$PROCESS_NICE; NML request by descriptor, callback routine
Call NML$TERMINATE; no parameters.
The only serious piece I'm missing at this point is, what do you do if you
want to talk to NML on another node besides your own (e.g. "TELL yoyo SHOW
EXEC CHAR") ? There doesn't seem to be any NICE function that can be
embedded in the data stream to do this, and that wouldn't really make sense
anyway. That'd be like asking the local NML to talk to the remote one on
your behalf, and I don't think that's the way it works.
It seems like there should be some parameter to either NML$INITIALIZE or
NML$PROCESS_NICE that gives the node and access control information, but I
don't find any reference to that.
Thanks again for all the help, Brian.
Bob
"Bob Armstrong" <bob at jfcl.com> writes:
Hey, thanks, Brian, for the example! Where are these NML$ library
routines documented? That's what I was looking for...
Source code? It's been so long since I wrote that example that I really do
not recall where *that* info was found. I typically document my code with
a RTFM reference. Of course, the only thin in that didty I posted was the
DNA NML Network Management Specification. There are only 3 entry points in
NMLSHR.EXE which you can see with an ANALYZE/IMAGE command.
Call NML$INITIALIZE; no parameters.
Call NML$PROCESS_NICE; NML request by descriptor, callback routine
Call NML$TERMINATE; no parameters.
The "Callback routine" is handed a descriptor. The first byte of the data
in the descriptor is a status. The status values, along with all of the
rest of the NMA constants, can be found in the library module "$NMADEF" in
the system called LIB. SYS$LIBRARY:LIB.MLB for macro; LIB.REQ for Bliss;
SYS$LIB_C.TLB for C.
If you Google NML$PROCESS_NICE, you will find some other tidbits of info.
One that was found when I did this is by friend Nick De Smith. It can be
found in the DECUS Library Compendium (DECUSlib.COM) which I too maintain.
NDS's example is written in C. I'd suggest NOT following NDS's example
too closely. Avoid the nameless constant values; include NMADEF from the
library and use its constant definitions.
Also, these calls will only work if you have DECnet phase IV installed on
your system. DECnet Phase V interface is a whole 'nother ball o' wax.
--
VAXman- A Bored Certified VMS Kernel Mode Hacker VAXman(at)TMESIS(dot)ORG
I speak to machines with the voice of humanity.
On 2014-05-28 20:19, Cory Smelosky wrote:
On Wed, 28 May 2014, Johnny Billquist wrote:
I would guess on a bad XXDP image, since XXDP requires almost nothing
working. If RSRS/E and RSX works then I can't imagine XXDP not working.
As soon as I figure out how the hell to write a disk image from RSTS/E
I'll try a new image. ;)
Can't MOUNT FOREIGN so I need to read more manuals it appears.
If you have RSX-11M-PLUS V4.6 up and running, it already have a tool for doing this. :-)
Johnny
--
Johnny Billquist || "I'm on a bus
|| on a psychedelic trip
email: bqt at softjar.se || Reading murder books
pdp is alive! || tryin' to stay hip" - B. Idol
On 2014-05-27 23:08, Hans Vlems wrote:
Area 44 is missing from the list.
Johnny, did you turn off the bridge link to my LAN?
Nope.
Is your address still 87.209.50.192 ?
Johnny
Verzonden vanaf mijn BlackBerry 10-smartphone.
Origineel bericht
Van: Bob Armstrong
Verzonden: dinsdag 27 mei 2014 22:50
Aan: hecnet at Update.UU.SE
Beantwoorden: hecnet at Update.UU.SE
Onderwerp: RE: [HECnet] "Dropped by adjacent node" ....
I appreciate the suggestions, but I'm not really interested in trying to
re-architect HECnet. That's a losing battle - I just want my node to work
:-)
I tried sending the USR1 signal to the bridge program and got this -
0: legato 0.0.0.0:0000 (Rx: 827 Tx:11017 (Drop rx: 6)) Active: 1
Throttle: 278(114)
1: psilo 130.238.19:4711 (Rx:11044 Tx: 821 (Drop rx: 27)) Active: 1
Throttle: 115(332)
Hash of known destinations:
aa0004000d04 -> 1 (1.13)
aa0004000f04 -> 1 (1.15)
aa0004001404 -> 1 (1.20)
aa0004001504 -> 1 (1.21)
aa0004005e05 -> 1 (1.350)
aa000400c205 -> 1 (1.450)
aa0004000108 -> 0 (2.1)
aa000400f810 -> 1 (4.248)
aa000400ff17 -> 1 (5.1023)
aa0004009021 -> 1 (8.400)
aa0004009121 -> 1 (8.401)
aa000400bc21 -> 1 (8.444)
aa000400f421 -> 1 (8.500)
aa000400022c -> 1 (11.2)
aa000400032c -> 1 (11.3)
aa000400642c -> 1 (11.100)
aa0004000138 -> 1 (14.1)
aa000400284c -> 1 (19.40)
aa000400294c -> 1 (19.41)
aa0004000470 -> 1 (28.4)
aa0004002970 -> 1 (28.41)
aa000400feab -> 1 (42.1022)
aa0004002fbc -> 1 (47.47)
aa0004004dbd -> 1 (47.333)
aa0004002bbe -> 1 (47.555)
aa0004002cbe -> 1 (47.556)
aa0004002fbe -> 1 (47.559)
aa000400bcbe -> 1 (47.700)
aa000400bdbe -> 1 (47.701)
aa000400d7be -> 1 (47.727)
aa0004000bec -> 1 (59.11)
aa00040005f8 -> 1 (62.5)
aa0004007dfa -> 1 (62.637)
Note that I restarted it about 30 minutes ago, so this data is just for
that period of time. My first observation is that's a lot of routing nodes,
but that's probably neither here nor there.
Also I'm struck by the asymmetry in the number of packets sent vs
received. I guess that makes sense, since I'm transmitting routing and
hello messages for only one node (LEGATO) and receiving them from beaucoup
nodes.
And I'm not sure that the throttling in the bridge is about...
Bob
--
Johnny Billquist || "I'm on a bus
|| on a psychedelic trip
email: bqt at softjar.se || Reading murder books
pdp is alive! || tryin' to stay hip" - B. Idol
On 2014-05-28 15:56, Paul_Koning at Dell.com wrote:
On May 28, 2014, at 9:40 AM, Johnny Billquist <bqt at softjar.se> wrote:
On 2014-05-28 15:33, Paul_Koning at Dell.com wrote:
...
DDCMP is a data link layer that deals with packet loss. It also deals with reordering, within reason, by treating it as packet loss, just as NSP did until Phase V. It should be ok with limited duplication as well though duplication is not one of the supposed characteristics of UDP.
Duplication is definitely a possible event with UDP. It happens from time to time. It's essentially because duplication is possible with IP. UDP is just IP with ports and a checksum (if you are lucky). And IP makes no promises at all. Packets might not arrive, might arrive out of order, become duplicated, delayed, or even corrupted.
Note that I meant the DDCMP protocol, not the DDCMP point to point service. In other words, the UDP packets would carry DDCMP frames, with DDCMP header (including sequence number and all that). I think SIMH has that right now, in V4.0 DMC emulation.
Ok. So if I understand correctly, DDCMP is guaranteeing the delivery of data between the two points. Data will arrive in order and without any loss or other confusion, as seen by the layers above DDCMP?
Yes, just as with TCP. The usual disclaimers apply. For example, dups or reorders are detected only up to the wrap point of the sequence number space. Corruption is caught only up to the capabilities of the CRC being used.
Also, guaranteed delivery is a commonly used term. A more accurate term would be guaranteed delivery or notification of failure . Connection oriented services like DDCMP and TCP and TP4 and NSP will deliver the data stream intact to the other end, OR they will tell you that they could not do so.
Seems like UDP could work then, but maybe TCP would be better?
Not clear. If things get reordered or delayed to the point that the DDCMP sequence number space is no longer sufficient, then TCP would help. It makes things somewhat more complicated (as Rob Jarratt pointed out) because TCP introduces the asymmetry of who connects while DDCMP does not have than and neither does UDP.
Right. However, I also wonder if the retry and recover mechanisms in TCP might be faster and more efficient than what DDCMP do. But like I said, I have not looked, so I'm just guessing.
Johnny
--
Johnny Billquist || "I'm on a bus
|| on a psychedelic trip
email: bqt at softjar.se || Reading murder books
pdp is alive! || tryin' to stay hip" - B. Idol
"Bob Armstrong" <bob at jfcl.com> writes:
I want to write a little C program that talks to NML without, say,
spawning NCP to execute commands. I found a specification for Phase IV
NICE, which is doable but a bit complicated. Does anyone know if there's an
NML/NICE interface library of some kind?
================
File NML.MAR is:
================
;++
; Copyright 1992, by Brian Schenkenberger and TMESIS. ALL RIGHTS RESERVED.
;
; This software is provided "AS IS" and is supplied for informational purpose
; only. No warranty is expressed or implied and no liability can be accepted
; for any actions or circumstances incurred from the use of this software or
; from the information contained herein. The author makes no claim as to the
; suitablility or fitness of the software or information contain herein for a
; particular purpose.
;
; Permission is hereby granted *ONLY* for the "not-for-profit" redistribution
; of this software provided that ALL SOURCE and/or OBJECT CODE remains intact
; and ALL COPYRIGHT NOTICES remain intact from its original distribution.
;
;(!) NO TITLE TO AND/OR OWNERSHIP OF THIS SOFTWARE IS HEREBY TRANSFERRED. (!)
;--
; This program uses the DECnet Network Information Command Exchange Protocol
; or NICE protocol (which it is anything but nice if you should have a chance
; to read the functional spec.)
;
; This is a quick and dirty ditty to print out the nodes which your node can
; see as active or reachable nodes.
;
; NICE is comprised of a set of functions (LOOP, LOAD, READ, etc.) to which
; a structure of option functions is attached. A callable interface, the
; NML$xxx calls, facilitate the use of the NICE codes. FYI, you can also
; open a channel to another nodes NML object and request information from it
; using NICE protocols.
;
; I built this example with the NML$xxx calls because it facilitates the
; disassembly of the information returned by the requested NICE command.
;
; I'm a MacroMan so naturally, this example is in Macro. If you're one of
; the followers of fanciful programming fad, you can probaby translate this
; into (eek) 'C' or any other HOL.
;--
; To build:
; $ MACRO NML
; $ LINK NML,SYS$INPUT/OPT
; SYS$SHARE:NMLSHR.EXE/SHARE
; ^Z
;--
.TITLE NML
.LIBRARY "SYS$LIBRARY:STARLET.MLB" ; look here for...
$DSCDEF ; defines, symbolocally, OpenVMS descriptor codes
$LIB$ROUTINESDEF; defines macros for the OpenVMS LIB$ RTL routines
.LIBRARY "SYS$LIBRARY:LIB.MLB" ; look here for...
$NMADEF ; defines, symbolically, NICE/NML function codes
.PSECT $$DATA,WRT,NOEXE,5
;++
; Read function options (RTFM. Sec 6.8 of DNA NML Network Mgt Spec #AA-X437A-TK)
;--
OPTION = <NMA$C_ENT_NOD at NMA$V_OPT_ENT>!- ; Entity type = node
<NMA$C_OPINF_SUM at NMA$V_OPT_INF>!- ; inform type = summary
<0 at NMA$V_OPT_PER> ; Read volatile database
; <1 at NMA$V_OPT_PER> ; Read permanent database
REQST: .ASCID <NMA$C_FNC_REA><OPTION><NMA$C_ENT_KNO>
.ALIGN QUAD
NODE: .ADDRESS DESC
DESC: .QUAD 0
OUTPUT: .LONG <DSC$K_CLASS_D@<DSC$B_CLASS at 3>>!-
<DSC$K_DTYPE_T@<DSC$B_DTYPE at 3>>,0
FORMAT: .ASCID /Node: !6AS DECnet address: !UL.!UL/
.PSECT $$CODE,NOWRT,EXE
.ENTRY START_NML,0
CALLS #0,G^NML$INITIALIZE ; init the NML interface
PUSHAB CALLBACK_ROUTINE ; addr of rtn to output data
PUSHAB REQST ; desc of NICE request
CALLS #2,G^NML$PROCESS_NICE ; call interface, process request
CALLS #0,G^NML$TERMINATE
$EXIT_S
RET
;++
; The callback routine is called by the NML$PROCESS_NICE function with
; the address of a descriptor and will called repeatedly until all the
; information requested is exhausted. First byte of the data described
; by the descriptor is a status byte. The rest is data, passed in a
; format with is unique to each NICE functional operation and is detailed
; in the functional spec.
;--
$OFFDEF CALLBACK_ROUTINE,DESCRIPTOR
.ENTRY CALLBACK_ROUTINE,0
MOVQ @CALLBACK_ROUTINE$_DESCRIPTOR(AP),R0
CMPB (R1),#NMA$_SUCCESS
BEQL 10$
RET
;++
; Here, as per the NML spec, the information is process... The beginning of
; the response string is formatted as such:
;
;
; |<-- ascic node name
; | |<-- node number
; | | |<-- status
; +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
; | | | | F| E| D| C| B| A| #| | | | | | |
; +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
;--
10$: TSTL (R1)+ ; move pointer forward 4 bytes
MOVZWL (R1)+,R0 ; get the node number
EXTZV #0,#7,(R1)+,DESC ; get the node name length
MOVAB (R1),DESC+4 ; get the node name address
EXTZV #NMA$V_ADDR,#NMA$S_ADDR,R0,R1 ; get the node number
EXTZV #NMA$V_AREA,#NMA$S_AREA,R0,R0 ; get the area number
$LIB_SYS_FAO_S character_string = FORMAT,-
resultant_string = OUTPUT,-
directive_argument1 = NODE,-
directive_argument2 = R0,-
directive_argument3 = R1
$LIB_PUT_OUTPUT_S message_string = OUTPUT
RET
.END START_NML
================
File NML.OPT is:
================
SYS$SHARE:NMLSHR.EXE/SHAREABLE
$ MACRO NML.MAR
$ LINK NML.MAR,NML.OPT/OPTION
--
VAXman- A Bored Certified VMS Kernel Mode Hacker VAXman(at)TMESIS(dot)ORG
I speak to machines with the voice of humanity.
I want to write a little C program that talks to NML without, say, spawning NCP to execute commands. I found a specification for Phase IV NICE, which is doable but a bit complicated. Does anyone know if there s an NML/NICE interface library of some kind?
Thanks,
Bob