diff options
Diffstat (limited to 'net/tipc/msg.c')
| -rw-r--r-- | net/tipc/msg.c | 33 |
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 | ||
| 73 | void tipc_msg_init(struct net *net, struct tipc_msg *m, u32 user, u32 type, | 73 | void 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 | ||
| 91 | struct sk_buff *tipc_msg_create(struct net *net, uint user, uint type, | 89 | struct 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 | */ |
| 198 | int tipc_msg_build(struct net *net, struct tipc_msg *mhdr, struct msghdr *m, | 195 | int 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 | */ |
| 341 | bool tipc_msg_make_bundle(struct net *net, struct sk_buff_head *list, | 338 | bool 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 | */ |
| 382 | bool tipc_msg_reverse(struct net *net, struct sk_buff *buf, u32 *dnode, | 380 | bool 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)); |
