Blame view

net/tipc/msg.h 14.6 KB
b97bf3fd8   Per Liden   [TIPC] Initial merge
1
2
  /*
   * net/tipc/msg.h: Include file for TIPC message header routines
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
3
   *
1f9eda7e2   Allan Stephens   [TIPC]: Enhanceme...
4
   * Copyright (c) 2000-2007, Ericsson AB
741de3e9f   Allan Stephens   tipc: Remove supp...
5
   * Copyright (c) 2005-2008, 2010-2011, Wind River Systems
b97bf3fd8   Per Liden   [TIPC] Initial merge
6
7
   * All rights reserved.
   *
9ea1fd3c1   Per Liden   [TIPC] License he...
8
   * Redistribution and use in source and binary forms, with or without
b97bf3fd8   Per Liden   [TIPC] Initial merge
9
10
   * modification, are permitted provided that the following conditions are met:
   *
9ea1fd3c1   Per Liden   [TIPC] License he...
11
12
13
14
15
16
17
18
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. Neither the names of the copyright holders nor the names of its
   *    contributors may be used to endorse or promote products derived from
   *    this software without specific prior written permission.
b97bf3fd8   Per Liden   [TIPC] Initial merge
19
   *
9ea1fd3c1   Per Liden   [TIPC] License he...
20
21
22
23
24
25
26
27
28
29
30
31
32
33
   * Alternatively, this software may be distributed under the terms of the
   * GNU General Public License ("GPL") version 2 as published by the Free
   * Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
b97bf3fd8   Per Liden   [TIPC] Initial merge
34
35
36
37
38
   * POSSIBILITY OF SUCH DAMAGE.
   */
  
  #ifndef _TIPC_MSG_H
  #define _TIPC_MSG_H
d265fef6d   Allan Stephens   tipc: Remove obso...
39
  #include "bearer.h"
b97bf3fd8   Per Liden   [TIPC] Initial merge
40

cc4c4353f   Allan Stephens   tipc: Update comm...
41
42
43
44
45
  /*
   * Constants and routines used to read and write TIPC payload message headers
   *
   * Note: Some items are also used with TIPC internal message headers
   */
b97bf3fd8   Per Liden   [TIPC] Initial merge
46
  #define TIPC_VERSION              2
06d82c919   Allan Stephens   [TIPC]: Minor cle...
47

d265fef6d   Allan Stephens   tipc: Remove obso...
48
  /*
cc4c4353f   Allan Stephens   tipc: Update comm...
49
50
51
52
53
54
55
56
57
   * Payload message users are defined in TIPC's public API:
   * - TIPC_LOW_IMPORTANCE
   * - TIPC_MEDIUM_IMPORTANCE
   * - TIPC_HIGH_IMPORTANCE
   * - TIPC_CRITICAL_IMPORTANCE
   */
  
  /*
   * Payload message types
d265fef6d   Allan Stephens   tipc: Remove obso...
58
59
60
61
62
63
   */
  
  #define TIPC_CONN_MSG		0
  #define TIPC_MCAST_MSG		1
  #define TIPC_NAMED_MSG		2
  #define TIPC_DIRECT_MSG		3
cc4c4353f   Allan Stephens   tipc: Update comm...
64
65
66
  /*
   * Message header sizes
   */
d265fef6d   Allan Stephens   tipc: Remove obso...
67

741d9eb7b   Allan Stephens   tipc: Cleanup of ...
68
69
70
71
  #define SHORT_H_SIZE              24	/* In-cluster basic payload message */
  #define BASIC_H_SIZE              32	/* Basic payload message */
  #define NAMED_H_SIZE              40	/* Named payload message */
  #define MCAST_H_SIZE              44	/* Multicast payload message */
06d82c919   Allan Stephens   [TIPC]: Minor cle...
72
73
74
  #define INT_H_SIZE                40	/* Internal messages */
  #define MIN_H_SIZE                24	/* Smallest legal TIPC header size */
  #define MAX_H_SIZE                60	/* Largest possible TIPC header size */
b97bf3fd8   Per Liden   [TIPC] Initial merge
75
  #define MAX_MSG_SIZE (MAX_H_SIZE + TIPC_MAX_USER_MSG_SIZE)
