Provided by:
manpages-ja_0.5.0.0.20060115-1_all 
IOCTL
「特権が必要」と欺劼気譴討い ioctl を実行するには、 実効ユーザー ID が
0 か、 CAP_NET_ADMIN 権限が必要である。これが満たされていない場合は
EPERM が返される。
SIOCGIFNAME
ifr_ifindex を受け取り、インターフェースの名前を ifr_name
に入れて返す。これは結果を ifr_name として返す唯一の ioctl
である。
SIOCGIFINDEX
インターフェースの interface index を取得し、 ifr_ifindex
に入れて返す。
SIOCGIFFLAGS, SIOCSIFFLAGS
デバイスの active フラグワードを取得または設定する。 ifr_flags
には以下の値のビットマスクが入る。
デバイスフラグ
IFF_UP インターフェースは動作中。
IFF_BROADCAST 邑なブロード-
ャストアドレスがセットされている。
IFF_DEBUG 内部のデバッグフラグ。
IFF_LOOPBACK インターフェースはループバックである。
IFF_POINTOPOINT インターフェースは point-to-point
リンクである。
IFF_RUNNING リソースが割り当て済み。
IFF_NOARP arp プロトコルがない。
IFF_PROMISC インターフェースは promiscuous モードである。
IFF_NOTRAILERS trailer の利用を避ける。
IFF_ALLMULTI 全てのマルチゥ礇好肇僖吋奪箸鮗信する。
IFF_MASTER 負荷分散グループのマスターである。
IFF_SLAVE 負荷分散グループのスレーブである。
IFF_MULTICAST マルチゥ礇好箸鬟汽檗璽箸靴討い襦
IFF_PORTSEL ifmap によってメディアタイプを選択でい襦
IFF_AUTOMEDIA 自動メディア選択が邑になっている。
IFF_DYNAMIC このインターフェースが閉じると、アドレスは失われる。
acitive フラグワードの設定は特権が必要な操作である。
しかし読み出しはどんなプロセスからも可能である。
SIOCGIFMETRIC, SIOCSIFMETRIC
デバイスのメトリックを ifr_metric を用いて取得・設定する。
これはまだ実装されていない。読み出そうとすると ifr_metric に 0
をセットして返り、設定しようとすると EOPNOTSUPP が返る。
SIOCGIFMTU, SIOCSIFMTU
デバイスの MTU (Maximum Transfer Unit) を ifr_mtu
を用いて取得・設定する。 MTU の設定は特権が必要な操作である。
MTU の値を小さくしすぎるとカーネルがクラッシュするかもしれない。
SIOCGIFHWADDR, SIOCSIFHWADDR
デバイスのハードウェアアドレスを ifr_hwaddr
を用いて取得・設定する。 ハードウェアアドレスは sockaddr
構造体に設定される。 sa_family には ARPHRD_*
デバイスタイプが入り、 sa_data はバイト 0 から始まる L2
ハードウェアアドレスが入る。
ハードウェアアドレスの設定は特権が必要な操作である。
SIOCSIFHWBROADCAST
デバイスのハードウェアブロードゥ礇好肇▲疋譽垢 ifr_hwaddr
の値に設定する。この操作には特権が必要である。
SIOCGIFMAP, SIOCSIFMAP
インターフェースのハードウェアのパラメータを ifr_map
を用いて取得・設定する。
パラメータの設定は特権が必要な操作である。
struct ifmap {
unsigned long mem_start;
unsigned long mem_end;
unsigned short base_addr;
unsigned char irq;
unsigned char dma;
unsigned char port;
};
ifmap 構造体の解釈はデバイスドライバとアーゥ謄チャに依存する。
SIOCADDMULTI, SIOCDELMULTI
デバイスのリンク層のマルチゥ礇好肇侫ルターから、 ifr_hwaddr
のアドレスを追加・削除する。これらの操作には特権が必要である。
別法が packet(7) で解説されている。
SIOCGIFTXQLEN, SIOCSIFTXQLEN
デバイスの送信ゥ紂爾猟垢気 ifr_qlen に取得・設定する。送信-
ューの長さの設定には特権が必要である。
SIOCSIFNAME
ifr_name で指定したインターフェースの名前を ifr_newname
に変更する。この操作には特権が必要である。インターフェースが up
していない 時にのみ使用でい襦
SIOCGIFCONF
インターフェース(トランスポート層)アドレスのリストを返す。
現在のところ、互換世里燭瓩 AF_INET (IPv4)
ファミリーのアドレスのみである。 ユーザーは ifconf 構造体を
ioctl の引数として渡す。 これには ifreq
構造体の配列へのポインタである ifc_req
と、その長さをバイト単位で指定する ifc_len を含む。 カーネルは
ifreqs を現在動作している全ての L3
インターフェースアドレスで埋める。 ifr_name
にはインターフェース名 (eth0:1 など) が入り、 ifr_addr
にはアドレスが入る。 カーネルは実際の長さを ifc_len に返す。
ifc_len _
オーバーフローを起こしている可能世あるので、
全てのアドレスを所得するためにより大い淵丱奪侫,悩道邱圓垢襪戮-
である。 エラーがなかった場合は ioctl は 0 を返す。
エラーがあった場合は -1 を返す。
オーバーフローはエラーとは見なされない。
ほとんどのプロトコルには、専用のインターフェースオプションを
設定するための独自の ioctl が存在する。 説明は各プロトコルの man
ページを見よ。
さらに、デバイスによってはプライベートな ioctl がある。
これらはここでは説明しない。
意
厳密にいうと、 SIOCGIFCONF は IP 固佑任△蝓 ip(7) に属する。
アドレスがなかったり、 IFF_RUNNING
フラグがセットされていないインターフェースの名前は /proc/net/dev
で見つけることが出来る。
ローカル IPV6 IP アドレスは /proc/net か rtnetlink(7)
で見つけることが出来る。
グ
glibc 2.1 では net/if.h に ifr_newname マクロがない。
とりあえずの対応策として、以下のコードを追加しておくこと。
#ifndef ifr_newname
#define ifr_newname ifr_ifru.ifru_slave
#endif
目
capabilities(7), ip(7), proc(7), rtnetlink(7)