diff options
Diffstat (limited to 'net/tipc/node.h')
| -rw-r--r-- | net/tipc/node.h | 53 | 
1 files changed, 30 insertions, 23 deletions
| diff --git a/net/tipc/node.h b/net/tipc/node.h index cbe0e950f1cc..3d18c66b7f78 100644 --- a/net/tipc/node.h +++ b/net/tipc/node.h @@ -1,7 +1,7 @@  /*   * net/tipc/node.h: Include file for TIPC node management routines   * - * Copyright (c) 2000-2006, 2014, Ericsson AB + * Copyright (c) 2000-2006, 2014-2015, Ericsson AB   * Copyright (c) 2005, 2010-2014, Wind River Systems   * All rights reserved.   * @@ -42,10 +42,10 @@  #include "bearer.h"  #include "msg.h" -/* - * Out-of-range value for node signature - */ -#define INVALID_NODE_SIG 0x10000 +/* Out-of-range value for node signature */ +#define INVALID_NODE_SIG	0x10000 + +#define NODE_HTABLE_SIZE	512  /* Flags used to take different actions according to flag type   * TIPC_WAIT_PEER_LINKS_DOWN: wait to see that peer's links are down @@ -55,14 +55,16 @@   * TIPC_DISTRIBUTE_NAME: publish or withdraw link state name type   */  enum { +	TIPC_MSG_EVT                    = 1,  	TIPC_WAIT_PEER_LINKS_DOWN	= (1 << 1),  	TIPC_WAIT_OWN_LINKS_DOWN	= (1 << 2),  	TIPC_NOTIFY_NODE_DOWN		= (1 << 3),  	TIPC_NOTIFY_NODE_UP		= (1 << 4), -	TIPC_WAKEUP_USERS		= (1 << 5), -	TIPC_WAKEUP_BCAST_USERS		= (1 << 6), -	TIPC_NOTIFY_LINK_UP		= (1 << 7), -	TIPC_NOTIFY_LINK_DOWN		= (1 << 8) +	TIPC_WAKEUP_BCAST_USERS		= (1 << 5), +	TIPC_NOTIFY_LINK_UP		= (1 << 6), +	TIPC_NOTIFY_LINK_DOWN		= (1 << 7), +	TIPC_NAMED_MSG_EVT		= (1 << 8), +	TIPC_BCAST_MSG_EVT		= (1 << 9)  };  /** @@ -73,6 +75,7 @@ enum {   * @oos_state: state tracker for handling OOS b'cast messages   * @deferred_queue: deferred queue saved OOS b'cast message received from node   * @reasm_buf: broadcast reassembly queue head from node + * @inputq_map: bitmap indicating which inqueues should be kicked   * @recv_permitted: true if node is allowed to receive b'cast messages   */  struct tipc_node_bclink { @@ -83,6 +86,7 @@ struct tipc_node_bclink {  	u32 deferred_size;  	struct sk_buff_head deferred_queue;  	struct sk_buff *reasm_buf; +	int inputq_map;  	bool recv_permitted;  }; @@ -90,7 +94,11 @@ struct tipc_node_bclink {   * struct tipc_node - TIPC node structure   * @addr: network address of node   * @lock: spinlock governing access to structure + * @net: the applicable net namespace   * @hash: links to adjacent nodes in unsorted hash chain + * @inputq: pointer to input queue containing messages for msg event + * @namedq: pointer to name table input queue with name table messages + * @curr_link: the link holding the node lock, if any   * @active_links: pointers to active links to node   * @links: pointers to all links to node   * @action_flags: bit mask of different types of node actions @@ -106,11 +114,14 @@ struct tipc_node_bclink {  struct tipc_node {  	u32 addr;  	spinlock_t lock; +	struct net *net;  	struct hlist_node hash; +	struct sk_buff_head *inputq; +	struct sk_buff_head *namedq;  	struct tipc_link *active_links[2];  	u32 act_mtus[2];  	struct tipc_link *links[MAX_BEARERS]; -	unsigned int action_flags; +	int action_flags;  	struct tipc_node_bclink bclink;  	struct list_head list;  	int link_cnt; @@ -118,28 +129,24 @@ struct tipc_node {  	u32 signature;  	u32 link_id;  	struct list_head publ_list; -	struct sk_buff_head waiting_sks;  	struct list_head conn_sks;  	struct rcu_head rcu;  }; -extern struct list_head tipc_node_list; - -struct tipc_node *tipc_node_find(u32 addr); -struct tipc_node *tipc_node_create(u32 addr); -void tipc_node_stop(void); +struct tipc_node *tipc_node_find(struct net *net, u32 addr); +struct tipc_node *tipc_node_create(struct net *net, u32 addr); +void tipc_node_stop(struct net *net);  void tipc_node_attach_link(struct tipc_node *n_ptr, struct tipc_link *l_ptr);  void tipc_node_detach_link(struct tipc_node *n_ptr, struct tipc_link *l_ptr);  void tipc_node_link_down(struct tipc_node *n_ptr, struct tipc_link *l_ptr);  void tipc_node_link_up(struct tipc_node *n_ptr, struct tipc_link *l_ptr);  int tipc_node_active_links(struct tipc_node *n_ptr);  int tipc_node_is_up(struct tipc_node *n_ptr); -struct sk_buff *tipc_node_get_links(const void *req_tlv_area, int req_tlv_space); -struct sk_buff *tipc_node_get_nodes(const void *req_tlv_area, int req_tlv_space); -int tipc_node_get_linkname(u32 bearer_id, u32 node, char *linkname, size_t len); +int tipc_node_get_linkname(struct net *net, u32 bearer_id, u32 node, +			   char *linkname, size_t len);  void tipc_node_unlock(struct tipc_node *node); -int tipc_node_add_conn(u32 dnode, u32 port, u32 peer_port); -void tipc_node_remove_conn(u32 dnode, u32 port); +int tipc_node_add_conn(struct net *net, u32 dnode, u32 port, u32 peer_port); +void tipc_node_remove_conn(struct net *net, u32 dnode, u32 port);  int tipc_nl_node_dump(struct sk_buff *skb, struct netlink_callback *cb); @@ -154,12 +161,12 @@ static inline bool tipc_node_blocked(struct tipc_node *node)  		TIPC_NOTIFY_NODE_DOWN | TIPC_WAIT_OWN_LINKS_DOWN));  } -static inline uint tipc_node_get_mtu(u32 addr, u32 selector) +static inline uint tipc_node_get_mtu(struct net *net, u32 addr, u32 selector)  {  	struct tipc_node *node;  	u32 mtu; -	node = tipc_node_find(addr); +	node = tipc_node_find(net, addr);  	if (likely(node))  		mtu = node->act_mtus[selector & 1]; |