RTNETLINK
Section: Linux Programmer's Manual (7)
Updated: 2020-06-09
Index
JM Home Page
roff page
 
名前
rtnetlink - Linux IPv4 ルーティングソケット
 
書式
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h>
rtnetlink_socket = socket(AF_NETLINK, int socket_type,
NETLINK_ROUTE);
 
説明
rtnetlink はカーネルのルーティングテーブルを読んだり変更したり するためのものである。これはカーネルが内部のサブシステムと
通信するためにも用いられているが、それはここでは記述しない。 この man ページではユーザー空間のプログラムとの通信に関してのみ述べる。
ネットワーク経路・IP アドレス・リンクパラメーター・ 近傍設定 (neighbor 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 である (Linux 3.7 以降では、 RTMGRP_LINK メッセージで 0
以外の値を指定することができ、そのため指定した ifindex でリンクを作成できる)。 ifi_change
は将来の利用のために予約されており、常に 0xFFFFFFFF にセットすべきである。
ルーティング属性
  | 
| 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 | 
下記参照
 | インターフェースの統計
  | 
 - 
IFLA_STATS の値の型は struct rtnl_link_stats (Linux 2.4 以前では struct
net_device_stats) である。
 - RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
 - 
インターフェースの IP アドレスの情報を追加・削除・取得する。 Linux 2.2 では、一つのインターフェースに複数の IP アドレスを
保持させることができ、これは 2.0 の別名デバイスの概念を置き換える。 Linux 2.2 では、これらのメッセージは IPv4 と IPv6
の両方のアドレスをサポートしている。 これらは ifaddrmsg 構造体を伴う。そのあとに rtattr
ルーティング属性が続くこともある。
 - 
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 */
    unsigned 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
なフラグがある。
属性
  | 
| 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 destination */
    unsigned char rtm_src_len;  /* Length of source */
    unsigned char rtm_tos;      /* TOS filter */
    unsigned char rtm_table;    /* Routing table ID;
                                   see RTA_TABLE below */
    unsigned char rtm_protocol; /* Routing protocol; see below */
    unsigned char rtm_scope;    /* See below */
    unsigned char rtm_type;     /* See below */
    unsigned int  rtm_flags;
};
| rtm_type | 経路のタイプ
  | 
  | 
| RTN_UNSPEC | 未知の経路
  | 
| RTN_UNICAST | ゲートウェイまたはダイレクトな経路
  | 
| RTN_LOCAL | ローカルインターフェースの経路
  | 
| RTN_BROADCAST | 
ローカルなブロードキャスト経路 (ブロードキャストとして送信される)
  | 
| RTN_ANYCAST | 
ローカルなブロードキャスト経路 (ユニキャストとして送信される)
  | 
| RTN_MULTICAST | マルチキャスト経路
  | 
| RTN_BLACKHOLE | パケットを捨てる経路
  | 
| RTN_UNREACHABLE | 到達できない行き先
  | 
| RTN_PROHIBIT | パケットを拒否する経路
  | 
| RTN_THROW | 経路探索を別のテーブルで継続
  | 
| RTN_NAT | ネットワークアドレスの変換ルール
  | 
| RTN_XRESOLVE | 
外部レゾルバを参照 (実装されていない)
  | 
| rtm_protocol | 経路の情報源
  | 
  | 
| RTPROT_UNSPEC | 不明
  | 
| RTPROT_REDIRECT | 
ICMP リダイレクトによる (現在は用いられない)
  | 
| RTPROT_KERNEL | カーネルによる
  | 
| RTPROT_BOOT | ブート時
  | 
| RTPROT_STATIC | 管理者による
  | 
RTPROT_STATIC よりも大きな値はカーネルによって解釈されない。これは 単なるユーザーへの情報である。これらは経路情報の情報源を
タグ付けしたり、複数のルーティングデーモンからの情報を 区別するために用いることができる。 既に割り当てられているルーティングデーモンの識別子については
<linux/rtnetlink.h> を見よ。
 - 
rtm_scope は行き先への距離である。
| RT_SCOPE_UNIVERSE | グローバルな経路
  | 
| RT_SCOPE_SITE | 
ローカルな自律システムにおける内部経路
  | 
| RT_SCOPE_LINK | このリンク上の経路
  | 
| RT_SCOPE_HOST | ローカルホスト上の経路
  | 
| RT_SCOPE_NOWHERE | 行き先が存在しない
  | 
ユーザーは RT_SCOPE_UNIVERSE と RT_SCOPE_SITE の間の値を用いることができる。
 - 
rtm_flags は以下の意味を持つ:
| RTM_F_NOTIFY | 
経路が変更されると、 rtnetlink を通してユーザーに通知が行く。
  | 
| RTM_F_CLONED | 経路は他の経路によって複製された。
  | 
| RTM_F_EQUALIZE | マルチパスイコライザ (まだ実装されていない)
  | 