b97bf3fd8   Per Liden   [TIPC] Initial merge
76

3d749a6a2   Allan Stephens   tipc: Hide media-...
77
  #define TIPC_MEDIA_ADDR_OFFSET	5
b97bf3fd8   Per Liden   [TIPC] Initial merge
78

d265fef6d   Allan Stephens   tipc: Remove obso...
79
80
81
  struct tipc_msg {
  	__be32 hdr[15];
  };
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
82

b97bf3fd8   Per Liden   [TIPC] Initial merge
83

d265fef6d   Allan Stephens   tipc: Remove obso...
84
85
86
87
  static inline u32 msg_word(struct tipc_msg *m, u32 pos)
  {
  	return ntohl(m->hdr[pos]);
  }
b97bf3fd8   Per Liden   [TIPC] Initial merge
88
89
90
91
92
  
  static inline void msg_set_word(struct tipc_msg *m, u32 w, u32 val)
  {
  	m->hdr[w] = htonl(val);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
93
94
95
96
  static inline u32 msg_bits(struct tipc_msg *m, u32 w, u32 pos, u32 mask)
  {
  	return (msg_word(m, w) >> pos) & mask;
  }
b97bf3fd8   Per Liden   [TIPC] Initial merge
97
98
99
  static inline void msg_set_bits(struct tipc_msg *m, u32 w,
  				u32 pos, u32 mask, u32 val)
  {
1f9eda7e2   Allan Stephens   [TIPC]: Enhanceme...
100
  	val = (val & mask) << pos;
becf3da20   Al Viro   tipc: endianness ...
101
102
103
  	mask = mask << pos;
  	m->hdr[w] &= ~htonl(mask);
  	m->hdr[w] |= htonl(val);
b97bf3fd8   Per Liden   [TIPC] Initial merge
104
  }
40aecb1b1   Allan Stephens   tipc: Message rej...
105
106
107
108
109
110
111
  static inline void msg_swap_words(struct tipc_msg *msg, u32 a, u32 b)
  {
  	u32 temp = msg->hdr[a];
  
  	msg->hdr[a] = msg->hdr[b];
  	msg->hdr[b] = temp;
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
112
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
113
114
115
116
117
118
119
   * Word 0
   */
  
  static inline u32 msg_version(struct tipc_msg *m)
  {
  	return msg_bits(m, 0, 29, 7);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
120
  static inline void msg_set_version(struct tipc_msg *m)
b97bf3fd8   Per Liden   [TIPC] Initial merge
121
  {
37695420a   Allan Stephens   [TIPC]: Use corre...
122
  	msg_set_bits(m, 0, 29, 7, TIPC_VERSION);
b97bf3fd8   Per Liden   [TIPC] Initial merge
123
124
125
126
127
128
129
130
131
  }
  
  static inline u32 msg_user(struct tipc_msg *m)
  {
  	return msg_bits(m, 0, 25, 0xf);
  }
  
  static inline u32 msg_isdata(struct tipc_msg *m)
  {
a02cec215   Eric Dumazet   net: return opera...
132
  	return msg_user(m) <= TIPC_CRITICAL_IMPORTANCE;
b97bf3fd8   Per Liden   [TIPC] Initial merge
133
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
134
  static inline void msg_set_user(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
135
136
137
  {
  	msg_set_bits(m, 0, 25, 0xf, n);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
138
139
140
141
  static inline u32 msg_importance(struct tipc_msg *m)
  {
  	return msg_bits(m, 0, 25, 0xf);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
142
  static inline void msg_set_importance(struct tipc_msg *m, u32 i)
b97bf3fd8   Per Liden   [TIPC] Initial merge
143
144
145
  {
  	msg_set_user(m, i);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
146
147
148
149
  static inline u32 msg_hdr_sz(struct tipc_msg *m)
  {
  	return msg_bits(m, 0, 21, 0xf) << 2;
  }
0e65967e3   Allan Stephens   tipc: cleanup var...
150
  static inline void msg_set_hdr_sz(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
151
152
153
  {
  	msg_set_bits(m, 0, 21, 0xf, n>>2);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
154
155
156
157
158
159
160
161
162
  static inline u32 msg_size(struct tipc_msg *m)
  {
  	return msg_bits(m, 0, 0, 0x1ffff);
  }
  
  static inline u32 msg_data_sz(struct tipc_msg *m)
  {
  	return msg_size(m) - msg_hdr_sz(m);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
163
  static inline int msg_non_seq(struct tipc_msg *m)
b97bf3fd8   Per Liden   [TIPC] Initial merge
164
165
166
  {
  	return msg_bits(m, 0, 20, 1);
  }
40aecb1b1   Allan Stephens   tipc: Message rej...
167
  static inline void msg_set_non_seq(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
168
  {
40aecb1b1   Allan Stephens   tipc: Message rej...
169
  	msg_set_bits(m, 0, 20, 1, n);
b97bf3fd8   Per Liden   [TIPC] Initial merge
170
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
171
  static inline int msg_dest_droppable(struct tipc_msg *m)
b97bf3fd8   Per Liden   [TIPC] Initial merge
172
173
174
  {
  	return msg_bits(m, 0, 19, 1);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
175
  static inline void msg_set_dest_droppable(struct tipc_msg *m, u32 d)
b97bf3fd8   Per Liden   [TIPC] Initial merge
176
177
178
  {
  	msg_set_bits(m, 0, 19, 1, d);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
179
  static inline int msg_src_droppable(struct tipc_msg *m)
b97bf3fd8   Per Liden   [TIPC] Initial merge
180
181
182
  {
  	return msg_bits(m, 0, 18, 1);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
183
  static inline void msg_set_src_droppable(struct tipc_msg *m, u32 d)
b97bf3fd8   Per Liden   [TIPC] Initial merge
184
185
186
187
188
189
190
191
  {
  	msg_set_bits(m, 0, 18, 1, d);
  }
  
  static inline void msg_set_size(struct tipc_msg *m, u32 sz)
  {
  	m->hdr[0] = htonl((msg_word(m, 0) & ~0x1ffff) | sz);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
192
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
193
194
   * Word 1
   */
d265fef6d   Allan Stephens   tipc: Remove obso...
195
196
197
198
  static inline u32 msg_type(struct tipc_msg *m)
  {
  	return msg_bits(m, 1, 29, 0x7);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
199
  static inline void msg_set_type(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
200
201
202
  {
  	msg_set_bits(m, 1, 29, 0x7, n);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
  static inline u32 msg_named(struct tipc_msg *m)
  {
  	return msg_type(m) == TIPC_NAMED_MSG;
  }
  
  static inline u32 msg_mcast(struct tipc_msg *m)
  {
  	return msg_type(m) == TIPC_MCAST_MSG;
  }
  
  static inline u32 msg_connected(struct tipc_msg *m)
  {
  	return msg_type(m) == TIPC_CONN_MSG;
  }
  
  static inline u32 msg_errcode(struct tipc_msg *m)
  {
  	return msg_bits(m, 1, 25, 0xf);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
222
  static inline void msg_set_errcode(struct tipc_msg *m, u32 err)
b97bf3fd8   Per Liden   [TIPC] Initial merge
223
224
225
  {
  	msg_set_bits(m, 1, 25, 0xf, err);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
226
  static inline u32 msg_reroute_cnt(struct tipc_msg *m)
b97bf3fd8   Per Liden   [TIPC] Initial merge
227
228
229
  {
  	return msg_bits(m, 1, 21, 0xf);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
230
  static inline void msg_incr_reroute_cnt(struct tipc_msg *m)
b97bf3fd8   Per Liden   [TIPC] Initial merge
231
232
233
  {
  	msg_set_bits(m, 1, 21, 0xf, msg_reroute_cnt(m) + 1);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
234
  static inline void msg_reset_reroute_cnt(struct tipc_msg *m)
b97bf3fd8   Per Liden   [TIPC] Initial merge
235
236
237
238
239
240
241
242
  {
  	msg_set_bits(m, 1, 21, 0xf, 0);
  }
  
  static inline u32 msg_lookup_scope(struct tipc_msg *m)
  {
  	return msg_bits(m, 1, 19, 0x3);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
243
  static inline void msg_set_lookup_scope(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
244
245
246
  {
  	msg_set_bits(m, 1, 19, 0x3, n);
  }
b97bf3fd8   Per Liden   [TIPC] Initial merge
247
248
249
250
  static inline u32 msg_bcast_ack(struct tipc_msg *m)
  {
  	return msg_bits(m, 1, 0, 0xffff);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
251
  static inline void msg_set_bcast_ack(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
252
253
254
  {
  	msg_set_bits(m, 1, 0, 0xffff, n);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
255
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
256
257
258
259
260
261
262
   * Word 2
   */
  
  static inline u32 msg_ack(struct tipc_msg *m)
  {
  	return msg_bits(m, 2, 16, 0xffff);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
263
  static inline void msg_set_ack(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
264
265
266
267
268
269
270
271
  {
  	msg_set_bits(m, 2, 16, 0xffff, n);
  }
  
  static inline u32 msg_seqno(struct tipc_msg *m)
  {
  	return msg_bits(m, 2, 0, 0xffff);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
272
  static inline void msg_set_seqno(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
273
274
275
  {
  	msg_set_bits(m, 2, 0, 0xffff, n);
  }
40aecb1b1   Allan Stephens   tipc: Message rej...
276
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
277
278
   * Words 3-10
   */
d265fef6d   Allan Stephens   tipc: Remove obso...
279
280
281
282
  static inline u32 msg_prevnode(struct tipc_msg *m)
  {
  	return msg_word(m, 3);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
283
  static inline void msg_set_prevnode(struct tipc_msg *m, u32 a)
b97bf3fd8   Per Liden   [TIPC] Initial merge
284
285
286
  {
  	msg_set_word(m, 3, a);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
287
288
289
290
  static inline u32 msg_origport(struct tipc_msg *m)
  {
  	return msg_word(m, 4);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
291
  static inline void msg_set_origport(struct tipc_msg *m, u32 p)
b97bf3fd8   Per Liden   [TIPC] Initial merge
292
293
294
  {
  	msg_set_word(m, 4, p);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
295
296
297
298
  static inline u32 msg_destport(struct tipc_msg *m)
  {
  	return msg_word(m, 5);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
299
  static inline void msg_set_destport(struct tipc_msg *m, u32 p)
b97bf3fd8   Per Liden   [TIPC] Initial merge
300
301
302
  {
  	msg_set_word(m, 5, p);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
303
304
305
306
  static inline u32 msg_mc_netid(struct tipc_msg *m)
  {
  	return msg_word(m, 5);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
307
  static inline void msg_set_mc_netid(struct tipc_msg *m, u32 p)
b97bf3fd8   Per Liden   [TIPC] Initial merge
308
309
310
  {
  	msg_set_word(m, 5, p);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
311
312
  static inline int msg_short(struct tipc_msg *m)
  {
741d9eb7b   Allan Stephens   tipc: Cleanup of ...
313
  	return msg_hdr_sz(m) == SHORT_H_SIZE;
d265fef6d   Allan Stephens   tipc: Remove obso...
314
315
316
317
318
319
320
321
  }
  
  static inline u32 msg_orignode(struct tipc_msg *m)
  {
  	if (likely(msg_short(m)))
  		return msg_prevnode(m);
  	return msg_word(m, 6);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
322
  static inline void msg_set_orignode(struct tipc_msg *m, u32 a)
b97bf3fd8   Per Liden   [TIPC] Initial merge
323
324
325
  {
  	msg_set_word(m, 6, a);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
326
327
328
329
  static inline u32 msg_destnode(struct tipc_msg *m)
  {
  	return msg_word(m, 7);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
330
  static inline void msg_set_destnode(struct tipc_msg *m, u32 a)
b97bf3fd8   Per Liden   [TIPC] Initial merge
331
332
333
  {
  	msg_set_word(m, 7, a);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
334
  static inline int msg_is_dest(struct tipc_msg *m, u32 d)
b97bf3fd8   Per Liden   [TIPC] Initial merge
335
  {
a02cec215   Eric Dumazet   net: return opera...
336
  	return msg_short(m) || (msg_destnode(m) == d);
b97bf3fd8   Per Liden   [TIPC] Initial merge
337
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
338
339
340
341
  static inline u32 msg_nametype(struct tipc_msg *m)
  {
  	return msg_word(m, 8);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
342
  static inline void msg_set_nametype(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
343
344
345
  {
  	msg_set_word(m, 8, n);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
346
347
348
349
350
351
352
353
354
  static inline u32 msg_nameinst(struct tipc_msg *m)
  {
  	return msg_word(m, 9);
  }
  
  static inline u32 msg_namelower(struct tipc_msg *m)
  {
  	return msg_nameinst(m);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
355
  static inline void msg_set_namelower(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
356
357
358
  {
  	msg_set_word(m, 9, n);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
359
  static inline void msg_set_nameinst(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
360
361
362
  {
  	msg_set_namelower(m, n);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
363
364
365
366
  static inline u32 msg_nameupper(struct tipc_msg *m)
  {
  	return msg_word(m, 10);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
367
  static inline void msg_set_nameupper(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
368
369
370
  {
  	msg_set_word(m, 10, n);
  }
d265fef6d   Allan Stephens   tipc: Remove obso...
371
372
373
374
  static inline unchar *msg_data(struct tipc_msg *m)
  {
  	return ((unchar *)m) + msg_hdr_sz(m);
  }
b97bf3fd8   Per Liden   [TIPC] Initial merge
375
376
377
378
  static inline struct tipc_msg *msg_get_wrapped(struct tipc_msg *m)
  {
  	return (struct tipc_msg *)msg_data(m);
  }
b97bf3fd8   Per Liden   [TIPC] Initial merge
379
380
  
  /*
cc4c4353f   Allan Stephens   tipc: Update comm...
381
382
   * Constants and routines used to read and write TIPC internal message headers
   */
b97bf3fd8   Per Liden   [TIPC] Initial merge
383

c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
384
  /*
cc4c4353f   Allan Stephens   tipc: Update comm...
385
   * Internal message users
b97bf3fd8   Per Liden   [TIPC] Initial merge
386
387
388
389
390
391
   */
  
  #define  BCAST_PROTOCOL       5
  #define  MSG_BUNDLER          6
  #define  LINK_PROTOCOL        7
  #define  CONN_MANAGER         8
51a8e4dee   Allan Stephens   tipc: Remove prot...
392
  #define  ROUTE_DISTRIBUTOR    9		/* obsoleted */
b97bf3fd8   Per Liden   [TIPC] Initial merge
393
394
395
396
  #define  CHANGEOVER_PROTOCOL  10
  #define  NAME_DISTRIBUTOR     11
  #define  MSG_FRAGMENTER       12
  #define  LINK_CONFIG          13
b97bf3fd8   Per Liden   [TIPC] Initial merge
397

c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
398
  /*
cc4c4353f   Allan Stephens   tipc: Update comm...
399
   *  Connection management protocol message types
b97bf3fd8   Per Liden   [TIPC] Initial merge
400
401
402
403
404
   */
  
  #define CONN_PROBE        0
  #define CONN_PROBE_REPLY  1
  #define CONN_ACK          2
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
405
  /*
cc4c4353f   Allan Stephens   tipc: Update comm...
406
   * Name distributor message types
b97bf3fd8   Per Liden   [TIPC] Initial merge
407
408
409
410
   */
  
  #define PUBLICATION       0
  #define WITHDRAWAL        1
92138d1f2   Allan Stephens   tipc: Cosmetic co...
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
  /*
   * Segmentation message types
   */
  
  #define FIRST_FRAGMENT		0
  #define FRAGMENT		1
  #define LAST_FRAGMENT		2
  
  /*
   * Link management protocol message types
   */
  
  #define STATE_MSG		0
  #define RESET_MSG		1
  #define ACTIVATE_MSG		2
  
  /*
   * Changeover tunnel message types
   */
  #define DUPLICATE_MSG		0
  #define ORIGINAL_MSG		1
  
  /*
   * Config protocol message types
   */
  
  #define DSC_REQ_MSG		0
  #define DSC_RESP_MSG		1
b97bf3fd8   Per Liden   [TIPC] Initial merge
439

c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
440
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
441
442
443
444
445
   * Word 1
   */
  
  static inline u32 msg_seq_gap(struct tipc_msg *m)
  {
bd7845337   Allan Stephens   tipc: Expand link...
446
  	return msg_bits(m, 1, 16, 0x1fff);
b97bf3fd8   Per Liden   [TIPC] Initial merge
447
448
449
450
  }
  
  static inline void msg_set_seq_gap(struct tipc_msg *m, u32 n)
  {
bd7845337   Allan Stephens   tipc: Expand link...
451
  	msg_set_bits(m, 1, 16, 0x1fff, n);
b97bf3fd8   Per Liden   [TIPC] Initial merge
452
  }
b97bf3fd8   Per Liden   [TIPC] Initial merge
453

c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
454
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
455
456
457
458
459
460
461
   * Word 2
   */
  
  static inline u32 msg_dest_domain(struct tipc_msg *m)
  {
  	return msg_word(m, 2);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
462
  static inline void msg_set_dest_domain(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
  {
  	msg_set_word(m, 2, n);
  }
  
  static inline u32 msg_bcgap_after(struct tipc_msg *m)
  {
  	return msg_bits(m, 2, 16, 0xffff);
  }
  
  static inline void msg_set_bcgap_after(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 2, 16, 0xffff, n);
  }
  
  static inline u32 msg_bcgap_to(struct tipc_msg *m)
  {
  	return msg_bits(m, 2, 0, 0xffff);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
481
  static inline void msg_set_bcgap_to(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
482
483
484
  {
  	msg_set_bits(m, 2, 0, 0xffff, n);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
485
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
   * Word 4
   */
  
  static inline u32 msg_last_bcast(struct tipc_msg *m)
  {
  	return msg_bits(m, 4, 16, 0xffff);
  }
  
  static inline void msg_set_last_bcast(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 4, 16, 0xffff, n);
  }
  
  
  static inline u32 msg_fragm_no(struct tipc_msg *m)
  {
  	return msg_bits(m, 4, 16, 0xffff);
  }
  
  static inline void msg_set_fragm_no(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 4, 16, 0xffff, n);
  }
  
  
  static inline u32 msg_next_sent(struct tipc_msg *m)
  {
  	return msg_bits(m, 4, 0, 0xffff);
  }
  
  static inline void msg_set_next_sent(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 4, 0, 0xffff, n);
  }
  
  
  static inline u32 msg_long_msgno(struct tipc_msg *m)
  {
  	return msg_bits(m, 4, 0, 0xffff);
  }
  
  static inline void msg_set_long_msgno(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 4, 0, 0xffff, n);
  }
  
  static inline u32 msg_bc_netid(struct tipc_msg *m)
  {
  	return msg_word(m, 4);
  }
  
  static inline void msg_set_bc_netid(struct tipc_msg *m, u32 id)
  {
  	msg_set_word(m, 4, id);
  }
  
  static inline u32 msg_link_selector(struct tipc_msg *m)
  {
  	return msg_bits(m, 4, 0, 1);
  }
  
  static inline void msg_set_link_selector(struct tipc_msg *m, u32 n)
  {
7eb878ed8   Allan Stephens   tipc: Eliminate r...
549
  	msg_set_bits(m, 4, 0, 1, n);
b97bf3fd8   Per Liden   [TIPC] Initial merge
550
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
551
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
   * Word 5
   */
  
  static inline u32 msg_session(struct tipc_msg *m)
  {
  	return msg_bits(m, 5, 16, 0xffff);
  }
  
  static inline void msg_set_session(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 5, 16, 0xffff, n);
  }
  
  static inline u32 msg_probe(struct tipc_msg *m)
  {
  	return msg_bits(m, 5, 0, 1);
  }
  
  static inline void msg_set_probe(struct tipc_msg *m, u32 val)
  {
7eb878ed8   Allan Stephens   tipc: Eliminate r...
572
  	msg_set_bits(m, 5, 0, 1, val);
b97bf3fd8   Per Liden   [TIPC] Initial merge
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
  }
  
  static inline char msg_net_plane(struct tipc_msg *m)
  {
  	return msg_bits(m, 5, 1, 7) + 'A';
  }
  
  static inline void msg_set_net_plane(struct tipc_msg *m, char n)
  {
  	msg_set_bits(m, 5, 1, 7, (n - 'A'));
  }
  
  static inline u32 msg_linkprio(struct tipc_msg *m)
  {
  	return msg_bits(m, 5, 4, 0x1f);
  }
  
  static inline void msg_set_linkprio(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 5, 4, 0x1f, n);
  }
  
  static inline u32 msg_bearer_id(struct tipc_msg *m)
  {
  	return msg_bits(m, 5, 9, 0x7);
  }
  
  static inline void msg_set_bearer_id(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 5, 9, 0x7, n);
  }
  
  static inline u32 msg_redundant_link(struct tipc_msg *m)
  {
  	return msg_bits(m, 5, 12, 0x1);
  }
77f167fcc   Allan Stephens   tipc: make msg_se...
609
  static inline void msg_set_redundant_link(struct tipc_msg *m, u32 r)
b97bf3fd8   Per Liden   [TIPC] Initial merge
610
  {
77f167fcc   Allan Stephens   tipc: make msg_se...
611
  	msg_set_bits(m, 5, 12, 0x1, r);
b97bf3fd8   Per Liden   [TIPC] Initial merge
612
  }
3d749a6a2   Allan Stephens   tipc: Hide media-...
613
614
615
616
  static inline char *msg_media_addr(struct tipc_msg *m)
  {
  	return (char *)&m->hdr[TIPC_MEDIA_ADDR_OFFSET];
  }
b97bf3fd8   Per Liden   [TIPC] Initial merge
617

c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
618
  /*
b97bf3fd8   Per Liden   [TIPC] Initial merge
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
   * Word 9
   */
  
  static inline u32 msg_msgcnt(struct tipc_msg *m)
  {
  	return msg_bits(m, 9, 16, 0xffff);
  }
  
  static inline void msg_set_msgcnt(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 9, 16, 0xffff, n);
  }
  
  static inline u32 msg_bcast_tag(struct tipc_msg *m)
  {
  	return msg_bits(m, 9, 16, 0xffff);
  }
  
  static inline void msg_set_bcast_tag(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 9, 16, 0xffff, n);
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
641
  static inline u32 msg_max_pkt(struct tipc_msg *m)
b97bf3fd8   Per Liden   [TIPC] Initial merge
642
  {
a02cec215   Eric Dumazet   net: return opera...
643
  	return msg_bits(m, 9, 16, 0xffff) * 4;
b97bf3fd8   Per Liden   [TIPC] Initial merge
644
  }
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
645
  static inline void msg_set_max_pkt(struct tipc_msg *m, u32 n)
b97bf3fd8   Per Liden   [TIPC] Initial merge
646
647
648
649
650
651
652
653
654
655
656
657
658
  {
  	msg_set_bits(m, 9, 16, 0xffff, (n / 4));
  }
  
  static inline u32 msg_link_tolerance(struct tipc_msg *m)
  {
  	return msg_bits(m, 9, 0, 0xffff);
  }
  
  static inline void msg_set_link_tolerance(struct tipc_msg *m, u32 n)
  {
  	msg_set_bits(m, 9, 0, 0xffff, n);
  }
23461e835   Allan Stephens   tipc: Reduce foot...
659
660
661
  u32 tipc_msg_tot_importance(struct tipc_msg *m);
  void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type,
  			    u32 hsize, u32 destnode);
268969046   Allan Stephens   tipc: Avoid recom...
662
663
  int tipc_msg_build(struct tipc_msg *hdr, struct iovec const *msg_sect,
  		   u32 num_sect, unsigned int total_len,
0e65967e3   Allan Stephens   tipc: cleanup var...
664
  			    int max_size, int usrmem, struct sk_buff **buf);
b97bf3fd8   Per Liden   [TIPC] Initial merge
665

b97bf3fd8   Per Liden   [TIPC] Initial merge
666
  #endif