Blame view

net/tipc/node.h 5.49 KB
b97bf3fd8   Per Liden   [TIPC] Initial merge
1
2
  /*
   * net/tipc/node.h: Include file for TIPC node management routines
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
3
   *
593a5f22d   Per Liden   [TIPC] More updat...
4
   * Copyright (c) 2000-2006, Ericsson AB
b97bf3fd8   Per Liden   [TIPC] Initial merge
5
   * Copyright (c) 2005, Wind River Systems
b97bf3fd8   Per Liden   [TIPC] Initial merge
6
7
   * All rights reserved.
   *
9ea1fd3c1   Per Liden   [TIPC] License he...
8
   * Redistribution and use in source and binary forms, with or without
b97bf3fd8   Per Liden   [TIPC] Initial merge
9
10
   * modification, are permitted provided that the following conditions are met:
   *
9ea1fd3c1   Per Liden   [TIPC] License he...
11
12
13
14
15
16
17
18
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. Neither the names of the copyright holders nor the names of its
   *    contributors may be used to endorse or promote products derived from
   *    this software without specific prior written permission.
b97bf3fd8   Per Liden   [TIPC] Initial merge
19
   *
9ea1fd3c1   Per Liden   [TIPC] License he...
20
21
22
23
24
25
26
27
28
29
30
31
32
33
   * Alternatively, this software may be distributed under the terms of the
   * GNU General Public License ("GPL") version 2 as published by the Free
   * Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
b97bf3fd8   Per Liden   [TIPC] Initial merge
34
35
36
37
38
39
40
41
42
43
44
45
   * POSSIBILITY OF SUCH DAMAGE.
   */
  
  #ifndef _TIPC_NODE_H
  #define _TIPC_NODE_H
  
  #include "node_subscr.h"
  #include "addr.h"
  #include "cluster.h"
  #include "bearer.h"
  
  /**
6c00055a8   David S. Miller   tipc: Don't use s...
46
   * struct tipc_node - TIPC node structure
b97bf3fd8   Per Liden   [TIPC] Initial merge
47
48
49
50
51
52
53
   * @addr: network address of node
   * @lock: spinlock governing access to structure
   * @owner: pointer to cluster that node belongs to
   * @next: pointer to next node 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
5392d6468   Allan Stephens   [TIPC]: Fixed lin...
54
   * @working_links: number of working links to node (both active and standby)
b97bf3fd8   Per Liden   [TIPC] Initial merge
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
   * @link_cnt: number of links to node
   * @permit_changeover: non-zero if node has redundant links to this system
   * @routers: bitmap (used for multicluster communication)
   * @last_router: (used for multicluster communication)
   * @bclink: broadcast-related info
   *    @supported: non-zero if node supports TIPC b'cast capability
   *    @acked: sequence # of last outbound b'cast message acknowledged by node
   *    @last_in: sequence # of last in-sequence b'cast message received from node
   *    @gap_after: sequence # of last message not requiring a NAK request
   *    @gap_to: sequence # of last message requiring a NAK request
   *    @nack_sync: counter that determines when NAK requests should be sent
   *    @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
   */
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
70

6c00055a8   David S. Miller   tipc: Don't use s...
71
  struct tipc_node {
b97bf3fd8   Per Liden   [TIPC] Initial merge
72
73
74
  	u32 addr;
  	spinlock_t lock;
  	struct cluster *owner;
6c00055a8   David S. Miller   tipc: Don't use s...
75
  	struct tipc_node *next;
b97bf3fd8   Per Liden   [TIPC] Initial merge
76
77
78
79
  	struct list_head nsub;
  	struct link *active_links[2];
  	struct link *links[MAX_BEARERS];
  	int link_cnt;
5392d6468   Allan Stephens   [TIPC]: Fixed lin...
80
  	int working_links;
b97bf3fd8   Per Liden   [TIPC] Initial merge
81
82
83
84
85
86
87
  	int permit_changeover;
  	u32 routers[512/32];
  	int last_router;
  	struct {
  		int supported;
  		u32 acked;
  		u32 last_in;
c43072852   YOSHIFUJI Hideaki   [NET] TIPC: Fix w...
88
89
  		u32 gap_after;
  		u32 gap_to;
b97bf3fd8   Per Liden   [TIPC] Initial merge
90
91
92
93
94
95
  		u32 nack_sync;
  		struct sk_buff *deferred_head;
  		struct sk_buff *deferred_tail;
  		struct sk_buff *defragm;
  	} bclink;
  };
