ioctl ソケット制御操作
目的
ネットワーク関連の制御操作を実行します。
構文
#include <sys/ioctl.h>
int ioctl (fd, cmd, .../* arg */)
int fd;
int cmd;
int ... /* arg */説明
ソケット ioctl コマンドは、さまざまなネットワーク関連の制御を行います。 fd 引数はソケット記述子です。 非ソケット記述子の場合、この呼び出しによって実行される関数は指定されません。
cmd 引数とオプションの 3 番目の引数 (可変タイプ) は、ユーザーが指定した適切な制御操作を実行するために、ソケット ioctl 関数に渡され、この関数によって解釈されます。
パラメーター
| 項目 | 説明 |
|---|---|
| fd | ソケットまたは受け入れ呼び出しを使用して作成されたソケットを参照するオープン・ファイル記述子。 |
| cmd | 実行する制御機能を選択します。 |
| .../ * arg */ | 要求された機能に必要な情報を表します。 arg のタイプは、特定の制御要求によって異なりますが、整数またはソケット固有のデータ構造体へのポインターのいずれかです。 |
ソケット制御操作
| ioctl コマンド | 説明 |
|---|---|
| SIOCATMARK | 読み取りポインターが DataStream内の論理マークを指しているかどうかを判別します。 論理マークは、アウト・オブ・バンド・データが送信されるポイントを示します。atmark が戻り時に 1 に設定されている場合、読み取りポインターはマークを指し、次の読み取りではマークの後にデータが戻されます。 atmark が 0 に設定されている場合 ( DataStreamにアウト・オブ・バンド・データが存在することを前提とします)、次の読み取りでは、アウト・オブ・バンド・マークの前に送信されるデータが戻されます。注: アウト・オブ・バンド・データは、論理的に独立したデータ・チャネルであり、通常のデータとは無関係にユーザーに送信されます。さらに、即時アテンションが必要なため、シグナルも送信されます。 Ctrl-C 文字は一例です。
|
シオシスペGRP SIOCGPGRP (GPGRP) |
SIOCSPGRP は、ソケットのプロセス・グループ情報を設定します。 SIOCGPGRP は、ソケットに関連付けられたプロセス・グループ ID を取得します。
|
ルーティング・テーブル制御操作
| ioctl コマンド | 説明 |
|---|---|
SIOCADDRT SIOCDELRT |
SIOCADDRT は、経路指定テーブルに経路項目を追加します。 SIOCDELRT は、経路指定テーブルから経路項目を削除します。
|
| SIOUPDROUTE (IOUPDROUTE) | ifreq 構造体に渡された情報を使用して、ルーティング・テーブルを更新します。 |
ARP テーブル制御操作
| ioctl コマンド | 説明 |
|---|---|
SIOCSARP (R) シオCDARP シオCGARP |
SIOCSARP は、ARP テーブル内の ARP エントリーを追加または変更します。 SIOCDARP は、ARP テーブルから ARP エントリーを削除します。 SIOCGARP は ARP テーブルから ARP エントリーを取得します。
ARP エントリー情報は、 arpreq 構造体に渡されます。 |
グローバル・ネットワーク・パラメーター制御操作
| ioctl コマンド | 説明 |
|---|---|
SIOCSNETOPT (S) SIOCGNETOPT (IOCGNETOPT) SIOCDNETOPT (IOCDNETOPT) SIOCGNETOPT1 |
SIOCSNETOPT は、ネットワーク・オプションの値を設定します。 SIOCGNETOPT は、ネットワーク・オプションの値を取得します。 SIOCDNETOPT は、ネットワーク・オプションのデフォルト値を設定します。
SIOCGNETOPT1 は、ネットワーク・オプションの現行値、デフォルト値、および範囲を取得します。
ネットワーク・オプション情報は、戻り時に optreq1 構造体に保管されます。 optreq および optreq1 構造体は、 net/netopt.hに定義されています。 |
SIOCGNMTUS (ミサイル) SIOCGETMTUS (ミサイル) SIOCADDMTU SIOCDELMTU (S) |
SIOCGNMTUS は、共通 MTU のリストに維持されている MSU の数を取得します。 SIOCADDMTU は、共通 MTU のリストに MTU を追加します。 SIOCDELMTU は、共通 MTU のリストから MTU を削除します。
SIOCGETMTUS は、共通 MSU のリストに維持されている MSU を取得します。
get_mtus 構造体は、「 netinet/in.h」で定義されています。 |
インターフェース制御操作
| ioctl コマンド | 説明 |
|---|---|
SIOCSIFADDR SIOCDIFADDR (S) |
SIOCSIFADDR はインターフェース・アドレスを設定します。 SIOCDIFADDR は、インターフェース・アドレスを削除します。 インターフェース・アドレスは、 ifr.ifr_addr フィールドで指定されます。 SIOCGIFADDR はインターフェース・アドレスを取得します。 アドレスは、 ifr.ifr_addr フィールドに戻されます。
|
SIOCAIFADDR (アドレス) |
SIOCAIFADDR はインターフェース・アドレスを追加します。 インターフェース名は、 ifr.ifra_name フィールドで指定されます。 別名 IP アドレスは、 theifr.ifra_addr フィールドで指定されます。 別名 IP ブロードキャスト・アドレスは ifr.ifra_broadaddr フィールドに指定することができ、別名 IP ネットワーク・マスクは ifr.ifra_maskに指定することができます。
|
| SIOCGIアドレス | インターフェースに関連付けられたアドレスのリストを取得します。インターフェース名は、 ifaddrsp-> ifr_name フィールドで渡されます。 インターフェースに関連付けられたアドレスは、戻り時に ifaddrsp->ifrasu 配列に保管されます。注: ifreqaddrs 構造体には、1 つの sockaddr_in/sockaddr_in6 構造体 (1 つの sockaddr_in/sockaddr_in6 エレメントの配列) のみを保管するためのスペースが含まれています。 インターフェースに関連付けられた n 個のアドレスを取得するには、ioctl コマンドの呼び出し元が {sizeof (struct ifreqaddrs) + (n * sizeof (struct sockaddr_in)} バイトのスペースを割り振る必要があります。
|
SIOCSIFDSTADDR SIOCGIFDSTADDR |
SIOCSIFDSTADDR は、 ifr.ifr_dstaddr フィールドに指定されたインターフェースの Point-to-Point アドレスを設定します。 SIOCGIFDSTADDR は、インターフェースに関連付けられた Point-to-Point アドレスを取得します。 このアドレスは、戻り時に ifr.ifr_dstaddr フィールドに保管されます。
|
SIOCSIFNETMASK SIOCGIFNETMASK |
SIOCSIFNETMASK は、 ifr.ifr_addr フィールドに指定されたインターフェース・ネットマスクを設定します。 SIOCGIFNETMASK はインターフェース・ネットマスクを取得します。
|
SIOCSIFBRDADDR SIOCGIFBRDADDR |
SIOCSIFBRDADDR は、 ifr.ifr_broadaddr フィールドに指定されたインターフェース・ブロードキャスト・アドレスを設定します。 SIOCGIFBRDADDR は、インターフェース・ブロードキャスト・アドレスを取得します。 ブロードキャスト・アドレスは、 ifr.ifr_broadaddr フィールドに入れられます。
|
| SIOCGSIZIFCONF | SIOCGIFCONF によって返されるすべてのインターフェースの構成情報を取得するために必要なメモリーのサイズを取得します。 |
| SIOCGIFCONF | システム上で構成されているすべてのインターフェースの構成情報を返します。構成情報は、インターフェースごとに 1 つの ifreq 構造体を持つ、 ifc.ifc_req フィールドが指す ifreq 構造体のリストに戻されます。注: ioctl コマンドの呼び出し側は、システム上に構成されているすべてのインターフェースの ifreq 構造体のリストとして戻される、構成情報を保管するのに十分なスペースを割り振る必要があります。 例えば、 n 個のインターフェースがシステム上に構成されている場合、 ifc.ifc_req は、割り振られたスペースの {n * sizeof (struct ifreq)} バイトを指す必要があります。
注: この目的で SIOCGSIZIFCONF ioctl コマンドを使用することもできます。
|
SIOCSIFFLAGS SIOCGIFFLAGS |
SIOCSIFFLAGS はインターフェース・フラグを設定します。 SIOCGIFFLAGS はインターフェース・フラグを取得します。IFF_xxxで示されるインターフェース・フラグについては、「 /usr/include/net/if.h 」を参照してください。注: IFF_BROADCAST、 IFF_POINTTOPOINT、 IFF_SIMPLEX、 IFF_RUNNING、 IFF_OACTIVE、および IFF_MULTICAST フラグは、ioctl を使用して変更することはできません。
|
SIOCSIFMETRIC SIOCGIFMETRIC |
SIOCSIFMETRIC は、 ifr.ifr_metric フィールドに指定されたインターフェース・メトリックを設定します。 SIOCGIFMETRIC はインターフェース・メトリックを取得します。 インターフェース・メトリックは、戻り時に ifr.ifr_metric フィールドに配置されます。
|
SIOCSIFSUBCHAN (IOCSIFSUBCHAN) IOCGIFSUBCHAN (SOIOCGIFSUBCHAN) |
SIOCSIFSUBCHAN は、 ifr.ifr_flags フィールドに指定されたサブチャネル・アドレスを設定します。 SIOCGIFSUBCHAN は、 ifr.ifr_flags フィールド内のサブチャネル・アドレスを取得します。 |
SIOCSIFOPTIONS (IOCSIFOPTIONS) SIOCG ファイルオプション |
SIOCSIFOPTIONS は、インターフェース・オプションを設定します。 SIOCGIFOPTIONS はインターフェース・オプションを取得します。インターフェース・オプションは、 ifreq 構造体の ifr_flags フィールドに保管されます。 IFO_xxxで示されるインターフェース・オプションのリストについては、 /usr/include/net/if.h ファイルを参照してください。 |
| ioctl コマンド | 説明 |
|---|---|
複数の SIOCADDMULTI 複数の SIOCDELMULTI |
SIOCADDMULTI は、インターフェースのマルチキャスト・アドレスのリストにアドレスを追加します。 SIOCDELMULTI は、インターフェースのマルチキャスト・アドレスのリストからマルチキャスト・アドレスを削除します。
|
| SIOCGETVIFCNT 型 | 仮想インターフェースのパケット・カウント情報を取得します。 この情報は、 sioc_vif_req 構造体で指定されます。 |
| SIOCGETSGCNT (S) | 指定されたソース・グループのパケット・カウント情報を取得します。 情報は、戻り時に sioc_sg_req 構造体に保管されます。 |
SIOCSIFMTU SIOCGIFMTU |
SIOCSIFMTU は、インターフェース最大伝送単位 (MTU) を設定します。 SIOCGIFMTU はインターフェース MTU を取得します。MTU 値は、 ifr.ifr_mtu フィールドに保管されます。注: MTU の有効な値の範囲は、インターフェースによって異なり、インターフェース・タイプによって異なります。
|
シオシIFATTACH SIOCIFDETACH |
SIOCIFATTACH はインターフェースを接続します。 これにより、インターフェースが初期化され、ネットワーク・インターフェース・リストに追加されます。 SIOCIFDETACH は、インターフェース・ブロードキャスト・アドレスを切り離します。 これにより、ネットワーク・インターフェース・リストからインターフェースが削除されます。 インターフェース名は、 ifr.ifr_name フィールドで指定されます。 |
シオスィフギディリスト SIOCGIFGIDLIST |
SIOCSIFGIDLIST は、 ifrg.ifrg_gidlist フィールドに指定されたグループ ID のリストを gidlist インターフェースに追加または削除します。 インターフェース名は、 ifrg.ifrg_name フィールドで指定されます。 ifrg.ifrg_gidlist フィールドで指定された命令コード ADD_GRP/DEL_GRPは、指定されたグループ ID のリストを gidlist インターフェースで追加または削除する必要があるかどうかを示します。 SIOCGIFGIDLIST は、インターフェースに関連付けられたグループ ID のリストを取得します。 グループ ID は、戻り時に ifrg.ifrg_gidlist フィールドに入れられます。 |
SIOCIF_ATM_UBR (R) SIOCIF_ATM_SNMPARP (S) SIOCIF_ATM_DUMPARP (S) SIOCIF_ATM_アイドル SIOCIF_SVC (SIOCIF_ATM_SVC) SIOCIF_ATM_DARP (S) SIOCIF_ATM_GARP SIOCIF_ATM_SARP (S) |
SIOCIF_ATM_UBR は、ATM インターフェースの UBR 率を設定します。 SIOCIF_ATM_SNMPARP は、SNMP ATM ARP エントリーを取得します。 SIOCIF_ATM_DUMPARP は、指定された数の ATM ARP エントリーを取得します。 SIOCIF_ATM_DARP は、ATM ARP エントリーを ARP テーブルから削除します。 SIOCIF_ATM_GARP は、ARP テーブルへの ATM ARP エントリーを取得します。 SIOCIF_ATM_SARP は ATM ARP エントリーを追加します。 ARP 情報は、 atm_arpreq 構造体で指定されます。 SIOCIF_ATM_SVC は、このインターフェースがパーマネント・バーチャル・サーキット (PVC) およびスイッチド・バーチャル・サーキット (SVC) タイプの仮想接続をサポートするかどうかを指定します。 また、 ifatm_svc_arg 構造に設定されているフラグに基づいて、このインターフェースがこの論理 IP サブネットワーク (LIS) の ARP クライアントか ARP サーバーかを指定します。 SIOCIF_ATM_IDLE は、インターフェースのアイドル時間制限を指定します。 |
SIOCSISNO SIOCGISNO |
SIOCSISNO は、インターフェースに固有のネットワーク・オプションを設定します。 SIOCGISNO は、インターフェースに関連付けられたインターフェース固有のネットワーク・オプションを取得します。
|
| SIOCG・FBAUDRATE | ifr_baudrate フィールド内のインターフェースボー・レートの値を取得します。ボー・レートは、 ifr.ifr_baudrate フィールドに保管されます。 |
SIOCADDIFVIPA (SIOCADDIVIPA) シオシデLIFVIPA シオCLISTIFVIPA |
SIOCADDIFVIPA は、 ifrv.ifrv_ifname が指すインターフェースの指定リストを、 ifrv.ifrv_nameが指定する仮想インターフェースに関連付けます。 この操作により、これらのインターフェース上のすべての発信パケットのソース・アドレスが仮想インターフェース・アドレスに設定されます。 SIOCDELIFVIPA は、SIOCADDIFVIPA を使用して、 ifrv.ifrv_ifname によって指し示され、 ifrv.ifrv_nameによって指定された仮想インターフェースに関連付けられた、指定されたインターフェースのリストを除去します。 SIOCLISTIFVIPA は、 ifrv.ifrv_nameによって指定された仮想インターフェースに関連付けられているすべてのインターフェースをリストします。仮想インターフェース情報は、 ifvireq 構造に保管されます。注: これらのフラグは、仮想インターフェースでのみ機能します。
|
| SIOCSIFADDR6 | IPv6 アドレスを設定または追加します。 |
| SIOCGIFADDR6 | IPv6 アドレスを取得します。 |
| SIOCSIFDSTADDR6 | IPv6 アドレスの宛先 (Point-to-Point) アドレスを設定します。 |
| SIOCGIFDSTADDR6 | IPv6 アドレスの宛先 (point-to-point) アドレスを取得します。 |
| SIOCSIFNETMASK6 | IPv6 アドレスのネットマスクを設定します。 |
| SIOCGIFNETMASK6 | IPv6 アドレスのネットマスクを取得します。 |
| SIOCDIFADDR6 | IPv6 アドレスを削除します。 |
| SIOCFIFADDR6 | アドレス・リストの先頭に IPv6 アドレスを配置します。 |
| SIOCAIFADDR6 | IPv6 別名アドレスを追加または変更します。 |
| SIOCADDANY6 | IPv6 エニーキャスト・アドレスを追加します。 |
| SIOCDELANY6 | IPv6 エニーキャスト・アドレスを削除します。 |
| SIOCSIFZONE6 | 特定のアドレス・スコープでインターフェースの IPv6 ゾーン ID を設定します。 |
| SIOCGIFZONE6 | インターフェースの IPv6 スコープ・ゾーン ID を取得します。 |
| SIOCSIFADDRORI6 | IPv6 アドレスの構成起点を設定します。 |
| SIOCAIFADDR6T | IPv6 別名のアドレスとタイプを追加または変更します。 |
| SIOCGIFADDR6T | IPv6 アドレスのタイプを取得します。 |
| SIOCSIFADDRSTATE6 | IPv6 アドレスの状態を変更します。 |
| SIOCGIFADDRSTATE6 | IPv6 アドレスの状態を取得します。 |
| SIOCGSRCFILTER6 | インターフェースの IPv6 マルチキャスト・グループ・ソース・フィルターを取得します。 |
| SIOCACLADDR6 | IPv6 クラスター別名アドレスを追加します。 |
| SIOCDCLADDR6 | IPv6 クラスター・アドレスを削除します。 |
| SIOCSIFADDRFLAG6 | IPv6 アドレスのアドレス・ソース・フラグを設定します。 |
| SIOCGIFADDRFLAG6 | IPv6 アドレスのアドレス・ソース・フラグを取得します。 |
戻り値
正常終了すると、ioctl は 0を戻します。 それ以外の場合は、 -1 を返し、エラーを示す errno を設定します。
エラー・コード
| 項目 | 説明 |
|---|---|
| EBADF | ファイル記述子 fd は、有効なオープン・ソケット・ファイル記述子ではありません。 |
| EINTR | ioctl 操作中にシグナルがキャッチされました。 |
| EINVAL | 無効なコマンドまたは引数が指定されました。 |
| 項目 | 説明 |
|---|---|
| EACCES | 指定された操作に対して拒否された許可。 |
| EADDRNOTAVAIL | 指定されたアドレスはインターフェースに使用できません。 |
| EAFNOSUPPORT | ソケットでサポートされない操作。 |
| EBUSY | リソースが使用中です。 |
| EEXIST | エントリーまたはファイルが存在します。 |
| EFAULT | 引数がアクセス不能なメモリー領域を参照しています。 |
| EIO | 入出力エラー。 |
| ENETUNREACH | ゲートウェイに到達できません。 |
| ENOBUFS | ルーティング・テーブルがオーバーフローしました。 |
| ENOCONNECT | 接続がありません。 |
| ENOMEM | 使用可能なメモリーが不足しています。 |
| ENOTCONN | 操作は接続されたソケットでのみ定義されますが、ソケットは接続されませんでした。 |
| ENXIO | デバイスが存在しません。 |
| ESRCH | 該当する処理がない。 |