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 10: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 07: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 |