6c00055a8   David S. Miller   tipc: Don't use s...
96
  extern struct tipc_node *tipc_nodes;
b97bf3fd8   Per Liden   [TIPC] Initial merge
97
  extern u32 tipc_own_tag;
6c00055a8   David S. Miller   tipc: Don't use s...
98
99
100
101
102
103
104
105
106
107
108
109
110
  struct tipc_node *tipc_node_create(u32 addr);
  void tipc_node_delete(struct tipc_node *n_ptr);
  struct tipc_node *tipc_node_attach_link(struct link *l_ptr);
  void tipc_node_detach_link(struct tipc_node *n_ptr, struct link *l_ptr);
  void tipc_node_link_down(struct tipc_node *n_ptr, struct link *l_ptr);
  void tipc_node_link_up(struct tipc_node *n_ptr, struct link *l_ptr);
  int tipc_node_has_active_links(struct tipc_node *n_ptr);
  int tipc_node_has_redundant_links(struct tipc_node *n_ptr);
  u32 tipc_node_select_router(struct tipc_node *n_ptr, u32 ref);
  struct tipc_node *tipc_node_select_next_hop(u32 addr, u32 selector);
  int tipc_node_is_up(struct tipc_node *n_ptr);
  void tipc_node_add_router(struct tipc_node *n_ptr, u32 router);
  void tipc_node_remove_router(struct tipc_node *n_ptr, u32 router);
4323add67   Per Liden   [TIPC] Avoid poll...
111
112
  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);
b97bf3fd8   Per Liden   [TIPC] Initial merge
113

6c00055a8   David S. Miller   tipc: Don't use s...
114
  static inline struct tipc_node *tipc_node_find(u32 addr)
b97bf3fd8   Per Liden   [TIPC] Initial merge
115
116
  {
  	if (likely(in_own_cluster(addr)))
4323add67   Per Liden   [TIPC] Avoid poll...
117
118
119
  		return tipc_local_nodes[tipc_node(addr)];
  	else if (tipc_addr_domain_valid(addr)) {
  		struct cluster *c_ptr = tipc_cltr_find(addr);
b97bf3fd8   Per Liden   [TIPC] Initial merge
120
121
122
123
  
  		if (c_ptr)
  			return c_ptr->nodes[tipc_node(addr)];
  	}
1fc54d8f4   Sam Ravnborg   [TIPC]: Fix simpl...
124
  	return NULL;
b97bf3fd8   Per Liden   [TIPC] Initial merge
125
  }
6c00055a8   David S. Miller   tipc: Don't use s...
126
  static inline struct tipc_node *tipc_node_select(u32 addr, u32 selector)
b97bf3fd8   Per Liden   [TIPC] Initial merge
127
128
  {
  	if (likely(in_own_cluster(addr)))
4323add67   Per Liden   [TIPC] Avoid poll...
129
130
  		return tipc_local_nodes[tipc_node(addr)];
  	return tipc_node_select_next_hop(addr, selector);
b97bf3fd8   Per Liden   [TIPC] Initial merge
131
  }
6c00055a8   David S. Miller   tipc: Don't use s...
132
  static inline void tipc_node_lock(struct tipc_node *n_ptr)
b97bf3fd8   Per Liden   [TIPC] Initial merge
133
134
135
  {
  	spin_lock_bh(&n_ptr->lock);
  }
6c00055a8   David S. Miller   tipc: Don't use s...
136
  static inline void tipc_node_unlock(struct tipc_node *n_ptr)
b97bf3fd8   Per Liden   [TIPC] Initial merge
137
138
139
140
141
  {
  	spin_unlock_bh(&n_ptr->lock);
  }
  
  #endif