Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
uapi
linux
tipc_config.h
Go to the documentation of this file.
1
/*
2
* include/linux/tipc_config.h: Include file for TIPC configuration interface
3
*
4
* Copyright (c) 2003-2006, Ericsson AB
5
* Copyright (c) 2005-2007, 2010-2011, Wind River Systems
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions are met:
10
*
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
* 3. Neither the names of the copyright holders nor the names of its
17
* contributors may be used to endorse or promote products derived from
18
* this software without specific prior written permission.
19
*
20
* Alternatively, this software may be distributed under the terms of the
21
* GNU General Public License ("GPL") version 2 as published by the Free
22
* Software Foundation.
23
*
24
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
* POSSIBILITY OF SUCH DAMAGE.
35
*/
36
37
#ifndef _LINUX_TIPC_CONFIG_H_
38
#define _LINUX_TIPC_CONFIG_H_
39
40
#include <linux/types.h>
41
#include <linux/string.h>
42
#include <asm/byteorder.h>
43
44
#ifndef __KERNEL__
45
#include <arpa/inet.h>
/* for ntohs etc. */
46
#endif
47
48
/*
49
* Configuration
50
*
51
* All configuration management messaging involves sending a request message
52
* to the TIPC configuration service on a node, which sends a reply message
53
* back. (In the future multi-message replies may be supported.)
54
*
55
* Both request and reply messages consist of a transport header and payload.
56
* The transport header contains info about the desired operation;
57
* the payload consists of zero or more type/length/value (TLV) items
58
* which specify parameters or results for the operation.
59
*
60
* For many operations, the request and reply messages have a fixed number
61
* of TLVs (usually zero or one); however, some reply messages may return
62
* a variable number of TLVs. A failed request is denoted by the presence
63
* of an "error string" TLV in the reply message instead of the TLV(s) the
64
* reply should contain if the request succeeds.
65
*/
66
67
/*
68
* Public commands:
69
* May be issued by any process.
70
* Accepted by own node, or by remote node only if remote management enabled.
71
*/
72
73
#define TIPC_CMD_NOOP 0x0000
/* tx none, rx none */
74
#define TIPC_CMD_GET_NODES 0x0001
/* tx net_addr, rx node_info(s) */
75
#define TIPC_CMD_GET_MEDIA_NAMES 0x0002
/* tx none, rx media_name(s) */
76
#define TIPC_CMD_GET_BEARER_NAMES 0x0003
/* tx none, rx bearer_name(s) */
77
#define TIPC_CMD_GET_LINKS 0x0004
/* tx net_addr, rx link_info(s) */
78
#define TIPC_CMD_SHOW_NAME_TABLE 0x0005
/* tx name_tbl_query, rx ultra_string */
79
#define TIPC_CMD_SHOW_PORTS 0x0006
/* tx none, rx ultra_string */
80
#define TIPC_CMD_SHOW_LINK_STATS 0x000B
/* tx link_name, rx ultra_string */
81
#define TIPC_CMD_SHOW_STATS 0x000F
/* tx unsigned, rx ultra_string */
82
83
/*
84
* Protected commands:
85
* May only be issued by "network administration capable" process.
86
* Accepted by own node, or by remote node only if remote management enabled
87
* and this node is zone manager.
88
*/
89
90
#define TIPC_CMD_GET_REMOTE_MNG 0x4003
/* tx none, rx unsigned */
91
#define TIPC_CMD_GET_MAX_PORTS 0x4004
/* tx none, rx unsigned */
92
#define TIPC_CMD_GET_MAX_PUBL 0x4005
/* obsoleted */
93
#define TIPC_CMD_GET_MAX_SUBSCR 0x4006
/* obsoleted */
94
#define TIPC_CMD_GET_MAX_ZONES 0x4007
/* obsoleted */
95
#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008
/* obsoleted */
96
#define TIPC_CMD_GET_MAX_NODES 0x4009
/* obsoleted */
97
#define TIPC_CMD_GET_MAX_SLAVES 0x400A
/* obsoleted */
98
#define TIPC_CMD_GET_NETID 0x400B
/* tx none, rx unsigned */
99
100
#define TIPC_CMD_ENABLE_BEARER 0x4101
/* tx bearer_config, rx none */
101
#define TIPC_CMD_DISABLE_BEARER 0x4102
/* tx bearer_name, rx none */
102
#define TIPC_CMD_SET_LINK_TOL 0x4107
/* tx link_config, rx none */
103
#define TIPC_CMD_SET_LINK_PRI 0x4108
/* tx link_config, rx none */
104
#define TIPC_CMD_SET_LINK_WINDOW 0x4109
/* tx link_config, rx none */
105
#define TIPC_CMD_SET_LOG_SIZE 0x410A
/* obsoleted */
106
#define TIPC_CMD_DUMP_LOG 0x410B
/* obsoleted */
107
#define TIPC_CMD_RESET_LINK_STATS 0x410C
/* tx link_name, rx none */
108
109
/*
110
* Private commands:
111
* May only be issued by "network administration capable" process.
112
* Accepted by own node only; cannot be used on a remote node.
113
*/
114
115
#define TIPC_CMD_SET_NODE_ADDR 0x8001
/* tx net_addr, rx none */
116
#define TIPC_CMD_SET_REMOTE_MNG 0x8003
/* tx unsigned, rx none */
117
#define TIPC_CMD_SET_MAX_PORTS 0x8004
/* tx unsigned, rx none */
118
#define TIPC_CMD_SET_MAX_PUBL 0x8005
/* obsoleted */
119
#define TIPC_CMD_SET_MAX_SUBSCR 0x8006
/* obsoleted */
120
#define TIPC_CMD_SET_MAX_ZONES 0x8007
/* obsoleted */
121
#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008
/* obsoleted */
122
#define TIPC_CMD_SET_MAX_NODES 0x8009
/* obsoleted */
123
#define TIPC_CMD_SET_MAX_SLAVES 0x800A
/* obsoleted */
124
#define TIPC_CMD_SET_NETID 0x800B
/* tx unsigned, rx none */
125
126
/*
127
* Reserved commands:
128
* May not be issued by any process.
129
* Used internally by TIPC.
130
*/
131
132
#define TIPC_CMD_NOT_NET_ADMIN 0xC001
/* tx none, rx none */
133
134
/*
135
* TLV types defined for TIPC
136
*/
137
138
#define TIPC_TLV_NONE 0
/* no TLV present */
139
#define TIPC_TLV_VOID 1
/* empty TLV (0 data bytes)*/
140
#define TIPC_TLV_UNSIGNED 2
/* 32-bit integer */
141
#define TIPC_TLV_STRING 3
/* char[128] (max) */
142
#define TIPC_TLV_LARGE_STRING 4
/* char[2048] (max) */
143
#define TIPC_TLV_ULTRA_STRING 5
/* char[32768] (max) */
144
145
#define TIPC_TLV_ERROR_STRING 16
/* char[128] containing "error code" */
146
#define TIPC_TLV_NET_ADDR 17
/* 32-bit integer denoting <Z.C.N> */
147
#define TIPC_TLV_MEDIA_NAME 18
/* char[TIPC_MAX_MEDIA_NAME] */
148
#define TIPC_TLV_BEARER_NAME 19
/* char[TIPC_MAX_BEARER_NAME] */
149
#define TIPC_TLV_LINK_NAME 20
/* char[TIPC_MAX_LINK_NAME] */
150
#define TIPC_TLV_NODE_INFO 21
/* struct tipc_node_info */
151
#define TIPC_TLV_LINK_INFO 22
/* struct tipc_link_info */
152
#define TIPC_TLV_BEARER_CONFIG 23
/* struct tipc_bearer_config */
153
#define TIPC_TLV_LINK_CONFIG 24
/* struct tipc_link_config */
154
#define TIPC_TLV_NAME_TBL_QUERY 25
/* struct tipc_name_table_query */
155
#define TIPC_TLV_PORT_REF 26
/* 32-bit port reference */
156
157
/*
158
* Maximum sizes of TIPC bearer-related names (including terminating NUL)
159
*/
160
161
#define TIPC_MAX_MEDIA_NAME 16
/* format = media */
162
#define TIPC_MAX_IF_NAME 16
/* format = interface */
163
#define TIPC_MAX_BEARER_NAME 32
/* format = media:interface */
164
#define TIPC_MAX_LINK_NAME 60
/* format = Z.C.N:interface-Z.C.N:interface */
165
166
/*
167
* Link priority limits (min, default, max, media default)
168
*/
169
170
#define TIPC_MIN_LINK_PRI 0
171
#define TIPC_DEF_LINK_PRI 10
172
#define TIPC_MAX_LINK_PRI 31
173
#define TIPC_MEDIA_LINK_PRI (TIPC_MAX_LINK_PRI + 1)
174
175
/*
176
* Link tolerance limits (min, default, max), in ms
177
*/
178
179
#define TIPC_MIN_LINK_TOL 50
180
#define TIPC_DEF_LINK_TOL 1500
181
#define TIPC_MAX_LINK_TOL 30000
182
183
#if (TIPC_MIN_LINK_TOL < 16)
184
#error "TIPC_MIN_LINK_TOL is too small (abort limit may be NaN)"
185
#endif
186
187
/*
188
* Link window limits (min, default, max), in packets
189
*/
190
191
#define TIPC_MIN_LINK_WIN 16
192
#define TIPC_DEF_LINK_WIN 50
193
#define TIPC_MAX_LINK_WIN 150
194
195
196
struct
tipc_node_info
{
197
__be32
addr
;
/* network address of node */
198
__be32
up
;
/* 0=down, 1= up */
199
};
200
201
struct
tipc_link_info
{
202
__be32
dest
;
/* network address of peer node */
203
__be32
up
;
/* 0=down, 1=up */
204
char
str
[
TIPC_MAX_LINK_NAME
];
/* link name */
205
};
206
207
struct
tipc_bearer_config
{
208
__be32
priority
;
/* Range [1,31]. Override per link */
209
__be32
disc_domain
;
/* <Z.C.N> describing desired nodes */
210
char
name
[
TIPC_MAX_BEARER_NAME
];
211
};
212
213
struct
tipc_link_config
{
214
__be32
value
;
215
char
name
[
TIPC_MAX_LINK_NAME
];
216
};
217
218
#define TIPC_NTQ_ALLTYPES 0x80000000
219
220
struct
tipc_name_table_query
{
221
__be32
depth
;
/* 1:type, 2:+name info, 3:+port info, 4+:+debug info */
222
__be32
type
;
/* {t,l,u} info ignored if high bit of "depth" is set */
223
__be32
lowbound
;
/* (i.e. displays all entries of name table) */
224
__be32
upbound
;
225
};
226
227
/*
228
* The error string TLV is a null-terminated string describing the cause
229
* of the request failure. To simplify error processing (and to save space)
230
* the first character of the string can be a special error code character
231
* (lying by the range 0x80 to 0xFF) which represents a pre-defined reason.
232
*/
233
234
#define TIPC_CFG_TLV_ERROR "\x80"
/* request contains incorrect TLV(s) */
235
#define TIPC_CFG_NOT_NET_ADMIN "\x81"
/* must be network administrator */
236
#define TIPC_CFG_NOT_ZONE_MSTR "\x82"
/* must be zone master */
237
#define TIPC_CFG_NO_REMOTE "\x83"
/* remote management not enabled */
238
#define TIPC_CFG_NOT_SUPPORTED "\x84"
/* request is not supported by TIPC */
239
#define TIPC_CFG_INVALID_VALUE "\x85"
/* request has invalid argument value */
240
241
/*
242
* A TLV consists of a descriptor, followed by the TLV value.
243
* TLV descriptor fields are stored in network byte order;
244
* TLV values must also be stored in network byte order (where applicable).
245
* TLV descriptors must be aligned to addresses which are multiple of 4,
246
* so up to 3 bytes of padding may exist at the end of the TLV value area.
247
* There must not be any padding between the TLV descriptor and its value.
248
*/
249
250
struct
tlv_desc
{
251
__be16
tlv_len
;
/* TLV length (descriptor + value) */
252
__be16
tlv_type
;
/* TLV identifier */
253
};
254
255
#define TLV_ALIGNTO 4
256
257
#define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1))
258
#define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen))
259
#define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen)))
260
#define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0)))
261
262
static
inline
int
TLV_OK(
const
void
*
tlv
,
__u16
space)
263
{
264
/*
265
* Would also like to check that "tlv" is a multiple of 4,
266
* but don't know how to do this in a portable way.
267
* - Tried doing (!(tlv & (TLV_ALIGNTO-1))), but GCC compiler
268
* won't allow binary "&" with a pointer.
269
* - Tried casting "tlv" to integer type, but causes warning about size
270
* mismatch when pointer is bigger than chosen type (int, long, ...).
271
*/
272
273
return
(space >=
TLV_SPACE
(0)) &&
274
(
ntohs
(((
struct
tlv_desc
*)tlv)->
tlv_len
) <= space);
275
}
276
277
static
inline
int
TLV_CHECK(
const
void
*
tlv
,
__u16
space,
__u16
exp_type)
278
{
279
return
TLV_OK(tlv, space) &&
280
(
ntohs
(((
struct
tlv_desc
*)tlv)->
tlv_type
) == exp_type);
281
}
282
283
static
inline
int
TLV_SET(
void
*tlv,
__u16
type
,
void
*
data
,
__u16
len)
284
{
285
struct
tlv_desc
*tlv_ptr;
286
int
tlv_len
;
287
288
tlv_len =
TLV_LENGTH
(len);
289
tlv_ptr = (
struct
tlv_desc
*)tlv;
290
tlv_ptr->
tlv_type
=
htons
(type);
291
tlv_ptr->
tlv_len
=
htons
(tlv_len);
292
if
(len && data)
293
memcpy
(
TLV_DATA
(tlv_ptr), data, tlv_len);
294
return
TLV_SPACE
(len);
295
}
296
297
/*
298
* A TLV list descriptor simplifies processing of messages
299
* containing multiple TLVs.
300
*/
301
302
struct
tlv_list_desc
{
303
struct
tlv_desc
*
tlv_ptr
;
/* ptr to current TLV */
304
__u32
tlv_space
;
/* # bytes from curr TLV to list end */
305
};
306
307
static
inline
void
TLV_LIST_INIT(
struct
tlv_list_desc
*
list
,
308
void
*data,
__u32
space)
309
{
310
list->
tlv_ptr
= (
struct
tlv_desc
*)data;
311
list->
tlv_space
= space;
312
}
313
314
static
inline
int
TLV_LIST_EMPTY(
struct
tlv_list_desc
*
list
)
315
{
316
return
(list->
tlv_space
== 0);
317
}
318
319
static
inline
int
TLV_LIST_CHECK(
struct
tlv_list_desc
*list,
__u16
exp_type)
320
{
321
return
TLV_CHECK(list->
tlv_ptr
, list->
tlv_space
, exp_type);
322
}
323
324
static
inline
void
*TLV_LIST_DATA(
struct
tlv_list_desc
*list)
325
{
326
return
TLV_DATA
(list->
tlv_ptr
);
327
}
328
329
static
inline
void
TLV_LIST_STEP(
struct
tlv_list_desc
*list)
330
{
331
__u16
tlv_space =
TLV_ALIGN
(
ntohs
(list->
tlv_ptr
->tlv_len));
332
333
list->
tlv_ptr
= (
struct
tlv_desc
*)((
char
*)list->
tlv_ptr
+ tlv_space);
334
list->
tlv_space
-= tlv_space;
335
}
336
337
/*
338
* Configuration messages exchanged via NETLINK_GENERIC use the following
339
* family id, name, version and command.
340
*/
341
#define TIPC_GENL_NAME "TIPC"
342
#define TIPC_GENL_VERSION 0x1
343
#define TIPC_GENL_CMD 0x1
344
345
/*
346
* TIPC specific header used in NETLINK_GENERIC requests.
347
*/
348
struct
tipc_genlmsghdr
{
349
__u32
dest
;
/* Destination address */
350
__u16
cmd
;
/* Command */
351
__u16
reserved
;
/* Unused */
352
};
353
354
#define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr))
355
356
/*
357
* Configuration messages exchanged via TIPC sockets use the TIPC configuration
358
* message header, which is defined below. This structure is analogous
359
* to the Netlink message header, but fields are stored in network byte order
360
* and no padding is permitted between the header and the message data
361
* that follows.
362
*/
363
364
struct
tipc_cfg_msg_hdr
{
365
__be32
tcm_len
;
/* Message length (including header) */
366
__be16
tcm_type
;
/* Command type */
367
__be16
tcm_flags
;
/* Additional flags */
368
char
tcm_reserved
[8];
/* Unused */
369
};
370
371
#define TCM_F_REQUEST 0x1
/* Flag: Request message */
372
#define TCM_F_MORE 0x2
/* Flag: Message to be continued */
373
374
#define TCM_ALIGN(datalen) (((datalen)+3) & ~3)
375
#define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen)
376
#define TCM_SPACE(datalen) (TCM_ALIGN(TCM_LENGTH(datalen)))
377
#define TCM_DATA(tcm_hdr) ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0)))
378
379
static
inline
int
TCM_SET(
void
*
msg
,
__u16
cmd
,
__u16
flags
,
380
void
*data,
__u16
data_len
)
381
{
382
struct
tipc_cfg_msg_hdr
*tcm_hdr;
383
int
msg_len
;
384
385
msg_len =
TCM_LENGTH
(data_len);
386
tcm_hdr = (
struct
tipc_cfg_msg_hdr
*)msg;
387
tcm_hdr->
tcm_len
=
htonl
(msg_len);
388
tcm_hdr->
tcm_type
=
htons
(cmd);
389
tcm_hdr->
tcm_flags
=
htons
(flags);
390
if
(data_len && data)
391
memcpy
(
TCM_DATA
(msg), data, data_len);
392
return
TCM_SPACE
(data_len);
393
}
394
395
#endif
Generated on Thu Jan 10 2013 14:53:54 for Linux Kernel by
1.8.2