--- /dev/null
+.\" This man page is Copyright (c) 1998 by Andi Kleen.
+.\"
+.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
+.\" Subject to the GPL.
+.\" %%%LICENSE_END
+.\"
+.\" Based on the original comments from Alexey Kuznetsov
+.\" Modified 2005-12-27 by Hasso Tepper <hasso@estpak.ee>
+.\" $Id: netlink.7,v 1.8 2000/06/22 13:23:00 ak Exp $
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\"
+.\" Japanese Version Copyright (c) 1999 NAKANO Takeo all rights reserved.
+.\" Translated 1999-12-06 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Updated 2001-04-04 by Yuichi SATO <ysato@h4.dion.ne.jp>, catch up to LDP v1.35
+.\" Updated 2006-06-23 by Yuichi SATO <ysato444@yahoo.co.jp>, catch up to LDP v2.29
+.\"
+.TH NETLINK 7 2020\-06\-09 Linux "Linux Programmer's Manual"
+.SH 名前
+netlink \- カーネルとユーザー空間の通信 (AF_NETLINK)
+.SH 書式
+.nf
+\fB#include <asm/types.h>\fP
+\fB#include <sys/socket.h>\fP
+\fB#include <linux/netlink.h>\fP
+.PP
+\fBnetlink_socket = socket(AF_NETLINK, \fP\fIsocket_type\fP\fB, \fP\fInetlink_family\fP\fB);\fP
+.fi
+.SH 説明
+netlink はカーネルモジュールとユーザー空間のプロセス間で 情報をやりとりするために用いられる。 netlink は、ユーザープロセスに対しては
+標準的なソケットベースのインターフェースを、 カーネルモジュールにはカーネルの内部 API を提供する。 カーネル内部のインターフェースについてはこの
+man ページでは記述しない。 また、netlink キャラクターデバイスを用いた obsolete な netlink
+インターフェースもあるが、これもこの文書では解説しない。 これは過去互換性のためだけに用意されている。
+.PP
+netlink はデータグラム指向のサービスである。 \fIsocket_type\fP には \fBSOCK_RAW\fP と \fBSOCK_DGRAM\fP
+の両方とも指定可能である。 しかし netlink プロトコルはデータグラムと raw ソケットの区別をしない。
+.PP
+\fInetlink_family\fP は、通信するカーネルモジュールや netlink グループの選択に用いる。 現在割り当てられている netlink
+ファミリーは以下の通り。
+.TP
+\fBNETLINK_ROUTE\fP
+ルーティングとリンクの更新を受信する。 (IPv4 と IPv6 両方の) ルーティングテーブル・ IP アドレス・リンクパラメーター・近傍設定
+(neighbor setup)・ キューイングルール (queueing dicipline)・トラフィッククラス・
+パケットのクラス分類の修正に用いることができるだろう (\fBrtnetlink\fP(7) を見よ)。
+.TP
+\fBNETLINK_W1\fP (Linux 2.6.13 から 2.16.17 まで)
+単線 (1\-wire) のサブシステムからのメッセージ。
+.TP
+\fBNETLINK_USERSOCK\fP
+ユーザーモードソケットプロトコルのために予約されている。
+.TP
+\fBNETLINK_FIREWALL\fP (Linux 3.4 以前)
+.\" removed by commit d16cf20e2f2f13411eece7f7fb72c17d141c4a84
+Transport IPv4 packets from netfilter to user space. Used by \fIip_queue\fP
+kernel module. After a long period of being declared obsolete (in favor of
+the more advanced \fInfnetlink_queue\fP feature), \fBNETLINK_FIREWALL\fP was
+removed in Linux 3.5.
+.TP
+\fBNETLINK_SOCK_DIAG\fP (Linux 3.3 以降)
+.\" commit 7f1fb60c4fc9fb29fbb406ac8c4cfb4e59e168d6
+Query information about sockets of various protocol families from the kernel
+(see \fBsock_diag\fP(7)).
+.TP
+\fBNETLINK_INET_DIAG\fP (Linux 2.6.14 以降)
+An obsolete synonym for \fBNETLINK_SOCK_DIAG\fP.
+.TP
+\fBNETLINK_NFLOG\fP (Linux 3.16 以前)
+Netfilter/iptables ULOG.
+.TP
+\fBNETLINK_XFRM\fP
+.\" FIXME More details on NETLINK_XFRM needed.
+IPsec.
+.TP
+\fBNETLINK_SELINUX\fP (Linux 2.6.4 以降)
+SELinux のイベント通知。
+.TP
+\fBNETLINK_ISCSI\fP (Linux 2.6.15 以降)
+.\" FIXME More details on NETLINK_ISCSI needed.
+Open\-iSCSI.
+.TP
+\fBNETLINK_AUDIT\fP (Linux 2.6.6 以降)
+.\" FIXME More details on NETLINK_AUDIT needed.
+監査 (audit) を行う。
+.TP
+\fBNETLINK_FIB_LOOKUP\fP (Linux 2.6.13 以降)
+.\" FIXME More details on NETLINK_FIB_LOOKUP needed.
+ユーザー空間から FIB ルックアップにアクセスする。
+.TP
+\fBNETLINK_CONNECTOR\fP (Linux 2.6.14 以降)
+.\" commit baa293e9544bea71361950d071579f0e4d5713ed
+カーネルコネクタ。より詳しい情報は Linux カーネルソースの \fIDocumentation/driver\-api/connector.rst\fP
+(カーネル 5.2 以前では \fI/Documentation/connector/connector.*\fP) を参照すること。
+.TP
+\fBNETLINK_NETFILTER\fP (Linux 2.6.14 以降)
+.\" FIXME More details on NETLINK_NETFILTER needed.
+netfilter サブシステム。
+.TP
+\fBNETLINK_SCSITRANSPORT\fP (Linux 2.6.19 以降)
+.\" commit 84314fd4740ad73550c76dee4a9578979d84af48
+.\" FIXME More details on NETLINK_SCSITRANSPORT needed.
+SCSI Transports.
+.TP
+\fBNETLINK_RDMA\fP (Linux 3.0 以降)
+.\" commit b2cbae2c248776d81cc265ff7d48405b6a4cc463
+.\" FIXME More details on NETLINK_RDMA needed.
+Infiniband RDMA.
+.TP
+\fBNETLINK_IP6_FW\fP (Linux 3.4 以前)
+IPv6 パケットを netfilter からユーザー空間へ転送する。 \fIip6_queue\fP カーネルモジュールで使用される。
+.TP
+\fBNETLINK_DNRTMSG\fP
+DECnet ルーティングメッセージ。
+.TP
+\fBNETLINK_KOBJECT_UEVENT\fP (Linux 2.6.10 以降)
+.\" FIXME More details on NETLINK_KOBJECT_UEVENT needed.
+ユーザー空間へのカーネルメッセージ
+.TP
+\fBNETLINK_GENERIC\fP (Linux 2.6.15 以降)
+netlink を簡単に使用するための一般的な netlink ファミリー。
+.TP
+\fBNETLINK_CRYPTO\fP (Linux 3.2 以降)
+.\" commit a38f7907b926e4c6c7d389ad96cc38cec2e5a9e9
+.\" Author: Steffen Klassert <steffen.klassert@secunet.com>
+カーネル暗号 API で登録された暗号に関する情報を要求したり、 カーネル暗号 API の設定を行ったりするための netlink インターフェース。
+.PP
+netlink メッセージはバイトストリームからなり、 一つ以上の \fInlmsghdr\fP ヘッダーと、それに対応するペイロード (payload)
+が含まれる。 バイトストリームには、標準の \fBNLMSG_*\fP マクロによってのみアクセスすべきである。 より詳しい情報は \fBnetlink\fP(3)
+を見よ。
+.PP
+マルチパートメッセージ (一つ以上の \fInlmsghdr\fP ヘッダーと、それに対応するペイロードが 一つバイトストリームに含まれる) においては、
+先頭のヘッダー・後続のヘッダーには \fBNLM_F_MULTI\fP フラグがセットされる。ただし最後のヘッダーだけは例外で、 \fBNLMSG_DONE\fP
+タイプとなる。
+.PP
+それぞれの \fBnlmsghdr\fP の後にはペイロードが続く。
+.PP
+.in +4n
+.EX
+struct nlmsghdr {
+ __u32 nlmsg_len; /* ヘッダーを含むメッセージの長さ */
+ __u16 nlmsg_type; /* メッセージの内容のタイプ */
+ __u16 nlmsg_flags; /* 追加フラグ */
+ __u32 nlmsg_seq; /* シーケンス番号 */
+ __u32 nlmsg_pid; /* 送信者のポート ID */
+};
+.EE
+.in
+.PP
+\fInlmsg_type\fP は標準のメッセージタイプのどれか一つである: \fBNLMSG_NOOP\fP メッセージは無視される。
+\fBNLMSG_ERROR\fP メッセージはエラーを示し、ペイロードには \fInlmsgerr\fP 構造体が入る。 \fBNLMSG_DONE\fP
+メッセージはマルチパートメッセージの終了を伝える。
+.PP
+.in +4n
+.EX
+struct nlmsgerr {
+ int error; /* 負または 0 の errno は応答を表す */
+ struct nlmsghdr msg; /* エラーを起こしたメッセージのヘッダー */
+};
+.EE
+.in
+.PP
+ある netlink ファミリーで指定できるメッセージタイプは、 通常もっと多い。これらに関しては適切な man ページを見てほしい。 たとえば
+\fBNETLINK_ROUTE\fP に関しては \fBrtnetlink\fP(7) に書いてある。
+.TS
+tab(:);
+l s
+lB l.
+\fInlmsg_flags\fP の標準フラグビット
+_
+NLM_F_REQUEST:要求メッセージ全てでセットされなければならない。
+NLM_F_MULTI:T{
+このメッセージはマルチパートメッセージの一部である。
+マルチパートメッセージは \fBNLMSG_DONE\fP で終端する。
+T}
+NLM_F_ACK:成功した場合の応答を要求する。
+NLM_F_ECHO:この要求をエコーする。
+.TE
+.\" No right adjustment for text blocks in tables
+.TS
+tab(:);
+l s
+lB l.
+GET 要求における追加フラグビット
+_
+NLM_F_ROOT:単一のエントリーではなくテーブル全体を返す。
+NLM_F_MATCH:T{
+メッセージの内容で渡された基準 (criteria) にマッチする全てのエントリーを返す。
+まだ実装されていない。
+T}
+NLM_F_ATOMIC:テーブルのアトミックなスナップショットを返す。
+NLM_F_DUMP:T{
+便利なマクロ。
+.br
+(NLM_F_ROOT|NLM_F_MATCH) と等価.
+T}
+.TE
+.\" FIXME NLM_F_ATOMIC is not used anymore?
+.PP
+\fBNLM_F_ATOMIC\fP を使う場合は、 \fBCAP_NET_ADMIN\fP 権限を持つか実効ユーザー ID が 0
+でなければならない点に注意すること。
+.TS
+tab(:);
+l s
+lB l.
+NEW 要求における追加フラグビット
+_
+NLM_F_REPLACE:現存のオブジェクトを置換する。
+NLM_F_EXCL:すでにオブジェクトがあったら置換しない。
+NLM_F_CREATE:まだオブジェクトがなければ作成する。
+NLM_F_APPEND:オブジェクトリストの最後に追加する。
+.TE
+.PP
+\fInlmsg_seq\fP と \fInlmsg_pid\fP はメッセージの追跡に使用される。 \fInlmsg_pid\fP はメッセージの送信元を表す。
+メッセージが netlink ソケットで送信されている場合、 \fInlmsg_pid\fP とプロセスの PID は 1:1
+の関係ではない点に注意すること。 より詳しい情報は、 「\fBアドレスのフォーマット\fP」 のセクションを参照すること。
+.PP
+.\" FIXME Explain more about nlmsg_seq and nlmsg_pid.
+\fInlmsg_seq\fP と \fInlmsg_pid\fP は netlink のコアには見えない (opaque)。
+.PP
+netlink は信頼性の高いプロトコルではない。 netlink はメッセージを行き先に届けるために最善を尽くすが、
+メモリーが足りなかったりエラーが起こったりすると メッセージを取りこぼすこともある。 信頼性の高い転送を行いたいときは、
+送信者は受信者に応答を要求することもできる。 これには \fBNLM_F_ACK\fP フラグをセットする。 応答は \fBNLMSG_ERROR\fP
+パケットのエラーフィールドを 0 にしたものになる。 アプリケーションは自分自身のメッセージを受けたときには、 応答を生成しなければならない。
+カーネルは失敗したパケットに対して、 \fBNLMSG_ERROR\fP メッセージを送ろうとする。 ユーザープロセスはこの慣習にも従う必要がある。
+.PP
+しかし、どのような場合でもカーネルからユーザーへの 信頼性の高い転送は不可能である。 ソケットバッファーが満杯の場合、カーネルは netlink
+メッセージを送信できない。 メッセージは取りこぼされて、カーネルとユーザー空間プロセスは、 カーネルの状態についての同じビューを持つことができなくなる。
+これが起こったこと (\fBrecvmsg\fP(2) によって \fBENOBUFS\fP エラーが返される) を検知して再び同期させるのは、
+アプリケーションの責任である。
+.SS アドレスのフォーマット
+\fIsockaddr_nl\fP 構造体はユーザー空間やカーネル空間で netlink クライアントを記述する。 \fIsockaddr_nl\fP
+はユニキャスト (単一の接続先にだけ送られる) にもできるし、 netlink マルチキャストグループ (\fInl_groups\fP が 0 でない場合)
+にも送ることができる。
+.PP
+.in +4n
+.EX
+struct sockaddr_nl {
+ sa_family_t nl_family; /* AF_NETLINK */
+ unsigned short nl_pad; /* 0 である */
+ pid_t nl_pid; /* ポート ID */
+ __u32 nl_groups; /* マルチキャストグループマスク */
+};
+.EE
+.in
+.PP
+\fInl_pid\fP は netlink ソケットのユニキャストアドレスである。 行き先がカーネルの場合は、常に 0 である。
+ユーザー空間プロセスの場合、通常は \fInl_pid\fP は行き先のソケットを所有しているプロセスの PID である。 ただし、 \fInl_pid\fP
+はプロセスではなく netlink ソケットを同定する。 プロセスが複数の netlink ソケットを所有する場合、 \fInl_pid\fP
+は最大でも一つのソケットのプロセス ID としか等しくならない。 \fInl_pid\fP を netlink ソケットに割り当てる方法は 2 つある。
+アプリケーションが \fBbind\fP(2) を呼ぶ前に \fInl_pid\fP を設定する場合、 \fInl_pid\fP
+が一意であることを確認するのはアプリケーションの責任となる。 アプリケーションが \fInl_pid\fP を 0
+に設定した場合、カーネルがこの値を割り当てる。 カーネルはプロセスが最初にオープンした netlink ソケットに対してプロセス ID を割り当て、
+それ以降にプロセスが作成した全ての netlink ソケットにも一意な \fInl_pid\fP を割り当てる。
+.PP
+.\" commit d629b836d151d43332492651dd841d32e57ebe3b
+\fInl_groups\fP はビットマスクで、すべてのビットが netlink グループ番号を表す。
+それぞれの netlink ファミリーは 32 のマルチキャストグループのセットを持つ。
+それぞれの netlink ファミリーは 32 のマルチキャストグループの セットを持つ。
+\fBbind\fP(2) がソケットに対して呼ばれると、 \fIsockaddr_nl\fP の \fInl_groups\fP
+フィールドには listen したいグループのビットマスクがセットされる。
+デフォルトの値は 0 で、マルチキャストを一切受信しない。
+\fBsendmsg\fP(2) や \fBconnect\fP(2) によって、あるソケットからメッセージを
+マルチキャストしたいときは、 \fInl_groups\fP に送信したいグループのビットマスク
+をセットすればよい。
+netlink マルチキャストグループに送信したり、これを listen したりできるのは、
+実効ユーザー ID が 0 のプロセスか、 \fBCAP_NET_ADMIN\fP 権限を持つプロセスのみである。
+Linux 2.6.13 以降では、メッセージを複数のグループへのブロードキャストすることはできない。
+マルチキャストグループ向けメッセージを受信した場合、これ対する応答は
+送り主の PID とマルチキャストグループとに送り返すべきである。
+さらに、Linux のカーネルサブシステムによっては、
+他のユーザーもメッセージの送受信ができる場合がある。
+Linux 3.0 の時点では、
+\fBNETLINK_KOBJECT_UEVENT\fP, \fBNETLINK_GENERIC\fP, \fBNETLINK_ROUTE\fP,
+\fBNETLINK_SELINUX\fP グループでは他のユーザーがメッセージを受信することができる。
+他のユーザーがメッセージを送信できるグループは存在しない。
+.PP
+.SS ソケットオプション
+To set or get a netlink socket option, call \fBgetsockopt\fP(2) to read or
+\fBsetsockopt\fP(2) to write the option with the option level argument set to
+\fBSOL_NETLINK\fP. Unless otherwise noted, \fIoptval\fP is a pointer to an
+\fIint\fP.
+.TP
+\fBNETLINK_PKTINFO\fP (Linux 2.6.14 以降)
+.\" commit 9a4595bc7e67962f13232ee55a64e063062c3a99
+.\" Author: Patrick McHardy <kaber@trash.net>
+Enable \fBnl_pktinfo\fP control messages for received packets to get the
+extended destination group number.
+.TP
+\fBNETLINK_ADD_MEMBERSHIP\fP,\ \fBNETLINK_DROP_MEMBERSHIP\fP (Linux 2.6.14 以降)
+.\" commit 9a4595bc7e67962f13232ee55a64e063062c3a99
+.\" Author: Patrick McHardy <kaber@trash.net>
+Join/leave a group specified by \fIoptval\fP.
+.TP
+\fBNETLINK_LIST_MEMBERSHIPS\fP (Linux 4.2 以降)
+.\" commit b42be38b2778eda2237fc759e55e3b698b05b315
+.\" Author: David Herrmann <dh.herrmann@gmail.com>
+Retrieve all groups a socket is a member of. \fIoptval\fP is a pointer to
+\fB__u32\fP and \fIoptlen\fP is the size of the array. The array is filled with
+the full membership set of the socket, and the required array size is
+returned in \fIoptlen\fP.
+.TP
+\fBNETLINK_BROADCAST_ERROR\fP (Linux 2.6.30 以降)
+.\" commit be0c22a46cfb79ab2342bb28fde99afa94ef868e
+.\" Author: Pablo Neira Ayuso <pablo@netfilter.org>
+When not set, \fBnetlink_broadcast()\fP only reports \fBESRCH\fP errors and
+silently ignore \fBENOBUFS\fP errors.
+.TP
+\fBNETLINK_NO_ENOBUFS\fP (Linux 2.6.30 以降)
+.\" commit 38938bfe3489394e2eed5e40c9bb8f66a2ce1405
+.\" Author: Pablo Neira Ayuso <pablo@netfilter.org>
+This flag can be used by unicast and broadcast listeners to avoid receiving
+\fBENOBUFS\fP errors.
+.TP
+\fBNETLINK_LISTEN_ALL_NSID\fP (Linux 4.2 以降)
+.\" commit 59324cf35aba5336b611074028777838a963d03b
+.\" Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
+When set, this socket will receive netlink notifications from all network
+namespaces that have an \fInsid\fP assigned into the network namespace where
+the socket has been opened. The \fInsid\fP is sent to user space via an
+ancillary data.
+.TP
+\fBNETLINK_CAP_ACK\fP (Linux 4.2 以降)
+.\" commit 0a6a3a23ea6efde079a5b77688541a98bf202721
+.\" Author: Christophe Ricard <christophe.ricard@gmail.com>
+The kernel may fail to allocate the necessary room for the acknowledgment
+message back to user space. This option trims off the payload of the
+original netlink message. The netlink message header is still included, so
+the user can guess from the sequence number which message triggered the
+acknowledgment.
+.SH バージョン
+netlink へのソケットインターフェースは Linux 2.2 で初めて登場した。
+.PP
+Linux 2.0 は、もっと原始的なデバイスベースの netlink インターフェースを サポートしていた (これも互換性のために今でも使用できる)。
+古いインターフェースに関してはここでは記述しない。
+.SH 注意
+低レベルのカーネルインターフェースより、 \fIlibnetlink\fP または \fIlibnl\fP を通して netlink
+を利用するほうが良いことが多い。
+.SH バグ
+この man ページは完成していない。
+.SH 例
+以下の例では、 \fBRTMGRP_LINK\fP (ネットワークインターフェースの create/delete/up/down イベント) と
+\fBRTMGRP_IPV4_IFADDR\fP (IPv4 アドレスの add/delete イベント) マルチキャストグループを listen する
+\fBNETLINK_ROUTE\fP netlink を作成している。
+.PP
+.in +4n
+.EX
+struct sockaddr_nl sa;
+
+memset(&sa, 0, sizeof(sa));
+sa.nl_family = AF_NETLINK;
+sa.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR;
+
+fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+bind(fd, (struct sockaddr *) &sa, sizeof(sa));
+.EE
+.in
+.PP
+次の例では、netlink メッセージをカーネル (pid 0) に送る方法を示している。 応答を追跡する際の信頼性を高めるために、アプリケーションが
+メッセージのシーケンス番号を正しく処理しなければならない点に注意すること。
+.PP
+.in +4n
+.EX
+struct nlmsghdr *nh; /* 送信する nlmsghdr とペイロード */
+struct sockaddr_nl sa;
+struct iovec iov = { nh, nh\->nlmsg_len };
+struct msghdr msg;
+
+msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
+memset(&sa, 0, sizeof(sa));
+sa.nl_family = AF_NETLINK;
+nh\->nlmsg_pid = 0;
+nh\->nlmsg_seq = ++sequence_number;
+/* NLM_F_ACK を設定することで、カーネルに応答を要求する */
+nh\->nlmsg_flags |= NLM_F_ACK;
+
+sendmsg(fd, &msg, 0);
+.EE
+.in
+.PP
+最後は、netlink メッセージの読み込みの例である。
+.PP
+.in +4n
+.EX
+int len;
+/* 8192 to avoid message truncation on platforms with
+ page size > 4096 */
+struct nlmsghdr buf[8192/sizeof(struct nlmsghdr)];
+struct iovec iov = { buf, sizeof(buf) };
+struct sockaddr_nl sa;
+struct msghdr msg;
+struct nlmsghdr *nh;
+
+msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
+len = recvmsg(fd, &msg, 0);
+
+for (nh = (struct nlmsghdr *) buf; NLMSG_OK (nh, len);
+ nh = NLMSG_NEXT (nh, len)) {
+ /* マルチパートメッセージの終わり */
+ if (nh\->nlmsg_type == NLMSG_DONE)
+ return;
+
+ if (nh\->nlmsg_type == NLMSG_ERROR)
+ /* 何らかのエラー処理を行う */
+ ...
+
+ /* ペイロードの解析を続ける */
+ ...
+}
+.EE
+.in
+.SH 関連項目
+\fBcmsg\fP(3), \fBnetlink\fP(3), \fBcapabilities\fP(7), \fBrtnetlink\fP(7),
+\fBsock_diag\fP(7)
+.PP
+.UR ftp://ftp.inr.ac.ru\:/ip\-routing\:/iproute2*
+libnetlink に関する情報
+.UE
+.PP
+.UR http://www.infradead.org\:/\(titgr\:/libnl/
+libnl に関する情報
+.UE
+.PP
+RFC 3549 "Linux Netlink as an IP Services Protocol"
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
+\%https://www.kernel.org/doc/man\-pages/ に書かれている。
--- /dev/null
+.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
+.\"
+.\" %%%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 <nakano@apm.seikei.ac.jp>
+.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-05-04, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH RTNETLINK 7 2020\-06\-09 Linux "Linux Programmer's Manual"
+.SH 名前
+rtnetlink \- Linux IPv4 ルーティングソケット
+.SH 書式
+\fB#include <asm/types.h>\fP
+.br
+\fB#include <linux/netlink.h>\fP
+.br
+\fB#include <linux/rtnetlink.h>\fP
+.br
+\fB#include <sys/socket.h>\fP
+.PP
+\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 メッセージには、初期ヘッダーの後に付加的な属性を 持つものがある。
+.PP
+.in +4n
+.EX
+struct rtattr {
+ unsigned short rta_len; /* Length of option */
+ unsigned short rta_type; /* Type of option */
+ /* Data follows */
+};
+.EE
+.in
+.PP
+これらの属性の操作は、 RTA_* マクロか libnetlink のみを使って行うべきである。 \fBrtnetlink\fP(3) を見よ。
+.SS メッセージ
+rtnetlink は (標準的な netlink メッセージに加えて) 以下のメッセージタイプから構成される。
+.TP
+\fBRTM_NEWLINK\fP, \fBRTM_DELLINK\fP, \fBRTM_GETLINK\fP
+指定したネットワークインターフェースの情報を、生成・削除・取得する。 これらのメッセージは \fIifinfomsg\fP 構造体と、それに続いていくつかの
+\fIrtattr\fP 構造体を伴う。
+.IP
+.EX
+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 */
+};
+.EE
+.IP
+.\" 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
+lb 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
+.IP
+\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
+ルーティング属性が続くこともある。
+.IP
+.EX
+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 */
+};
+.EE
+.IP
+\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
+lb 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 を入れると、ワイルドカードを意味する。
+.IP
+.EX
+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;
+};
+.EE
+.TS
+tab(:);
+lb 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(:);
+lb l.
+rtm_protocol:経路の情報源
+_
+RTPROT_UNSPEC:不明
+RTPROT_REDIRECT:T{
+ICMP リダイレクトによる (現在は用いられない)
+T}
+RTPROT_KERNEL:カーネルによる
+RTPROT_BOOT:ブート時
+RTPROT_STATIC:管理者による
+.TE
+.sp 1
+\fBRTPROT_STATIC\fP よりも大きな値はカーネルによって解釈されない。これは 単なるユーザーへの情報である。これらは経路情報の情報源を
+タグ付けしたり、複数のルーティングデーモンからの情報を 区別するために用いることができる。 既に割り当てられているルーティングデーモンの識別子については
+\fI<linux/rtnetlink.h>\fP を見よ。
+.IP
+\fIrtm_scope\fP は行き先への距離である。
+.TS
+tab(:);
+lb l.
+RT_SCOPE_UNIVERSE:グローバルな経路
+RT_SCOPE_SITE:T{
+ローカルな自律システムにおける内部経路
+T}
+RT_SCOPE_LINK:このリンク上の経路
+RT_SCOPE_HOST:ローカルホスト上の経路
+RT_SCOPE_NOWHERE:行き先が存在しない
+.TE
+.sp 1
+ユーザーは \fBRT_SCOPE_UNIVERSE\fP と \fBRT_SCOPE_SITE\fP の間の値を用いることができる。
+.IP
+\fIrtm_flags\fP は以下の意味を持つ:
+.TS
+tab(:);
+lb l.
+RTM_F_NOTIFY:T{
+経路が変更されると、 rtnetlink を通してユーザーに通知が行く。
+T}
+RTM_F_CLONED:経路は他の経路によって複製された。
+RTM_F_EQUALIZE:マルチパスイコライザ (まだ実装されていない)
+.TE
+.sp 1
+\fIrtm_table\fP ではルーティングテーブルを指定する。
+.TS
+tab(:);
+lb l.
+RT_TABLE_UNSPEC:指定されていないルーティングテーブル
+RT_TABLE_DEFAULT:デフォルトのテーブル
+RT_TABLE_MAIN:メインのテーブル
+RT_TABLE_LOCAL:ローカルテーブル
+.TE
+.sp 1
+.\" Keep table on same page
+ユーザーは \fBRT_TABLE_UNSPEC\fP と \fBRT_TABLE_DEFAULT\fP. の間の任意の値を用いることができる。
+.bp +1
+.TS
+tab(:);
+c s s
+lb2 l2 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:protocol address:Preferred source address
+RTA_METRICS:int:経路のメトリック
+RTA_MULTIPATH::T{
+Multipath nexthop data
+br
+(see below).
+T}
+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:T{
+Routing table ID; if set,
+.br
+rtm_table is ignored
+T}
+RTA_MARK:int:
+RTA_MFC_STATS:struct rta_mfc_stats:(linux/rtnetlink.h 参照)
+RTA_VIA:struct rtvia:T{
+Gateway in different AF
+(see below)
+T}
+RTA_NEWDST:protocol address:T{
+パケットの経路の行き先アドレスを変更する
+T}
+RTA_PREF:char:T{
+RFC4191 IPv6 router
+preference (see below)
+T}
+RTA_ENCAP_TYPE:short:T{
+Encapsulation type for
+.br
+lwtunnels (下記参照)
+T}
+RTA_ENCAP::Defined by RTA_ENCAP_TYPE
+RTA_EXPIRES:int:T{
+Expire time for IPv6
+routes (in seconds)
+T}
+.TE
+.IP
+\fBRTA_MULTIPATH\fP contains several packed instances of \fIstruct rtnexthop\fP
+together with nested RTAs (\fBRTA_GATEWAY\fP):
+.IP
+.in +4n
+.EX
+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 */
+}
+.EE
+.in
+.IP
+There exist a bunch of \fBRTNH_*\fP macros similar to \fBRTA_*\fP and \fBNLHDR_*\fP
+macros useful to handle these structures.
+.IP
+.in +4n
+.EX
+struct rtvia {
+ unsigned short rtvia_family;
+ unsigned char rtvia_addr[0];
+};
+.EE
+.in
+.IP
+\fIrtvia_addr\fP is the address, \fIrtvia_family\fP is its family type.
+.IP
+\fBRTA_PREF\fP may contain values \fBICMPV6_ROUTER_PREF_LOW\fP,
+\fBICMPV6_ROUTER_PREF_MEDIUM\fP, and \fBICMPV6_ROUTER_PREF_HIGH\fP defined incw
+\fI<linux/icmpv6.h>\fP.
+.IP
+\fBRTA_ENCAP_TYPE\fP may contain values \fBLWTUNNEL_ENCAP_MPLS\fP,
+\fBLWTUNNEL_ENCAP_IP\fP, \fBLWTUNNEL_ENCAP_ILA\fP, or \fBLWTUNNEL_ENCAP_IP6\fP
+defined in \fI<linux/lwtunnel.h>\fP.
+.IP
+\fB(これらの値を埋めること!)\fP
+.TP
+\fBRTM_NEWNEIGH\fP, \fBRTM_DELNEIGH\fP, \fBRTM_GETNEIGH\fP
+近傍テーブル (neighbor table) のエントリー (例えば ARP エントリー) の情報を追加・削除・取得する。 このメッセージは
+\fIndmsg\fP 構造体を伴う。
+.IP
+.EX
+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;
+};
+.EE
+.IP
+\fIndm_state\fP は以下の状態のビットマスクである:
+.TS
+tab(:);
+lb l.
+NUD_INCOMPLETE:現在レゾルブ中のキャッシュエントリー
+NUD_REACHABLE:動作確認済みのキャッシュエントリー
+NUD_STALE:期限切れのキャッシュエントリー
+NUD_DELAY:タイマー待ちのキャッシュエントリー
+NUD_PROBE:再確認中のキャッシュエントリー
+NUD_FAILED:不正なキャッシュエントリー
+NUD_NOARP:行き先キャッシュのないデバイス
+NUD_PERMANENT:静的なエントリー
+.TE
+.sp 1
+有効な \fIndm_flags\fP は以下の通り:
+.TS
+tab(:);
+lb l.
+NTF_PROXY:プロクシ arp エントリー
+NTF_ROUTER:IPv6 ルータ
+.TE
+.sp 1
+.\" FIXME .
+.\" document the members of the struct better
+\fIrtattr\fP 構造体は、 \fIrta_type\fP フィールドに応じてそれぞれ以下の意味を持つ:
+.TS
+tab(:);
+lb l.
+NDA_UNSPEC:未知のタイプ
+NDA_DST:近傍キャッシュネットワーク層の行き先アドレス
+NDA_LLADDR:近傍キャッシュリンク層のアドレス
+NDA_CACHEINFO:キャッシュの統計
+.TE
+.sp 1
+\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 を伴い、またそのあとに属性がいくつか続くこともある。
+.IP
+.EX
+struct tcmsg {
+ unsigned char tcm_family;
+ int tcm_ifindex; /* interface index */
+ __u32 tcm_handle; /* Qdisc handle */
+ __u32 tcm_parent; /* Parent qdisc */
+ __u32 tcm_info;
+};
+.EE
+.TS
+tab(:);
+c s s
+lb2 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
+.sp 1
+さらに、 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 プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
+\%https://www.kernel.org/doc/man\-pages/ に書かれている。