williams@cs.umass.edu (09/03/90)
We have a need to obtain the hardware ethernet address within a program. We can obtain this address on a Sun using an ioctl call on /dev/nit ([sun-spots program] getaddr.c ) Does anyone know how one could obtain the physical ethernet address in ultrix, in particular for the dec5000, MIPS based workstation? If this is not of general interest, you can email to ralf@aai.com. I will also check for followups. Thanks for any help! Leo leo@aai.com leo%aai@uunet.uu.net ...uunet!aai!leo
thomas@mipsbx.nac.dec.com (Matt Thomas) (09/04/90)
In article <19290@dime.cs.umass.edu> williams@cs.umass.edu writes: >We have a need to obtain the hardware ethernet address within a program. >We can obtain this address on a Sun using an ioctl call on /dev/nit >([sun-spots program] getaddr.c ) Does anyone know how one could obtain the >physical ethernet address in ultrix, in particular for the dec5000, MIPS >based workstation? > >If this is not of general interest, you can email to ralf@aai.com. I will >also check for followups. > >Thanks for any help! > >Leo leo@aai.com leo%aai@uunet.uu.net ...uunet!aai!leo #include <stdio.h> /* standard I/O */ #include <errno.h> /* error numbers */ #include <time.h> /* time definitions */ #include <sys/types.h> /* system types */ #include <sys/socket.h> /* socket stuff */ #include <sys/ioctl.h> /* ioctls */ #include <net/if.h> /* generic interface structs */ extern char *optarg; extern int optind; extern char *sys_errlist[]; main( argc, argv ) int argc; char *argv[]; { struct ifdevea devea; struct ifreq *ifr, ifreqs[32]; struct ifconf ifc; int s, i; bzero(&devea, sizeof(devea)); /* we need a socket -- any old socket will do. */ s = socket(AF_UNIX, SOCK_DGRAM, 0); if (s < 0) { perror("socket"); exit(1); } ifc.ifc_req = ifreqs; ifc.ifc_len = sizeof(ifreqs); if (ioctl(s, SIOCGIFCONF, &ifc) < 0) { perror("siocgifconf"); exit(1); } for (ifr = ifreqs; ifc.ifc_len > 0; ifr++, ifc.ifc_len -= sizeof(*ifr)) { if (strcmp(devea.ifr_name, ifr->ifr_name)) { (void) strcpy(devea.ifr_name, ifr->ifr_name); /* read the address of the interface */ if (ioctl(s, SIOCRPHYSADDR, &devea) < 0) { /* error? */ if (errno != EOPNOTSUPP && errno |= EINVAL) { /* unexpected error */ perror(devea.ifr_name); } continue; } printf("%s: ", devea.ifr_name); printf("current = %02x-%02x-%02x-%02x-%02x-%02x, ", devea.current_pa[0], devea.current_pa[1], devea.current_pa[2], devea.current_pa[3], devea.current_pa[4], devea.current_pa[5] ); printf("default = %02x-%02x-%02x-%02x-%02x-%02x\n", devea.default_pa[0], devea.default_pa[1], devea.default_pa[2], devea.default_pa[3], devea.default_pa[4], devea.default_pa[5] ); } } } Matt Thomas Internet: thomas@wrl.dec.com DECnet-ULTRIX Development UUCP: ...!decwrl!thomas Digital Equipment Corporation Disclaimer: This message reflects my own Littleton, MA warped views, etc.