ioctl ソケット制御操作
目的
ネットワーク関連の制御操作を実行する。
構文
#include <sys/ioctl.h>
int ioctl (fd, cmd, .../* arg */)
int fd;
int cmd;
int ... /* arg */説明
ソケットのioctlコマンドは、様々なネットワーク関連の制御を行います。 fd 引数はソケット記述子である。 ソケット記述子以外の記述子に対しては、この呼び出しによって実行される関数の動作は未定義である。
cmd 引数とオプションの第三引数(型は可変)は、ソケットのioctl関数に渡され解釈され、ユーザーが指定した適切な制御操作を実行する。
パラメーター
| 項目 | 説明 |
|---|---|
| fd | socketまたはaccept呼び出しを使用して作成されたソケットを参照するファイル記述子を開く。 |
| cmd | 実行する制御機能を選択します。 |
| .../* 引数 */ | 要求された機能に必要な情報を表します。 引数の型は特定の制御要求によって異なりますが、整数かソケット固有のデータ構造へのポインタのいずれかです。 |
ソケット制御操作
| ioctl コマンド | 説明 |
|---|---|
| SIOCATMARK | 読み取りポインタが DataStream 内の論理マークを指しているかどうかを判定します。 論理マークは、帯域外データが送信される点を示す。atmarkがリターン時に 1 オンに設定されている場合、読み取りポインタはマークを指し、次の読み取りはマーク以降のデータを返す。 atmarkが 0 リターン時に設定されている場合( DataStream 上に帯域外データが存在すると仮定)、次の読み取りは帯域外マークの前に送信されたデータを返す。注記: 帯域外データは、通常のデータとは独立してユーザーに配信される論理的に独立したデータチャネルである。加えて、即時的な注意を要するため、信号も送信される。 Ctrl-C 文字はその一例です。
|
SIOCSPGRP SIOCGPGRP |
SIOCSPGRP はソケットのプロセスグループ情報を設定します。 SIOCGPGRPは、ソケットに関連付けられたプロセスグループIDを取得します。
|
ルーティングテーブル制御操作
| ioctl コマンド | 説明 |
|---|---|
SIOCADDRT SIOCDELRT |
SIOCADDRTはルーティングテーブルにルートエントリを追加します。 SIOCDELRT はルーティングテーブルからルートエントリを削除します。
|
| スープのルート | 構造 ifreq 体で渡された情報を使用してルーティングテーブルを更新します。 |
ARPテーブル制御操作
| ioctl コマンド | 説明 |
|---|---|
SIOCSARP SIOCDARP SIOCGARP |
SIOCSARPは、ARPテーブル内のARPエントリを追加または変更します。 SIOCDARPはARPテーブルからARPエントリを削除します。 SIOCGARPはARPテーブルからARPエントリを取得する。
ARPエントリ情報は構造 arpreq 体内で渡される。 コマンドが SIOCDARP の場合 |
グローバルネットワークパラメータ制御操作
| ioctl コマンド | 説明 |
|---|---|
SIOCSNETOPT SIOCGNETOPT SIOCDNETOPT SIOCGNETOPT1 |
SIOCSNETOPT はネットワークオプションの値を設定します。 SIOCGNETOPT はネットワークオプションの値を取得します。 SIOCDNETOPT はネットワークオプションのデフォルト値を設定します。
SIOCGNETOPT1 ネットワークオプションの現在の値、デフォルト値、および範囲を取得します。
ネットワークオプション情報は、戻り optreq1 値として構造体に格納される。 net/netopt.hoptreq 構造 optreq1 体と構造体はで定義されている。 |
SIOCGNMTUS SIOCGETMTUS SIOCADDMTU SIOCDELMTU |
SIOCGNMTUSは、共通MTUリストに保持されているMTUの数を取得します。 SIOCADDMTUは、共通MTUのリストにMTUを追加します。 SIOCDELMTUは共通MTUリストからMTUを削除します。
SIOCGETMTUSは、共通MTUリストに維持されているMTUを取得します。
構造 get_mtus は で定義されています netinet/in.h。 |
インターフェース制御操作
| ioctl コマンド | 説明 |
|---|---|
SIOCSIFADDR SIOCDIFADDR |
SIOCSIFADDRはインターフェースアドレスを設定します。 SIOCDIFADDR はインターフェースアドレスを削除します。 インターフェースアドレスは フィールド ifr.ifr_addr で指定されます。 SIOCGIFADDR はインターフェースアドレスを取得します。 アドレスは フィールド ifr.ifr_addr に返されます。
|
シオカイファッド |
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 で指定されたインターフェースの点対点アドレスを設定します。 SIOCGIFDSTADDR は、インターフェイスに関連付けられたポイントツーポイントアドレスを取得します。 アドレスは戻り値として フィールド ifr.ifr_dstaddr に格納されます。
|
SIOCSIFNETMASK SIOCGIFNETMASK |
SIOCSIFNETMASK は、フィールド ifr.ifr_addr で指定されたインターフェースのネットマスクを設定します。 SIOCGIFNETMASK はインターフェースのネットマスクを取得します。
|
SIOCSIFBRDADDR SIOCGIFBRDADDR |
SIOCSIFBRDADDR は、フィールド ifr.ifr_broadaddr で指定されたインターフェースのブロードキャストアドレスを設定します。 SIOCGIFBRDADDR はインターフェースのブロードキャストアドレスを取得します。 ブロードキャストアドレスはフィールド ifr.ifr_broadaddr に配置されます。
|
| SIOCGSIZIFCONF | SIOCGIFCONFによって返される全インターフェースの構成情報を取得するために必要なメモリサイズを取得します。 |
| SIOCGIFCONF | システム上で設定されているすべてのインターフェースの設定情報を返します。構成情報は、フィールド ifc.ifc_reqifreq によって指される構造体のリストとして返され、インターフェース ifreq ごとに1つの構造体が含まれます。注: ioctl コマンドの呼び出し元は、システム上で設定されているすべてのインターフェース ifreq の構造体のリストとして返される設定情報を格納するのに十分な領域を確保する必要があります。 例えば、システムに n 個のインターフェースが設定されている場合、n バイトの {n * sizeof (struct ifreq)} 割り当て領域を指す必要があります ifc.ifc_req。
注: 代わりに、この目的には SIOCGSIZIFCONF ioctl コマンドを使用することもできます。
|
SIOCSIFFLAGS SIOCGIFFLAGS |
SIOCSIFFLAGS はインターフェースフラグを設定します。 SIOCGIFFLAGS はインターフェースフラグを取得します。インターフェースフラグについては /usr/include/net/if.h を参照してください。 フラグ IFF_はxxxで示されます。注:, IFF_POINTTOPOINT, IFF_SIMPLEX, IFF_RUNNING IFF_OACTIVE,, IFF_BROADCASTおよび IFF_MULTICAST フラグは ioctl を使用して変更できません。
|
SIOCSIFMETRIC SIOCGIFMETRIC |
SIOCSIFMETRIC は、フィールド ifr.ifr_metric で指定されたインターフェースメトリックを設定します。 SIOCGIFMETRICはインターフェースメトリックを取得する。 インターフェースメトリックは、戻り値としてフィールド ifr.ifr_metric に配置される。
|
SIOCSIFSUBCHAN SIOCGサブチャネル |
SIOCSIFSUBCHAN は、フィールド ifr.ifr_flags で指定されるサブチャネルアドレスを設定します。 SIOCGIFSUBCHAN は、フィールド ifr.ifr_flags 内のサブチャネルアドレスを取得します。 |
SIOCSIFOPTIONS SIOCG ファイルオプション |
SIOCSIFOPTIONS はインターフェースオプションを設定します。 SIOCGIFOPTIONS はインターフェースのオプションを取得します。インターフェースオプションは、構造 ifreq 体の ifr_flags フィールドに格納されます。 xxx IFO_で示されるインターフェースオプションの一覧については、ファイルを /usr/include/net/if.h 参照してください。 |
| ioctl コマンド | 説明 |
|---|---|
SIOCADDMULTI SIOCDELMULTI |
SIOCADDMULTI は、インターフェースのマルチキャストアドレス一覧にアドレスを追加します。 SIOCDELMULTI は、インターフェースのマルチキャストアドレス一覧からマルチキャストアドレスを削除します。
|
| SIOCGETVIFCNT | 仮想インターフェースのパケットカウント情報を取得します。 情報は sioc_vif_req 構造体に指定されています。 |
| SIOCGETSGCNT | 指定された送信元グループに対するパケットカウント情報を取得します。 情報は sioc_sg_req 戻り際に構造体に格納される。 |
SIOCSIFMTU SIOCGIFMTU |
SIOCSIFMTUはインターフェースの最大伝送単位(MTU)を設定します。 SIOCGIFMTUはインターフェースMTUを取得します。MTU値はフィールド ifr.ifr_mtu に格納されます。注記: MTU の有効な値の範囲はインターフェースごとに異なり、インターフェースの種類に依存します。
|
SIOCIFATTACH SIOCIFDETACH |
SIOCIFATTACH はインターフェースを接続します。 ネットワークインターフェースリストにインターフェースを初期化して追加します。 SIOCIFDETACH はインターフェースのブロードキャストアドレスを解除します。 この操作により、インターフェースがネットワークインターフェースリストから削除されます。 インターフェース名は フィールド ifr.ifr_name で指定されます。 |
シオスィフギディリスト SIOCGIFGIDLIST |
SIOCSIFGIDLIST は、gidlist インターフェースに対して、フィールド ifrg.ifrg_gidlist で指定されたグループ ID のリストを追加または削除します。 インターフェース名は フィールド ifrg.ifrg_name で指定されます。 操作コードは、 gidlist インターフェースに対して、指定されたグループ ADD_GRP/DEL_GRPIDのリストを追加するか削除するかを示すために、フィールド ifrg.ifrg_gidlist で指定されます。 SIOCGIFGIDLIST は、インターフェースに関連付けられたグループ ID のリストを取得します。 グループIDは、戻り値のフィールド ifrg.ifrg_gidlist に配置されます。 |
SIOCIF_ATM_UBR SIOCIF_ATM_SNMPARP SIOCIF_ATM_DUMPARP SIOCIF_ATM_アイドル状態 SIOCIF_ATM_サービス SIOCIF_ATM_DARP SIOCIF_ATM_GARP SIOCIF_ATM_SARP |
SIOCIF_ATM_UBR は、ATM インターフェースの UBR レートを設定します。 SIOCIF_ATM_SNMPARP は SNMP ATM ARP エントリを取得します。 SIOCIF_ATM_DUMPARP は、指定された数の ATM ARP エントリを取得します。 SIOCIF_ATM_DARP は、ARP テーブルから ATM ARP エントリを削除します。 SIOCIF_ATM_GARP は、ATM ARP エントリを 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 SIOCDELIFVIPA SIOCLISTIFVIPA |
SIOCADDIFVIPA は、によって指される指定された ifrv.ifrv_ifname インターフェースのリストを、によって指定される仮想 ifrv.ifrv_name インターフェースに関連付けます。 この操作により、これらのインターフェース上のすべての送信パケットの送信元アドレスが仮想インターフェースアドレスに設定されます。 SIOCDELIFVIPA は、SIOCADDIFVIPA を使用して、 ifrv.ifrv_nameifrv.ifrv_ifname によって指定され、によって指定された仮想インターフェイスに関連付けられた、によって指される指定されたインターフェイスのリストを削除します。 SIOCLISTIFVIPA は、指定された仮想インターフェースに関連付けられているすべての ifrv.ifrv_name インターフェースを一覧表示します。仮想インターフェース情報は ifvireq 構造体に格納される。注記: これらのフラグは仮想インターフェースでのみ動作します。
|
| SIOCSIFADDR6 | IPv6 アドレスを設定または追加する。 |
| SIOCGIFADDR6 | IPv6 アドレスを取得します。 |
| SIOCSIFDSTADDR6 | IPv6 アドレスの宛先(ポイントツーポイント)アドレスを設定します。 |
| SIOCGIFDSTADDR6 | IPv6 アドレスの宛先(ポイントツーポイント)アドレスを取得する。 |
| 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 | 該当する処理がない。 |