]>
Commit | Line | Data |
---|---|---|
77117f4f | 1 | .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>. |
2297bf0e | 2 | .\" |
00acdba1 | 3 | .\" %%%LICENSE_START(VERBATIM_ONE_PARA) |
77117f4f MK |
4 | .\" Permission is granted to distribute possibly modified copies |
5 | .\" of this page provided the header is included verbatim, | |
6 | .\" and in case of nontrivial modification author and date | |
7 | .\" of the modification is added to the header. | |
8ff7380d | 8 | .\" %%%LICENSE_END |
a5e73dd4 | 9 | .\" |
77117f4f | 10 | .\" $Id: rtnetlink.3,v 1.2 1999/05/18 10:35:10 freitag Exp $ |
a5e73dd4 | 11 | .\" |
4c1c5274 | 12 | .TH rtnetlink 3 (date) "Linux man-pages (unreleased)" |
77117f4f MK |
13 | .SH NAME |
14 | rtnetlink \- macros to manipulate rtnetlink messages | |
f4da7fa4 AC |
15 | .SH LIBRARY |
16 | Standard C library | |
8fc3b2cf | 17 | .RI ( libc ", " \-lc ) |
77117f4f | 18 | .SH SYNOPSIS |
511bb71b | 19 | .nf |
77117f4f | 20 | .B #include <asm/types.h> |
77117f4f | 21 | .B #include <linux/netlink.h> |
77117f4f | 22 | .B #include <linux/rtnetlink.h> |
77117f4f | 23 | .B #include <sys/socket.h> |
f90f031e | 24 | .PP |
d4c8c97c | 25 | .BI "rtnetlink_socket = socket(AF_NETLINK, int " socket_type \ |
77117f4f | 26 | ", NETLINK_ROUTE);" |
68e4db0a | 27 | .PP |
77117f4f | 28 | .BI "int RTA_OK(struct rtattr *" rta ", int " rtabuflen ); |
68e4db0a | 29 | .PP |
77117f4f | 30 | .BI "void *RTA_DATA(struct rtattr *" rta ); |
77117f4f | 31 | .BI "unsigned int RTA_PAYLOAD(struct rtattr *" rta ); |
68e4db0a | 32 | .PP |
77117f4f MK |
33 | .BI "struct rtattr *RTA_NEXT(struct rtattr *" rta \ |
34 | ", unsigned int " rtabuflen ); | |
68e4db0a | 35 | .PP |
77117f4f | 36 | .BI "unsigned int RTA_LENGTH(unsigned int " length ); |
77117f4f | 37 | .BI "unsigned int RTA_SPACE(unsigned int "length ); |
511bb71b | 38 | .fi |
77117f4f MK |
39 | .SH DESCRIPTION |
40 | All | |
41 | .BR rtnetlink (7) | |
42 | messages consist of a | |
43 | .BR netlink (7) | |
44 | message header and appended attributes. | |
33a0ccb2 | 45 | The attributes should be manipulated only using the macros provided here. |
77117f4f MK |
46 | .PP |
47 | .BI RTA_OK( rta ", " attrlen ) | |
48 | returns true if | |
49 | .I rta | |
50 | points to a valid routing attribute; | |
51 | .I attrlen | |
52 | is the running length of the attribute buffer. | |
53 | When not true then you must assume there are no more attributes in the | |
54 | message, even if | |
55 | .I attrlen | |
c7094399 | 56 | is nonzero. |
77117f4f MK |
57 | .PP |
58 | .BI RTA_DATA( rta ) | |
59 | returns a pointer to the start of this attribute's data. | |
60 | .PP | |
61 | .BI RTA_PAYLOAD( rta ) | |
62 | returns the length of this attribute's data. | |
63 | .PP | |
64 | .BI RTA_NEXT( rta ", " attrlen ) | |
65 | gets the next attribute after | |
66 | .IR rta . | |
67 | Calling this macro will update | |
68 | .IR attrlen . | |
69 | You should use | |
70 | .B RTA_OK | |
71 | to check the validity of the returned pointer. | |
72 | .PP | |
73 | .BI RTA_LENGTH( len ) | |
74 | returns the length which is required for | |
75 | .I len | |
76 | bytes of data plus the header. | |
77 | .PP | |
78 | .BI RTA_SPACE( len ) | |
79 | returns the amount of space which will be needed in a message with | |
80 | .I len | |
81 | bytes of data. | |
3113c7f3 | 82 | .SH STANDARDS |
c8f2dd47 | 83 | These macros are nonstandard Linux extensions. |
77117f4f MK |
84 | .SH BUGS |
85 | This manual page is incomplete. | |
a14af333 | 86 | .SH EXAMPLES |
bea08fec | 87 | .\" FIXME . ? would be better to use libnetlink in the EXAMPLE code here |
77117f4f | 88 | Creating a rtnetlink message to set the MTU of a device: |
207050fa MK |
89 | .PP |
90 | .in +4n | |
91 | .EX | |
92 | #include <linux/rtnetlink.h> | |
509718c0 | 93 | |
207050fa | 94 | \&... |
77117f4f | 95 | |
207050fa MK |
96 | struct { |
97 | struct nlmsghdr nh; | |
98 | struct ifinfomsg if; | |
99 | char attrbuf[512]; | |
100 | } req; | |
77117f4f | 101 | |
207050fa MK |
102 | struct rtattr *rta; |
103 | unsigned int mtu = 1000; | |
77117f4f | 104 | |
207050fa | 105 | int rtnetlink_sk = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE); |
77117f4f | 106 | |
207050fa | 107 | memset(&req, 0, sizeof(req)); |
baa51272 | 108 | req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.if)); |
207050fa MK |
109 | req.nh.nlmsg_flags = NLM_F_REQUEST; |
110 | req.nh.nlmsg_type = RTM_NEWLINK; | |
111 | req.if.ifi_family = AF_UNSPEC; | |
112 | req.if.ifi_index = INTERFACE_INDEX; | |
113 | req.if.ifi_change = 0xffffffff; /* ??? */ | |
114 | rta = (struct rtattr *)(((char *) &req) + | |
115 | NLMSG_ALIGN(req.nh.nlmsg_len)); | |
116 | rta\->rta_type = IFLA_MTU; | |
23766e41 | 117 | rta\->rta_len = RTA_LENGTH(sizeof(mtu)); |
207050fa MK |
118 | req.nh.nlmsg_len = NLMSG_ALIGN(req.nh.nlmsg_len) + |
119 | RTA_LENGTH(sizeof(mtu)); | |
120 | memcpy(RTA_DATA(rta), &mtu, sizeof(mtu)); | |
121 | send(rtnetlink_sk, &req, req.nh.nlmsg_len, 0); | |
b9c93deb | 122 | .EE |
207050fa | 123 | .in |
47297adb | 124 | .SH SEE ALSO |
77117f4f MK |
125 | .BR netlink (3), |
126 | .BR netlink (7), | |
127 | .BR rtnetlink (7) |