rtm_table ではルーティングテーブルを指定する。
| RT_TABLE_UNSPEC | 指定されていないルーティングテーブル
  | 
| RT_TABLE_DEFAULT | デフォルトのテーブル
  | 
| RT_TABLE_MAIN | メインのテーブル
  | 
| RT_TABLE_LOCAL | ローカルテーブル
  | 
ユーザーは RT_TABLE_UNSPEC と RT_TABLE_DEFAULT.  の間の任意の値を用いることができる。
属性
  | 
| 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   | protocol address   | Preferred source address
  | 
| RTA_METRICS   | int   | 経路のメトリック
  | 
| RTA_MULTIPATH   |    | 
Multipath nexthop data
br
(see below).
  | 
| RTA_PROTOINFO   |    | No longer used
  | 
| RTA_FLOW   | int   | Route realm
  | 
| RTA_CACHEINFO   | struct rta_cacheinfo   | (linux/rtnetlink.h 参照)
  | 
| RTA_SESSION   |    | No longer used
  | 
| RTA_MP_ALGO   |    | No longer used
  | 
| RTA_TABLE   | int   | 
Routing table ID; if set,
 
rtm_table is ignored
  | 
| RTA_MARK   | int   | 
  | 
| RTA_MFC_STATS   | struct rta_mfc_stats   | (linux/rtnetlink.h 参照)
  | 
| RTA_VIA   | struct rtvia   | 
Gateway in different AF
(see below)
  | 
| RTA_NEWDST   | protocol address   | 
パケットの経路の行き先アドレスを変更する
  | 
| RTA_PREF   | char   | 
RFC4191 IPv6 router
preference (see below)
  | 
| RTA_ENCAP_TYPE   | short   | 
Encapsulation type for
 
lwtunnels (下記参照)
  | 
| RTA_ENCAP   |    | Defined by RTA_ENCAP_TYPE
  | 
| RTA_EXPIRES   | int   | 
Expire time for IPv6
routes (in seconds)
  | 
 - 
RTA_MULTIPATH contains several packed instances of struct rtnexthop
together with nested RTAs (RTA_GATEWAY):
 - 
struct rtnexthop {
    unsigned short rtnh_len;     /* Length of struct + length
                                    of RTAs */
    unsigned char  rtnh_flags;   /* Flags (see
                                    linux/rtnetlink.h) */
    unsigned char  rtnh_hops;    /* Nexthop priority */
    int            rtnh_ifindex; /* Interface index for this
                                    nexthop */
}
 - 
There exist a bunch of RTNH_* macros similar to RTA_* and NLHDR_*
macros useful to handle these structures.
 - 
struct rtvia {
    unsigned short rtvia_family;
    unsigned char  rtvia_addr[0];
};
 - 
rtvia_addr is the address, rtvia_family is its family type.
 - 
RTA_PREF may contain values ICMPV6_ROUTER_PREF_LOW,
ICMPV6_ROUTER_PREF_MEDIUM, and ICMPV6_ROUTER_PREF_HIGH defined incw
<linux/icmpv6.h>.
 - 
RTA_ENCAP_TYPE may contain values LWTUNNEL_ENCAP_MPLS,
LWTUNNEL_ENCAP_IP, LWTUNNEL_ENCAP_ILA, or LWTUNNEL_ENCAP_IP6
defined in <linux/lwtunnel.h>.
 - 
(これらの値を埋めること!)
 - RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
 - 
近傍テーブル (neighbor 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 は以下の状態のビットマスクである:
| NUD_INCOMPLETE | 現在レゾルブ中のキャッシュエントリー
  | 
| NUD_REACHABLE | 動作確認済みのキャッシュエントリー
  | 
| NUD_STALE | 期限切れのキャッシュエントリー
  | 
| NUD_DELAY | タイマー待ちのキャッシュエントリー
  | 
| NUD_PROBE | 再確認中のキャッシュエントリー
  | 
| NUD_FAILED | 不正なキャッシュエントリー
  | 
| NUD_NOARP | 行き先キャッシュのないデバイス
  | 
| NUD_PERMANENT | 静的なエントリー
  | 
有効な ndm_flags は以下の通り:
| NTF_PROXY | プロクシ arp エントリー
  | 
| NTF_ROUTER | IPv6 ルータ
  | 
rtattr 構造体は、 rta_type フィールドに応じてそれぞれ以下の意味を持つ:
| 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;
};
属性
  | 
| 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 の新機能である。
 
バグ
このマニュアルは完全ではない。
 
関連項目
cmsg(3), rtnetlink(3), ip(7), netlink(7)
 
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/ に書かれている。
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
- ルーティング属性
 - 
 - メッセージ
 - 
 
 - バージョン
 - 
 - バグ
 - 
 - 関連項目
 - 
 - この文書について
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 16:46:42 GMT, November 24, 2023