EN JA
ETHERS(3)
ETHERS(3) FreeBSD Library Functions Manual ETHERS(3)

名称

ethers, ether_line, ether_aton, ether_aton_r, ether_ntoa, ether_ntoa_r, ether_ntohost, ether_hosttonイーサネットアドレス変換および検索ルーチン

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/types.h>
#include < sys/socket.h>
#include < net/ethernet.h>

int
ether_line( const char *l, struct ether_addr *e, char *hostname);

struct ether_addr *
ether_aton( const char *a);

struct ether_addr *
ether_aton_r( const char *a, struct ether_addr *e);

char *
ether_ntoa( const struct ether_addr *n);

char *
ether_ntoa_r( const struct ether_addr *n, char *buf);

int
ether_ntohost( char *hostname, const struct ether_addr *e);

int
ether_hostton( const char *hostname, struct ether_addr *e);

解説

これらの関数は、 ether_addr 構造体を使用してイーサネットアドレスを操作します。この構造体はヘッダファイル < net/ethernet.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() と ether_aton_r() 関数は、イーサネットアドレスの ASCII 表現を ether_addr 構造体に変換します。同様に、 ether_ntoa() と ether_ntoa_r() 関数は、 ether_addr 構造体として指定されたイーサネットアドレスを ASCII 文字列に変換します。

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

戻り値

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

ether_ntoa() と ether_ntoa_r() 関数は、成功するなら、イーサネットアドレスの ASCII 表現を含む文字列へのポインタを返します。与えられた ether_addr 構造体を変換できなかった場合は、 NULL ポインタを返します。 ether_ntoa() は、静的なバッファに結果を格納します。 ether_ntoa_r() は、ユーザによって渡されたバッファに結果を格納します。

同じように、 ether_aton() と ether_aton_r() は、成功するなら、 ether_addr 構造体へのポインタを返し、失敗するなら、 NULL ポインタを返します。 ether_aton() は、静的なバッファに結果を格納します。 ether_aton_r() は、ユーザによって渡されたバッファに結果を格納します。

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 マップを調べようとします。

関連項目

ethers(5), yp(8)

歴史

ethers ライブラリ関数の実装は、 FreeBSD 2.1 で書かれ、はじめて登場しました。スレッドセーフ関数変異型は、 FreeBSD 7.0 ではじめて登場しました。

バグ

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

ether_ntoa_r() は、バッファ長ではなく、文字バッファへのポインタを受け取ります。呼び出し側は、バッファオーバフローを避けるために適切な空間がバッファで利用可能であることを保証しなければなりません。

October 30, 2007 FreeBSD