| 1 | #include <stdlib.h> |
| 2 | #include <netinet/ether.h> |
| 3 | #include <stdio.h> |
| 4 | |
| 5 | struct ether_addr *ether_aton_r (const char *x, struct ether_addr *p_a) |
| 6 | { |
| 7 | 	struct ether_addr a; |
| 8 | 	char *y; |
| 9 | 	for (int ii = 0; ii < 6; ii++) { |
| 10 | 		unsigned long int n; |
| 11 | 		if (ii != 0) { |
| 12 | 			if (x[0] != ':') return 0; /* bad format */ |
| 13 | 			else x++; |
| 14 | 		} |
| 15 | 		n = strtoul (x, &y, 16); |
| 16 | 		x = y; |
| 17 | 		if (n > 0xFF) return 0; /* bad byte */ |
| 18 | 		a.ether_addr_octet[ii] = n; |
| 19 | 	} |
| 20 | 	if (x[0] != 0) return 0; /* bad format */ |
| 21 | 	*p_a = a; |
| 22 | 	return p_a; |
| 23 | } |
| 24 | |
| 25 | struct ether_addr *ether_aton (const char *x) |
| 26 | { |
| 27 | 	static struct ether_addr a; |
| 28 | 	return ether_aton_r (x, &a); |
| 29 | } |
| 30 | |
| 31 | char *ether_ntoa_r (const struct ether_addr *p_a, char *x) { |
| 32 | 	char *y; |
| 33 | 	y = x; |
| 34 | 	for (int ii = 0; ii < 6; ii++) { |
| 35 | 		x += sprintf (x, ii == 0 ? "%.2X" : ":%.2X", p_a->ether_addr_octet[ii]); |
| 36 | 	} |
| 37 | 	return y; |
| 38 | } |
| 39 | |
| 40 | char *ether_ntoa (const struct ether_addr *p_a) { |
| 41 | 	static char x[18]; |
| 42 | 	return ether_ntoa_r (p_a, x); |
| 43 | } |
| 44 | |
| 45 | int ether_line(const char *l, struct ether_addr *e, char *hostname) |
| 46 | { |
| 47 | 	return -1; |
| 48 | } |
| 49 | |
| 50 | int ether_ntohost(char *hostname, const struct ether_addr *e) |
| 51 | { |
| 52 | 	return -1; |
| 53 | } |
| 54 | |
| 55 | int ether_hostton(const char *hostname, struct ether_addr *e) |
| 56 | { |
| 57 | 	return -1; |
| 58 | } |