Hi all,
I just knew somebody out there had solved this before! Thanks to Arrigo
Triulzi who said that on some models (DS20 in particular) there was an
undocumented console variable to set the hardware address and Rolf-Peter
Kienzle who offered instructions on how to reprogram the chip. As I
suspected the chip in the Tulip cards can't be moved around like for the old
Lance cards.
However the best answer came from Sean O'Connell who supplied a program to
set the hardware address during boot by setting it into the kernel directly.
In fact 'man tu' contains all the information necessary to write this - I
knew it was there somewhere...
All replies are reproduced in full below.
Thanks,
Marco
-----Original Message-----
From: Sean O'Connell [mailto:sean_at_stat.Duke.EDU]
Sent: 03 March 2000 18:37
To: Luchini, Marco
Subject: Re: Ethernet chip in XP1000
Here is a cheesy little bit of c-code that use to do this for
a machine in our department. It is run out of runlevel 2
by S08setphyaddr
I hardcode the desired hw ethernet addr into the setphysaddr.c
code (I will attach it). ... you could easily add it as a
command line argument.
S
/************************************************************************
* Program lifted frm manpage for tu or ln
*
* Wanted:
* - take network dev as argument (eg. tu0)
* - poke in chosen physaddr
*
* Goal ... be able to set hardware ethernet address to
* avoid licensing problems :)
*
************************************************************************/
#include <stdio.h> /* standard IO */
#include <errno.h> /* error numbers */
#include <sys/socket.h> /* socket definitions */
#include <sys/ioctl.h> /* ioctls */
#include <net/if.h> /* generic interface structures */
char *program_name; /* name of program */
char *nic; /* name of network interface */
/************************************************************************/
main(int argc, char *argv[])
{
/*****************************************************************/
int s,i;
struct ifdevea devea;
u_char whatever[6];
program_name = argv[0]; /* get program name */
/*****************************************************************
* set interface (nic) to argv[1] after verifying it exists
*****************************************************************/
if ( argc != 2 ) {
(void)printf("Usage: %s interface_name\n",program_name);
exit(1);
}
nic = argv[1];
/*****************************************************************
* Get a socket
*****************************************************************/
s = socket(AF_INET,SOCK_DGRAM,0);
if (s < 0) {
(void)perror("socket");
exit(1);
}
/*****************************************************************/
strcpy(devea.ifr_name,nic);
if (ioctl(s,SIOCRPHYSADDR,&devea) < 0) {
(void)perror(&devea.ifr_name[0]);
exit(1);
}
/*
****************************************************************
* get default phys addr ... read the devea.default_pa
*****************************************************************
(void)printf("Default address is ");
for (i = 0; i < 6; i++) {
(void)printf("%X ", devea.default_pa[i] & 0xff);
}
(void)printf("\n");
*/
/*****************************************************************
* set phys addr ... refill the devea.current_pa
* test with physaddr from tu0
*****************************************************************/
whatever[0] = 0x01; /* 01 */
whatever[1] = 0x02; /* 02 */
whatever[2] = 0x03; /* 03 */
whatever[3] = 0x04; /* 04 */
whatever[4] = 0x05; /* 05 */
whatever[5] = 0x06; /* 06 */
/* Now, we set our values to the address we want. We should */
/* be setting devea.default_pa[0..5], but there is a bug and */
/* the SIOCSPHYSADDR call will actually look at what is in */
/* devea.default_pa[2]..devea.default_pa[5], */
/* devea.current_pa[0], devea.current_pa[1]. So we set our */
/* address there instead. */
devea.default_pa[2] = whatever[0];
devea.default_pa[3] = whatever[1];
devea.default_pa[4] = whatever[2];
devea.default_pa[5] = whatever[3];
devea.current_pa[0] = whatever[4];
devea.current_pa[1] = whatever[5];
if (ioctl(s,SIOCSPHYSADDR,&devea) < 0) {
(void)perror(&devea.ifr_name[0]);
exit(1);
}
/*
****************************************************************
* get new phys addr ... read the devea.current_pa
****************************************************************
(void)printf("Current address is ");
for (i = 0; i < 6; i++) {
(void)printf("%X ", devea.current_pa[i] & 0xff);
}
(void)printf("\n");
*/
/*****************************************************************
* Close socket
*****************************************************************/
close(s);
}
/************************************************************************/
-----Original Message-----
From: Rolf-Peter Kienzle [mailto:kienzlep_at_uni-freiburg.de]
Sent: 03 March 2000 17:54
To: Luchini, Marco
Subject: Re: Ethernet chip in XP1000
Dear Marco,
the MAC address (or hardware address, which is not necessarily the same
as the physical address) was kept in "a small, socketed ROM chip" in old
machines like the DEC 3000/300LX. This is no longer true for TULIP
interfaces in PWxxx or XP1000 machines, where the MAC address (among
other parameters) is held in a so-called serial ROM chip (Fairchild
93C46). These chips are SMDs with no socket at all. So, moving the ROM
chip doesn't work. Reprogramming the 93C46 means having it to remove
from the motherboard by means of a soldering iron (not a good idea at
all). :-(
On the other hand, I have the slight suspicion that in-cicuit
reprogramming might be possible using a special programme. I've seen one
somewhere on an INTEL web page but for x86 processors only. So, one
solution I can think of is to re-programme a DE-500 card (which has the
same chip) using the tool mentioned above and make the your licence
managing software believe it's the correct address by whatever means
(tying the machines IP address to it instead of to the internal NIC).
What about an old card with a socketed EPROM which is programmable by an
EPROM programming device? This card could then serve as a dummy for your
licences only whereas the network traffic itself would be routed over
the built-in NIC.
Regards
Peter
-----Original Message-----
From: Arrigo Triulzi [mailto:arrigo_at_northsea.sevenseas.org]
Sent: 03 March 2000 17:28
To: Luchini, Marco
Subject: Re: Ethernet chip in XP1000
Fratellone,
if I remember correctly there is a console variable which you can use
to override the setting in the box. I wish I could remember the name
but it was definitely something like ewa0_hwaddr. In the docs it says
read-only but I am certain I wrote to it for a small "project" of
mine. I put something along the lines of 00:00:DE:AD:BE:EF in.
BTW: just checked on my DS20, it isn't ewa0_hwaddr... bum, I wished I
could remember.
Ciao,
Arrigo
> -----Original Message-----
> From: Luchini, Marco [mailto:Marco.Luchini_at_acco-uk.co.uk]
> Sent: 03 March 2000 17:06
> To: tru64-unix-managers_at_ornl.gov
> Subject: Ethernet chip in XP1000
>
>
> Hi all,
>
> Is there any way of retaining the hardware ethernet address that goes
> with an XP1000 backplane? We have had one fail and it has to
> be changed but
> there are software licenses keyed to that address. It is a slow and
> expensive
> process getting a new license. We can't see anywhere on the board a
> removable chip that looks like it holds the ethernet address, but all
> previous
> Alpha systems have had such a thing. (I know swapping it
> wasn't supported
> but it did work).
>
> I have often wondered if there was a way to overwrite the
> address in the
> kernel but have never had enough time on my hands to try...
>
> Thanks,
>
> Marco
>
Received on Wed Mar 08 2000 - 11:07:37 NZDT