Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all
名前
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/ に書かれている。