.\" t .\" This man page is Copyright (C) 1999 Andi Kleen . .\" .\" %%%LICENSE_START(VERBATIM_ONE_PARA) .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .\" %%%LICENSE_END .\" .\" Based on the original comments from Alexey Kuznetsov, written with .\" help from Matthew Wilcox. .\" $Id: rtnetlink.7,v 1.8 2000/01/22 01:55:04 freitag Exp $ .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 1999 NAKANO Takeo all rights reserved. .\" Translated Mon 6 Dec 1999 by NAKANO Takeo .\" Updated 2013-05-01, Akihiro MOTOKI .\" Updated 2013-05-04, Akihiro MOTOKI .\" .TH RTNETLINK 7 2013\-03\-05 Linux "Linux Programmer's Manual" .SH 名前 rtnetlink \- Linux IPv4 ルーティングソケット .SH 書式 \fB#include \fP .br \fB#include \fP .br \fB#include \fP .br \fB#include \fP .sp \fBrtnetlink_socket = socket(AF_NETLINK, int \fP\fIsocket_type\fP\fB, NETLINK_ROUTE);\fP .SH 説明 .\" FIXME . ? all these macros could be moved to rtnetlink(3) \fBrtnetlink\fP はカーネルのルーティングテーブルを読んだり変更したり するためのものである。これはカーネルが内部のサブシステムと 通信するためにも用いられているが、それはここでは記述しない。 この man ページではユーザー空間のプログラムとの通信に関してのみ述べる。 ネットワーク経路・IP アドレス・リンクパラメーター・ 近傍設定 (neighbor setup)・キューイングルール (queueing dicipline)・ トラフィッククラス・パケットのクラス分類などが、すべて \fBNETLINK_ROUTE\fP ソケットを通して制御できる。 \fBrtnetlink\fP は netlink メッセージをベースにしている。詳細は \fBnetlink\fP(7) を見ること。 .SS ルーティング属性 rtnetlink メッセージには、初期ヘッダーの後に付加的な属性を 持つものがある。 .in +4n .nf struct rtattr { unsigned short rta_len; /* Length of option */ unsigned short rta_type; /* Type of option */ /* Data follows */ }; .fi .in これらの属性の操作は、 RTA_* マクロか libnetlink のみを使って行うべきである。 \fBrtnetlink\fP(3) を見よ。 .SS メッセージ rtnetlink は (標準的な netlink メッセージに加えて) 以下のメッセージタイプから構成される。 .TP \fBRTM_NEWLINK\fP, \fBRTM_DELLINK\fP, \fBRTM_GETLINK\fP 指定したネットワークインターフェースの情報を、生成・削除・取得する。 これらのメッセージは \fIifinfomsg\fP 構造体と、それに続いていくつかの \fIrtattr\fP 構造体を伴う。 .nf struct ifinfomsg { unsigned char ifi_family; /* AF_UNSPEC */ unsigned short ifi_type; /* Device type */ int ifi_index; /* Interface index */ unsigned int ifi_flags; /* Device flags */ unsigned int ifi_change; /* change mask */ }; .fi .\" FIXME Document ifinfomsg.ifi_type \fIifi_flags\fP はデバイスのフラグである。 \fBnetdevice\fP(7) を参照。 \fIifi_index\fP は他と重ならないインターフェースの index である (Linux 3.7 以降では、 \fBRTMGRP_LINK\fP メッセージで 0 以外の値を指定することができ、そのため指定した \fIifindex\fP でリンクを作成できる)。 \fIifi_change\fP は将来の利用のために予約されており、常に 0xFFFFFFFF にセットすべきである。 .TS tab(:); c s s l l l. ルーティング属性 rta_type:値の型:説明 _ IFLA_UNSPEC:\-:指定されていない。 IFLA_ADDRESS:hardware address:インターフェース L2 アドレス IFLA_BROADCAST:hardware address:L2 ブロードキャストアドレス IFLA_IFNAME:asciiz string:デバイス名 IFLA_MTU:unsigned int:デバイスの MTU IFLA_LINK:int:リンクタイプ IFLA_QDISC:asciiz string:キューイングのルール IFLA_STATS:T{ 下記参照 T}:インターフェースの統計 .TE .sp \fBIFLA_STATS\fP の値の型は \fIstruct rtnl_link_stats\fP (Linux 2.4 以前では \fIstruct net_device_stats\fP) である。 .TP \fBRTM_NEWADDR\fP, \fBRTM_DELADDR\fP, \fBRTM_GETADDR\fP インターフェースの IP アドレスの情報を追加・削除・取得する。 Linux 2.2 では、一つのインターフェースに複数の IP アドレスを 保持させることができ、これは 2.0 の別名デバイスの概念を置き換える。 Linux 2.2 では、これらのメッセージは IPv4 と IPv6 の両方のアドレスをサポートしている。 これらは \fIifaddrmsg\fP 構造体を伴う。そのあとに \fIrtattr\fP ルーティング属性が続くこともある。 .nf struct ifaddrmsg { unsigned char ifa_family; /* Address type */ unsigned char ifa_prefixlen; /* Prefixlength of address */ unsigned char ifa_flags; /* Address flags */ unsigned char ifa_scope; /* Address scope */ int ifa_index; /* Interface index */ }; .fi \fIifa_family\fP はアドレスファミリーのタイプである (現在は \fBAF_INET\fP または \fBAF_INET6\fP)。 \fIifa_prefixlen\fP はアドレスのアドレスマスクの長さである (IPv4 のように、 そのファミリーで定義されている場合)。 \fIifa_scope\fP はアドレスのスコープである。 \fIifa_index\fP はアドレスが関連づけられているインターフェースの index である。 \fIifa_flags\fP はフラグワードで、 二つめのアドレス (古い別名インターフェース) の場合は \fBIFA_F_SECONDARY\fP に、永続的なアドレスの場合は \fBIFA_F_PERMANENT\fP に適用される。ユーザーによってセットされるフラグと、 undocumented なフラグがある。 .TS tab(:); c s s l l l. 属性 rta_type:値の型:説明 _ IFA_UNSPEC:\-:指定されていない IFA_ADDRESS:raw protocol address:インターフェースアドレス IFA_LOCAL:raw protocol address:ローカルアドレス IFA_LABEL:asciiz string:インターフェースの名前 IFA_BROADCAST:raw protocol address:ブロードキャストアドレス IFA_ANYCAST:raw protocol address:anycast アドレス IFA_CACHEINFO:struct ifa_cacheinfo:アドレス情報 .TE .\" FIXME Document struct ifa_cacheinfo .TP \fBRTM_NEWROUTE\fP, \fBRTM_DELROUTE\fP, \fBRTM_GETROUTE\fP ネットワーク経路の情報を生成・削除・取得する。 これらのメッセージは \fIrtmsg\fP 構造体を伴う。そのあとにいくつかの \fIrtattr\fP 構造体を続けることもできる。 \fBRTM_GETROUTE\fP で \fIrtm_dst_len\fP と \fIrtm_src_len\fP に 0 をセットすると、 指定されたルーティングテーブルの全てのエントリーを所得する。 \fIrtm_table\fP と \fIrtm_protocol\fP 以外の他のフィールドに 0 を入れると、ワイルドカードを意味する。 .nf struct rtmsg { unsigned char rtm_family; /* Address family of route */ unsigned char rtm_dst_len; /* Length of destination */ unsigned char rtm_src_len; /* Length of source */ unsigned char rtm_tos; /* TOS filter */ unsigned char rtm_table; /* Routing table ID */ unsigned char rtm_protocol; /* Routing protocol; see below */ unsigned char rtm_scope; /* See below */ unsigned char rtm_type; /* See below */ unsigned int rtm_flags; }; .fi .TS tab(:); l l. rtm_type:経路のタイプ _ RTN_UNSPEC:未知の経路 RTN_UNICAST:ゲートウェイまたはダイレクトな経路 RTN_LOCAL:ローカルインターフェースの経路 RTN_BROADCAST:T{ ローカルなブロードキャスト経路 (ブロードキャストとして送信される) T} RTN_ANYCAST:T{ ローカルなブロードキャスト経路 (ユニキャストとして送信される) T} RTN_MULTICAST:マルチキャスト経路 RTN_BLACKHOLE:パケットを捨てる経路 RTN_UNREACHABLE:到達できない行き先 RTN_PROHIBIT:パケットを拒否する経路 RTN_THROW:経路探索を別のテーブルで継続 RTN_NAT:ネットワークアドレスの変換ルール RTN_XRESOLVE:T{ 外部レゾルバを参照 (実装されていない) T} .TE .TS tab(:); l l. rtm_protocol:経路の情報源 _ RTPROT_UNSPEC:不明 RTPROT_REDIRECT:T{ ICMP リダイレクトによる (現在は用いられない) T} RTPROT_KERNEL:カーネルによる RTPROT_BOOT:ブート時 RTPROT_STATIC:管理者による .TE \fBRTPROT_STATIC\fP よりも大きな値はカーネルによって解釈されない。これは 単なるユーザーへの情報である。これらは経路情報の情報源を タグ付けしたり、複数のルーティングデーモンからの情報を 区別するために用いることができる。 既に割り当てられているルーティングデーモンの識別子については \fI\fP を見よ。 \fIrtm_scope\fP は行き先への距離である。 .TS tab(:); l l. RT_SCOPE_UNIVERSE:グローバルな経路 RT_SCOPE_SITE:T{ ローカルな自律システムにおける内部経路 T} RT_SCOPE_LINK:このリンク上の経路 RT_SCOPE_HOST:ローカルホスト上の経路 RT_SCOPE_NOWHERE:行き先が存在しない .TE ユーザーは \fBRT_SCOPE_UNIVERSE\fP と \fBRT_SCOPE_SITE\fP の間の値を用いることができる。 \fIrtm_flags\fP は以下の意味を持つ: .TS tab(:); l l. RTM_F_NOTIFY:T{ 経路が変更されると、 rtnetlink を通してユーザーに通知が行く。 T} RTM_F_CLONED:経路は他の経路によって複製された。 RTM_F_EQUALIZE:マルチパスイコライザ (まだ実装されていない) .TE \fIrtm_table\fP ではルーティングテーブルを指定する。 .TS tab(:); l l. RT_TABLE_UNSPEC:指定されていないルーティングテーブル RT_TABLE_DEFAULT:デフォルトのテーブル RT_TABLE_MAIN:メインのテーブル RT_TABLE_LOCAL:ローカルテーブル .TE .\" Keep table on same page ユーザーは \fBRT_TABLE_UNSPEC\fP と \fBRT_TABLE_DEFAULT\fP. の間の任意の値を用いることができる。 .bp +1 .TS tab(:); c s s l l l. 属性 rta_type:値の型:説明 _ RTA_UNSPEC:\-:無視される RTA_DST:protocol address:経路の行き先アドレス RTA_SRC:protocol address:経路の発信元アドレス RTA_IIF:int:入力インターフェースの index RTA_OIF:int:出力インターフェースの index RTA_GATEWAY:protocol address:経路のゲートウェイ RTA_PRIORITY:int:経路の優先度 RTA_PREFSRC:: RTA_METRICS:int:経路のメトリック RTA_MULTIPATH:: RTA_PROTOINFO:: RTA_FLOW:: RTA_CACHEINFO:: .TE \fB(これらの値を埋めること!)\fP .TP \fBRTM_NEWNEIGH\fP, \fBRTM_DELNEIGH\fP, \fBRTM_GETNEIGH\fP 近傍テーブル (neighbor table) のエントリー (例えば ARP エントリー) の情報を追加・削除・取得する。 このメッセージは \fIndmsg\fP 構造体を伴う。 .nf struct ndmsg { unsigned char ndm_family; int ndm_ifindex; /* Interface index */ __u16 ndm_state; /* State */ __u8 ndm_flags; /* Flags */ __u8 ndm_type; }; struct nda_cacheinfo { __u32 ndm_confirmed; __u32 ndm_used; __u32 ndm_updated; __u32 ndm_refcnt; }; .fi \fIndm_state\fP は以下の状態のビットマスクである: .TS tab(:); l l. NUD_INCOMPLETE:現在レゾルブ中のキャッシュエントリー NUD_REACHABLE:動作確認済みのキャッシュエントリー NUD_STALE:期限切れのキャッシュエントリー NUD_DELAY:タイマー待ちのキャッシュエントリー NUD_PROBE:再確認中のキャッシュエントリー NUD_FAILED:不正なキャッシュエントリー NUD_NOARP:行き先キャッシュのないデバイス NUD_PERMANENT:静的なエントリー .TE 有効な \fIndm_flags\fP は以下の通り: .TS tab(:); l l. NTF_PROXY:プロクシ arp エントリー NTF_ROUTER:IPv6 ルータ .TE .\" FIXME . .\" document the members of the struct better \fIrtattr\fP 構造体は、 \fIrta_type\fP フィールドに応じてそれぞれ以下の意味を持つ: .TS tab(:); l l. NDA_UNSPEC:未知のタイプ NDA_DST:近傍キャッシュネットワーク層の行き先アドレス NDA_LLADDR:近傍キャッシュリンク層のアドレス NDA_CACHEINFO:キャッシュの統計 .TE \fIrta_type\fP フィールドが \fBNDA_CACHEINFO\fP の場合には、 \fIstruct nda_cacheinfo\fP ヘッダーが続く。 .TP \fBRTM_NEWRULE\fP, \fBRTM_DELRULE\fP, \fBRTM_GETRULE\fP ルーティングルールを追加・削除・取得する。 \fIstruct rtmsg\fP を伴う。 .TP \fBRTM_NEWQDISC\fP, \fBRTM_DELQDISC\fP, \fBRTM_GETQDISC\fP キューイングルールを追加・削除・取得する。 このメッセージは \fIstruct tcmsg\fP を伴い、またそのあとに属性がいくつか続くこともある。 .nf struct tcmsg { unsigned char tcm_family; int tcm_ifindex; /* interface index */ __u32 tcm_handle; /* Qdisc handle */ __u32 tcm_parent; /* Parent qdisc */ __u32 tcm_info; }; .fi .TS tab(:); c s s l2 l2 l. 属性 rta_type:値の型:説明 _ TCA_UNSPEC:\-:指定されていない TCA_KIND:asciiz string:キューイングルールの名前 TCA_OPTIONS:byte sequence:Qdisc 特有のオプションが続く TCA_STATS:struct tc_stats:Qdisc の統計 TCA_XSTATS:qdisc\-specific:モジュール特有の統計 TCA_RATE:struct tc_estimator:レート制限 .TE さらに、 qdisc モジュール特有の様々な属性を指定できる。 詳細な情報は適切なインクルードファイルを見よ。 .TP \fBRTM_NEWTCLASS\fP, \fBRTM_DELTCLASS\fP, \fBRTM_GETTCLASS\fP トラフィッククラスを追加・削除・取得する。 これらのメッセージは、上述の \fIstruct tcmsg\fP を伴う。 .TP \fBRTM_NEWTFILTER\fP, \fBRTM_DELTFILTER\fP, \fBRTM_GETTFILTER\fP トラフィックフィルターの情報を追加・削除・取得する。 これらのメッセージは、上述の \fIstruct tcmsg\fP を伴う。 .SH バージョン \fBrtnetlink\fP は Linux 2.2 の新機能である。 .SH バグ このマニュアルは完全ではない。 .SH 関連項目 \fBcmsg\fP(3), \fBrtnetlink\fP(3), \fBip\fP(7), \fBnetlink\fP(7) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。