Ethernet address conversion and lookup routines.
#include <sys/types.h> #include <sys/socket.h> #include <net/ethernet.h> int ether_line(); struct ether_addr * ether_aton(); struct ether_addr * ether_aton_r(); char * ether_ntoa(); char * ether_ntoa_r(); int ether_ntohost(); int ether_hostton();
These functions operate on ethernet addresses using an ether_addr structure, which is defined in the header file <netinet/if_ether.h>:
/* * The number of bytes in an ethernet (MAC) address. */ #define ETHER_ADDR_LEN 6 /* * Structure of a 48-bit Ethernet address. */ struct ether_addr { u_char octet[ETHER_ADDR_LEN]; };
The function ether_line() scans l , an ASCII string in ethers format and sets e to the ethernet address specified in the string and h to the hostname. This function is used to parse lines from /etc/ethers into their component parts.
The ether_aton() and ether_aton_r() functions convert ASCII representation of ethernet addresses into ether_addr structures. Likewise, the ether_ntoa() and ether_ntoa_r() functions convert ethernet addresses specified as ether_addr structures into ASCII strings.
The ether_ntohost() and ether_hostton() functions map ethernet addresses to their corresponding hostnames as specified in the /etc/ethers database. The ether_ntohost() function converts from ethernet address to hostname, and ether_hostton() converts from hostname to ethernet address.
The user must insure that the hostname strings passed to the ether_line(), ether_ntohost() and ether_hostton() functions are large enough to contain the returned hostnames. If the /etc/ethers contains a line with a single + in it, the ether_ntohost() and ether_hostton() functions will attempt to consult the NIS ethers.byname and ethers.byaddr maps in addition to the data in the /etc/ethers file.
The ether_aton() and ether_ntoa() functions returns values that are stored in static memory areas which may be overwritten the next time they are called.
ether_ntoa_r() accepts a character buffer pointer, but not a buffer length. The caller must ensure adequate space is available in the buffer in order to avoid a buffer overflow.
The ether_line() function returns zero on success and non-zero if it was unable to parse any part of the supplied line l. It returns the extracted ethernet address in the supplied ether_addr structure e and the hostname in the supplied string h.
On success, ether_ntoa() and ether_ntoa_r() functions return a pointer to a string containing an ASCII representation of an ethernet address. If it is unable to convert the supplied ether_addr structure, it returns a NULL pointer. ether_ntoa() stores the result in a static buffer; ether_ntoa_r() stores the result in a user-passed buffer.
Likewise, ether_aton() and ether_aton_r() return a pointer to an ether_addr structure on success and a NULL pointer on failure. ether_aton() stores the result in a static buffer; ether_aton_r() stores the result in a user-passed buffer.
The ether_ntohost() and ether_hostton() functions both return zero on success or non-zero if they were unable to find a match in the /etc/ethers database.
Versions | Link to |
---|---|
INtime 4.0 | netlib.lib |