ETHERS(3)

名称
ethers, ether_line, ether_aton, ether_ntoa, ether_ntohost, ether_hostton - イーサネットアドレス変換および調査ルーチン

ライブラリ
libc

書式
<sys/types.h> <sys/socket.h> <net/ethernet.h> int ether_line(const char *l, struct ether_addr *e, char *hostname) struct ether_addr * ether_aton(const char *a) char * ether_ntoa(const struct ether_addr *n) int ether_ntohost(char *hostname, const struct ether_addr *e) int ether_hostton(const char *hostname, struct ether_addr *e)

解説
これらの関数は、 ether_addr 構造体を使用してイーサネットアドレスを操作します。 この構造体はヘッダファイル <netinet/if_ether.h> に定義されています。

    /*
     * イーサネット(MAC)アドレスのバイト数
     */
    #define ETHER_ADDR_LEN          6
    /*
     * 48 ビットイーサネットアドレスの構造体
     */
    struct  ether_addr {
            u_char octet[ETHER_ADDR_LEN];
    };

ether_line() 関数は、 ethers(5) 形式の ASCII 文字列である l を走査し、文字列で指定されたイーサネットアドレスを e に設定し、ホスト名を h に設定します。 この関数は、 /etc/ethers の行をその構成部分にパースするのに使用されます。

ether_aton() 関数は、イーサネットアドレスの ASCII 表現を ether_addr 構造体に変換します。 同様に、 ether_ntoa() は、 ether_addr 構造体として指定されたイーサネットアドレスを ASCII 文字列に変換します。

ether_ntohost() 関数と ether_hostton() 関数は、イーサネットアドレスを /etc/ethers データベースで指定された対応するホスト名にマップします。 ether_ntohost() は、イーサネットアドレスからホスト名への変換を行い、 ether_hostton() は、ホスト名からイーサネットアドレスへの変換を行います。

戻り値
ether_line() は、処理が成功すると 0 を返します。 与えられた行 l の一部でもパースできなかった場合は 0 でない値を返します。 抽出されたイーサネットアドレスを与えられた ether_addr 構造体 e に返し、ホスト名を与えられた文字列 h に返します。

ether_ntoa() は、処理が成功するとイーサネットアドレスの ASCII 表現が入った文字列へのポインタを返します。 与えられた ether_addr 構造体を変換できなかった場合は、 NULL ポインタを返します。 同じように、 ether_aton() は成功すると ether_addr 構造体へのポインタを返し、失敗すると NULL ポインタを返します。

ether_ntohost() 関数と ether_hostton() 関数は両方とも、成功した場合は 0 を返し、 /etc/ethers データベース内に一致するものを見つけられなかった場合は 0 でない値を返します。

注
ユーザは、 ether_line(), ether_ntohost() および ether_hostton() の各関数に渡されるホスト名文字列が、 返されたホスト名を入れられるほど大きいことを保証する必要があります。

NIS 相互作用
/etc/ethers の中に 1 つの + が入った行がある場合、 ether_ntohost() 関数と ether_hostton() 関数は、 /etc/ethers ファイル内のデータに加えて、 NIS ethers.byname および ethers.byaddr マップを調べようとします。

関連項目
yp(4), ethers(5)

バグ
ether_aton() 関数と ether_ntoa() 関数は、これらが次に呼び出されたときには 上書きされる可能性のある静的メモリ領域に保存された値を返します。

歴史
ethers ライブラリ関数のこの実装は、 FreeBSD 2.1 のために作成され、登場しました。