OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / release / man7 / packet.7
index a0efab6..ead6ee5 100644 (file)
 .\" Updated 2001-02-13, Kentaro Shirakata <argrath@ub32.org>
 .\" Updated 2005-02-21, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
 .\"
-.TH PACKET 7 2014\-04\-28 Linux "Linux Programmer's Manual"
+.TH PACKET 7 2014\-08\-19 Linux "Linux Programmer's Manual"
 .SH 名前
 packet \- デバイスレベルのパケットインターフェース
 .SH 書式
 .nf
 \fB#include <sys/socket.h>\fP
 .br
-\fB#include <netpacket/packet.h>\fP
+\fB#include <linux/if_packet.h>\fP
 .br
 \fB#include <net/ethernet.h> /* L2 プロトコル */\fP
 .sp
@@ -38,8 +38,8 @@ packet ソケットは、デバイスドライバ (OSI レイヤ 2) レベルで
 packet ソケットを使うと、ユーザー空間で物理層の上に プロトコルモジュールを実装することができる。
 
 \fIsocket_type\fP には \fBSOCK_RAW\fP と \fBSOCK_DGRAM\fP のいずれかを指定する。 \fBSOCK_RAW\fP
\81¯ã\83ªã\83³ã\82¯ã\83¬ã\83\99ã\83«ã\83\98ã\83\83ã\83\80ã\82\92å\90«ã\82\80 raw ã\83\91ã\82±ã\83\83ã\83\88ã\82\92ã\80\81 \fBSOCK_DGRAM\fP ã\81¯ã\83ªã\83³ã\82¯ã\83¬ã\83\99ã\83«ã\83\98ã\83\83ã\83\80が削除された加工済みパケットを示す。
-リンクレベルヘッダ情報は \fIsockaddr_ll\fP で共通のフォーマットで入手できる。 \fIprotocol\fP には IEEE 802.3
\81¯ã\83ªã\83³ã\82¯ã\83¬ã\83\99ã\83«ã\83\98ã\83\83ã\83\80ã\83¼ã\82\92å\90«ã\82\80 raw ã\83\91ã\82±ã\83\83ã\83\88ã\82\92ã\80\81 \fBSOCK_DGRAM\fP ã\81¯ã\83ªã\83³ã\82¯ã\83¬ã\83\99ã\83«ã\83\98ã\83\83ã\83\80ã\83¼が削除された加工済みパケットを示す。
+リンクレベルヘッダ情報は \fIsockaddr_ll\fP で共通のフォーマットで入手できる。 \fIprotocol\fP には IEEE 802.3
 プロトコル番号を ネットワークバイトオーダーで指定する。 指定できるプロトコルのリストは、インクルードファイル
 \fI<linux/if_ether.h>\fP を参照。プロトコルを \fBhtons(ETH_P_ALL)\fP
 にすると、全てのプロトコルが受信される。 外部から来たパケットのうち指定したプロトコルのものは、
@@ -50,14 +50,14 @@ packet ソケットをオープンできるのは、 実効ユーザーID が 0
 
 \fBSOCK_RAW\fP パケットでは、パケットをデバイスドライバと受け渡しする際、 パケットデータに変更が行われることはない。
 パケットの受信時には、アドレスの解析だけは行われ、 標準的な \fIsockaddr_ll\fP
