diff options
Diffstat (limited to 'net/tipc/msg.h')
| -rw-r--r-- | net/tipc/msg.h | 46 | 
1 files changed, 11 insertions, 35 deletions
| diff --git a/net/tipc/msg.h b/net/tipc/msg.h index a82c5848d4bc..55778a0aebf3 100644 --- a/net/tipc/msg.h +++ b/net/tipc/msg.h @@ -112,6 +112,7 @@ struct tipc_skb_cb {  	bool wakeup_pending;  	u16 chain_sz;  	u16 chain_imp; +	u16 ackers;  };  #define TIPC_SKB_CB(__skb) ((struct tipc_skb_cb *)&((__skb)->cb[0])) @@ -357,7 +358,7 @@ static inline u32 msg_importance(struct tipc_msg *m)  	if (likely((usr <= TIPC_CRITICAL_IMPORTANCE) && !msg_errcode(m)))  		return usr;  	if ((usr == MSG_FRAGMENTER) || (usr == MSG_BUNDLER)) -		return msg_bits(m, 5, 13, 0x7); +		return msg_bits(m, 9, 0, 0x7);  	return TIPC_SYSTEM_IMPORTANCE;  } @@ -366,7 +367,7 @@ static inline void msg_set_importance(struct tipc_msg *m, u32 i)  	int usr = msg_user(m);  	if (likely((usr == MSG_FRAGMENTER) || (usr == MSG_BUNDLER))) -		msg_set_bits(m, 5, 13, 0x7, i); +		msg_set_bits(m, 9, 0, 0x7, i);  	else if (i < TIPC_SYSTEM_IMPORTANCE)  		msg_set_user(m, i);  	else @@ -600,6 +601,11 @@ static inline u32 msg_last_bcast(struct tipc_msg *m)  	return msg_bits(m, 4, 16, 0xffff);  } +static inline u32 msg_bc_snd_nxt(struct tipc_msg *m) +{ +	return msg_last_bcast(m) + 1; +} +  static inline void msg_set_last_bcast(struct tipc_msg *m, u32 n)  {  	msg_set_bits(m, 4, 16, 0xffff, n); @@ -789,7 +795,9 @@ bool tipc_msg_extract(struct sk_buff *skb, struct sk_buff **iskb, int *pos);  int tipc_msg_build(struct tipc_msg *mhdr, struct msghdr *m,  		   int offset, int dsz, int mtu, struct sk_buff_head *list);  bool tipc_msg_lookup_dest(struct net *net, struct sk_buff *skb, int *err); -struct sk_buff *tipc_msg_reassemble(struct sk_buff_head *list); +bool tipc_msg_reassemble(struct sk_buff_head *list, struct sk_buff_head *rcvq); +void __tipc_skb_queue_sorted(struct sk_buff_head *list, u16 seqno, +			     struct sk_buff *skb);  static inline u16 buf_seqno(struct sk_buff *skb)  { @@ -862,38 +870,6 @@ static inline struct sk_buff *tipc_skb_dequeue(struct sk_buff_head *list,  	return skb;  } -/* tipc_skb_queue_sorted(); sort pkt into list according to sequence number - * @list: list to be appended to - * @skb: buffer to add - * Returns true if queue should treated further, otherwise false - */ -static inline bool __tipc_skb_queue_sorted(struct sk_buff_head *list, -					   struct sk_buff *skb) -{ -	struct sk_buff *_skb, *tmp; -	struct tipc_msg *hdr = buf_msg(skb); -	u16 seqno = msg_seqno(hdr); - -	if (skb_queue_empty(list) || (msg_user(hdr) == LINK_PROTOCOL)) { -		__skb_queue_head(list, skb); -		return true; -	} -	if (likely(less(seqno, buf_seqno(skb_peek(list))))) { -		__skb_queue_head(list, skb); -		return true; -	} -	if (!more(seqno, buf_seqno(skb_peek_tail(list)))) { -		skb_queue_walk_safe(list, _skb, tmp) { -			if (likely(less(seqno, buf_seqno(_skb)))) { -				__skb_queue_before(list, _skb, skb); -				return true; -			} -		} -	} -	__skb_queue_tail(list, skb); -	return false; -} -  /* tipc_skb_queue_splice_tail - append an skb list to lock protected list   * @list: the new list to append. Not lock protected   * @head: target list. Lock protected. |