Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all bug

名前

       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_GETROUTErtm_dst_lenrtm_src_len に 0 をセットすると、 指定されたルーティングテーブルの全
              てのエントリーを所得する。  rtm_tablertm_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_UNIVERSERT_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_UNSPECRT_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/ に書かれている。