#include <netinet/ether.h> char *ether_ntoa(const struct ether_addr *addr); struct ether_addr *ether_aton(const char *asc); int ether_ntohost(char *hostname, const struct ether_addr *addr); int ether_hostton(const char *hostname, struct ether_addr *addr); int ether_line(const char *line, struct ether_addr *addr, char *hostname); /* GNU 拡張 */
char *ether_ntoa_r(const struct ether_addr *addr, char *buf); struct ether_addr *ether_aton_r(const char *asc, struct ether_addr *addr);
関数 ether_ntoa() は、ネットワークのバイト順で表された Ethernet ホストアドレス addr を、標準的な 16進数とコロンの形式の文字列に変換する。 但し、先頭の 0 は省略される。変換後の文字列は静的に割り当てられたバッファ に格納されて返される。このバッファは、これ以降の関数呼び出しで上書きされる。
関数 ether_ntohost() は、Ethernet アドレスに対応するホスト名を /etc/ethers を検索して割り当てる。対応するホスト名が見つからなかった場合は、 非 0 を返す。
関数 ether_hostton() は、ホスト名に対応する Ethernet アドレスを /etc/ethers を検索して割り当てる。対応するホスト名が見つからなかった場合は、 非 0 を返す。
関数 ether_line() は、 /etc/ethers 形式になった行を解析し、 アドレスとホスト名の組を返す (/etc/ethers 形式は、Ethernet アドレス、ホスト名が空白文字 (whitespace) で区切られた書式で、'#' 以降はコメントとみなされる)。 解析できなかった場合は、非 0 を返す。 hostname で指定されたバッファは十分な長さが必要である。つまり、 line と同じ長さでなければならない。
関数 ether_ntoa_r() と ether_aton_r() は、 それぞれ ether_ntoa() と ether_aton() の リエントラントでスレッドセーフなバージョンであり、 静的なバッファを使用しない。
ether_addr 構造体は net/ethernet.h で次のように定義されている:
struct ether_addr { u_int8_t ether_addr_octet[6]; }