aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
authorJon Maloy <jon.maloy@ericsson.com>2018-03-22 15:42:46 -0400
committerDavid S. Miller <davem@davemloft.net>2018-03-23 13:12:17 -0400
commitb39e465e56ec38ca64b4c0affeb6411eb0ed7267 (patch)
tree0666c2ef9a43d7ed07d75f05ffdfda202eb593da /net/tipc
parentcb30a63384bc91d5da06e1cede1115f666a29271 (diff)
tipc: some cleanups in the file discover.c
To facilitate the coming changes in the neighbor discovery functionality we make some renaming and refactoring of that code. The functional changes in this commit are trivial, e.g., that we move the message sending call in tipc_disc_timeout() outside the spinlock protected region. Acked-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/bearer.c8
-rw-r--r--net/tipc/bearer.h2
-rw-r--r--net/tipc/discover.c303
-rw-r--r--net/tipc/discover.h8
4 files changed, 155 insertions, 166 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index e18cb271b005..76340b9e4851 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -210,7 +210,7 @@ void tipc_bearer_add_dest(struct net *net, u32 bearer_id, u32 dest)
210 rcu_read_lock(); 210 rcu_read_lock();
211 b = rcu_dereference_rtnl(tn->bearer_list[bearer_id]); 211 b = rcu_dereference_rtnl(tn->bearer_list[bearer_id]);
212 if (b) 212 if (b)
213 tipc_disc_add_dest(b->link_req); 213 tipc_disc_add_dest(b->disc);
214 rcu_read_unlock(); 214 rcu_read_unlock();
215} 215}
216 216
@@ -222,7 +222,7 @@ void tipc_bearer_remove_dest(struct net *net, u32 bearer_id, u32 dest)
222 rcu_read_lock(); 222 rcu_read_lock();
223 b = rcu_dereference_rtnl(tn->bearer_list[bearer_id]); 223 b = rcu_dereference_rtnl(tn->bearer_list[bearer_id]);
224 if (b) 224 if (b)
225 tipc_disc_remove_dest(b->link_req); 225 tipc_disc_remove_dest(b->disc);
226 rcu_read_unlock(); 226 rcu_read_unlock();
227} 227}
228 228
@@ -389,8 +389,8 @@ static void bearer_disable(struct net *net, struct tipc_bearer *b)
389 tipc_node_delete_links(net, bearer_id); 389 tipc_node_delete_links(net, bearer_id);
390 b->media->disable_media(b); 390 b->media->disable_media(b);
391 RCU_INIT_POINTER(b->media_ptr, NULL); 391 RCU_INIT_POINTER(b->media_ptr, NULL);
392 if (b->link_req) 392 if (b->disc)
393 tipc_disc_delete(b->link_req); 393 tipc_disc_delete(b->disc);
394 RCU_INIT_POINTER(tn->bearer_list[bearer_id], NULL); 394 RCU_INIT_POINTER(tn->bearer_list[bearer_id], NULL);
395 kfree_rcu(b, rcu); 395 kfree_rcu(b, rcu);
396 tipc_mon_delete(net, bearer_id); 396 tipc_mon_delete(net, bearer_id);
diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h
index a53613d95bc9..6efcee63a381 100644
--- a/net/tipc/bearer.h
+++ b/net/tipc/bearer.h
@@ -159,7 +159,7 @@ struct tipc_bearer {
159 u32 tolerance; 159 u32 tolerance;
160 u32 domain; 160 u32 domain;
161 u32 identity; 161 u32 identity;
162 struct tipc_link_req *link_req; 162 struct tipc_discoverer *disc;
163 char net_plane; 163 char net_plane;
164 unsigned long up; 164 unsigned long up;
165}; 165};
diff --git a/net/tipc/discover.c b/net/tipc/discover.c
index 92e4828c6b09..09f75558d353 100644
--- a/net/tipc/discover.c
+++ b/net/tipc/discover.c
@@ -39,34 +39,34 @@
39#include "discover.h" 39#include "discover.h"
40 40
41/* min delay during bearer start up */ 41/* min delay during bearer start up */
42#define TIPC_LINK_REQ_INIT msecs_to_jiffies(125) 42#define TIPC_DISC_INIT msecs_to_jiffies(125)
43/* max delay if bearer has no links */ 43/* max delay if bearer has no links */
44#define TIPC_LINK_REQ_FAST msecs_to_jiffies(1000) 44#define TIPC_DISC_FAST msecs_to_jiffies(1000)
45/* max delay if bearer has links */ 45/* max delay if bearer has links */
46#define TIPC_LINK_REQ_SLOW msecs_to_jiffies(60000) 46#define TIPC_DISC_SLOW msecs_to_jiffies(60000)
47/* indicates no timer in use */ 47/* indicates no timer in use */
48#define TIPC_LINK_REQ_INACTIVE 0xffffffff 48#define TIPC_DISC_INACTIVE 0xffffffff
49 49
50/** 50/**
51 * struct tipc_link_req - information about an ongoing link setup request 51 * struct tipc_discoverer - information about an ongoing link setup request
52 * @bearer_id: identity of bearer issuing requests 52 * @bearer_id: identity of bearer issuing requests
53 * @net: network namespace instance 53 * @net: network namespace instance
54 * @dest: destination address for request messages 54 * @dest: destination address for request messages
55 * @domain: network domain to which links can be established 55 * @domain: network domain to which links can be established
56 * @num_nodes: number of nodes currently discovered (i.e. with an active link) 56 * @num_nodes: number of nodes currently discovered (i.e. with an active link)
57 * @lock: spinlock for controlling access to requests 57 * @lock: spinlock for controlling access to requests
58 * @buf: request message to be (repeatedly) sent 58 * @skb: request message to be (repeatedly) sent
59 * @timer: timer governing period between requests 59 * @timer: timer governing period between requests
60 * @timer_intv: current interval between requests (in ms) 60 * @timer_intv: current interval between requests (in ms)
61 */ 61 */
62struct tipc_link_req { 62struct tipc_discoverer {
63 u32 bearer_id; 63 u32 bearer_id;
64 struct tipc_media_addr dest; 64 struct tipc_media_addr dest;
65 struct net *net; 65 struct net *net;
66 u32 domain; 66 u32 domain;
67 int num_nodes; 67 int num_nodes;
68 spinlock_t lock; 68 spinlock_t lock;
69 struct sk_buff *buf; 69 struct sk_buff *skb;
70 struct timer_list timer; 70 struct timer_list timer;
71 unsigned long timer_intv; 71 unsigned long timer_intv;
72}; 72};
@@ -77,22 +77,35 @@ struct tipc_link_req {
77 * @type: message type (request or response) 77 * @type: message type (request or response)
78 * @b: ptr to bearer issuing message 78 * @b: ptr to bearer issuing message
79 */ 79 */
80static void tipc_disc_init_msg(struct net *net, struct sk_buff *buf, u32 type, 80static void tipc_disc_init_msg(struct net *net, struct sk_buff *skb,
81 struct tipc_bearer *b) 81 u32 mtyp, struct tipc_bearer *b)
82{ 82{
83 struct tipc_net *tn = net_generic(net, tipc_net_id); 83 struct tipc_net *tn = tipc_net(net);
84 struct tipc_msg *msg;
85 u32 dest_domain = b->domain; 84 u32 dest_domain = b->domain;
85 struct tipc_msg *hdr;
86 86
87 msg = buf_msg(buf); 87 hdr = buf_msg(skb);
88 tipc_msg_init(tn->own_addr, msg, LINK_CONFIG, type, 88 tipc_msg_init(tn->own_addr, hdr, LINK_CONFIG, mtyp,
89 MAX_H_SIZE, dest_domain); 89 MAX_H_SIZE, dest_domain);
90 msg_set_non_seq(msg, 1); 90 msg_set_non_seq(hdr, 1);
91 msg_set_node_sig(msg, tn->random); 91 msg_set_node_sig(hdr, tn->random);
92 msg_set_node_capabilities(msg, TIPC_NODE_CAPABILITIES); 92 msg_set_node_capabilities(hdr, TIPC_NODE_CAPABILITIES);
93 msg_set_dest_domain(msg, dest_domain); 93 msg_set_dest_domain(hdr, dest_domain);
94 msg_set_bc_netid(msg, tn->net_id); 94 msg_set_bc_netid(hdr, tn->net_id);
95 b->media->addr2msg(msg_media_addr(msg), &b->addr); 95 b->media->addr2msg(msg_media_addr(hdr), &b->addr);
96}
97
98static void tipc_disc_msg_xmit(struct net *net, u32 mtyp, u32 dst, u32 src,
99 struct tipc_media_addr *maddr,
100 struct tipc_bearer *b)
101{
102 struct sk_buff *skb;
103
104 skb = tipc_buf_acquire(MAX_H_SIZE, GFP_ATOMIC);
105 if (!skb)
106 return;
107 tipc_disc_init_msg(net, skb, mtyp, b);
108 tipc_bearer_xmit_skb(net, b->identity, skb, maddr);
96} 109}
97 110
98/** 111/**
@@ -116,149 +129,123 @@ static void disc_dupl_alert(struct tipc_bearer *b, u32 node_addr,
116 129
117/** 130/**
118 * tipc_disc_rcv - handle incoming discovery message (request or response) 131 * tipc_disc_rcv - handle incoming discovery message (request or response)
119 * @net: the applicable net namespace 132 * @net: applicable net namespace
120 * @buf: buffer containing message 133 * @skb: buffer containing message
121 * @bearer: bearer that message arrived on 134 * @b: bearer that message arrived on
122 */ 135 */
123void tipc_disc_rcv(struct net *net, struct sk_buff *skb, 136void tipc_disc_rcv(struct net *net, struct sk_buff *skb,
124 struct tipc_bearer *bearer) 137 struct tipc_bearer *b)
125{ 138{
126 struct tipc_net *tn = net_generic(net, tipc_net_id); 139 struct tipc_net *tn = tipc_net(net);
127 struct tipc_media_addr maddr;
128 struct sk_buff *rskb;
129 struct tipc_msg *hdr = buf_msg(skb); 140 struct tipc_msg *hdr = buf_msg(skb);
130 u32 ddom = msg_dest_domain(hdr); 141 u16 caps = msg_node_capabilities(hdr);
131 u32 onode = msg_prevnode(hdr); 142 u32 signature = msg_node_sig(hdr);
143 u32 dst = msg_dest_domain(hdr);
132 u32 net_id = msg_bc_netid(hdr); 144 u32 net_id = msg_bc_netid(hdr);
145 u32 self = tipc_own_addr(net);
146 struct tipc_media_addr maddr;
147 u32 src = msg_prevnode(hdr);
133 u32 mtyp = msg_type(hdr); 148 u32 mtyp = msg_type(hdr);
134 u32 signature = msg_node_sig(hdr);
135 u16 caps = msg_node_capabilities(hdr);
136 bool respond = false;
137 bool dupl_addr = false; 149 bool dupl_addr = false;
150 bool respond = false;
138 int err; 151 int err;
139 152
140 err = bearer->media->msg2addr(bearer, &maddr, msg_media_addr(hdr)); 153 err = b->media->msg2addr(b, &maddr, msg_media_addr(hdr));
141 kfree_skb(skb); 154 kfree_skb(skb);
142 if (err) 155 if (err || maddr.broadcast) {
156 pr_warn_ratelimited("Rcv corrupt discovery message\n");
143 return; 157 return;
144 158 }
145 /* Ensure message from node is valid and communication is permitted */ 159 /* Ignore discovery messages from own node */
146 if (net_id != tn->net_id) 160 if (!memcmp(&maddr, &b->addr, sizeof(maddr)))
147 return; 161 return;
148 if (maddr.broadcast) 162 if (net_id != tn->net_id)
149 return; 163 return;
150 if (!tipc_addr_domain_valid(ddom)) 164 if (!tipc_addr_domain_valid(dst))
151 return; 165 return;
152 if (!tipc_addr_node_valid(onode)) 166 if (!tipc_addr_node_valid(src))
153 return; 167 return;
154 168 if (in_own_node(net, src)) {
155 if (in_own_node(net, onode)) { 169 disc_dupl_alert(b, self, &maddr);
156 if (memcmp(&maddr, &bearer->addr, sizeof(maddr)))
157 disc_dupl_alert(bearer, tn->own_addr, &maddr);
158 return; 170 return;
159 } 171 }
160 if (!tipc_in_scope(ddom, tn->own_addr)) 172 if (!tipc_in_scope(dst, self))
161 return; 173 return;
162 if (!tipc_in_scope(bearer->domain, onode)) 174 if (!tipc_in_scope(b->domain, src))
163 return; 175 return;
164 176 tipc_node_check_dest(net, src, b, caps, signature,
165 tipc_node_check_dest(net, onode, bearer, caps, signature,
166 &maddr, &respond, &dupl_addr); 177 &maddr, &respond, &dupl_addr);
167 if (dupl_addr) 178 if (dupl_addr)
168 disc_dupl_alert(bearer, onode, &maddr); 179 disc_dupl_alert(b, src, &maddr);
169 180 if (!respond)
170 /* Send response, if necessary */ 181 return;
171 if (respond && (mtyp == DSC_REQ_MSG)) { 182 if (mtyp != DSC_REQ_MSG)
172 rskb = tipc_buf_acquire(MAX_H_SIZE, GFP_ATOMIC); 183 return;
173 if (!rskb) 184 tipc_disc_msg_xmit(net, DSC_RESP_MSG, src, self, &maddr, b);
174 return;
175 tipc_disc_init_msg(net, rskb, DSC_RESP_MSG, bearer);
176 tipc_bearer_xmit_skb(net, bearer->identity, rskb, &maddr);
177 }
178} 185}
179 186
180/** 187/* tipc_disc_add_dest - increment set of discovered nodes
181 * disc_update - update frequency of periodic link setup requests
182 * @req: ptr to link request structure
183 *
184 * Reinitiates discovery process if discovery object has no associated nodes
185 * and is either not currently searching or is searching at a slow rate
186 */ 188 */
187static void disc_update(struct tipc_link_req *req) 189void tipc_disc_add_dest(struct tipc_discoverer *d)
188{ 190{
189 if (!req->num_nodes) { 191 spin_lock_bh(&d->lock);
190 if ((req->timer_intv == TIPC_LINK_REQ_INACTIVE) || 192 d->num_nodes++;
191 (req->timer_intv > TIPC_LINK_REQ_FAST)) { 193 spin_unlock_bh(&d->lock);
192 req->timer_intv = TIPC_LINK_REQ_INIT;
193 mod_timer(&req->timer, jiffies + req->timer_intv);
194 }
195 }
196} 194}
197 195
198/** 196/* tipc_disc_remove_dest - decrement set of discovered nodes
199 * tipc_disc_add_dest - increment set of discovered nodes
200 * @req: ptr to link request structure
201 */ 197 */
202void tipc_disc_add_dest(struct tipc_link_req *req) 198void tipc_disc_remove_dest(struct tipc_discoverer *d)
203{ 199{
204 spin_lock_bh(&req->lock); 200 int intv, num;
205 req->num_nodes++;
206 spin_unlock_bh(&req->lock);
207}
208 201
209/** 202 spin_lock_bh(&d->lock);
210 * tipc_disc_remove_dest - decrement set of discovered nodes 203 d->num_nodes--;
211 * @req: ptr to link request structure 204 num = d->num_nodes;
212 */ 205 intv = d->timer_intv;
213void tipc_disc_remove_dest(struct tipc_link_req *req) 206 if (!num && (intv == TIPC_DISC_INACTIVE || intv > TIPC_DISC_FAST)) {
214{ 207 d->timer_intv = TIPC_DISC_INIT;
215 spin_lock_bh(&req->lock); 208 mod_timer(&d->timer, jiffies + d->timer_intv);
216 req->num_nodes--; 209 }
217 disc_update(req); 210 spin_unlock_bh(&d->lock);
218 spin_unlock_bh(&req->lock);
219} 211}
220 212
221/** 213/* tipc_disc_timeout - send a periodic link setup request
222 * disc_timeout - send a periodic link setup request
223 * @data: ptr to link request structure
224 *
225 * Called whenever a link setup request timer associated with a bearer expires. 214 * Called whenever a link setup request timer associated with a bearer expires.
215 * - Keep doubling time between sent request until limit is reached;
216 * - Hold at fast polling rate if we don't have any associated nodes
217 * - Otherwise hold at slow polling rate
226 */ 218 */
227static void disc_timeout(struct timer_list *t) 219static void tipc_disc_timeout(struct timer_list *t)
228{ 220{
229 struct tipc_link_req *req = from_timer(req, t, timer); 221 struct tipc_discoverer *d = from_timer(d, t, timer);
230 struct sk_buff *skb; 222 struct tipc_media_addr maddr;
231 int max_delay; 223 struct sk_buff *skb = NULL;
224 struct net *net;
225 u32 bearer_id;
232 226
233 spin_lock_bh(&req->lock); 227 spin_lock_bh(&d->lock);
234 228
235 /* Stop searching if only desired node has been found */ 229 /* Stop searching if only desired node has been found */
236 if (tipc_node(req->domain) && req->num_nodes) { 230 if (tipc_node(d->domain) && d->num_nodes) {
237 req->timer_intv = TIPC_LINK_REQ_INACTIVE; 231 d->timer_intv = TIPC_DISC_INACTIVE;
238 goto exit; 232 goto exit;
239 } 233 }
240 234 /* Adjust timeout interval according to discovery phase */
241 /* 235 d->timer_intv *= 2;
242 * Send discovery message, then update discovery timer 236 if (d->num_nodes && d->timer_intv > TIPC_DISC_SLOW)
243 * 237 d->timer_intv = TIPC_DISC_SLOW;
244 * Keep doubling time between requests until limit is reached; 238 else if (!d->num_nodes && d->timer_intv > TIPC_DISC_FAST)
245 * hold at fast polling rate if don't have any associated nodes, 239 d->timer_intv = TIPC_DISC_FAST;
246 * otherwise hold at slow polling rate 240 mod_timer(&d->timer, jiffies + d->timer_intv);
247 */ 241 memcpy(&maddr, &d->dest, sizeof(maddr));
248 skb = skb_clone(req->buf, GFP_ATOMIC); 242 skb = skb_clone(d->skb, GFP_ATOMIC);
249 if (skb) 243 net = d->net;
250 tipc_bearer_xmit_skb(req->net, req->bearer_id, skb, &req->dest); 244 bearer_id = d->bearer_id;
251 req->timer_intv *= 2;
252 if (req->num_nodes)
253 max_delay = TIPC_LINK_REQ_SLOW;
254 else
255 max_delay = TIPC_LINK_REQ_FAST;
256 if (req->timer_intv > max_delay)
257 req->timer_intv = max_delay;
258
259 mod_timer(&req->timer, jiffies + req->timer_intv);
260exit: 245exit:
261 spin_unlock_bh(&req->lock); 246 spin_unlock_bh(&d->lock);
247 if (skb)
248 tipc_bearer_xmit_skb(net, bearer_id, skb, &maddr);
262} 249}
263 250
264/** 251/**
@@ -273,41 +260,41 @@ exit:
273int tipc_disc_create(struct net *net, struct tipc_bearer *b, 260int tipc_disc_create(struct net *net, struct tipc_bearer *b,
274 struct tipc_media_addr *dest, struct sk_buff **skb) 261 struct tipc_media_addr *dest, struct sk_buff **skb)
275{ 262{
276 struct tipc_link_req *req; 263 struct tipc_discoverer *d;
277 264
278 req = kmalloc(sizeof(*req), GFP_ATOMIC); 265 d = kmalloc(sizeof(*d), GFP_ATOMIC);
279 if (!req) 266 if (!d)
280 return -ENOMEM; 267 return -ENOMEM;
281 req->buf = tipc_buf_acquire(MAX_H_SIZE, GFP_ATOMIC); 268 d->skb = tipc_buf_acquire(MAX_H_SIZE, GFP_ATOMIC);
282 if (!req->buf) { 269 if (!d->skb) {
283 kfree(req); 270 kfree(d);
284 return -ENOMEM; 271 return -ENOMEM;
285 } 272 }
286 273
287 tipc_disc_init_msg(net, req->buf, DSC_REQ_MSG, b); 274 tipc_disc_init_msg(net, d->skb, DSC_REQ_MSG, b);
288 memcpy(&req->dest, dest, sizeof(*dest)); 275 memcpy(&d->dest, dest, sizeof(*dest));
289 req->net = net; 276 d->net = net;
290 req->bearer_id = b->identity; 277 d->bearer_id = b->identity;
291 req->domain = b->domain; 278 d->domain = b->domain;
292 req->num_nodes = 0; 279 d->num_nodes = 0;
293 req->timer_intv = TIPC_LINK_REQ_INIT; 280 d->timer_intv = TIPC_DISC_INIT;
294 spin_lock_init(&req->lock); 281 spin_lock_init(&d->lock);
295 timer_setup(&req->timer, disc_timeout, 0); 282 timer_setup(&d->timer, tipc_disc_timeout, 0);
296 mod_timer(&req->timer, jiffies + req->timer_intv); 283 mod_timer(&d->timer, jiffies + d->timer_intv);
297 b->link_req = req; 284 b->disc = d;
298 *skb = skb_clone(req->buf, GFP_ATOMIC); 285 *skb = skb_clone(d->skb, GFP_ATOMIC);
299 return 0; 286 return 0;
300} 287}
301 288
302/** 289/**
303 * tipc_disc_delete - destroy object sending periodic link setup requests 290 * tipc_disc_delete - destroy object sending periodic link setup requests
304 * @req: ptr to link request structure 291 * @d: ptr to link duest structure
305 */ 292 */
306void tipc_disc_delete(struct tipc_link_req *req) 293void tipc_disc_delete(struct tipc_discoverer *d)
307{ 294{
308 del_timer_sync(&req->timer); 295 del_timer_sync(&d->timer);
309 kfree_skb(req->buf); 296 kfree_skb(d->skb);
310 kfree(req); 297 kfree(d);
311} 298}
312 299
313/** 300/**
@@ -318,19 +305,21 @@ void tipc_disc_delete(struct tipc_link_req *req)
318 */ 305 */
319void tipc_disc_reset(struct net *net, struct tipc_bearer *b) 306void tipc_disc_reset(struct net *net, struct tipc_bearer *b)
320{ 307{
321 struct tipc_link_req *req = b->link_req; 308 struct tipc_discoverer *d = b->disc;
309 struct tipc_media_addr maddr;
322 struct sk_buff *skb; 310 struct sk_buff *skb;
323 311
324 spin_lock_bh(&req->lock); 312 spin_lock_bh(&d->lock);
325 tipc_disc_init_msg(net, req->buf, DSC_REQ_MSG, b); 313 tipc_disc_init_msg(net, d->skb, DSC_REQ_MSG, b);
326 req->net = net; 314 d->net = net;
327 req->bearer_id = b->identity; 315 d->bearer_id = b->identity;
328 req->domain = b->domain; 316 d->domain = b->domain;
329 req->num_nodes = 0; 317 d->num_nodes = 0;
330 req->timer_intv = TIPC_LINK_REQ_INIT; 318 d->timer_intv = TIPC_DISC_INIT;
331 mod_timer(&req->timer, jiffies + req->timer_intv); 319 memcpy(&maddr, &d->dest, sizeof(maddr));
332 skb = skb_clone(req->buf, GFP_ATOMIC); 320 mod_timer(&d->timer, jiffies + d->timer_intv);
321 skb = skb_clone(d->skb, GFP_ATOMIC);
322 spin_unlock_bh(&d->lock);
333 if (skb) 323 if (skb)
334 tipc_bearer_xmit_skb(net, req->bearer_id, skb, &req->dest); 324 tipc_bearer_xmit_skb(net, b->identity, skb, &maddr);
335 spin_unlock_bh(&req->lock);
336} 325}
diff --git a/net/tipc/discover.h b/net/tipc/discover.h
index b80a335389c0..521d96c41dfd 100644
--- a/net/tipc/discover.h
+++ b/net/tipc/discover.h
@@ -37,14 +37,14 @@
37#ifndef _TIPC_DISCOVER_H 37#ifndef _TIPC_DISCOVER_H
38#define _TIPC_DISCOVER_H 38#define _TIPC_DISCOVER_H
39 39
40struct tipc_link_req; 40struct tipc_discoverer;
41 41
42int tipc_disc_create(struct net *net, struct tipc_bearer *b_ptr, 42int tipc_disc_create(struct net *net, struct tipc_bearer *b_ptr,
43 struct tipc_media_addr *dest, struct sk_buff **skb); 43 struct tipc_media_addr *dest, struct sk_buff **skb);
44void tipc_disc_delete(struct tipc_link_req *req); 44void tipc_disc_delete(struct tipc_discoverer *req);
45void tipc_disc_reset(struct net *net, struct tipc_bearer *b_ptr); 45void tipc_disc_reset(struct net *net, struct tipc_bearer *b_ptr);
46void tipc_disc_add_dest(struct tipc_link_req *req); 46void tipc_disc_add_dest(struct tipc_discoverer *req);
47void tipc_disc_remove_dest(struct tipc_link_req *req); 47void tipc_disc_remove_dest(struct tipc_discoverer *req);
48void tipc_disc_rcv(struct net *net, struct sk_buff *buf, 48void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
49 struct tipc_bearer *b_ptr); 49 struct tipc_bearer *b_ptr);
50 50