rtnetlink - 約束事その他の説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- ルーティング属性
- メッセージ
- バージョン
- バグ
- 関連項目
名前
rtnetlink, NETLINK_ROUTE - Linux IPv4 ルーティングソケット
書式
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h>
rtnetlink_socket = socket(PF_NETLINK, int
socket_type
, NETLINK_ROUTE);
説明
rtnetlink
はカーネルのルーティングテーブルを読んだり変更したり
するためのものである。これはカーネルが内部のサブシステムと
通信するためにも用いられているが、それはここでは記述しない。
この man ページではユーザー空間のプログラムとの通信に関してのみ述べる。
ネットワーク経路・IP アドレス・リンクパラメータ・
近傍設定 (neighbour setup)・キューイングルール (queueing dicipline)・
トラフィッククラス・パケットのクラス分類などが、すべて
NETLINK_ROUTE
ソケットを通して制御できる。
rtnetlink
は netlink メッセージをベースにしている。詳細は
netlink
(7) を見ること。
ルーティング属性
rtnetlink メッセージには、初期ヘッダの後に付加的な属性を
持つものがある。
struct rtattr {
unsigned short rta_len; /* Length of option */
unsigned short rta_type; /* Type of option */
/* Data follows */
};
これらの属性の操作は、 RTA_* マクロか libnetlink を通してのみ
行うべきである。
rtnetlink
(3) を見よ。
メッセージ
rtnetlink は (標準的な netlink メッセージに加えて)
以下のメッセージタイプから構成される。
-
RTM_NEWLINK
,
RTM_DELLINK
,
RTM_GETLINK
-
指定したネットワークインターフェースの情報を、生成・削除・取得する。
これらのメッセージは
ifinfomsg
構造体と、それに続いていくつかの
rtattr
構造体を伴う。
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 */
};
ifi_flags
はデバイスのフラグである。
netdevice
(7) を見よ。
ifi_index
は他と重ならないインターフェースの index である。
ifi_change
は将来の利用のために予約されており、常に
0xFFFFFFFF にセットすべきである。
.TS
tab(:);
c
l l l.
ルーティング属性
rta_type:値の型:説明
_
IFLA_UNSPEC:-:指定されていない。
IFLA_ADDRESS:hardware address:T{
インターフェース L2 アドレス
T}
IFLA_BROADCAST:hardware address:T{
L2 ブロードキャストアドレス
T}
IFLA_IFNAME:asciiz string:デバイス名
IFLA_MTU:unsigned int:デバイスの MTU
IFLA_LINK:int:リンクタイプ
IFLA_QDISC:asciiz string:キューイングのルール
IFLA_STATS:T{
struct net_device_stats
T}:インターフェースの統計
-
RTM_NEWADDR
,
RTM_DELADDR
,
RTM_GETADDR
-
インターフェースの IP アドレスの情報を追加・削除・取得する。
Linux 2.2 では、一つのインターフェースに複数の IP アドレスを
保持させることができ、これは 2.0 の別名デバイスの概念を置き換える。
Linux 2.2 では、これらのメッセージは
IPv4 と IPv6 の両方のアドレスをサポートしている。
これらは
ifaddrmsg
構造体を伴う。そのあとに
rtaddr
ルーティング属性が続くこともある。
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 */
};
ifa_family
はアドレスファミリーのタイプである (現在は
AF_INET
または
AF_INET6
)。
ifa_prefixlen
はアドレスのアドレスマスクの長さである (IPv4 のように、
そのファミリーで定義されている場合)。
ifa_scope
はアドレスのスコープである。
ifa_index
はアドレスが関連づけられているインターフェースの index である。
ifa_flags
はフラグワードで、
二つめのアドレス (古い別名インターフェース) の場合は
IFA_F_SECONDARY
に、永続的なアドレスの場合は
IFA_F_PERMANENT
に適用される。ユーザーによってセットされるフラグと、
undocumented なフラグがある。
.TS
tab(:);
c
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:アドレス情報
-
RTM_NEWROUTE
,
RTM_DELROUTE
,
RTM_GETROUTE
-
ネットワーク経路の情報を生成・削除・取得する。
これらのメッセージは
rtmsg
構造体を伴う。そのあとにいくつかの
rtattr
構造体を続けることもできる。
RTM_GETROUTE
で
rtm_dst_len
と
rtm_src_len
に 0 をセットすると、
指定されたルーティングテーブルの全てのエントリを所得する。
rtm_table
と
rtm_protocol
以外の他のフィールドに 0 を入れると、ワイルドカードを意味する。
struct rtmsg {
unsigned char rtm_family; /* Address family of route */
unsigned char rtm_dst_len; /* Length of source */
unsigned char rtm_src_len; /* Length of destination */
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;
};
.TS
tab(:);
l l
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}
.TS
tab(:);
l l.
rtm_protocol:経路の情報源
_
RTPROT_UNSPEC:不明
RTPROT_REDIRECT:T{
ICMP リダイレクトによる (現在は用いられない)
T}
RTPROT_KERNEL:カーネルによる
RTPROT_BOOT:ブート時
RTPROT_STATIC:管理者による
RTPROT_STATIC
よりも大きな値はカーネルによって解釈されない。これは
単なるユーザーへの情報である。これらは経路情報の情報源を
タグ付けしたり、複数のルーティングデーモンからの情報を
区別するために用いることができる。
既に割り当てられているルーティングデーモンの識別子については
<linux/rtnetlink.h>
を見よ。
rtm_scope
は行き先への距離である。
.TS
tab(:);
l l.
RT_SCOPE_UNIVERSE:グローバルな経路
RT_SCOPE_SITE:T{
ローカルな自律システムにおける内部経路
T}
RT_SCOPE_LINK:このリンク上の経路
RT_SCOPE_HOST:ローカルホスト上の経路
RT_SCOPE_NOWHERE:行き先が存在しない
ユーザーは
RT_SCOPE_UNIVERSE
と
RT_SCOPE_SITE
の間の値を用いることができる。
rtm_flags
は以下の意味を持つ:
.TS
tab(:);
l l.
RTM_F_NOTIFY:T{
経路が変更されると、 rtnetlink を通してユーザーに通知が行く。
T}
RTM_F_CLONED:経路は他の経路によって複製された。
RTM_F_EQUALIZE:マルチキャストイクォライザー (実装されていない)
rtm_table
ではルーティングテーブルを指定する。
.TS
tab(:);
l l.
RT_TABLE_UNSPEC:指定されていないルーティングテーブル
RT_TABLE_DEFAULT:デフォルトのテーブル
RT_TABLE_MAIN:メインのテーブル
RT_TABLE_LOCAL:ローカルテーブル
ユーザーは
RT_TABLE_UNSPEC
と
RT_TABLE_DEFAULT
.の間の任意の値を用いることができる。
.TS
tab(:);
c
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::
(これらの値を埋めること!)
-
RTM_NEWNEIGH
,
RTM_DELNEIGH
,
RTM_GETNEIGH
-
近傍テーブル (neighbour table) のエントリ
(例えば ARP エントリ) の情報を追加・削除・取得する。
このメッセージは
ndmsg
構造体を伴う。
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;
};
ndm_state
は以下の状態のビットマスクである:
.TS
tab(:);
l l.
NUD_INCOMPLETE:現在レゾルブ中のキャッシュエントリ
NUD_REACHABLE:動作確認済みのキャッシュエントリ
NUD_STALE:期限切れのキャッシュエントリ
NUD_DELAY:タイマ待ちのキャッシュエントリ
NUD_PROBE:再確認中のキャッシュエントリ
NUD_FAILED:不正なキャッシュエントリ
NUD_NOARP:行き先キャッシュのないデバイス
NUD_PERMANENT:静的なエントリ
有効な
ndm_flags
は以下の通り:
.TS
tab(:);
l l.
NTF_PROXY:プロクシ arp エントリ
NTF_ROUTER:IPv6 ルータ
(構造体メンバの記述をもうちょっと改良すること)
rtaddr
構造体は、
rta_type
フィールドに応じてそれぞれ以下の意味を持つ:
.TS
tab(:);
l l.
NDA_UNSPEC:未知のタイプ
NDA_DST:近傍キャッシュネットワーク層の行き先アドレス
NDA_LLADDR:近傍キャッシュリンク層のアドレス
NDA_CACHEINFO:キャッシュの統計
rta_type
フィールドが
NDA_CACHEINFO
の場合には、
struct nda_cacheinfo
ヘッダが続く。
-
RTM_NEWRULE
,
RTM_DELRULE
,
RTM_GETRULE
-
ルーティングルールを追加・削除・取得する。
struct rtmsg
を伴う。
-
RTM_NEWQDISC
,
RTM_DELQDISC
,
RTM_GETQDISC
-
キューイングルールを追加・削除・取得する。
このメッセージは
struct tcmsg
を伴い、またそのあとに属性がいくつか続くこともある。
struct tcmsg {
unsigned char tcm_family;
int tcm_ifindex; /* interface index */
__u32 tcm_handle; /* Qdisc handle */
__u32 tcm_parent; /* Parent qdisc */
__u32 tcm_info;
};
.TS
tab(:);
c
l l 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:レート制限
さらに、 qdisc モジュール特有の様々な属性を指定できる。
詳細な情報は適切なインクルードファイルを見よ。
-
RTM_NEWTCLASS
,
RTM_DELTCLASS
,
RTM_GETTCLASS
-
トラフィッククラスを追加・削除・取得する。
これらのメッセージは、上述の
struct tcmsg
を伴う。
-
RTM_NEWTFILTER
,
RTM_DELTFILTER
,
RTM_GETTFILTER
-
トラフィックフィルターの情報を追加・削除・取得する。
これらのメッセージは、上述の
struct tcmsg
を伴う。
バージョン
rtnetlink
は Linux 2.2 の新機能である。
バグ
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする