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

名称

getifaddrsインタフェースアドレスを取得する

書式

#include < ifaddrs.h>

int
getifaddrs( struct ifaddrs **ifap);

void
freeifaddrs( struct ifaddrs *ifp);

解説

getifaddrs() 関数は、 ifap によって参照されるメモリでローカルマシン上にネットワークインタフェースのリンクしたリストへの参照を格納します。リストは、インクルードファイル < ifaddrs.h> に定義されるように、 ifaddrs 構造体から構成されます。 ifaddrs 構造体は少なくとも次のエントリを含んでいます。

    struct ifaddrs   *ifa_next;         /* 次の構造体へのポインタ */ 
    char             *ifa_name;         /* インタフェース名 */ 
    u_int             ifa_flags;        /* インタフェースフラグ */ 
    struct sockaddr  *ifa_addr;         /* インタフェースアドレス */ 
    struct sockaddr  *ifa_netmask;      /* インタフェースネットマスク */ 
    struct sockaddr  *ifa_broadaddr;    /* インタフェースブロードキャスト 
            アドレス */ 
    struct sockaddr  *ifa_dstaddr;      /* P2P インタフェースあて先 */ 
    void             *ifa_data;  /* アドレス特有データ */

ifa_next フィールドは、リストでの次の構造体へのポインタを含んでいます。このフィールドのリストでの最後の構造体は NULL です。

ifa_name フィールドはインタフェース名を含んでいます。

ifconfig(8) ユーティリティによって設定されるように、 ifa_flags フィールドはインタフェースフラグを含んでいます。

次のうちの 1 つが存在する場合、 ifa_addr フィールドはインタフェースのアドレスあるいはインタフェースのリンクレベルアドレスのいずれかを参照します。そうでなければ、それは NULL です。 ( ifa_addr フィールドの sa_family フィールドは ifa_addr アドレスのフォーマットを決定するために調べられるべきです。)

1 つが設定される場合、 ifa_netmask フィールドは ifa_addr に関連したネットマスク (netmask) を参照します。そうでなければそれは NULL です。

1 つが存在する場合、非 P2P インタフェースのため単に参照すべき、 ifa_broadaddr フィールドは ifa_addr に関連したブロードキャストアドレスを参照します。そうでなければ、それは NULL です。

1 つが存在する場合、 ifa_dstaddr フィールドは P2P インタフェースで、あて先アドレスを参照します。そうでなければ、それは NULL です。

ifa_data フィールドはアドレスファミリ特有データを参照します。 AF_LINK アドレスのために、それは様々なインタフェース属性と統計値を含んでいる (インクルードファイル < net/if.h> で定義されたように) struct if_data へのポインタを含んでいます。他のすべてのアドレスファミリのために、それはアドレスごとのインタフェース統計値を含んでいる (インクルードファイル < net/if.h> で定義されたように) struct ifa_data へのポインタを含んでいます。

getifaddrs() によって返されたデータはダイナミックに割り付けられ、もはや必要でなかった時 freeifaddrs() を使用して解放されるべきです。

戻り値

The getifaddrs() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

getifaddrs() が失敗した場合、ライブラリルーチン ioctl(2), socket(2), malloc(3) または sysctl(3) で明記されたエラーのいずれかが errno に設定されます。

歴史

getifaddrs 実装は、BSDi BSD/OS ではじめて登場しました。

バグ

< net/if.h>< ifaddrs.h> の両方が含まれている場合、 < net/if.h> は、 < ifaddrs.h> の前に含まれていなければなりません。
May 21, 2013 FreeBSD