diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /net/tipc/msg.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (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.c | 127 |
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 | ||
43 | u32 tipc_msg_tot_importance(struct tipc_msg *m) | 40 | u32 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 | |||
77 | int 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 | ||
95 | int tipc_msg_build(struct tipc_msg *hdr, | 78 | int 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, | |||
140 | void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str) | 118 | void 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 |