aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/msg.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /net/tipc/msg.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'net/tipc/msg.c')
-rw-r--r--net/tipc/msg.c127
1 files changed, 32 insertions, 95 deletions
diff --git a/net/tipc/msg.c b/net/tipc/msg.c
index 381063817b41..03e57bf92c73 100644
--- a/net/tipc/msg.c
+++ b/net/tipc/msg.c
@@ -2,7 +2,7 @@
2 * net/tipc/msg.c: TIPC message header routines 2 * net/tipc/msg.c: TIPC message header routines
3 * 3 *
4 * Copyright (c) 2000-2006, Ericsson AB 4 * Copyright (c) 2000-2006, Ericsson AB
5 * Copyright (c) 2005, Wind River Systems 5 * Copyright (c) 2005, 2010-2011, Wind River Systems
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
8 * Redistribution and use in source and binary forms, with or without 8 * Redistribution and use in source and binary forms, with or without
@@ -35,10 +35,7 @@
35 */ 35 */
36 36
37#include "core.h" 37#include "core.h"
38#include "addr.h"
39#include "dbg.h"
40#include "msg.h" 38#include "msg.h"
41#include "bearer.h"
42 39
43u32 tipc_msg_tot_importance(struct tipc_msg *m) 40u32 tipc_msg_tot_importance(struct tipc_msg *m)
44{ 41{
@@ -71,20 +68,6 @@ void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type,
71} 68}
72 69
73/** 70/**
74 * tipc_msg_calc_data_size - determine total data size for message
75 */
76
77int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect)
78{
79 int dsz = 0;
80 int i;
81
82 for (i = 0; i < num_sect; i++)
83 dsz += msg_sect[i].iov_len;
84 return dsz;
85}
86
87/**
88 * tipc_msg_build - create message using specified header and data 71 * tipc_msg_build - create message using specified header and data
89 * 72 *
90 * Note: Caller must not hold any locks in case copy_from_user() is interrupted! 73 * Note: Caller must not hold any locks in case copy_from_user() is interrupted!
@@ -92,18 +75,13 @@ int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect)
92 * Returns message data size or errno 75 * Returns message data size or errno
93 */ 76 */
94 77
95int tipc_msg_build(struct tipc_msg *hdr, 78int tipc_msg_build(struct tipc_msg *hdr, struct iovec const *msg_sect,
96 struct iovec const *msg_sect, u32 num_sect, 79 u32 num_sect, unsigned int total_len,
97 int max_size, int usrmem, struct sk_buff** buf) 80 int max_size, int usrmem, struct sk_buff **buf)
98{ 81{
99 int dsz, sz, hsz, pos, res, cnt; 82 int dsz, sz, hsz, pos, res, cnt;
100 83
101 dsz = tipc_msg_calc_data_size(msg_sect, num_sect); 84 dsz = total_len;
102 if (unlikely(dsz > TIPC_MAX_USER_MSG_SIZE)) {
103 *buf = NULL;
104 return -EINVAL;
105 }
106
107 pos = hsz = msg_hdr_sz(hdr); 85 pos = hsz = msg_hdr_sz(hdr);
108 sz = hsz + dsz; 86 sz = hsz + dsz;
109 msg_set_size(hdr, sz); 87 msg_set_size(hdr, sz);
@@ -112,7 +90,7 @@ int tipc_msg_build(struct tipc_msg *hdr,
112 return dsz; 90 return dsz;
113 } 91 }
114 92
115 *buf = buf_acquire(sz); 93 *buf = tipc_buf_acquire(sz);
116 if (!(*buf)) 94 if (!(*buf))
117 return -ENOMEM; 95 return -ENOMEM;
118 skb_copy_to_linear_data(*buf, hdr, hsz); 96 skb_copy_to_linear_data(*buf, hdr, hsz);
@@ -140,6 +118,7 @@ int tipc_msg_build(struct tipc_msg *hdr,
140void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str) 118void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
141{ 119{
142 u32 usr = msg_user(msg); 120 u32 usr = msg_user(msg);
121 tipc_printf(buf, KERN_DEBUG);
143 tipc_printf(buf, str); 122 tipc_printf(buf, str);
144 123
145 switch (usr) { 124 switch (usr) {
@@ -163,10 +142,10 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
163 tipc_printf(buf, "LAST:"); 142 tipc_printf(buf, "LAST:");
164 break; 143 break;
165 default: 144 default:
166 tipc_printf(buf, "UNKNOWN:%x",msg_type(msg)); 145 tipc_printf(buf, "UNKNOWN:%x", msg_type(msg));
167 146
168 } 147 }
169 tipc_printf(buf, "NO(%u/%u):",msg_long_msgno(msg), 148 tipc_printf(buf, "NO(%u/%u):", msg_long_msgno(msg),
170 msg_fragm_no(msg)); 149 msg_fragm_no(msg));
171 break; 150 break;
172 case TIPC_LOW_IMPORTANCE: 151 case TIPC_LOW_IMPORTANCE:
@@ -192,10 +171,8 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
192 tipc_printf(buf, "DIR:"); 171 tipc_printf(buf, "DIR:");
193 break; 172 break;
194 default: 173 default:
195 tipc_printf(buf, "UNKNOWN TYPE %u",msg_type(msg)); 174 tipc_printf(buf, "UNKNOWN TYPE %u", msg_type(msg));
196 } 175 }
197 if (msg_routed(msg) && !msg_non_seq(msg))
198 tipc_printf(buf, "ROUT:");
199 if (msg_reroute_cnt(msg)) 176 if (msg_reroute_cnt(msg))
200 tipc_printf(buf, "REROUTED(%u):", 177 tipc_printf(buf, "REROUTED(%u):",
201 msg_reroute_cnt(msg)); 178 msg_reroute_cnt(msg));
@@ -210,10 +187,8 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
210 tipc_printf(buf, "WDRW:"); 187 tipc_printf(buf, "WDRW:");
211 break; 188 break;
212 default: 189 default:
213 tipc_printf(buf, "UNKNOWN:%x",msg_type(msg)); 190 tipc_printf(buf, "UNKNOWN:%x", msg_type(msg));
214 } 191 }
215 if (msg_routed(msg))
216 tipc_printf(buf, "ROUT:");
217 if (msg_reroute_cnt(msg)) 192 if (msg_reroute_cnt(msg))
218 tipc_printf(buf, "REROUTED(%u):", 193 tipc_printf(buf, "REROUTED(%u):",
219 msg_reroute_cnt(msg)); 194 msg_reroute_cnt(msg));
@@ -229,39 +204,36 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
229 break; 204 break;
230 case CONN_ACK: 205 case CONN_ACK:
231 tipc_printf(buf, "CONN_ACK:"); 206 tipc_printf(buf, "CONN_ACK:");
232 tipc_printf(buf, "ACK(%u):",msg_msgcnt(msg)); 207 tipc_printf(buf, "ACK(%u):", msg_msgcnt(msg));
233 break; 208 break;
234 default: 209 default:
235 tipc_printf(buf, "UNKNOWN TYPE:%x",msg_type(msg)); 210 tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg));
236 } 211 }
237 if (msg_routed(msg))
238 tipc_printf(buf, "ROUT:");
239 if (msg_reroute_cnt(msg)) 212 if (msg_reroute_cnt(msg))
240 tipc_printf(buf, "REROUTED(%u):",msg_reroute_cnt(msg)); 213 tipc_printf(buf, "REROUTED(%u):", msg_reroute_cnt(msg));
241 break; 214 break;
242 case LINK_PROTOCOL: 215 case LINK_PROTOCOL:
243 tipc_printf(buf, "PROT:TIM(%u):",msg_timestamp(msg));
244 switch (msg_type(msg)) { 216 switch (msg_type(msg)) {
245 case STATE_MSG: 217 case STATE_MSG:
246 tipc_printf(buf, "STATE:"); 218 tipc_printf(buf, "STATE:");
247 tipc_printf(buf, "%s:",msg_probe(msg) ? "PRB" :""); 219 tipc_printf(buf, "%s:", msg_probe(msg) ? "PRB" : "");
248 tipc_printf(buf, "NXS(%u):",msg_next_sent(msg)); 220 tipc_printf(buf, "NXS(%u):", msg_next_sent(msg));
249 tipc_printf(buf, "GAP(%u):",msg_seq_gap(msg)); 221 tipc_printf(buf, "GAP(%u):", msg_seq_gap(msg));
250 tipc_printf(buf, "LSTBC(%u):",msg_last_bcast(msg)); 222 tipc_printf(buf, "LSTBC(%u):", msg_last_bcast(msg));
251 break; 223 break;
252 case RESET_MSG: 224 case RESET_MSG:
253 tipc_printf(buf, "RESET:"); 225 tipc_printf(buf, "RESET:");
254 if (msg_size(msg) != msg_hdr_sz(msg)) 226 if (msg_size(msg) != msg_hdr_sz(msg))
255 tipc_printf(buf, "BEAR:%s:",msg_data(msg)); 227 tipc_printf(buf, "BEAR:%s:", msg_data(msg));
256 break; 228 break;
257 case ACTIVATE_MSG: 229 case ACTIVATE_MSG:
258 tipc_printf(buf, "ACTIVATE:"); 230 tipc_printf(buf, "ACTIVATE:");
259 break; 231 break;
260 default: 232 default:
261 tipc_printf(buf, "UNKNOWN TYPE:%x",msg_type(msg)); 233 tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg));
262 } 234 }
263 tipc_printf(buf, "PLANE(%c):",msg_net_plane(msg)); 235 tipc_printf(buf, "PLANE(%c):", msg_net_plane(msg));
264 tipc_printf(buf, "SESS(%u):",msg_session(msg)); 236 tipc_printf(buf, "SESS(%u):", msg_session(msg));
265 break; 237 break;
266 case CHANGEOVER_PROTOCOL: 238 case CHANGEOVER_PROTOCOL:
267 tipc_printf(buf, "TUNL:"); 239 tipc_printf(buf, "TUNL:");
@@ -271,37 +243,10 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
271 break; 243 break;
272 case ORIGINAL_MSG: 244 case ORIGINAL_MSG:
273 tipc_printf(buf, "ORIG:"); 245 tipc_printf(buf, "ORIG:");
274 tipc_printf(buf, "EXP(%u)",msg_msgcnt(msg)); 246 tipc_printf(buf, "EXP(%u)", msg_msgcnt(msg));
275 break; 247 break;
276 default: 248 default:
277 tipc_printf(buf, "UNKNOWN TYPE:%x",msg_type(msg)); 249 tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg));
278 }
279 break;
280 case ROUTE_DISTRIBUTOR:
281 tipc_printf(buf, "ROUTING_MNG:");
282 switch (msg_type(msg)) {
283 case EXT_ROUTING_TABLE:
284 tipc_printf(buf, "EXT_TBL:");
285 tipc_printf(buf, "TO:%x:",msg_remote_node(msg));
286 break;
287 case LOCAL_ROUTING_TABLE:
288 tipc_printf(buf, "LOCAL_TBL:");
289 tipc_printf(buf, "TO:%x:",msg_remote_node(msg));
290 break;
291 case SLAVE_ROUTING_TABLE:
292 tipc_printf(buf, "DP_TBL:");
293 tipc_printf(buf, "TO:%x:",msg_remote_node(msg));
294 break;
295 case ROUTE_ADDITION:
296 tipc_printf(buf, "ADD:");
297 tipc_printf(buf, "TO:%x:",msg_remote_node(msg));
298 break;
299 case ROUTE_REMOVAL:
300 tipc_printf(buf, "REMOVE:");
301 tipc_printf(buf, "TO:%x:",msg_remote_node(msg));
302 break;
303 default:
304 tipc_printf(buf, "UNKNOWN TYPE:%x",msg_type(msg));
305 } 250 }
306 break; 251 break;
307 case LINK_CONFIG: 252 case LINK_CONFIG:
@@ -314,7 +259,7 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
314 tipc_printf(buf, "DSC_RESP:"); 259 tipc_printf(buf, "DSC_RESP:");
315 break; 260 break;
316 default: 261 default:
317 tipc_printf(buf, "UNKNOWN TYPE:%x:",msg_type(msg)); 262 tipc_printf(buf, "UNKNOWN TYPE:%x:", msg_type(msg));
318 break; 263 break;
319 } 264 }
320 break; 265 break;
@@ -350,7 +295,8 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
350 tipc_printf(buf, "UNKNOWN ERROR(%x):", 295 tipc_printf(buf, "UNKNOWN ERROR(%x):",
351 msg_errcode(msg)); 296 msg_errcode(msg));
352 } 297 }
353 default:{} 298 default:
299 break;
354 } 300 }
355 301
356 tipc_printf(buf, "HZ(%u):", msg_hdr_sz(msg)); 302 tipc_printf(buf, "HZ(%u):", msg_hdr_sz(msg));
@@ -359,9 +305,8 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
359 305
360 if (msg_non_seq(msg)) 306 if (msg_non_seq(msg))
361 tipc_printf(buf, "NOSEQ:"); 307 tipc_printf(buf, "NOSEQ:");
362 else { 308 else
363 tipc_printf(buf, "ACK(%u):", msg_ack(msg)); 309 tipc_printf(buf, "ACK(%u):", msg_ack(msg));
364 }
365 tipc_printf(buf, "BACK(%u):", msg_bcast_ack(msg)); 310 tipc_printf(buf, "BACK(%u):", msg_bcast_ack(msg));
366 tipc_printf(buf, "PRND(%x)", msg_prevnode(msg)); 311 tipc_printf(buf, "PRND(%x)", msg_prevnode(msg));
367 312
@@ -383,21 +328,15 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
383 tipc_printf(buf, ":OPRT(%u):", msg_origport(msg)); 328 tipc_printf(buf, ":OPRT(%u):", msg_origport(msg));
384 tipc_printf(buf, ":DPRT(%u):", msg_destport(msg)); 329 tipc_printf(buf, ":DPRT(%u):", msg_destport(msg));
385 } 330 }
386 if (msg_routed(msg) && !msg_non_seq(msg))
387 tipc_printf(buf, ":TSEQN(%u)", msg_transp_seqno(msg));
388 } 331 }
389 if (msg_user(msg) == NAME_DISTRIBUTOR) { 332 if (msg_user(msg) == NAME_DISTRIBUTOR) {
390 tipc_printf(buf, ":ONOD(%x):", msg_orignode(msg)); 333 tipc_printf(buf, ":ONOD(%x):", msg_orignode(msg));
391 tipc_printf(buf, ":DNOD(%x):", msg_destnode(msg)); 334 tipc_printf(buf, ":DNOD(%x):", msg_destnode(msg));
392 if (msg_routed(msg)) {
393 tipc_printf(buf, ":CSEQN(%u)", msg_transp_seqno(msg));
394 }
395 } 335 }
396 336
397 if (msg_user(msg) == LINK_CONFIG) { 337 if (msg_user(msg) == LINK_CONFIG) {
398 u32* raw = (u32*)msg; 338 u32 *raw = (u32 *)msg;
399 struct tipc_media_addr* orig = (struct tipc_media_addr*)&raw[5]; 339 struct tipc_media_addr *orig = (struct tipc_media_addr *)&raw[5];
400 tipc_printf(buf, ":REQL(%u):", msg_req_links(msg));
401 tipc_printf(buf, ":DDOM(%x):", msg_dest_domain(msg)); 340 tipc_printf(buf, ":DDOM(%x):", msg_dest_domain(msg));
402 tipc_printf(buf, ":NETID(%u):", msg_bc_netid(msg)); 341 tipc_printf(buf, ":NETID(%u):", msg_bc_netid(msg));
403 tipc_media_addr_printf(buf, orig); 342 tipc_media_addr_printf(buf, orig);
@@ -407,12 +346,10 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
407 tipc_printf(buf, "TO(%u):", msg_bcgap_to(msg)); 346 tipc_printf(buf, "TO(%u):", msg_bcgap_to(msg));
408 } 347 }
409 tipc_printf(buf, "\n"); 348 tipc_printf(buf, "\n");
410 if ((usr == CHANGEOVER_PROTOCOL) && (msg_msgcnt(msg))) { 349 if ((usr == CHANGEOVER_PROTOCOL) && (msg_msgcnt(msg)))
411 tipc_msg_dbg(buf, msg_get_wrapped(msg), " /"); 350 tipc_msg_dbg(buf, msg_get_wrapped(msg), " /");
412 } 351 if ((usr == MSG_FRAGMENTER) && (msg_type(msg) == FIRST_FRAGMENT))
413 if ((usr == MSG_FRAGMENTER) && (msg_type(msg) == FIRST_FRAGMENT)) {
414 tipc_msg_dbg(buf, msg_get_wrapped(msg), " /"); 352 tipc_msg_dbg(buf, msg_get_wrapped(msg), " /");
415 }
416} 353}
417 354
418#endif 355#endif