[9] | 1 | /*
|
---|
| 2 | ** ETHER_LINE
|
---|
| 3 | **
|
---|
| 4 | ** This routine parses the array pointed to by "line" (which should be
|
---|
| 5 | ** from a file in the format of /etc/ethers) and returns in "eaddr" the
|
---|
| 6 | ** ethernet address at the start of the line and the corresponding host
|
---|
| 7 | ** name in "hostname". It assumes either tabs or spaces separate the
|
---|
| 8 | ** two. The buffer pointed to by "hostname" must be big enough to hold
|
---|
| 9 | ** the host name plus a NULL byte.
|
---|
| 10 | ** The function returns 0 on success and 1 on failure.
|
---|
| 11 | ** Arguments are assumed sensible. Null pointers will probably cause
|
---|
| 12 | ** exceptions.
|
---|
| 13 | ** Author: Gregory J. Sharp, July 1990
|
---|
| 14 | ** Adapted to MINIX: Philip Homburg, May 1992
|
---|
| 15 | */
|
---|
| 16 |
|
---|
| 17 | #include <sys/types.h>
|
---|
| 18 | #include <ctype.h>
|
---|
| 19 | #include <stdlib.h>
|
---|
| 20 | #include <net/gen/ether.h>
|
---|
| 21 | #include <net/gen/if_ether.h>
|
---|
| 22 |
|
---|
| 23 | int
|
---|
| 24 | ether_line(line, eaddr, hostname)
|
---|
| 25 | char * line;
|
---|
| 26 | struct ether_addr * eaddr;
|
---|
| 27 | char * hostname;
|
---|
| 28 | {
|
---|
| 29 | register int i;
|
---|
| 30 | register unsigned long val;
|
---|
| 31 |
|
---|
| 32 | /* skip leading white space */
|
---|
| 33 | while (*line != '\n' && (*line == ' ' || *line == '\t'))
|
---|
| 34 | line++;
|
---|
| 35 |
|
---|
| 36 | /* read the ethernet address */
|
---|
| 37 | for (i = 0; i < 5; i++)
|
---|
| 38 | {
|
---|
| 39 | val = (unsigned long) strtol(line, &line, 16);
|
---|
| 40 | if (val > 255 || *line++ != ':')
|
---|
| 41 | return 1;
|
---|
| 42 | eaddr->ea_addr[i] = val & 0xff;
|
---|
| 43 | }
|
---|
| 44 | val = (unsigned long) strtol(line, &line, 16);
|
---|
| 45 | if (val > 255 || (*line != ' ' && *line != '\t'))
|
---|
| 46 | return 1;
|
---|
| 47 | eaddr->ea_addr[i] = val & 0xff;
|
---|
| 48 |
|
---|
| 49 | /* skip leading white space */
|
---|
| 50 | while (*line != '\n' && (*line == ' ' || *line == '\t'))
|
---|
| 51 | line++;
|
---|
| 52 |
|
---|
| 53 | /* read in the hostname */
|
---|
| 54 | while (!isspace(*line))
|
---|
| 55 | *hostname++ = *line++;
|
---|
| 56 | *hostname = '\0';
|
---|
| 57 | return 0;
|
---|
| 58 | }
|
---|