jpman project specific RCS keyword (jpman %Id) is obsolete, after manual entries are stored in freefall CVS repository. This old Id is useless and more worse it confuses users and bug reporters. So, this old Id is removed. Submitted by:jpman project <man-jp@jp.FreeBSD.org>
237 lines
6.2 KiB
Groff
237 lines
6.2 KiB
Groff
.\" %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
|
|
から取得しました。
|