\82¢ã\83\89ã\83¬ã\82¹æ§\8bé\80 ä½\93ã\81«æ¸¡ã\81\95ã\82\8cã\82\8bã\80\82ã\83\91ã\82±ã\83\83ã\83\88ã\81®é\80\81ä¿¡æ\99\82ã\81«ã\81¯ã\80\81ã\83¦ã\83¼ã\82¶ã\81\8cæ\8c\87å®\9aã\81\99ã\82\8b ã\83\90ã\83\83ã\83\95ã\82¡ã\81«ç\89©ç\90\86層ã\81®ã\83\98ã\83\83ã\83\80が含まれている必要がある。
\82¢ã\83\89ã\83¬ã\82¹æ§\8bé\80 ä½\93ã\81«æ¸¡ã\81\95ã\82\8cã\82\8bã\80\82ã\83\91ã\82±ã\83\83ã\83\88ã\81®é\80\81ä¿¡æ\99\82ã\81«ã\81¯ã\80\81ã\83¦ã\83¼ã\82¶ã\83¼ã\81\8cæ\8c\87å®\9aã\81\99ã\82\8b ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81«ç\89©ç\90\86層ã\81®ã\83\98ã\83\83ã\83\80ã\83¼が含まれている必要がある。
 パケットはそのまま修正を受けずに、行き先アドレスから決定される インターフェースのネットワークドライバにキューイングされる。
-デバイスドライバによっては、他のヘッダを常に追加するものもある。 \fBSOCK_RAW\fP は Linux 2.0 の obosolete な
\83\87ã\83\90ã\82¤ã\82¹ã\83\89ã\83©ã\82¤ã\83\90ã\81«ã\82\88ã\81£ã\81¦ã\81¯ã\80\81ä»\96ã\81®ã\83\98ã\83\83ã\83\80ã\83¼ã\82\92常ã\81«è¿½å\8a ã\81\99ã\82\8bã\82\82ã\81®ã\82\82ã\81\82ã\82\8bã\80\82 \fBSOCK_RAW\fP ã\81¯ Linux 2.0 ã\81® obosolete ã\81ª
 \fBAF_INET/SOCK_PACKET\fP と似ているが、互換性があるわけではない。
 
-\fBSOCK_DGRAM\fP はやや高位のレベルで動作する。物理ヘッダは、パケットがユーザーに 渡される前に削除される。 \fBSOCK_DGRAM\fP の
-packet ソケットを通して送られるパケットは、 \fIsockaddr_ll\fP の行き先アドレスの情報に基づき、適切な物理層のヘッダが付加されてから、
-キューに送られる。
+\fBSOCK_DGRAM\fP ã\81¯ã\82\84ã\82\84é«\98ä½\8dã\81®ã\83¬ã\83\99ã\83«ã\81§å\8b\95ä½\9cã\81\99ã\82\8bã\80\82ç\89©ç\90\86ã\83\98ã\83\83ã\83\80ã\83¼ã\81¯ã\80\81ã\83\91ã\82±ã\83\83ã\83\88ã\81\8cã\83¦ã\83¼ã\82¶ã\83¼ã\81« æ¸¡ã\81\95ã\82\8cã\82\8bå\89\8dã\81«å\89\8aé\99¤ã\81\95ã\82\8cã\82\8bã\80\82 \fBSOCK_DGRAM\fP ã\81®
+packet ソケットを通して送られるパケットは、 \fIsockaddr_ll\fP
\81®è¡\8cã\81\8då\85\88ã\82¢ã\83\89ã\83¬ã\82¹ã\81®æ\83\85å ±ã\81«å\9fºã\81¥ã\81\8dã\80\81é\81©å\88\87ã\81ªç\89©ç\90\86層ã\81®ã\83\98ã\83\83ã\83\80ã\83¼ã\81\8cä»\98å\8a ã\81\95ã\82\8cã\81¦ã\81\8bã\82\89ã\80\81 ã\82­ã\83¥ã\83¼ã\81«é\80\81ã\82\89ã\82\8cã\82\8bã\80\82
 
 デフォルトでは、指定したプロトコル型のパケットはすべて packet ソケットに送られる。特定のインターフェースからのパケットだけを
 取得したい場合には、 \fIstruct sockaddr_ll\fP にアドレスを指定して \fBbind\fP(2)  を呼び、 packet
