OSDN Git Service

(split) LDP: Update release pages.
[linuxjm/LDP_man-pages.git] / release / man3 / rtnetlink.3
1 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
2 .\" Permission is granted to distribute possibly modified copies
3 .\" of this page provided the header is included verbatim,
4 .\" and in case of nontrivial modification author and date
5 .\" of the modification is added to the header.
6 .\" $Id: rtnetlink.3,v 1.2 1999/05/18 10:35:10 freitag Exp $
7 .\"*******************************************************************
8 .\"
9 .\" This file was generated with po4a. Translate the source file.
10 .\"
11 .\"*******************************************************************
12 .TH RTNETLINK 3 2012\-03\-24 GNU "Linux Programmer's Manual"
13 .SH 名前
14 rtnetlink \- rtnetlink メッセージを操作するマクロ
15 .SH 書式
16 \fB#include <asm/types.h>\fP
17 .br
18 \fB#include <linux/netlink.h>\fP
19 .br
20 \fB#include <linux/rtnetlink.h>\fP
21 .br
22 \fB#include <sys/socket.h>\fP
23
24 \fBrtnetlink_socket = socket(AF_NETLINK, int \fP\fIsocket_type\fP\fB,
25 NETLINK_ROUTE);\fP
26 .sp
27 \fBint RTA_OK(struct rtattr *\fP\fIrta\fP\fB, int \fP\fIrtabuflen\fP\fB);\fP
28 .sp
29 \fBvoid *RTA_DATA(struct rtattr *\fP\fIrta\fP\fB);\fP
30 .sp
31 \fBunsigned int RTA_PAYLOAD(struct rtattr *\fP\fIrta\fP\fB);\fP
32 .sp
33 \fBstruct rtattr *RTA_NEXT(struct rtattr *\fP\fIrta\fP\fB, unsigned int
34 \fP\fIrtabuflen\fP\fB);\fP
35 .sp
36 \fBunsigned int RTA_LENGTH(unsigned int \fP\fIlength\fP\fB);\fP
37 .sp
38 \fBunsigned int RTA_SPACE(unsigned int \fP\fIlength\fP\fB);\fP
39 .SH 説明
40 全ての \fBrtnetlink\fP(7)  メッセージは \fBnetlink\fP(7)  メッセージヘッダと追加属性からなる。
41 属性の操作は、必ずここに挙げたマクロを通して行うべきである。
42 .PP
43 \fBRTA_OK(\fP\fIrta\fP\fB, \fP\fIattrlen\fP\fB)\fP は \fIrta\fP が有効なルーティング属性へのポインタであれば真を返す。
44 \fIattrlen\fP は属性バッファの実働時の長さ (running length) である。 真でなければ、例え \fIattrlen\fP
45 がゼロでなくても、 メッセージ中にはもうそれ以上属性は無いと考えなければならない。
46 .PP
47 \fBRTA_DATA(\fP\fIrta\fP\fB)\fP はこの属性データの先頭へのポインタを返す。
48 .PP
49 \fBRTA_PAYLOAD(\fP\fIrta\fP\fB)\fP はこの属性データの長さを返す。
50 .PP
51 \fBRTA_NEXT(\fP\fIrta\fP\fB, \fP\fIattrlen\fP\fB)\fP は \fIrta\fP の次にある属性を取得する。 このマクロを呼ぶと
52 \fIattrlen\fP が更新される。 \fBRTA_OK\fP を使って、返されたポインタが正しいかをチェックすべきである。
53 .PP
54 \fBRTA_LENGTH(\fP\fIlen\fP\fB)\fP は \fIlen\fP バイトのデータ + ヘッダに必要な長さを返す。
55 .PP
56 \fBRTA_SPACE(\fP\fIlen\fP\fB)\fP は \fIlen\fP バイトのデータを持つメッセージに必要とされる容量を返す。
57 .SH 準拠
58 これらのマクロは非標準で、Linux での拡張である。
59 .SH バグ
60 このマニュアルは完全ではない。
61 .SH 例
62
63 .\" FIXME ? would be better to use libnetlink in the EXAMPLE code here
64 デバイスの MTU をセットする rtnetlink メッセージを生成する
65 .nf
66     #include <linux/rtnetlink.h>
67
68     ...
69
70     struct {
71         struct nlmsghdr  nh;
72         struct ifinfomsg if;
73         char             attrbuf[512];
74     } req;
75
76     struct rtattr *rta;
77     unsigned int mtu = 1000;
78
79     int rtnetlink_sk = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
80
81     memset(&req, 0, sizeof(req));
82     req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
83     req.nh.nlmsg_flags = NLM_F_REQUEST;
84     req.nh.nlmsg_type = RTM_NEWLINK;
85     req.if.ifi_family = AF_UNSPEC;
86     req.if.ifi_index = INTERFACE_INDEX;
87     req.if.ifi_change = 0xffffffff; /* ??? */
88     rta = (struct rtattr *)(((char *) &req) +
89                              NLMSG_ALIGN(req.nh.nlmsg_len));
90     rta\->rta_type = IFLA_MTU;
91     rta\->rta_len = RTA_LENGTH(sizeof(unsigned int));
92     req.n.nlmsg_len = NLMSG_ALIGN(req.nh.nlmsg_len) +
93                                   RTA_LENGTH(sizeof(mtu));
94     memcpy(RTA_DATA(rta), &mtu, sizeof(mtu));
95     send(rtnetlink_sk, &req, req.nh.nlmsg_len);
96 .fi
97 .SH 関連項目
98 \fBnetlink\fP(3), \fBnetlink\fP(7), \fBrtnetlink\fP(7)
99 .SH この文書について
100 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
101 である。プロジェクトの説明とバグ報告に関する情報は
102 http://www.kernel.org/doc/man\-pages/ に書かれている。