| Title: | Alpha Developer Support |
| Notice: | [email protected], 800-332-4786 |
| Moderator: | HYDRA::SYSTEM |
| Created: | Mon Jun 06 1994 |
| Last Modified: | Fri Jun 06 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 3722 |
| Total number of notes: | 11359 |
Company Name : K.B.C Advanced Technologies - Point 25505
Contact Name : Mark Belfield
Phone : 44 1932856 ext 622
Fax :
Email : [email protected]
Date/Time in : 11-APR-1997 13:47:49
Entered by : Nick Hudson
SPE center : REO
Category : vms
OS Version :
System H/W :
Brief Description of Problem:
-----------------------------
From: RDGENG::MRGATE::"RDGMTS::PMDF::mail.dec.com::MartinB2" 11-APR-1997 09:53:15.31
To: RDGENG::ASAP
CC:
Subj: ESCALATION: POINT 25505 , Company: KBC TO ASAP READING
From: NAME: Brendan Martin <[email protected]@PMDF@INTERNET>
To: NAME: '[email protected]' <IMCEAX400-c=US+3Ba=+20+3Bp=DIGITAL+3Bo=SBUEURMFG+3Bdda+3ASMTP=asap+40reo+2Emts+2Edec+2Ecom+3B@mail.dec.com@PMDF@INTERNET>
POINT Log Number 25505
Company Name K.B.C Advanced Technologies
Engineers name Mark Belfield
Telephone Number 44 1932856 ext 622
Fax Number N/A
E-mail Address [email protected]
Operating System, Version
Platform
Problem Statement
Mark is trying to set up a low level program to resolve unique ip
addresses /ethernet addresses and is looking for something like a
UNAME command in Unix but for Open VMS which can be callable from C or
Fortran.
Hardware DEC Alpha 1000A 5/400
Software Open VMS 6.2-1H3
Problem:
We at KBC are an ASAP member - no A60692.
We supply an application to clients written in DEC Fortran and C.
For security purposes we need to uniquely identify client
machines.
Under Unix this is done via the uname C procedure call.
We currently use the ethernet address from a network card, but
after upgrading our Alpha it does not work. The code to get the
ethernet address was supplied to us by DEC at the Basingstoke
porting centre a few years ago.
Please see attached.
Ideally we would like a unique machine id like uname under unix.
Our Second preference would be to get the ethernet address using
a
higher level interface than the one shown in the attached code.
Our third preference would be to correct the code shown in the
attachment.
Regards,
Brendan
In replying, please use [email protected]
SUBROUTINE MCENET(ETHERNET_ADDRESS,STATUS)
*
***********************************************************************
*********
*
*
* KBC PROCESS TECHNOLOGY LTD *
*
* KBC HOUSE *** ***
*
* CHURCHFIELD ROAD ***** *****
*
* WEYBRIDGE *** K K BBB CC
*** *
* SURREY ** K K B B C C
** *
* KT13 8DB * KK BBB C
* *
* ENGLAND ** K K B B C C
** *
* *** K K BBB CC
*** *
* WEYBRIDGE (0932) 56622 ***** *****
*
* *** ***
*
* c 1985 *
*
*
*
* PETROFINE is a Registered Trade Mark of KBC Process Consultants
Ltd. *
*
*
***********************************************************************
*********
*
* ROUTINE: MCENET
*
* GENERALITY: PETROFINE MACHINE DEPENDANT UTILITY
*
* FUNCTION: GET THE ETHERNET ADDRESS OF THE CURRENT MACHINE
*
*
* LANGUAGE: VAX FORTRAN
*
* NON-STANDARD FEATURES:
*
*
* AUTHOR: DEC source
*
* DATE: 20th January 1995
*
* MODIFICATIONS:
*
* CALLED BY: MCPASS
*
* CALLS:
*
*
* ARGUMENTS:
*
* ETHERNET_ADDRESS O the ethernet address of the current
machine
* STATUS O status of the routine
*
*
* COMMON VARIABLES:
*
PARAMETER NMA$C_PCLI_HWA=1160
INCLUDE '($IODEF)'
INCLUDE '($SSDEF)'
INTEGER*4 STATUS,ETHERNET_ADDRESS(6),I,K
INTEGER*2 INPUT_CHAN
*
* DEFINE IO STATUS BLOCK
*
STRUCTURE /IOSTAT_BLOCK/
INTEGER*2 IOSTAT
INTEGER*2 TRANSFER_SIZE
BYTE FILLER_1
BYTE UNIT_STATUS
BYTE ERROR_SUMMARY
BYTE FILLER_2
END STRUCTURE
RECORD /IOSTAT_BLOCK/ IOSB
*
* DEFINE CHARACTERISTICS BLOCK
*
STRUCTURE /CHARACTERISTICS/
BYTE CLASS
BYTE TYPE
INTEGER*2 MAX_MSG_SIZE
BYTE FILLER_1
BYTE UNIT_STATUS
BYTE ERROR_SUMMARY
BYTE FILLER_2
END STRUCTURE
RECORD /CHARACTERISTICS/ CHARBUF
*
* DEFINE EXTENDED CHARACTERISTICS BLOCK
*
STRUCTURE /EXTENDED_CHARACTERISTICS/
UNION
MAP
BYTE B (512)
END MAP
MAP
INTEGER*2 W (256)
END MAP
END UNION
END STRUCTURE
RECORD /EXTENDED_CHARACTERISTICS/ EXT_CHAR
*
* DEFINE EXTENDED CHARACTERISTICS BLOCK DESCRIPTOR
*
STRUCTURE /EXT_CHAR_DESC/
INTEGER*4 LENGTH /512/
INTEGER*4 ADDRESS
END STRUCTURE
RECORD /EXT_CHAR_DESC/ EXT_DESC
INTEGER*4 SYS$ASSIGN,SYS$QIOW
*
* ASSIGN AN I/O CHANNEL TO THE DEUNA
*
STATUS = SYS$ASSIGN ('EWA0:',INPUT_CHAN,,)
IF (STATUS .EQ. SS$_NOSUCHDEV)
+STATUS = SYS$ASSIGN ('XEA0:',INPUT_CHAN,,)
IF (STATUS .EQ. SS$_NOSUCHDEV)
+STATUS = SYS$ASSIGN ('XQA0:',INPUT_CHAN,,)
IF (STATUS .EQ. SS$_NOSUCHDEV)
+STATUS = SYS$ASSIGN ('ETA0:',INPUT_CHAN,,)
IF (STATUS .EQ. SS$_NOSUCHDEV)
+STATUS = SYS$ASSIGN ('ESA0:',INPUT_CHAN,,)
IF (STATUS .EQ. SS$_NOSUCHDEV)
+STATUS = SYS$ASSIGN ('EZA0:',INPUT_CHAN,,)
IF (.NOT. STATUS) CALL LIB$SIGNAL (%VAL(STATUS))
*
* PUT ADDRESS OF EXTENDED CHARACTERISTICS BUFFER INTO
* BUFFER DESCRIPTOR
*
EXT_DESC.ADDRESS =%LOC(EXT_CHAR)
*
* DO THE QIO TO GET CHARACTERISTICS
*
STATUS = SYS$QIOW (,%VAL(INPUT_CHAN),
+%VAL(IO$_SENSEMODE .OR. IO$M_CTRL),
+IOSB,,,CHARBUF,EXT_DESC,,,,)
IF (.NOT. STATUS) CALL LIB$SIGNAL (%VAL(STATUS))
IF (.NOT. IOSB.IOSTAT) CALL LIB$SIGNAL (%VAL(IOSB.IOSTAT))
*
* FIND THE HARDWARE ADDRESS AND PRINT IT
*
I=2
DO WHILE (I .LT. IOSB.TRANSFER_SIZE)
IF ((EXT_CHAR.W(I/2).AND.'0FFF'X) .EQ. NMA$C_PCLI_HWA) THEN
DO K = 1 , 6
ETHERNET_ADDRESS(K) = EXT_CHAR.B(I+2+K)
ENDDO
STATUS = 0
RETURN
ENDIF
IF ((EXT_CHAR.W(I/2) .AND. '1000'X) .EQ. 0) THEN
I = I+6
ELSE
I = I + EXT_CHAR.W(I/2+1) + 4
ENDIF
ENDDO
STATUS = -1
RETURN
END
RFC-822-headers:
Received: from reoexc1.reo.dec.com by rg71rw.reo.dec.com (PMDF V5.0-7 #15552)
id <[email protected]> for [email protected]; Fri,
11 Apr 1997 09:42:54 +0100
Received: by reoexc1.reo.dec.com with SMTP
(Microsoft Exchange Server Internet Mail Connector Version 4.0.994.63)
id <[email protected]>; Fri, 11 Apr 1997 09:45:28 +0100
X-Mailer: Microsoft Exchange Server Internet Mail Connector Version 4.0.994.63
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 3469.1 | http://www.partner.digital.com/www-swdev/pages/Home/TECH/faqs/ovms/ethernVMS.html | HYDRA::NEWMAN | Chuck Newman, 508/467-5499 (DTN 297), MRO1-3/F26 | Fri Apr 11 1997 09:40 | 10 |
Nick -- Point them to the code in the FAQ on our website for ethernet id checking code. Also, remind them that system managers can easily reconfigure systems to have the same uname and hostid output (thereby foiling their licensing scheme). -- Chuck Newman | |||||
| 3469.2 | KZIN::HUDSON | That's what I think | Mon Apr 14 1997 06:00 | 143 | |
From: DEC:.REO.REOVTX::HUDSON "[email protected] - UK Software Partner Engineering 830-4121" 14-APR-1997 11:00:26.20 To: nm%vbormc::"[email protected]" CC: HUDSON Subj: re:ASAP 25505, system IDs for licensing Hello Mark Belfield Thanks for your ASAP question on obtaining a unique machine address. The mechanism of using a system's ethernet address is one that many (most?) people use on Alpha. I am not sure what's wrong with the code you sent in; I include below the FORTRAN program I've always used, and this seems to work on my machine : $ r ethernet Ethernet address = 08-00-2B-32-C2-B1 $ For a C example, you could look at the web page: www.partner.digital.com/www-swdev/pages/Home/TECH/faqs/ovms/ethernVMS.html If you can't get this working, let me know what the error is you're seeing. Regards Nick Hudson Digital Software Partner Engineering PROGRAM GET_ETHERNET ADDRESS C C C C C PARAMETER NMA$C_PCLI_HWA=1160 INCLUDE '($IODEF)' INCLUDE '($SSDEF)' INTEGER*4 STATUS INTEGER*2 INPUT_CHAN C C DEFINE IO STATUS BLOCK C STRUCTURE /IOSTAT_BLOCK/ INTEGER*2 IOSTAT INTEGER*2 TRANSFER_SIZE BYTE FILLER_1 BYTE UNIT_STATUS BYTE ERROR_SUMMARY BYTE FILLER_2 END STRUCTURE RECORD /IOSTAT_BLOCK/ IOSB C C DEFINE CHARACTERISTICS BLOCK C STRUCTURE /CHARACTERISTICS/ BYTE CLASS BYTE TYPE INTEGER*2 MAX_MSG_SIZE BYTE FILLER_1 BYTE UNIT_STATUS BYTE ERROR_SUMMARY BYTE FILLER_2 END STRUCTURE RECORD /CHARACTERISTICS/ CHARBUF C C DEFINE EXTENDED CHARACTERISTICS BLOCK C STRUCTURE /EXTENDED_CHARACTERISTICS/ UNION MAP BYTE B (512) END MAP MAP INTEGER*2 W (256) END MAP END UNION END STRUCTURE RECORD /EXTENDED_CHARACTERISTICS/ EXT_CHAR C C DEFINE EXTENDED CHARACTERISTICS BLOCK DESCRIPTOR C STRUCTURE /EXT_CHAR_DESC/ INTEGER*4 LENGTH /512/ INTEGER*4 ADDRESS END STRUCTURE RECORD /EXT_CHAR_DESC/ EXT_DESC INTEGER*4 SYS$ASSIGN,SYS$QIOW C C ASSIGN AN I/O CHANNEL TO THE DEUNA C STATUS = SYS$ASSIGN ('XEA0:',INPUT_CHAN,,) IF (STATUS .EQ. SS$_NOSUCHDEV) 1 STATUS = SYS$ASSIGN ('XQA0:',INPUT_CHAN,,) IF (STATUS .EQ. SS$_NOSUCHDEV) 1 STATUS = SYS$ASSIGN ('ETA0:',INPUT_CHAN,,) IF (STATUS .EQ. SS$_NOSUCHDEV) 1 STATUS = SYS$ASSIGN ('ESA0:',INPUT_CHAN,,) IF (STATUS .EQ. SS$_NOSUCHDEV) 1 STATUS = SYS$ASSIGN ('EZA0:',INPUT_CHAN,,) IF (.NOT. STATUS) CALL LIB$SIGNAL (%VAL(STATUS)) C C PUT ADDRESS OF EXTENDED CHARACTERISTICS BUFFER INTO C BUFFER DESCRIPTOR C EXT_DESC.ADDRESS =%LOC(EXT_CHAR) C C DO THE QIO TO GET CHARACTERISTICS C STATUS = SYS$QIOW (,%VAL(INPUT_CHAN), 1 %VAL(IO$_SENSEMODE .OR. IO$M_CTRL), 1 IOSB,,,CHARBUF,EXT_DESC,,,,) IF (.NOT. STATUS) CALL LIB$SIGNAL (%VAL(STATUS)) IF (.NOT. IOSB.IOSTAT) CALL LIB$SIGNAL (%VAL(IOSB.IOSTAT)) C C FIND THE HARDWARE ADDRESS AND PRINT IT C I=2 DO WHILE (I .LT. IOSB.TRANSFER_SIZE) IF ((EXT_CHAR.W(I/2) .AND. '0FFF'X) .EQ. NMA$C_PCLI_HWA) 1 THEN TYPE 200, (EXT_CHAR.B(J),J=I+3,I+8) 200 FORMAT(' Ethernet address = ',5(Z2.2,'-'),Z2.2) CALL EXIT ENDIF IF ((EXT_CHAR.W(I/2) .AND. '1000'X) .EQ. 0) THEN I = I+6 ELSE I = I + EXT_CHAR.W(I/2+1) + 4 ENDIF ENDDO CALL EXIT END | |||||