EN JA
ICMP(4)
ICMP(4) FreeBSD Kernel Interfaces Manual ICMP(4)

名称

icmpインターネットコントロールメッセージプロトコル

書式

#include < sys/types.h>
#include < sys/socket.h>
#include < netinet/in.h>

int
socket( AF_INET, SOCK_RAW, proto);

解説

ICMP は IP とインターネットプロトコルファミリによって使用されるエラーとコントロールメッセージプロトコルです。それはネットワークモニタリングと診断機能のために“raw (生の) ソケット”を介してアクセスできます。 ICMP ソケットを作成するためのソケット呼び出しへの proto パラメータは、 getprotobyname(3) から得られます。 ICMP ソケットはコネクションレスで、通常 sendto(2)recvfrom(2) 呼び出しと共に使用されます。しかしながら、 connect(2) 呼び出しは将来のパケット (その場合には read(2) または recv(2) および write(2) または send(2) システムコールが使用できます) のために宛先 (終点) を固定するために使用できます。

発信パケットは、(宛先アドレスに基づいて) 自動的にそれらに IP ヘッダを先頭に追加します。着信パケットはそのままの IP ヘッダとオプションで受信されます。

タイプ

ICMP メッセージは、ICMP ヘッダに存在するタイプとコードフィールドに従って、分類されます。タイプとコードのための省略形は、 pf.conf(5) の規則で使用されます。次のタイプが定義されています:
番号 省略形 説明
0 echorep エコー応答
3 unreach 宛先到達不可能
4 squench パケット損失, 減速
5 redir より短いルートが存在
6 althost 代替ホストアドレス
8 echoreq エコー要求
9 routeradv ルータ通知
10 routersol ルータ懇願
11 timex 時間超過
12 paramprob 不正 IP ヘッダ
13 timereq タイムスタンプ要求
14 timerep タイムスタンプ応答
15 inforeq 情報要求
16 inforep 情報応答
17 maskreq アドレスマスク要求
18 maskrep アドレスマスク応答
30 trace トレースルート
31 dataconv データ変換問題
32 mobredir モバイルホストリダイレクション
33 ipv6-where IPv6 where-are-you
34 ipv6-here IPv6 i-am-here
35 mobregreq モバイル登録要求
36 mobregrep モバイル登録応答
39 skip スキップ
40 photuris Photuris

次のコードが定義されています:

番号 省略形 タイプ 説明
0 net-unr unreach ネットワーク不到達
1 host-unr unreach ホスト不到達
2 proto-unr unreach プロトコル不到達
3 port-unr unreach ポート不到達
4 needfrag unreach 断片化が必要だが、DF ビット設定
5 srcfail unreach 発信元ルーティングは失敗
6 net-unk unreach 未知のネットワーク
7 host-unk unreach 未知のホスト
8 isolate unreach 隔離されたホスト
9 net-prohib unreach ネットワーク管理禁止
10 host-prohib unreach ホスト管理禁止
11 net-tos unreach ネットワークの不正 TOS
12 host-tos unreach ホストの不正 TOS
13 filter-prohib unreach 禁止されたアクセス
14 host-preced unreach 優先違反
15 cutoff-preced unreach 優先遮断
0 redir-net redir ネットワークのより短いルート
1 redir-host redir ホストのより短いルート
2 redir-tos-net redir TOS とネットワークのより短いルート
3 redir-tos-host redir TOS とホストのより短いルート
0 normal-adv routeradv 通常通知
16 common-adv routeradv 選択通知
0 transit timex 転送時の超過時間
1 reassemb timex 再構築時の超過時間
0 badhead paramprob 不正オプションポインタ
1 optmiss paramprob オプション不足
2 badlen paramprob 不正長さ
1 unknown-ind photuris 未知のセキュリティインデックス
2 auth-fail photuris 認証失敗
3 decrypt-fail photuris 暗号解読失敗

MIB 変数

ICMP プロトコルは sysctl(3) MIB の net.inet.icmp ブランチでいくつかの変数を実装しています。
maskrepl
( ブール値) ICMP Address Mask Request パケットへの応答を有効/無効にする。デフォルトは偽です。
maskfake
( 符号なし整数) maskrepl が設定されて、この値が 0 でないとき、システムが ICMP Address Mask Request パケットに応答するとき、それは実際のアドレスマスクの代わりに使用されます。デフォルトは 0 です。
icmplim
( 整数) パケット/秒で ICMP 応答のための帯域幅の制限です。 icmplim_output が 0 でないときに使用されます。デフォルトは 200 です。
icmplim_output
( ブール値) ICMP 応答の帯域幅制限を有効/無効にします。デフォルトは真です。
drop_redirect
( ブール値) ICMP Redirect パケットの落下を有効/無効にする。デフォルトは偽です。
log_redirect
( ブール値) ICMP Redirect パケットのログを有効/無効にする。デフォルトは偽です。
bmcastecho
( ブール値) ブロードキャストまたはマルチキャストを通して受信された ICMP 応答を有効/無効にする。デフォルトは偽です。
reply_src
( 文字列) インタフェース名は直接アドレス指定されないパケットの応答で ICMP 応答発信元 (始点) で使用されます。デフォルトで通常の発信元 (始点) 選択を継続します。
reply_from_interface
( ブール値) 直接我々が対処できない、パケットへの応答を通り抜けるインタフェースの IP アドレスを使用します。有効にされるなら、この規則は、他のすべての前に処理されます。デフォルトで、通常のソース選択を続行します。外部のトレースルートが、ことによると異なったリターンパスの代わりに取られる実際のパスを示すので、このオプションを有効にすることはルータで特に役に立ちます。
quotelen
( 整数) ICMP 応答で引用 (クォート) するオリジナルのパケットからのバイトの数。この数は、(RFC792 で) 少なくとも 8 バイトと多くても ICMP 応答 mbuf に残っている最大の空間となるように内部的に強制されます。

エラー

ソケット操作は失敗すれば、次のエラーのうちの 1 つを返します:
[ EISCONN]
既に接続されているソケットで接続を確立しようとする場合、または宛先 (終点) アドレスを指定してデータグラムを送ろうとする場合です。そして、ソケットは既に接続されています。
[ ENOTCONN]
宛先 (終点) アドレスは指定せずに、データグラムを送信しようとする場合です。また、ソケットは接続されていません。
[ ENOBUFS]
システムが内部データ構造体のためのメモリを使い果たす場合です。
[ EADDRNOTAVAIL]
ネットワークインタフェースが存在しないネットワークアドレスでソケットを作成しようとした場合です。

歴史

icmp プロトコルは、 4.3BSD で登場しました。
February 9, 2007 FreeBSD