From: herring@iesd.auc.dk (B. Erickson Herring)
Subject: Re: Ethernet id
Followup-To: comp.sys.next.misc
Organization: Mathematics and Computer Science, Aalborg University
	<1992Nov12.101718.7912@ifi.unizh.ch>
	<BxM930.34I@usenet.ucs.indiana.edu>
Date: 13 Nov 92 09:36:48

>>>>> On Thu, 12 Nov 1992 18:37:47 GMT, tagreen@lothario.cica.indiana.edu 
      (Todd A Green) said:

[ Someone asked how to get the ethernet address of a given NeXT        ]
[ machine.  Apostolos Lytras directed us to type "hostid" in a         ]
[ Terminal window (returns something that looks like "0x1007b72" that  ]
[ is not the _whole_ ethernet address).  Todd responds that his program]
[ (posted in csn.marketplace) will return the full ethernet address -  ]
[ but has the limitation that one must be root in order to run it.     ]
[ This seems unfair to me, as not everyone has root access on their    ]
[ machine.  It is hopelessly elitist to deny these users programmatic  ]
[ access to their machine's ethernet address, unless you also make it  ]
[ impossible for them to "grep _pat_ /usr/adm/messages" (chmod 600     ]
[ /usr/adm/messages?).  The relevant discussion, as well as my (much   ]
[ more egalitarian) solution, follows:                                 ]

Todd> In article <1992Nov12.101718.7912@ifi.unizh.ch>
      lytras@avalon.physik.unizh.ch (Apostolos Lytras) writes:
      >>
      >> [how to get ethernet addr?]
      >
      > This question has been raised here a few times already. There
      > *is* an easier way. Open a Terminal (shell) window, type
      > 'hostid'. There you are. (Isn't this in FAQ already? )

Todd> This only gives you part of the enet addr; a ethernet address is 6
Todd> bytes, hostid only returns 4.  See a program I posted in
Todd> comp.sys.next.marketplace to get the enet addr (Don't ask me why I
Todd> posted it there....that was where the thread was..)

Todd> Taken from "man 2 gethostid" : 

Todd> The hostid is a four byte number with the first byte
Todd> being the CPU version (only version 1 exists today) and the
Todd> last three bytes are the last three bytes in the ethernet
Todd> address

Egalitarian solution to this wretched problem follows:

#!/bin/sh -f
hostid | \
sed 's/0x[0-9]00/00000f00/g
     s/[0-9a-f][0-9a-f]/&:/g
     s/:$//g'

Note: This has only been tested on a 25MHz NeXTCUBE running 3.0.  As
      is usual, neither guarantee nor warrantee of fitness is given
      for this program.  The functioning of this program relies on a
      little-known characteristic of NeXT machines - the first four
      bytes of the ethernet address are "00:00:0f:00".  It is extremely
      difficult to discover this (undocumented!) tidbit (you have to
      ask someone who knows, or contact the IEEE...).
      
      I don't expect this to work on NS486, unfortunately.

In the interests of completeness, I will point out two more ways to
obtain the ethernet address.

The first is NeXT's suggested method:

   2.	Immediately after the *Testing System: message goes away, stop
   the boot process by holding down the Command bar and pressing the ~
   key (without pressing Shift). On keyboards with two Command keys,
   hold down the right Command key while pressing the ~ key. This
   displays the ROM monitor window, which contains information about
   the hardware, including the Ethernet address.  

   Here's an example of the ROM monitor output (yours will look
   slightly different): 

   CPU MC68040 33 MHz, memory 70 nS
   Ethernet address: 0:0:f:0:7:3d
   Memory size 16MB

   NeXT>

   Note:  If you were a little slow with your key sequence, you see
          the Restart/Power-Off panel instead. Press the Power key and
          try again. 

   3.	Write down the Ethernet addressPit's the sequence of numbers
   separated by colons (in the example, the Ethernet address is
   0:0:f:0:7:3d). Be sure to copy the number exactly as it appears.


The second is another tidbit from the documentation (also quite well
hidden -- I had to search on "ethernet address"!!!):

   /private/tmp# /usr/etc/snmpd -A
   /private/tmp# 
   [pd] /tmp> snmp status localhost
   localhost (NeXT.1.1), Uptime: 1 day, 17:52:09
   NeXT Mach 3.0: Wed Jul 29 19:43:28 PDT 1992;
   root(rcbuilder):mk-127.15/BUILD/RELEASE_M68K

   Name         Speed Type     Stat Ibyte Obyte Ierr Oerr  Physical
   Address
   en0                other    up   541MB  16MB <.1% <.1%  00:00:0F:00:7B:72
   lo0                other    up    13MB  13MB <.1% <.1%  
   en0                other    down   0 B   0 B            
   en0           10Mb ethernet up   856MB  16MB <.1% <.1%  

Both of these methods require root access, though you don't need a C
compiler.


Tongue firmly in cheek,

Erick
--
-----
Erick Herring           |   Computation is the art of carefully throwing
NeXT Manden             |   away information [and] Life is the art of
Polyteknisk Data,       |   carefully throwing away opportunities, an 
Lyngby, Danmark         |   interesting coincidental parallel.
herring@iesd.auc.dk     |    - Guy L. Steele Jr.

Newsgroups: comp.sys.next.misc