[ultrix] Re: Reading the HARDWARE ethernet address from a program?
Matt Thomas
thomas at mipsbx.nac.dec.com
Wed Sep 12 10:15:06 AEST 1990
Archive-name: ultrix-geteaddr/04-Sep-90
Original-posting-by: thomas at mipsbx.nac.dec.com (Matt Thomas)
Original-subject: Re: Reading the HARDWARE ethernet address from a program?
Reposted-by: emv at math.lsa.umich.edu (Edward Vielmetti)
[Reposted from comp.unix.ultrix.
Comments on this service to emv at math.lsa.umich.edu (Edward Vielmetti).]
In article <19290 at dime.cs.umass.edu> williams at 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 at aai.com. I will
>also check for followups.
>
>Thanks for any help!
>
>Leo leo at aai.com leo%aai at 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 at wrl.dec.com
DECnet-ULTRIX Development UUCP: ...!decwrl!thomas
Digital Equipment Corporation Disclaimer: This message reflects my own
Littleton, MA warped views, etc.
More information about the Alt.sources
mailing list