OSDN Git Service

2eefb294a57044fbfe07d5807a8756d539d341d8
[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.3 1999/08/20 04:10:17 nakano Exp $
7 .\"
8 .\" Japanese Version Copyright (c) 1999 Shouichi Saito
9 .\"     all rights reserved.
10 .\" Translated Mon Jul 26 12:18:39 JST 1999
11 .\"     by Shouichi Saito <ss236rx@ymg.urban.ne.jp>
12 .\" Proofed Fri Aug 20 1999 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
13 .\"
14 .\"WORD:        running length  実動時の長さ
15 .\"
16 .TH RTNETLINK 3 2010-01-11 "GNU" "Linux Programmer's Manual"
17 .SH 名前
18 rtnetlink \- rtnetlink メッセージを操作するマクロ
19 .SH 書式
20 .B #include <asm/types.h>
21 .br
22 .B #include <linux/netlink.h>
23 .br
24 .B #include <linux/rtnetlink.h>
25 .br
26 .B #include <sys/socket.h>
27
28 .BI "rtnetlink_socket = socket(AF_NETLINK, int " socket_type \
29 ", NETLINK_ROUTE);"
30 .sp
31 .BI "int RTA_OK(struct rtattr *" rta ", int " rtabuflen );
32 .sp
33 .BI "void *RTA_DATA(struct rtattr *" rta );
34 .sp
35 .BI "unsigned int RTA_PAYLOAD(struct rtattr *" rta );
36 .sp
37 .BI "struct rtattr *RTA_NEXT(struct rtattr *" rta \
38 ", unsigned int " rtabuflen );
39 .sp
40 .BI "unsigned int RTA_LENGTH(unsigned int " length );
41 .sp
42 .BI "unsigned int RTA_SPACE(unsigned int "length );
43 .SH 説明
44 全ての
45 .BR rtnetlink (7)
46 メッセージは
47 .BR netlink (7)
48 メッセージヘッダと追加属性からなる。
49 属性の操作は、必ずここに挙げたマクロを通して行うべきである。
50 .PP
51 .BI RTA_OK( rta ", " attrlen )
52
53 .I rta
54 が有効なルーティング属性へのポインタであれば真を返す。
55 .I attrlen
56 は属性バッファの実働時の長さ (running length) である。
57 真でなければ、例え
58 .I attrlen
59 がゼロでなくても、
60 メッセージ中にはもうそれ以上属性は無いと考えなければならない。
61 .PP
62 .BI RTA_DATA( rta )
63 はこの属性データの先頭へのポインタを返す。
64 .PP
65 .BI RTA_PAYLOAD( rta )
66 はこの属性データの長さを返す。
67 .PP
68 .BI RTA_NEXT( rta ", " attrlen )
69
70 .I rta
71 の次にある属性を取得する。
72 このマクロを呼ぶと
73 .I attrlen
74 が更新される。
75 .B RTA_OK
76 を使って、返されたポインタが正しいかをチェックすべきである。
77 .PP
78 .BI RTA_LENGTH( len )
79
80 .I len
81 バイトのデータ + ヘッダに必要な長さを返す。
82 .PP
83 .BI RTA_SPACE( len )
84
85 .I len
86 バイトのデータを持つメッセージに必要とされる容量を返す。
87 .SH 準拠
88 これらのマクロは非標準で、Linux での拡張である。
89 .SH バグ
90 このマニュアルは完全ではない。
91 .SH 例
92 .\" FIXME ? would be better to use libnetlink in the EXAMPLE code here
93 デバイスの MTU をセットする rtnetlink メッセージを生成する
94 .nf
95     #include <linux/rtnetlink.h>
96
97     ...
98
99     struct {
100         struct nlmsghdr  nh;
101         struct ifinfomsg if;
102         char             attrbuf[512];
103     } req;
104
105     struct rtattr *rta;
106     unsigned int mtu = 1000;
107
108     int rtnetlink_sk = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
109
110     memset(&req, 0, sizeof(req));
111     req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
112     req.nh.nlmsg_flags = NLM_F_REQUEST;
113     req.nh.nlmsg_type = RTM_NEWLINK;
114     req.if.ifi_family = AF_UNSPEC;
115     req.if.ifi_index = INTERFACE_INDEX;
116     req.if.ifi_change = 0xffffffff; /* ??? */
117     rta = (struct rtattr *)(((char *) &req) +
118                              NLMSG_ALIGN(req.nh.nlmsg_len));
119     rta\->rta_type = IFLA_MTU;
120     rta\->rta_len = sizeof(unsigned int);
121     req.n.nlmsg_len = NLMSG_ALIGN(req.nh.nlmsg_len) +
122                                   RTA_LENGTH(sizeof(mtu));
123     memcpy(RTA_DATA(rta), &mtu, sizeof(mtu));
124     send(rtnetlink_sk, &req, req.nh.nlmsg_len);
125 .fi
126 .SH 関連項目
127 .BR netlink (3),
128 .BR netlink (7),
129 .BR rtnetlink (7)