aboutsummaryrefslogblamecommitdiff
path: root/ja_JP.eucJP/man/man4/tun.4
blob: 1d48974d947235783361bd2c68652fa73ba8807a (plain) (tree)
1
2
3

                                                     
             









































































































































































































































                                                                        
.\" %NetBSD: tun.4,v 1.1 1996/06/25 22:17:37 pk Exp %
.\" %Id: tun.4,v 1.5 1998/05/31 04:53:30 mph Exp %
.\" $FreeBSD$
.\" Based on PR#2411
.\"
.Dd March 10, 1996
.Dt TUN 4
.Os
.Sh 名称
.Nm tun
.Nd トンネルソフトウェアネットワークデバイス
.Sh 書式
.Cd pseudo-device tun Op Ar count
.Sh 解説
.Nm tun
インタフェースはソフトウェアループバック機構であり、大雑把に説明すると
.Xr pty 4
のネットワークインタフェース版のようなものです。つまり
.Nm tun
は、
.Nm pty
ドライバが端末に対して行なうことを、ネットワークインタフェースに対して
行います。
.Pp
.Nm tun
ドライバは
.Nm pty
ドライバと同様に、2 つのインタフェースを提供します: ドライバが
シミュレートしている通常の機能のようなインタフェース
.\" 注意: 原文通りに「.Po」「.Pc」を用いると表示が乱れるため、
.\" 代わりに「(」「)」を使っています。
.\" .Po
(これは
.Nm tun
の場合にはネットワークインタフェースであり、
.Nm pty
の場合には端末です)
.\" .Pc
および、キャラクタ型特殊デバイス
.Dq 制御
インタフェースです。
.Pp
ネットワークインタフェースには
.Sy tun Ns Ar 0 ,
.Sy tun Ns Ar 1
等のように名前が付けられます。これは
.Sy pseudo-device
行で指定された
.Ar count
の数だけあります。各インタフェースはネットワークインタフェースの
通常の
.Xr ioctl 2
(
.Dv SIOCSIFADDR
や
.Dv SIOCSIFNETMASK
等) をサポートしているので、他のインタフェースと同様に
.Xr ifconfig 8
で使うことができます。このインタフェースは起動時には
.Dv POINTOPOINT
インタフェースですが、変更することができます。後述する制御デバイスの
説明を参照してください。システムがパケットをネットワークインタフェース
に送ることになった時、そのパケットを制御デバイスから読むことができます
.Po
これは
.Dq input
としてここに現われます
.Pc 。
パケットを制御デバイスに書き込むと、ネットワークインタフェースには入力
パケットが生成されます。この動作は、
.Pq 存在しない
ハードウェアがパケットを受け取ったかのように行われます。
.Pp
トンネルデバイス (通常は
.Pa /dev/tun Ns Sy N
) は排他的にオープンされるデバイス
.Po
既にオープンされている場合にはオープンできません
.Pc
であり、スーパユーザしか利用できないように制限されています。
インタフェースが
.Dq ready
状態 (制御デバイスがオープンされており、インタフェースのアドレスが設定
されている状態) でなければ、
.Fn read
システムコールはエラー
.Pq Er EHOSTDOWN
を返します。
インタフェースが ready 状態になった時、パケットが読み込み可能であれば
.Fn read
はパケットを返します。読み込み可能でなければ、パケットが読み込めるまで
ブロックするか
.Er EWOULDBLOCK
を返します。どちらの動作になるのかは、非ブロッキング I/O モードが有効
にされているかどうかで決まります。
.Fn read
に渡されるバッファに許されているよりもパケットが長い場合には、超過分の
データは黙って捨てられます。
.Pp
オプション指定により、パケットがネットワークインタフェースの出力ルーチン
.Pq Sq Li tunoutput
に与えられる際に、パケットの前に終点アドレスを付けるようにすることがで
きます。
終点アドレスのフォーマットは、構造体
.Sq Li sockaddr
です。前に付いたアドレスの実際の長さは、構造体のメンバ
.Sq Li sa_len
に格納されます。パケットのデータはこの直後に続けて置かれます。
.Xr write 2
システムコールの呼び出しによりパケットをインタフェースに渡して、
仮想インタフェースがパケットを
.Dq 受信
した状態にします。
.Fn write
システムコール 1 回の呼び出しで、ちょうど 1 つのパケットを与えます。
パケット長は
.Fn write
に与えられたデータの量から決められます。
書き込みはブロックされません。パケットが一時的な理由
.Pq 例: バッファに利用できる容量が無い
で受け取られなかった場合には、パケットは黙って捨てられます。理由が
一時的なものでなかった場合
.Pq 例: パケットが大きすぎる
には、エラーが返されます。
.Dq リンク層 (link-layer) モード
が有効
.Pq 後述の Dv TUNSLMODE No を参照
ならば、実際のパケットデータの前には、構造体
.Sq Li sockaddr
がなければなりません。
現在のドライバは
.Sq Li sa_family
フィールドしか調べません。
以下の
.Xr ioctl 2
呼び出しがサポートされています
.Pq 定義されている場所は Aq Pa net/if_tun.h Ns :
.Bl -tag -width TUNSIFMODE
.It Dv TUNSDEBUG
引数は
.Va int
へのポインタでなければなりません。
これは内部的なデバッグ用変数をその値に設定します。この変数が制御するも
のは (もしあったとしても) ここでは説明しません。ソースコードを読んでくだ
さい。
.It Dv TUNGDEBUG
引数は
.Va int
へのポインタでなければなりません。
これは、内部的なデバッグ用変数の値を引数が示す場所に格納します。
.It Dv TUNSIFMODE
引数は
.Va int
へのポインタでなければなりません。
この値は
.Dv IFF_POINTOPOINT
または
.Dv IFF_BROADCAST
でなければなりません。
対応する
.Em tun Ns Sy n
インタフェースのタイプが与えられたタイプに設定されます。上記以外の値が
指定された場合には、エラー
.Er EINVAL
が発生します。この時にはインタフェースは停止 (down) していなければ
なりません。動作していれば、エラー
.Er EBUSY
が起こります。
.It Dv TUNSLMODE
引数は
.Va int
へのポインタでなければなりません。
0 でない値を指定すると、
.Dq リンク層
モードが有効になります。このモードでは、トンネルデバイスから読み込んだ
パケットの前にネットワーク終点アドレスが追加されます。
.It Dv FIONBIO
読み込み時の非ブロッキング I/O の有効・無効を設定します。引数
.Va int
の値が 0 かどうかによって、無効か有効かが決まります
.Pq 書き込みは必ず非ブロッキングです
。
.It Dv FIOASYNC
読み込み時の非同期 I/O
.Po
つまり、データが読み込み可能な時に
.Dv SIGIO
が生成されるかどうか
.Pc
の有効・無効を設定します。引数
.Va int
の値が 0 かどうかによって、無効か有効かが決まります。
.It Dv FIONREAD
パケットが読み込みキューに入っている場合、最初のパケットのサイズを引数
.Va int
に格納します。それ以外の場合には 0 を格納します。
.It Dv TIOCSPGRP
非同期 I/O が有効になっている場合に、
.Dv SIGIO
シグナルを受け取るプロセスグループとして引数
.Va int
の値を設定します。
.It Dv TIOCGPGRP
.Dv SIGIO
シグナルに対するプロセスグループの値を取得し、この値を引数
.Va int
に格納します。
.El
.Pp
制御デバイスは読み込みに対する
.Xr select 2
もサポートしています。書き込みに対する select は必ず成功するので意味
がありません。なぜなら、書き込みは必ず非ブロッキングだからです。
.Pp
最後のデータデバイスを閉じた時、デフォルトではインタフェースが停止
します
.Po
.Dq ifconfig tun Ns Sy n No down
が実行されたのと同様になります
.Pc
。
キューに入っているパケットは全て捨てられます
.\" 注意: 原文通りに「.Po」「.Pc」を用いると表示が乱れるため、
.\" 代わりに「(」「)」を使っています。
.\".Po
(データデバイスがオープンされていない時にインタフェースが動作している
場合、出力パケットは蓄積されないで、常に捨てられます)。
.\".Pc
.Sh 関連項目
.Xr inet 4 ,
.Xr intro 4
.Sh バグ
現在は IP 専用です。
.Sh 作者
このマニュアルページは
.Bx Net
から取得しました。