diff options
Diffstat (limited to 'net/tipc/node.h')
| -rw-r--r-- | net/tipc/node.h | 95 | 
1 files changed, 55 insertions, 40 deletions
diff --git a/net/tipc/node.h b/net/tipc/node.h index 3c189b35b10..9087063793f 100644 --- a/net/tipc/node.h +++ b/net/tipc/node.h @@ -2,7 +2,7 @@   * net/tipc/node.h: Include file for TIPC node management routines   *   * Copyright (c) 2000-2006, Ericsson AB - * Copyright (c) 2005, 2010-2011, Wind River Systems + * Copyright (c) 2005, 2010-2014, Wind River Systems   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -47,85 +47,100 @@   */  #define INVALID_NODE_SIG 0x10000 -/* Flags used to block (re)establishment of contact with a neighboring node */ -#define WAIT_PEER_DOWN	0x0001	/* wait to see that peer's links are down */ -#define WAIT_NAMES_GONE	0x0002	/* wait for peer's publications to be purged */ -#define WAIT_NODE_DOWN	0x0004	/* wait until peer node is declared down */ +/* Flags used to take different actions according to flag type + * TIPC_WAIT_PEER_LINKS_DOWN: wait to see that peer's links are down + * TIPC_WAIT_OWN_LINKS_DOWN: wait until peer node is declared down + * TIPC_NOTIFY_NODE_DOWN: notify node is down + * TIPC_NOTIFY_NODE_UP: notify node is up + */ +enum { +	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) +}; + +/** + * struct tipc_node_bclink - TIPC node bclink structure + * @acked: sequence # of last outbound b'cast message acknowledged by node + * @last_in: sequence # of last in-sequence b'cast message received from node + * @last_sent: sequence # of last b'cast message sent by node + * @oos_state: state tracker for handling OOS b'cast messages + * @deferred_size: number of OOS b'cast messages in deferred queue + * @deferred_head: oldest OOS b'cast message received from node + * @deferred_tail: newest OOS b'cast message received from node + * @reasm_buf: broadcast reassembly queue head from node + * @recv_permitted: true if node is allowed to receive b'cast messages + */ +struct tipc_node_bclink { +	u32 acked; +	u32 last_in; +	u32 last_sent; +	u32 oos_state; +	u32 deferred_size; +	struct sk_buff *deferred_head; +	struct sk_buff *deferred_tail; +	struct sk_buff *reasm_buf; +	bool recv_permitted; +};  /**   * struct tipc_node - TIPC node structure   * @addr: network address of node   * @lock: spinlock governing access to structure   * @hash: links to adjacent nodes in unsorted hash chain - * @list: links to adjacent nodes in sorted list of cluster's nodes - * @nsub: list of "node down" subscriptions monitoring node   * @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 + * @bclink: broadcast-related info + * @list: links to adjacent nodes in sorted list of cluster's nodes   * @working_links: number of working links to node (both active and standby) - * @block_setup: bit mask of conditions preventing link establishment to node   * @link_cnt: number of links to node - * @permit_changeover: non-zero if node has redundant links to this system   * @signature: node instance identifier - * @bclink: broadcast-related info - *    @acked: sequence # of last outbound b'cast message acknowledged by node - *    @last_in: sequence # of last in-sequence b'cast message received from node - *    @last_sent: sequence # of last b'cast message sent by node - *    @oos_state: state tracker for handling OOS b'cast messages - *    @deferred_size: number of OOS b'cast messages in deferred queue - *    @deferred_head: oldest OOS b'cast message received from node - *    @deferred_tail: newest OOS b'cast message received from node - *    @defragm: list of partially reassembled b'cast message fragments from node - *    @recv_permitted: true if node is allowed to receive b'cast messages + * @nsub: list of "node down" subscriptions monitoring node + * @rcu: rcu struct for tipc_node   */  struct tipc_node {  	u32 addr;  	spinlock_t lock;  	struct hlist_node hash; -	struct list_head list; -	struct list_head nsub;  	struct tipc_link *active_links[2];  	struct tipc_link *links[MAX_BEARERS]; +	unsigned int action_flags; +	struct tipc_node_bclink bclink; +	struct list_head list;  	int link_cnt;  	int working_links; -	int block_setup; -	int permit_changeover;  	u32 signature; -	struct { -		u32 acked; -		u32 last_in; -		u32 last_sent; -		u32 oos_state; -		u32 deferred_size; -		struct sk_buff *deferred_head; -		struct sk_buff *deferred_tail; -		struct sk_buff *defragm; -		bool recv_permitted; -	} bclink; +	struct list_head nsub; +	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_delete(struct tipc_node *n_ptr); +void tipc_node_stop(void);  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_redundant_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); +void tipc_node_unlock(struct tipc_node *node); -static inline void tipc_node_lock(struct tipc_node *n_ptr) +static inline void tipc_node_lock(struct tipc_node *node)  { -	spin_lock_bh(&n_ptr->lock); +	spin_lock_bh(&node->lock);  } -static inline void tipc_node_unlock(struct tipc_node *n_ptr) +static inline bool tipc_node_blocked(struct tipc_node *node)  { -	spin_unlock_bh(&n_ptr->lock); +	return (node->action_flags & (TIPC_WAIT_PEER_LINKS_DOWN | +		TIPC_NOTIFY_NODE_DOWN | TIPC_WAIT_OWN_LINKS_DOWN));  }  #endif  | 
