aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/msg.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/msg.c')
-rw-r--r--net/tipc/msg.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/net/tipc/msg.c b/net/tipc/msg.c
index da67c8d3edc6..940d74197b8c 100644
--- a/net/tipc/msg.c
+++ b/net/tipc/msg.c
@@ -70,25 +70,23 @@ struct sk_buff *tipc_buf_acquire(u32 size)
70 return skb; 70 return skb;
71} 71}
72 72
73void tipc_msg_init(struct net *net, struct tipc_msg *m, u32 user, u32 type, 73void tipc_msg_init(u32 own_node, struct tipc_msg *m, u32 user, u32 type,
74 u32 hsize, u32 destnode) 74 u32 hsize, u32 dnode)
75{ 75{
76 struct tipc_net *tn = net_generic(net, tipc_net_id);
77
78 memset(m, 0, hsize); 76 memset(m, 0, hsize);
79 msg_set_version(m); 77 msg_set_version(m);
80 msg_set_user(m, user); 78 msg_set_user(m, user);
81 msg_set_hdr_sz(m, hsize); 79 msg_set_hdr_sz(m, hsize);
82 msg_set_size(m, hsize); 80 msg_set_size(m, hsize);
83 msg_set_prevnode(m, tn->own_addr); 81 msg_set_prevnode(m, own_node);
84 msg_set_type(m, type); 82 msg_set_type(m, type);
85 if (hsize > SHORT_H_SIZE) { 83 if (hsize > SHORT_H_SIZE) {
86 msg_set_orignode(m, tn->own_addr); 84 msg_set_orignode(m, own_node);
87 msg_set_destnode(m, destnode); 85 msg_set_destnode(m, dnode);
88 } 86 }
89} 87}
90 88
91struct sk_buff *tipc_msg_create(struct net *net, uint user, uint type, 89struct sk_buff *tipc_msg_create(uint user, uint type,
92 uint hdr_sz, uint data_sz, u32 dnode, 90 uint hdr_sz, uint data_sz, u32 dnode,
93 u32 onode, u32 dport, u32 oport, int errcode) 91 u32 onode, u32 dport, u32 oport, int errcode)
94{ 92{
@@ -100,9 +98,8 @@ struct sk_buff *tipc_msg_create(struct net *net, uint user, uint type,
100 return NULL; 98 return NULL;
101 99
102 msg = buf_msg(buf); 100 msg = buf_msg(buf);
103 tipc_msg_init(net, msg, user, type, hdr_sz, dnode); 101 tipc_msg_init(onode, msg, user, type, hdr_sz, dnode);
104 msg_set_size(msg, hdr_sz + data_sz); 102 msg_set_size(msg, hdr_sz + data_sz);
105 msg_set_prevnode(msg, onode);
106 msg_set_origport(msg, oport); 103 msg_set_origport(msg, oport);
107 msg_set_destport(msg, dport); 104 msg_set_destport(msg, dport);
108 msg_set_errcode(msg, errcode); 105 msg_set_errcode(msg, errcode);
@@ -195,7 +192,7 @@ err:
195 * 192 *
196 * Returns message data size or errno: -ENOMEM, -EFAULT 193 * Returns message data size or errno: -ENOMEM, -EFAULT
197 */ 194 */
198int tipc_msg_build(struct net *net, struct tipc_msg *mhdr, struct msghdr *m, 195int tipc_msg_build(struct tipc_msg *mhdr, struct msghdr *m,
199 int offset, int dsz, int pktmax, struct sk_buff_head *list) 196 int offset, int dsz, int pktmax, struct sk_buff_head *list)
200{ 197{
201 int mhsz = msg_hdr_sz(mhdr); 198 int mhsz = msg_hdr_sz(mhdr);
@@ -227,8 +224,8 @@ int tipc_msg_build(struct net *net, struct tipc_msg *mhdr, struct msghdr *m,
227 } 224 }
228 225
229 /* Prepare reusable fragment header */ 226 /* Prepare reusable fragment header */
230 tipc_msg_init(net, &pkthdr, MSG_FRAGMENTER, FIRST_FRAGMENT, INT_H_SIZE, 227 tipc_msg_init(msg_prevnode(mhdr), &pkthdr, MSG_FRAGMENTER,
231 msg_destnode(mhdr)); 228 FIRST_FRAGMENT, INT_H_SIZE, msg_destnode(mhdr));
232 msg_set_size(&pkthdr, pktmax); 229 msg_set_size(&pkthdr, pktmax);
233 msg_set_fragm_no(&pkthdr, pktno); 230 msg_set_fragm_no(&pkthdr, pktno);
234 231
@@ -338,7 +335,7 @@ bool tipc_msg_bundle(struct sk_buff_head *list, struct sk_buff *skb, u32 mtu)
338 * Replaces buffer if successful 335 * Replaces buffer if successful
339 * Returns true if success, otherwise false 336 * Returns true if success, otherwise false
340 */ 337 */
341bool tipc_msg_make_bundle(struct net *net, struct sk_buff_head *list, 338bool tipc_msg_make_bundle(struct sk_buff_head *list,
342 struct sk_buff *skb, u32 mtu, u32 dnode) 339 struct sk_buff *skb, u32 mtu, u32 dnode)
343{ 340{
344 struct sk_buff *bskb; 341 struct sk_buff *bskb;
@@ -362,7 +359,8 @@ bool tipc_msg_make_bundle(struct net *net, struct sk_buff_head *list,
362 359
363 skb_trim(bskb, INT_H_SIZE); 360 skb_trim(bskb, INT_H_SIZE);
364 bmsg = buf_msg(bskb); 361 bmsg = buf_msg(bskb);
365 tipc_msg_init(net, bmsg, MSG_BUNDLER, 0, INT_H_SIZE, dnode); 362 tipc_msg_init(msg_prevnode(msg), bmsg, MSG_BUNDLER, 0,
363 INT_H_SIZE, dnode);
366 msg_set_seqno(bmsg, msg_seqno(msg)); 364 msg_set_seqno(bmsg, msg_seqno(msg));
367 msg_set_ack(bmsg, msg_ack(msg)); 365 msg_set_ack(bmsg, msg_ack(msg));
368 msg_set_bcast_ack(bmsg, msg_bcast_ack(msg)); 366 msg_set_bcast_ack(bmsg, msg_bcast_ack(msg));
@@ -379,10 +377,9 @@ bool tipc_msg_make_bundle(struct net *net, struct sk_buff_head *list,
379 * Consumes buffer if failure 377 * Consumes buffer if failure
380 * Returns true if success, otherwise false 378 * Returns true if success, otherwise false
381 */ 379 */
382bool tipc_msg_reverse(struct net *net, struct sk_buff *buf, u32 *dnode, 380bool tipc_msg_reverse(u32 own_addr, struct sk_buff *buf, u32 *dnode,
383 int err) 381 int err)
384{ 382{
385 struct tipc_net *tn = net_generic(net, tipc_net_id);
386 struct tipc_msg *msg = buf_msg(buf); 383 struct tipc_msg *msg = buf_msg(buf);
387 uint imp = msg_importance(msg); 384 uint imp = msg_importance(msg);
388 struct tipc_msg ohdr; 385 struct tipc_msg ohdr;
@@ -402,7 +399,7 @@ bool tipc_msg_reverse(struct net *net, struct sk_buff *buf, u32 *dnode,
402 msg_set_errcode(msg, err); 399 msg_set_errcode(msg, err);
403 msg_set_origport(msg, msg_destport(&ohdr)); 400 msg_set_origport(msg, msg_destport(&ohdr));
404 msg_set_destport(msg, msg_origport(&ohdr)); 401 msg_set_destport(msg, msg_origport(&ohdr));
405 msg_set_prevnode(msg, tn->own_addr); 402 msg_set_prevnode(msg, own_addr);
406 if (!msg_short(msg)) { 403 if (!msg_short(msg)) {
407 msg_set_orignode(msg, msg_destnode(&ohdr)); 404 msg_set_orignode(msg, msg_destnode(&ohdr));
408 msg_set_destnode(msg, msg_orignode(&ohdr)); 405 msg_set_destnode(msg, msg_orignode(&ohdr));