@@ -67,7 +67,7 @@ packet ソケットを通して送られるパケットは、 \fIsockaddr_ll\fP
 \fBconnect\fP(2)  操作は packet ソケットではサポートされていない。
 
 \fBMSG_TRUNC\fP フラグが \fBrecvmsg\fP(2), \fBrecv\fP(2), \fBrecvfrom\fP(2)  に渡されると、
-(バッファサイズより大きかったとしても) 常に実際に通信された パケットの長さが返される。
+(ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\82µã\82¤ã\82ºã\82\88ã\82\8a大ã\81\8dã\81\8bã\81£ã\81\9fã\81¨ã\81\97ã\81¦ã\82\82) å¸¸ã\81«å®\9fé\9a\9bã\81«é\80\9aä¿¡ã\81\95ã\82\8cã\81\9f ã\83\91ã\82±ã\83\83ã\83\88ã\81®é\95·ã\81\95ã\81\8cè¿\94ã\81\95ã\82\8cã\82\8bã\80\82
 .SS アドレスのタイプ
 \fIsockaddr_ll\fP はデバイスに依存しない物理層のアドレスである。
 
@@ -129,7 +129,7 @@ struct packet_mreq {
 .in
 
 \fImr_ifindex\fP は、ステータスを変更したいインターフェースの インターフェース番号である。 \fImr_type\fP
-パラメータは実行する動作を指定する: \fBPACKET_MR_PROMISC\fP は、共有している媒体からの全てのパケットを受信できるようにする
\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\83¼ã\81¯å®\9fè¡\8cã\81\99ã\82\8bå\8b\95ä½\9cã\82\92æ\8c\87å®\9aã\81\99ã\82\8b: \fBPACKET_MR_PROMISC\fP ã\81¯ã\80\81å\85±æ\9c\89ã\81\97ã\81¦ã\81\84ã\82\8båª\92ä½\93ã\81\8bã\82\89ã\81®å\85¨ã\81¦ã\81®ã\83\91ã\82±ã\83\83ã\83\88ã\82\92å\8f\97ä¿¡ã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ã\81\99ã\82\8b
 (しばしば "無差別モード (promiscuous mode)" と呼ばれる)。 \fBPACKET_MR_MULTICAST\fP は、そのソケットを、
 \fImr_address\fP と \fImr_alen\fP で指定される物理層のマルチキャストブループにバインドする。
 \fBPACKET_MR_ALLMULTI\fP は socket を up にして、そのインターフェースに到達したすべての
@@ -187,22 +187,20 @@ struct tpacket_auxdata {
 元のファンアウトアルゴリズムが backlog ソケットを選択していれば、 パケットは次の利用可能なソケットにロールオーバーされる。
 .TP 
 \fBPACKET_LOSS\fP (\fBPACKET_TX_RING\fP で使用)
-When a malformed packet is encountered on a transmit ring, the default is to
-reset its \fItp_status\fP to \fBTP_STATUS_WRONG_FORMAT\fP and abort the
-transmission immediately.  The malformed packet blocks itself and
-subsequently enqueued packets from being sent.  The format error must be
-fixed, the associated \fItp_status\fP reset to \fBTP_STATUS_SEND_REQUEST\fP, and
-the transmission process restarted via \fBsend\fP(2).  However, if
-\fBPACKET_LOSS\fP is set, any malformed packet will be skipped, its
-\fItp_status\fP reset to \fBTP_STATUS_AVAILABLE\fP, and the transmission process
-continued.
+送信リングで不正な形式のパケットに遭遇した場合、 デフォルトではそのリングの \fItp_status\fP を
+\fBTP_STATUS_WRONG_FORMAT\fP に戻し、その送信を直ちに中止する。
+不正な形式のパケットにより、そのパケット自身とその以降にキューに入れられたパケットの送信がブロックされる。形式エラーを修正し、関連する
+\fItp_status\fP を \fBTP_STATUS_SEND_REQUEST\fP に設定し直し、\fBsend\fP(2)
+を使って送信処理を再開しなければならない。 しかしながら、 \fBPACKET_LOSS\fP がセットされている場合、
+不正な形式のパケットはすべてスキップされ、 その送信リングの \fItp_status\fP は \fBTP_STATUS_AVAILABLE\fP
+に設定し直され、送信処理は継続される。
 .TP 
 \fBPACKET_RESERVE\fP (\fBPACKET_RX_RING\fP で使用)
 デフォルトでは、パケット受信リングはメタデータ構造体とアライメント用のパディングの直後にパケットを書き込む。
 この整数オプションを設定すると、パケットの前に追加で領域が予約される。
 .TP 
 \fBPACKET_RX_RING\fP
\9d\9eå\90\8cæ\9c\9fã\81§ã\81®ã\83\91ã\82±ã\83\83ã\83\88å\8f\97ä¿¡ç\94¨ã\81®ã\83¡ã\83¢ã\83ªã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81\9fã\83ªã\83³ã\82°ã\83\90ã\83\83ã\83\95ã\82¡を作成する。 パケットソケットはアプリケーションのアドレス空間に連続する領域を確保し、
\9d\9eå\90\8cæ\9c\9fã\81§ã\81®ã\83\91ã\82±ã\83\83ã\83\88å\8f\97ä¿¡ç\94¨ã\81®ã\83¡ã\83¢ã\83ªã\83¼ã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81\9fã\83ªã\83³ã\82°ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼を作成する。 パケットソケットはアプリケーションのアドレス空間に連続する領域を確保し、
 そこにパケットスロットの配列を構成し、 (最大 \fItp_snaplen\fP 個の) パケットを順にスロットにコピーする。 各パケットの前には
 \fItpacket_auxdata\fP に似たメタデータ構造体が置かれる。
 プロトコルフィールドには、データの、メタデータヘッダーの先頭からのオフセットが入る。 \fItp_net\fP にはネットワーク層へのオフセットが格納される。
@@ -240,7 +238,7 @@ struct tpacket_stats {
 .TP 
 \fBPACKET_TX_RING\fP (Linux 2.6.31 以降)
 .\" commit 69e3c75f4d541a6eb151b3ef91f34033cb3ad6e1
\83\91ã\82±ã\83\83ã\83\88é\80\81ä¿¡ç\94¨ã\81®ã\83¡ã\83¢ã\83ªã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81\9fã\83ªã\83³ã\82°ã\83\90ã\83\83ã\83\95ã\82¡を作成する。 このオプションは \fBPACKET_RX_RING\fP と同様で、同じ引き数を取る。
\83\91ã\82±ã\83\83ã\83\88é\80\81ä¿¡ç\94¨ã\81®ã\83¡ã\83¢ã\83ªã\83¼ã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81\9fã\83ªã\83³ã\82°ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼を作成する。 このオプションは \fBPACKET_RX_RING\fP と同様で、同じ引き数を取る。
 アプリケーションは \fItp_status\fP が \fBTP_STATUS_AVAILABLE\fP のスロットにパケットを書き込み、
 \fItp_status\fP を \fBTP_STATUS_SEND_REQUEST\fP に変更することでそのパケットの送信を予約する。
 パケットの送信準備ができたら、アプリケーションは続けて \fBsend\fP(2) 系のシステムコールを呼び出す。 システムコールの引き数 \fIbuf\fP と
@@ -259,7 +257,7 @@ struct tpacket_stats {
 デフォルトでは、パケットはカーネルの qdisc (トラフィック制御) レイヤー経由で渡される。 これは大半のユースケースに合っている。
 ネットワークに対して可能な限りパケットを送信する (例えば pkggen と同様の方法で負荷対象のデバイスを試験する)
 のにパケットソケットを使うトラフィック生成アプライアンスでは、この整数オプションを 1 に設定することで qdisc レイヤーを飛ばすことができる。
-qdisc レイヤーでのパケットバッファが行われなくなるという副作用がある。 これにより、
+qdisc ã\83¬ã\82¤ã\83¤ã\83¼ã\81§ã\81®ã\83\91ã\82±ã\83\83ã\83\88ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81\8cè¡\8cã\82\8fã\82\8cã\81ªã\81\8fã\81ªã\82\8bã\81¨ã\81\84ã\81\86å\89¯ä½\9cç\94¨ã\81\8cã\81\82ã\82\8bã\80\82 ã\81\93ã\82\8cã\81«ã\82\88ã\82\8aã\80\81
 ネットワークデバイスの送信キューの使用量が高い場合にパケット廃棄が起きやすくなる。
 .SS ioctl
 .\" FIXME Document SIOCGSTAMPNS
@@ -277,7 +275,7 @@ packet ソケットは、パケットをデバイスドライバに渡すとき
 不明なマルチキャストグループアドレスが渡された。
 .TP 
 \fBEFAULT\fP
\83¦ã\83¼ã\82¶ã\81\8c渡ã\81\97ã\81\9fã\83¡ã\83¢ã\83ªアドレスが不正。
\83¦ã\83¼ã\82¶ã\83¼ã\81\8c渡ã\81\97ã\81\9fã\83¡ã\83¢ã\83ªã\83¼アドレスが不正。
 .TP 
 \fBEINVAL\fP
 引き数が不正。
@@ -289,7 +287,7 @@ packet ソケットは、パケットをデバイスドライバに渡すとき
 インターフェースが up でない。
 .TP 
 \fBENOBUFS\fP
-パケットに割り当てるメモリが足りない。
\83\91ã\82±ã\83\83ã\83\88ã\81«å\89²ã\82\8aå½\93ã\81¦ã\82\8bã\83¡ã\83¢ã\83ªã\83¼ã\81\8c足ã\82\8aã\81ªã\81\84ã\80\82
 .TP 
 \fBENODEV\fP
 デバイス名が不明。あるいはインターフェースアドレスで指定された インターフェースインデックスが不明。
@@ -304,31 +302,21 @@ packet ソケットは、パケットをデバイスドライバに渡すとき
 インターフェースアドレスに不正なインターフェースインデックスが含まれている。
 .TP 
 \fBEPERM\fP
-この操作を行うのに必要な権限をユーザが持っていない。
\81\93ã\81®æ\93\8dä½\9cã\82\92è¡\8cã\81\86ã\81®ã\81«å¿\85è¦\81ã\81ªæ¨©é\99\90ã\82\92ã\83¦ã\83¼ã\82¶ã\83¼ã\81\8cæ\8c\81ã\81£ã\81¦ã\81\84ã\81ªã\81\84ã\80\82
 
 上記以外のエラーが、低レベルのドライバで生成されることがある。
 .SH バージョン
 \fBAF_PACKET\fP は Linux 2.2 の新機能である。これより古いバージョンの Linux では \fBSOCK_PACKET\fP
 のみをサポートしていた。
 .PP
-インクルードファイル \fI<netpacket/packet.h>\fP が存在するのは glibc 2.1 以降である。
-それ以前のシステムでは以下のようにする必要がある:
-.sp
-.in +4n
-.nf
-#include <asm/types.h>
-#include <linux/if_packet.h>
-#include <linux/if_ether.h>  /* The L2 protocols */
-.fi
-.in
 .SH 注意
 移植性の必要なプログラムでは、 \fBpcap\fP(3)  経由で \fBAF_PACKET\fP を用いることをお薦めする。ただし、この方法では
 \fBAF_PACKET\fP の機能すべてを利用することはできない。
 
-\fBSOCK_DGRAM\fP packet ソケットは、IEEE 802.3 フレームの IEEE 802.2 LLC ヘッダの
+\fBSOCK_DGRAM\fP packet ã\82½ã\82±ã\83\83ã\83\88ã\81¯ã\80\81IEEE 802.3 ã\83\95ã\83¬ã\83¼ã\83 ã\81® IEEE 802.2 LLC ã\83\98ã\83\83ã\83\80ã\83¼ã\81®
 生成や解析を行おうとしない。 \fBETH_P_802_3\fP が送信プロトコルに指定されると、カーネルは 802.3 フレームを 生成して length
-フィールドに書き込む。 完全に準拠したパケットを得るためにはユーザーが LLC ヘッダを 与える必要がある。到着した 802.3 パケットでは、
-DSAP/SSAP protocol の各フィールドは多重化 (multiplex) されていない。 代わりにこれらは LLC ヘッダが前置された
\83\95ã\82£ã\83¼ã\83«ã\83\89ã\81«æ\9b¸ã\81\8dè¾¼ã\82\80ã\80\82 å®\8cå\85¨ã\81«æº\96æ\8b ã\81\97ã\81\9fã\83\91ã\82±ã\83\83ã\83\88ã\82\92å¾\97ã\82\8bã\81\9fã\82\81ã\81«ã\81¯ã\83¦ã\83¼ã\82¶ã\83¼ã\81\8c LLC ã\83\98ã\83\83ã\83\80ã\83¼ã\82\92 ä¸\8eã\81\88ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8bã\80\82å\88°ç\9d\80ã\81\97ã\81\9f 802.3 ã\83\91ã\82±ã\83\83ã\83\88ã\81§ã\81¯ã\80\81
+DSAP/SSAP protocol ã\81®å\90\84ã\83\95ã\82£ã\83¼ã\83«ã\83\89ã\81¯å¤\9aé\87\8då\8c\96 (multiplex) ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\80\82 ä»£ã\82\8fã\82\8aã\81«ã\81\93ã\82\8cã\82\89ã\81¯ LLC ã\83\98ã\83\83ã\83\80ã\83¼ã\81\8cå\89\8dç½®ã\81\95ã\82\8cã\81\9f
 \fBETH_P_802_2\fP プロトコルとして与えられる。したがって、 \fBETH_P_802_3\fP にバインドすることはできない。かわりに
 \fBETH_P_802_2\fP にバインドし、自分自身でプロトコルの多重化を行うこと。 送信のデフォルトは、プロトコルフィールドを持つ 標準の
 Ethernet DIX encapsulation である。
@@ -366,7 +354,7 @@ glibc 2.1 には \fBSOL_PACKET\fP の定義がない。回避策としては、
 
 .fi
 .in
-この問題は新しいバージョンの glibc では修正されている。 libc5 のシステムにはこの問題はない
+この問題はそれ以降のバージョンの glibc では修正されている
 
 IEEE 802.2/803.3 の LLC の扱い方は、バグと考えても良いだろう。
 
@@ -387,11 +375,11 @@ IEEE 802.2/803.3 の LLC の扱い方は、バグと考えても良いだろう
 
 物理層のプロトコルに関する記述は \fI<linux/if_ether.h>\fP インクルードファイルにある。
 
-The Linux kernel source tree.  \fI/Documentation/networking/filter.txt\fP
-describes how to apply Berkeley Packet Filters to packet sockets.
-\fI/tools/testing/selftests/net/psock_tpacket.c\fP contains example source code
-for all available versions of \fBPACKET_RX_RING\fP and \fBPACKET_TX_RING\fP.
+Linux カーネルのソースツリー。 \fI/Documentation/networking/filter.txt\fP には Berkeley
+Packet Filters をパケットソケットにどのように適用するかの説明がある。
+\fI/tools/testing/selftests/net/psock_tpacket.c\fP には、 \fBPACKET_RX_RING\fP と
+\fBPACKET_TX_RING\fP の利用可能なすべてのバージョンのサンプルソースコードがある。
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。