diff options
Diffstat (limited to 'net/tipc/msg.c')
-rw-r--r-- | net/tipc/msg.c | 66 |
1 files changed, 4 insertions, 62 deletions
diff --git a/net/tipc/msg.c b/net/tipc/msg.c index bb6180c4fcbb..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 |
@@ -68,20 +68,6 @@ void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type, | |||
68 | } | 68 | } |
69 | 69 | ||
70 | /** | 70 | /** |
71 | * tipc_msg_calc_data_size - determine total data size for message | ||
72 | */ | ||
73 | |||
74 | int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect) | ||
75 | { | ||
76 | int dsz = 0; | ||
77 | int i; | ||
78 | |||
79 | for (i = 0; i < num_sect; i++) | ||
80 | dsz += msg_sect[i].iov_len; | ||
81 | return dsz; | ||
82 | } | ||
83 | |||
84 | /** | ||
85 | * tipc_msg_build - create message using specified header and data | 71 | * tipc_msg_build - create message using specified header and data |
86 | * | 72 | * |
87 | * 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! |
@@ -89,18 +75,13 @@ int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect) | |||
89 | * Returns message data size or errno | 75 | * Returns message data size or errno |
90 | */ | 76 | */ |
91 | 77 | ||
92 | int tipc_msg_build(struct tipc_msg *hdr, | 78 | int tipc_msg_build(struct tipc_msg *hdr, struct iovec const *msg_sect, |
93 | struct iovec const *msg_sect, u32 num_sect, | 79 | u32 num_sect, unsigned int total_len, |
94 | int max_size, int usrmem, struct sk_buff **buf) | 80 | int max_size, int usrmem, struct sk_buff **buf) |
95 | { | 81 | { |
96 | int dsz, sz, hsz, pos, res, cnt; | 82 | int dsz, sz, hsz, pos, res, cnt; |
97 | 83 | ||
98 | dsz = tipc_msg_calc_data_size(msg_sect, num_sect); | 84 | dsz = total_len; |
99 | if (unlikely(dsz > TIPC_MAX_USER_MSG_SIZE)) { | ||
100 | *buf = NULL; | ||
101 | return -EINVAL; | ||
102 | } | ||
103 | |||
104 | pos = hsz = msg_hdr_sz(hdr); | 85 | pos = hsz = msg_hdr_sz(hdr); |
105 | sz = hsz + dsz; | 86 | sz = hsz + dsz; |
106 | msg_set_size(hdr, sz); | 87 | msg_set_size(hdr, sz); |
@@ -192,8 +173,6 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str) | |||
192 | default: | 173 | default: |
193 | tipc_printf(buf, "UNKNOWN TYPE %u", msg_type(msg)); | 174 | tipc_printf(buf, "UNKNOWN TYPE %u", msg_type(msg)); |
194 | } | 175 | } |
195 | if (msg_routed(msg) && !msg_non_seq(msg)) | ||
196 | tipc_printf(buf, "ROUT:"); | ||
197 | if (msg_reroute_cnt(msg)) | 176 | if (msg_reroute_cnt(msg)) |
198 | tipc_printf(buf, "REROUTED(%u):", | 177 | tipc_printf(buf, "REROUTED(%u):", |
199 | msg_reroute_cnt(msg)); | 178 | msg_reroute_cnt(msg)); |
@@ -210,8 +189,6 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str) | |||
210 | default: | 189 | default: |
211 | tipc_printf(buf, "UNKNOWN:%x", msg_type(msg)); | 190 | tipc_printf(buf, "UNKNOWN:%x", msg_type(msg)); |
212 | } | 191 | } |
213 | if (msg_routed(msg)) | ||
214 | tipc_printf(buf, "ROUT:"); | ||
215 | if (msg_reroute_cnt(msg)) | 192 | if (msg_reroute_cnt(msg)) |
216 | tipc_printf(buf, "REROUTED(%u):", | 193 | tipc_printf(buf, "REROUTED(%u):", |
217 | msg_reroute_cnt(msg)); | 194 | msg_reroute_cnt(msg)); |
@@ -232,13 +209,10 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str) | |||
232 | default: | 209 | default: |
233 | tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg)); | 210 | tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg)); |
234 | } | 211 | } |
235 | if (msg_routed(msg)) | ||
236 | tipc_printf(buf, "ROUT:"); | ||
237 | if (msg_reroute_cnt(msg)) | 212 | if (msg_reroute_cnt(msg)) |
238 | tipc_printf(buf, "REROUTED(%u):", msg_reroute_cnt(msg)); | 213 | tipc_printf(buf, "REROUTED(%u):", msg_reroute_cnt(msg)); |
239 | break; | 214 | break; |
240 | case LINK_PROTOCOL: | 215 | case LINK_PROTOCOL: |
241 | tipc_printf(buf, "PROT:TIM(%u):", msg_timestamp(msg)); | ||
242 | switch (msg_type(msg)) { | 216 | switch (msg_type(msg)) { |
243 | case STATE_MSG: | 217 | case STATE_MSG: |
244 | tipc_printf(buf, "STATE:"); | 218 | tipc_printf(buf, "STATE:"); |
@@ -275,33 +249,6 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str) | |||
275 | tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg)); | 249 | tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg)); |
276 | } | 250 | } |
277 | break; | 251 | break; |
278 | case ROUTE_DISTRIBUTOR: | ||
279 | tipc_printf(buf, "ROUTING_MNG:"); | ||
280 | switch (msg_type(msg)) { | ||
281 | case EXT_ROUTING_TABLE: | ||
282 | tipc_printf(buf, "EXT_TBL:"); | ||
283 | tipc_printf(buf, "TO:%x:", msg_remote_node(msg)); | ||
284 | break; | ||
285 | case LOCAL_ROUTING_TABLE: | ||
286 | tipc_printf(buf, "LOCAL_TBL:"); | ||
287 | tipc_printf(buf, "TO:%x:", msg_remote_node(msg)); | ||
288 | break; | ||
289 | case SLAVE_ROUTING_TABLE: | ||
290 | tipc_printf(buf, "DP_TBL:"); | ||
291 | tipc_printf(buf, "TO:%x:", msg_remote_node(msg)); | ||
292 | break; | ||
293 | case ROUTE_ADDITION: | ||
294 | tipc_printf(buf, "ADD:"); | ||
295 | tipc_printf(buf, "TO:%x:", msg_remote_node(msg)); | ||
296 | break; | ||
297 | case ROUTE_REMOVAL: | ||
298 | tipc_printf(buf, "REMOVE:"); | ||
299 | tipc_printf(buf, "TO:%x:", msg_remote_node(msg)); | ||
300 | break; | ||
301 | default: | ||
302 | tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg)); | ||
303 | } | ||
304 | break; | ||
305 | case LINK_CONFIG: | 252 | case LINK_CONFIG: |
306 | tipc_printf(buf, "CFG:"); | 253 | tipc_printf(buf, "CFG:"); |
307 | switch (msg_type(msg)) { | 254 | switch (msg_type(msg)) { |
@@ -381,20 +328,15 @@ void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str) | |||
381 | tipc_printf(buf, ":OPRT(%u):", msg_origport(msg)); | 328 | tipc_printf(buf, ":OPRT(%u):", msg_origport(msg)); |
382 | tipc_printf(buf, ":DPRT(%u):", msg_destport(msg)); | 329 | tipc_printf(buf, ":DPRT(%u):", msg_destport(msg)); |
383 | } | 330 | } |
384 | if (msg_routed(msg) && !msg_non_seq(msg)) | ||
385 | tipc_printf(buf, ":TSEQN(%u)", msg_transp_seqno(msg)); | ||
386 | } | 331 | } |
387 | if (msg_user(msg) == NAME_DISTRIBUTOR) { | 332 | if (msg_user(msg) == NAME_DISTRIBUTOR) { |
388 | tipc_printf(buf, ":ONOD(%x):", msg_orignode(msg)); | 333 | tipc_printf(buf, ":ONOD(%x):", msg_orignode(msg)); |
389 | tipc_printf(buf, ":DNOD(%x):", msg_destnode(msg)); | 334 | tipc_printf(buf, ":DNOD(%x):", msg_destnode(msg)); |
390 | if (msg_routed(msg)) | ||
391 | tipc_printf(buf, ":CSEQN(%u)", msg_transp_seqno(msg)); | ||
392 | } | 335 | } |
393 | 336 | ||
394 | if (msg_user(msg) == LINK_CONFIG) { | 337 | if (msg_user(msg) == LINK_CONFIG) { |
395 | u32 *raw = (u32 *)msg; | 338 | u32 *raw = (u32 *)msg; |
396 | struct tipc_media_addr *orig = (struct tipc_media_addr *)&raw[5]; | 339 | struct tipc_media_addr *orig = (struct tipc_media_addr *)&raw[5]; |
397 | tipc_printf(buf, ":REQL(%u):", msg_req_links(msg)); | ||
398 | tipc_printf(buf, ":DDOM(%x):", msg_dest_domain(msg)); | 340 | tipc_printf(buf, ":DDOM(%x):", msg_dest_domain(msg)); |
399 | tipc_printf(buf, ":NETID(%u):", msg_bc_netid(msg)); | 341 | tipc_printf(buf, ":NETID(%u):", msg_bc_netid(msg)); |
400 | tipc_media_addr_printf(buf, orig); | 342 | tipc_media_addr_printf(buf, orig); |