diff options
-rw-r--r-- | include/linux/tipc_config.h | 4 | ||||
-rw-r--r-- | net/tipc/addr.c | 2 | ||||
-rw-r--r-- | net/tipc/addr.h | 10 | ||||
-rw-r--r-- | net/tipc/cluster.c | 166 | ||||
-rw-r--r-- | net/tipc/cluster.h | 7 | ||||
-rw-r--r-- | net/tipc/config.c | 21 | ||||
-rw-r--r-- | net/tipc/core.c | 6 | ||||
-rw-r--r-- | net/tipc/core.h | 1 | ||||
-rw-r--r-- | net/tipc/discover.c | 4 | ||||
-rw-r--r-- | net/tipc/msg.h | 2 | ||||
-rw-r--r-- | net/tipc/node.c | 59 | ||||
-rw-r--r-- | net/tipc/port.c | 5 |
12 files changed, 40 insertions, 247 deletions
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h index fa3aeaafeab1..dcc2b8796d0a 100644 --- a/include/linux/tipc_config.h +++ b/include/linux/tipc_config.h | |||
@@ -97,7 +97,7 @@ | |||
97 | #define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */ | 97 | #define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */ |
98 | #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */ | 98 | #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */ |
99 | #define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */ | 99 | #define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */ |
100 | #define TIPC_CMD_GET_MAX_SLAVES 0x400A /* tx none, rx unsigned */ | 100 | #define TIPC_CMD_GET_MAX_SLAVES 0x400A /* obsoleted */ |
101 | #define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */ | 101 | #define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */ |
102 | 102 | ||
103 | #define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */ | 103 | #define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */ |
@@ -133,7 +133,7 @@ | |||
133 | #define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */ | 133 | #define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */ |
134 | #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */ | 134 | #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */ |
135 | #define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */ | 135 | #define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */ |
136 | #define TIPC_CMD_SET_MAX_SLAVES 0x800A /* tx unsigned, rx none */ | 136 | #define TIPC_CMD_SET_MAX_SLAVES 0x800A /* obsoleted */ |
137 | #define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ | 137 | #define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ |
138 | 138 | ||
139 | /* | 139 | /* |
diff --git a/net/tipc/addr.c b/net/tipc/addr.c index 3d0f97da5b5f..8823e03e52e0 100644 --- a/net/tipc/addr.c +++ b/net/tipc/addr.c | |||
@@ -53,8 +53,6 @@ int tipc_addr_domain_valid(u32 addr) | |||
53 | u32 z = tipc_zone(addr); | 53 | u32 z = tipc_zone(addr); |
54 | u32 max_nodes = tipc_max_nodes; | 54 | u32 max_nodes = tipc_max_nodes; |
55 | 55 | ||
56 | if (is_slave(addr)) | ||
57 | max_nodes = LOWEST_SLAVE + tipc_max_slaves; | ||
58 | if (n > max_nodes) | 56 | if (n > max_nodes) |
59 | return 0; | 57 | return 0; |
60 | if (c > tipc_max_clusters) | 58 | if (c > tipc_max_clusters) |
diff --git a/net/tipc/addr.h b/net/tipc/addr.h index c1cc5724d8cc..a16c6c87208e 100644 --- a/net/tipc/addr.h +++ b/net/tipc/addr.h | |||
@@ -57,16 +57,6 @@ static inline int in_own_cluster(u32 addr) | |||
57 | return !((addr ^ tipc_own_addr) >> 12); | 57 | return !((addr ^ tipc_own_addr) >> 12); |
58 | } | 58 | } |
59 | 59 | ||
60 | static inline int is_slave(u32 addr) | ||
61 | { | ||
62 | return addr & 0x800; | ||
63 | } | ||
64 | |||
65 | static inline int may_route(u32 addr) | ||
66 | { | ||
67 | return(addr ^ tipc_own_addr) >> 11; | ||
68 | } | ||
69 | |||
70 | /** | 60 | /** |
71 | * addr_domain - convert 2-bit scope value to equivalent message lookup domain | 61 | * addr_domain - convert 2-bit scope value to equivalent message lookup domain |
72 | * | 62 | * |
diff --git a/net/tipc/cluster.c b/net/tipc/cluster.c index 996b2b67687e..6bc9f07be945 100644 --- a/net/tipc/cluster.c +++ b/net/tipc/cluster.c | |||
@@ -43,7 +43,6 @@ static void tipc_cltr_multicast(struct cluster *c_ptr, struct sk_buff *buf, | |||
43 | 43 | ||
44 | struct tipc_node **tipc_local_nodes = NULL; | 44 | struct tipc_node **tipc_local_nodes = NULL; |
45 | struct tipc_node_map tipc_cltr_bcast_nodes = {0,{0,}}; | 45 | struct tipc_node_map tipc_cltr_bcast_nodes = {0,{0,}}; |
46 | u32 tipc_highest_allowed_slave = 0; | ||
47 | 46 | ||
48 | struct cluster *tipc_cltr_create(u32 addr) | 47 | struct cluster *tipc_cltr_create(u32 addr) |
49 | { | 48 | { |
@@ -57,10 +56,7 @@ struct cluster *tipc_cltr_create(u32 addr) | |||
57 | } | 56 | } |
58 | 57 | ||
59 | c_ptr->addr = tipc_addr(tipc_zone(addr), tipc_cluster(addr), 0); | 58 | c_ptr->addr = tipc_addr(tipc_zone(addr), tipc_cluster(addr), 0); |
60 | if (in_own_cluster(addr)) | 59 | max_nodes = tipc_max_nodes + 1; |
61 | max_nodes = LOWEST_SLAVE + tipc_max_slaves; | ||
62 | else | ||
63 | max_nodes = tipc_max_nodes + 1; | ||
64 | 60 | ||
65 | c_ptr->nodes = kcalloc(max_nodes + 1, sizeof(void*), GFP_ATOMIC); | 61 | c_ptr->nodes = kcalloc(max_nodes + 1, sizeof(void*), GFP_ATOMIC); |
66 | if (c_ptr->nodes == NULL) { | 62 | if (c_ptr->nodes == NULL) { |
@@ -71,7 +67,6 @@ struct cluster *tipc_cltr_create(u32 addr) | |||
71 | 67 | ||
72 | if (in_own_cluster(addr)) | 68 | if (in_own_cluster(addr)) |
73 | tipc_local_nodes = c_ptr->nodes; | 69 | tipc_local_nodes = c_ptr->nodes; |
74 | c_ptr->highest_slave = LOWEST_SLAVE - 1; | ||
75 | c_ptr->highest_node = 0; | 70 | c_ptr->highest_node = 0; |
76 | 71 | ||
77 | tipc_net.clusters[1] = c_ptr; | 72 | tipc_net.clusters[1] = c_ptr; |
@@ -87,9 +82,6 @@ void tipc_cltr_delete(struct cluster *c_ptr) | |||
87 | for (n_num = 1; n_num <= c_ptr->highest_node; n_num++) { | 82 | for (n_num = 1; n_num <= c_ptr->highest_node; n_num++) { |
88 | tipc_node_delete(c_ptr->nodes[n_num]); | 83 | tipc_node_delete(c_ptr->nodes[n_num]); |
89 | } | 84 | } |
90 | for (n_num = LOWEST_SLAVE; n_num <= c_ptr->highest_slave; n_num++) { | ||
91 | tipc_node_delete(c_ptr->nodes[n_num]); | ||
92 | } | ||
93 | kfree(c_ptr->nodes); | 85 | kfree(c_ptr->nodes); |
94 | kfree(c_ptr); | 86 | kfree(c_ptr); |
95 | } | 87 | } |
@@ -100,8 +92,6 @@ void tipc_cltr_attach_node(struct cluster *c_ptr, struct tipc_node *n_ptr) | |||
100 | u32 n_num = tipc_node(n_ptr->addr); | 92 | u32 n_num = tipc_node(n_ptr->addr); |
101 | u32 max_n_num = tipc_max_nodes; | 93 | u32 max_n_num = tipc_max_nodes; |
102 | 94 | ||
103 | if (in_own_cluster(n_ptr->addr)) | ||
104 | max_n_num = tipc_highest_allowed_slave; | ||
105 | assert(n_num > 0); | 95 | assert(n_num > 0); |
106 | assert(n_num <= max_n_num); | 96 | assert(n_num <= max_n_num); |
107 | assert(c_ptr->nodes[n_num] == NULL); | 97 | assert(c_ptr->nodes[n_num] == NULL); |
@@ -237,41 +227,6 @@ void tipc_cltr_bcast_lost_route(struct cluster *c_ptr, u32 dest, | |||
237 | } | 227 | } |
238 | } | 228 | } |
239 | 229 | ||
240 | void tipc_cltr_send_slave_routes(struct cluster *c_ptr, u32 dest) | ||
241 | { | ||
242 | struct sk_buff *buf; | ||
243 | struct tipc_msg *msg; | ||
244 | u32 highest = c_ptr->highest_slave; | ||
245 | u32 n_num; | ||
246 | int send = 0; | ||
247 | |||
248 | assert(!is_slave(dest)); | ||
249 | assert(in_own_cluster(dest)); | ||
250 | assert(in_own_cluster(c_ptr->addr)); | ||
251 | if (highest <= LOWEST_SLAVE) | ||
252 | return; | ||
253 | buf = tipc_cltr_prepare_routing_msg(highest - LOWEST_SLAVE + 1, | ||
254 | c_ptr->addr); | ||
255 | if (buf) { | ||
256 | msg = buf_msg(buf); | ||
257 | msg_set_remote_node(msg, c_ptr->addr); | ||
258 | msg_set_type(msg, SLAVE_ROUTING_TABLE); | ||
259 | for (n_num = LOWEST_SLAVE; n_num <= highest; n_num++) { | ||
260 | if (c_ptr->nodes[n_num] && | ||
261 | tipc_node_has_active_links(c_ptr->nodes[n_num])) { | ||
262 | send = 1; | ||
263 | msg_set_dataoctet(msg, n_num); | ||
264 | } | ||
265 | } | ||
266 | if (send) | ||
267 | tipc_link_send(buf, dest, dest); | ||
268 | else | ||
269 | buf_discard(buf); | ||
270 | } else { | ||
271 | warn("Memory squeeze: broadcast of lost route failed\n"); | ||
272 | } | ||
273 | } | ||
274 | |||
275 | void tipc_cltr_send_ext_routes(struct cluster *c_ptr, u32 dest) | 230 | void tipc_cltr_send_ext_routes(struct cluster *c_ptr, u32 dest) |
276 | { | 231 | { |
277 | struct sk_buff *buf; | 232 | struct sk_buff *buf; |
@@ -282,7 +237,6 @@ void tipc_cltr_send_ext_routes(struct cluster *c_ptr, u32 dest) | |||
282 | 237 | ||
283 | if (in_own_cluster(c_ptr->addr)) | 238 | if (in_own_cluster(c_ptr->addr)) |
284 | return; | 239 | return; |
285 | assert(!is_slave(dest)); | ||
286 | assert(in_own_cluster(dest)); | 240 | assert(in_own_cluster(dest)); |
287 | highest = c_ptr->highest_node; | 241 | highest = c_ptr->highest_node; |
288 | buf = tipc_cltr_prepare_routing_msg(highest + 1, c_ptr->addr); | 242 | buf = tipc_cltr_prepare_routing_msg(highest + 1, c_ptr->addr); |
@@ -306,37 +260,6 @@ void tipc_cltr_send_ext_routes(struct cluster *c_ptr, u32 dest) | |||
306 | } | 260 | } |
307 | } | 261 | } |
308 | 262 | ||
309 | void tipc_cltr_send_local_routes(struct cluster *c_ptr, u32 dest) | ||
310 | { | ||
311 | struct sk_buff *buf; | ||
312 | struct tipc_msg *msg; | ||
313 | u32 highest = c_ptr->highest_node; | ||
314 | u32 n_num; | ||
315 | int send = 0; | ||
316 | |||
317 | assert(is_slave(dest)); | ||
318 | assert(in_own_cluster(c_ptr->addr)); | ||
319 | buf = tipc_cltr_prepare_routing_msg(highest, c_ptr->addr); | ||
320 | if (buf) { | ||
321 | msg = buf_msg(buf); | ||
322 | msg_set_remote_node(msg, c_ptr->addr); | ||
323 | msg_set_type(msg, LOCAL_ROUTING_TABLE); | ||
324 | for (n_num = 1; n_num <= highest; n_num++) { | ||
325 | if (c_ptr->nodes[n_num] && | ||
326 | tipc_node_has_active_links(c_ptr->nodes[n_num])) { | ||
327 | send = 1; | ||
328 | msg_set_dataoctet(msg, n_num); | ||
329 | } | ||
330 | } | ||
331 | if (send) | ||
332 | tipc_link_send(buf, dest, dest); | ||
333 | else | ||
334 | buf_discard(buf); | ||
335 | } else { | ||
336 | warn("Memory squeeze: broadcast of local route failed\n"); | ||
337 | } | ||
338 | } | ||
339 | |||
340 | void tipc_cltr_recv_routing_table(struct sk_buff *buf) | 263 | void tipc_cltr_recv_routing_table(struct sk_buff *buf) |
341 | { | 264 | { |
342 | struct tipc_msg *msg = buf_msg(buf); | 265 | struct tipc_msg *msg = buf_msg(buf); |
@@ -366,8 +289,6 @@ void tipc_cltr_recv_routing_table(struct sk_buff *buf) | |||
366 | c_num = tipc_cluster(rem_node); | 289 | c_num = tipc_cluster(rem_node); |
367 | 290 | ||
368 | switch (msg_type(msg)) { | 291 | switch (msg_type(msg)) { |
369 | case LOCAL_ROUTING_TABLE: | ||
370 | assert(is_slave(tipc_own_addr)); | ||
371 | case EXT_ROUTING_TABLE: | 292 | case EXT_ROUTING_TABLE: |
372 | for (n_num = 1; n_num < table_size; n_num++) { | 293 | for (n_num = 1; n_num < table_size; n_num++) { |
373 | if (node_table[n_num]) { | 294 | if (node_table[n_num]) { |
@@ -382,29 +303,10 @@ void tipc_cltr_recv_routing_table(struct sk_buff *buf) | |||
382 | } | 303 | } |
383 | break; | 304 | break; |
384 | case SLAVE_ROUTING_TABLE: | 305 | case SLAVE_ROUTING_TABLE: |
385 | assert(!is_slave(tipc_own_addr)); | ||
386 | assert(in_own_cluster(c_ptr->addr)); | 306 | assert(in_own_cluster(c_ptr->addr)); |
387 | for (n_num = 1; n_num < table_size; n_num++) { | ||
388 | if (node_table[n_num]) { | ||
389 | u32 slave_num = n_num + LOWEST_SLAVE; | ||
390 | u32 addr = tipc_addr(z_num, c_num, slave_num); | ||
391 | n_ptr = c_ptr->nodes[slave_num]; | ||
392 | if (!n_ptr) { | ||
393 | n_ptr = tipc_node_create(addr); | ||
394 | } | ||
395 | if (n_ptr) | ||
396 | tipc_node_add_router(n_ptr, router); | ||
397 | } | ||
398 | } | ||
399 | break; | 307 | break; |
400 | case ROUTE_ADDITION: | 308 | case ROUTE_ADDITION: |
401 | if (!is_slave(tipc_own_addr)) { | 309 | assert(!in_own_cluster(c_ptr->addr)); |
402 | assert(!in_own_cluster(c_ptr->addr) || | ||
403 | is_slave(rem_node)); | ||
404 | } else { | ||
405 | assert(in_own_cluster(c_ptr->addr) && | ||
406 | !is_slave(rem_node)); | ||
407 | } | ||
408 | n_ptr = c_ptr->nodes[tipc_node(rem_node)]; | 310 | n_ptr = c_ptr->nodes[tipc_node(rem_node)]; |
409 | if (!n_ptr) | 311 | if (!n_ptr) |
410 | n_ptr = tipc_node_create(rem_node); | 312 | n_ptr = tipc_node_create(rem_node); |
@@ -412,13 +314,7 @@ void tipc_cltr_recv_routing_table(struct sk_buff *buf) | |||
412 | tipc_node_add_router(n_ptr, router); | 314 | tipc_node_add_router(n_ptr, router); |
413 | break; | 315 | break; |
414 | case ROUTE_REMOVAL: | 316 | case ROUTE_REMOVAL: |
415 | if (!is_slave(tipc_own_addr)) { | 317 | assert(!in_own_cluster(c_ptr->addr)); |
416 | assert(!in_own_cluster(c_ptr->addr) || | ||
417 | is_slave(rem_node)); | ||
418 | } else { | ||
419 | assert(in_own_cluster(c_ptr->addr) && | ||
420 | !is_slave(rem_node)); | ||
421 | } | ||
422 | n_ptr = c_ptr->nodes[tipc_node(rem_node)]; | 318 | n_ptr = c_ptr->nodes[tipc_node(rem_node)]; |
423 | if (n_ptr) | 319 | if (n_ptr) |
424 | tipc_node_remove_router(n_ptr, router); | 320 | tipc_node_remove_router(n_ptr, router); |
@@ -431,22 +327,12 @@ void tipc_cltr_recv_routing_table(struct sk_buff *buf) | |||
431 | 327 | ||
432 | void tipc_cltr_remove_as_router(struct cluster *c_ptr, u32 router) | 328 | void tipc_cltr_remove_as_router(struct cluster *c_ptr, u32 router) |
433 | { | 329 | { |
434 | u32 start_entry; | ||
435 | u32 tstop; | ||
436 | u32 n_num; | 330 | u32 n_num; |
437 | 331 | ||
438 | if (is_slave(router)) | 332 | if (in_own_cluster(c_ptr->addr)) |
439 | return; /* Slave nodes can not be routers */ | 333 | return; |
440 | |||
441 | if (in_own_cluster(c_ptr->addr)) { | ||
442 | start_entry = LOWEST_SLAVE; | ||
443 | tstop = c_ptr->highest_slave; | ||
444 | } else { | ||
445 | start_entry = 1; | ||
446 | tstop = c_ptr->highest_node; | ||
447 | } | ||
448 | 334 | ||
449 | for (n_num = start_entry; n_num <= tstop; n_num++) { | 335 | for (n_num = 1; n_num <= c_ptr->highest_node; n_num++) { |
450 | if (c_ptr->nodes[n_num]) { | 336 | if (c_ptr->nodes[n_num]) { |
451 | tipc_node_remove_router(c_ptr->nodes[n_num], router); | 337 | tipc_node_remove_router(c_ptr->nodes[n_num], router); |
452 | } | 338 | } |
@@ -466,13 +352,11 @@ static void tipc_cltr_multicast(struct cluster *c_ptr, struct sk_buff *buf, | |||
466 | u32 tstop; | 352 | u32 tstop; |
467 | 353 | ||
468 | assert(lower <= upper); | 354 | assert(lower <= upper); |
469 | assert(((lower >= 1) && (lower <= tipc_max_nodes)) || | 355 | assert((lower >= 1) && (lower <= tipc_max_nodes)); |
470 | ((lower >= LOWEST_SLAVE) && (lower <= tipc_highest_allowed_slave))); | 356 | assert((upper >= 1) && (upper <= tipc_max_nodes)); |
471 | assert(((upper >= 1) && (upper <= tipc_max_nodes)) || | ||
472 | ((upper >= LOWEST_SLAVE) && (upper <= tipc_highest_allowed_slave))); | ||
473 | assert(in_own_cluster(c_ptr->addr)); | 357 | assert(in_own_cluster(c_ptr->addr)); |
474 | 358 | ||
475 | tstop = is_slave(upper) ? c_ptr->highest_slave : c_ptr->highest_node; | 359 | tstop = c_ptr->highest_node; |
476 | if (tstop > upper) | 360 | if (tstop > upper) |
477 | tstop = upper; | 361 | tstop = upper; |
478 | for (n_num = lower; n_num <= tstop; n_num++) { | 362 | for (n_num = lower; n_num <= tstop; n_num++) { |
@@ -498,32 +382,23 @@ void tipc_cltr_broadcast(struct sk_buff *buf) | |||
498 | struct cluster *c_ptr; | 382 | struct cluster *c_ptr; |
499 | struct tipc_node *n_ptr; | 383 | struct tipc_node *n_ptr; |
500 | u32 n_num; | 384 | u32 n_num; |
501 | u32 tstart; | ||
502 | u32 tstop; | ||
503 | u32 node_type; | ||
504 | 385 | ||
505 | if (tipc_mode == TIPC_NET_MODE) { | 386 | if (tipc_mode == TIPC_NET_MODE) { |
506 | c_ptr = tipc_cltr_find(tipc_own_addr); | 387 | c_ptr = tipc_cltr_find(tipc_own_addr); |
507 | assert(in_own_cluster(c_ptr->addr)); /* For now */ | 388 | assert(in_own_cluster(c_ptr->addr)); /* For now */ |
508 | 389 | ||
509 | /* Send to standard nodes, then repeat loop sending to slaves */ | 390 | /* Send to nodes */ |
510 | tstart = 1; | 391 | for (n_num = 1; n_num <= c_ptr->highest_node; n_num++) { |
511 | tstop = c_ptr->highest_node; | 392 | n_ptr = c_ptr->nodes[n_num]; |
512 | for (node_type = 1; node_type <= 2; node_type++) { | 393 | if (n_ptr && tipc_node_has_active_links(n_ptr)) { |
513 | for (n_num = tstart; n_num <= tstop; n_num++) { | 394 | buf_copy = skb_copy(buf, GFP_ATOMIC); |
514 | n_ptr = c_ptr->nodes[n_num]; | 395 | if (buf_copy == NULL) |
515 | if (n_ptr && tipc_node_has_active_links(n_ptr)) { | 396 | goto exit; |
516 | buf_copy = skb_copy(buf, GFP_ATOMIC); | 397 | msg_set_destnode(buf_msg(buf_copy), |
517 | if (buf_copy == NULL) | 398 | n_ptr->addr); |
518 | goto exit; | 399 | tipc_link_send(buf_copy, n_ptr->addr, |
519 | msg_set_destnode(buf_msg(buf_copy), | 400 | n_ptr->addr); |
520 | n_ptr->addr); | ||
521 | tipc_link_send(buf_copy, n_ptr->addr, | ||
522 | n_ptr->addr); | ||
523 | } | ||
524 | } | 401 | } |
525 | tstart = LOWEST_SLAVE; | ||
526 | tstop = c_ptr->highest_slave; | ||
527 | } | 402 | } |
528 | } | 403 | } |
529 | exit: | 404 | exit: |
@@ -532,7 +407,6 @@ exit: | |||
532 | 407 | ||
533 | int tipc_cltr_init(void) | 408 | int tipc_cltr_init(void) |
534 | { | 409 | { |
535 | tipc_highest_allowed_slave = LOWEST_SLAVE + tipc_max_slaves; | ||
536 | return tipc_cltr_create(tipc_own_addr) ? 0 : -ENOMEM; | 410 | return tipc_cltr_create(tipc_own_addr) ? 0 : -ENOMEM; |
537 | } | 411 | } |
538 | 412 | ||
diff --git a/net/tipc/cluster.h b/net/tipc/cluster.h index 21493f7beb95..aa1fd6ab4d11 100644 --- a/net/tipc/cluster.h +++ b/net/tipc/cluster.h | |||
@@ -40,26 +40,21 @@ | |||
40 | #include "addr.h" | 40 | #include "addr.h" |
41 | #include "net.h" | 41 | #include "net.h" |
42 | 42 | ||
43 | #define LOWEST_SLAVE 2048u | ||
44 | |||
45 | /** | 43 | /** |
46 | * struct cluster - TIPC cluster structure | 44 | * struct cluster - TIPC cluster structure |
47 | * @addr: network address of cluster | 45 | * @addr: network address of cluster |
48 | * @nodes: array of pointers to all nodes within cluster | 46 | * @nodes: array of pointers to all nodes within cluster |
49 | * @highest_node: id of highest numbered node within cluster | 47 | * @highest_node: id of highest numbered node within cluster |
50 | * @highest_slave: (used for secondary node support) | ||
51 | */ | 48 | */ |
52 | 49 | ||
53 | struct cluster { | 50 | struct cluster { |
54 | u32 addr; | 51 | u32 addr; |
55 | struct tipc_node **nodes; | 52 | struct tipc_node **nodes; |
56 | u32 highest_node; | 53 | u32 highest_node; |
57 | u32 highest_slave; | ||
58 | }; | 54 | }; |
59 | 55 | ||
60 | 56 | ||
61 | extern struct tipc_node **tipc_local_nodes; | 57 | extern struct tipc_node **tipc_local_nodes; |
62 | extern u32 tipc_highest_allowed_slave; | ||
63 | extern struct tipc_node_map tipc_cltr_bcast_nodes; | 58 | extern struct tipc_node_map tipc_cltr_bcast_nodes; |
64 | 59 | ||
65 | void tipc_cltr_remove_as_router(struct cluster *c_ptr, u32 router); | 60 | void tipc_cltr_remove_as_router(struct cluster *c_ptr, u32 router); |
@@ -70,12 +65,10 @@ void tipc_cltr_recv_routing_table(struct sk_buff *buf); | |||
70 | struct cluster *tipc_cltr_create(u32 addr); | 65 | struct cluster *tipc_cltr_create(u32 addr); |
71 | void tipc_cltr_delete(struct cluster *c_ptr); | 66 | void tipc_cltr_delete(struct cluster *c_ptr); |
72 | void tipc_cltr_attach_node(struct cluster *c_ptr, struct tipc_node *n_ptr); | 67 | void tipc_cltr_attach_node(struct cluster *c_ptr, struct tipc_node *n_ptr); |
73 | void tipc_cltr_send_slave_routes(struct cluster *c_ptr, u32 dest); | ||
74 | void tipc_cltr_broadcast(struct sk_buff *buf); | 68 | void tipc_cltr_broadcast(struct sk_buff *buf); |
75 | int tipc_cltr_init(void); | 69 | int tipc_cltr_init(void); |
76 | 70 | ||
77 | void tipc_cltr_bcast_new_route(struct cluster *c_ptr, u32 dest, u32 lo, u32 hi); | 71 | void tipc_cltr_bcast_new_route(struct cluster *c_ptr, u32 dest, u32 lo, u32 hi); |
78 | void tipc_cltr_send_local_routes(struct cluster *c_ptr, u32 dest); | ||
79 | void tipc_cltr_bcast_lost_route(struct cluster *c_ptr, u32 dest, u32 lo, u32 hi); | 72 | void tipc_cltr_bcast_lost_route(struct cluster *c_ptr, u32 dest, u32 lo, u32 hi); |
80 | 73 | ||
81 | static inline struct cluster *tipc_cltr_find(u32 addr) | 74 | static inline struct cluster *tipc_cltr_find(u32 addr) |
diff --git a/net/tipc/config.c b/net/tipc/config.c index 8de97ddb0427..05dc102300ae 100644 --- a/net/tipc/config.c +++ b/net/tipc/config.c | |||
@@ -301,19 +301,6 @@ static struct sk_buff *cfg_set_max_nodes(void) | |||
301 | return tipc_cfg_reply_none(); | 301 | return tipc_cfg_reply_none(); |
302 | } | 302 | } |
303 | 303 | ||
304 | static struct sk_buff *cfg_set_max_slaves(void) | ||
305 | { | ||
306 | u32 value; | ||
307 | |||
308 | if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_UNSIGNED)) | ||
309 | return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); | ||
310 | value = ntohl(*(__be32 *)TLV_DATA(req_tlv_area)); | ||
311 | if (value != 0) | ||
312 | return tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED | ||
313 | " (max secondary nodes fixed at 0)"); | ||
314 | return tipc_cfg_reply_none(); | ||
315 | } | ||
316 | |||
317 | static struct sk_buff *cfg_set_netid(void) | 304 | static struct sk_buff *cfg_set_netid(void) |
318 | { | 305 | { |
319 | u32 value; | 306 | u32 value; |
@@ -439,9 +426,6 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area | |||
439 | case TIPC_CMD_SET_MAX_NODES: | 426 | case TIPC_CMD_SET_MAX_NODES: |
440 | rep_tlv_buf = cfg_set_max_nodes(); | 427 | rep_tlv_buf = cfg_set_max_nodes(); |
441 | break; | 428 | break; |
442 | case TIPC_CMD_SET_MAX_SLAVES: | ||
443 | rep_tlv_buf = cfg_set_max_slaves(); | ||
444 | break; | ||
445 | case TIPC_CMD_SET_NETID: | 429 | case TIPC_CMD_SET_NETID: |
446 | rep_tlv_buf = cfg_set_netid(); | 430 | rep_tlv_buf = cfg_set_netid(); |
447 | break; | 431 | break; |
@@ -463,9 +447,6 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area | |||
463 | case TIPC_CMD_GET_MAX_NODES: | 447 | case TIPC_CMD_GET_MAX_NODES: |
464 | rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_nodes); | 448 | rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_nodes); |
465 | break; | 449 | break; |
466 | case TIPC_CMD_GET_MAX_SLAVES: | ||
467 | rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_slaves); | ||
468 | break; | ||
469 | case TIPC_CMD_GET_NETID: | 450 | case TIPC_CMD_GET_NETID: |
470 | rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_net_id); | 451 | rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_net_id); |
471 | break; | 452 | break; |
@@ -475,6 +456,8 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area | |||
475 | break; | 456 | break; |
476 | case TIPC_CMD_SET_MAX_ZONES: | 457 | case TIPC_CMD_SET_MAX_ZONES: |
477 | case TIPC_CMD_GET_MAX_ZONES: | 458 | case TIPC_CMD_GET_MAX_ZONES: |
459 | case TIPC_CMD_SET_MAX_SLAVES: | ||
460 | case TIPC_CMD_GET_MAX_SLAVES: | ||
478 | rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED | 461 | rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED |
479 | " (obsolete command)"); | 462 | " (obsolete command)"); |
480 | break; | 463 | break; |
diff --git a/net/tipc/core.c b/net/tipc/core.c index 13946331bd4d..8b7af893971e 100644 --- a/net/tipc/core.c +++ b/net/tipc/core.c | |||
@@ -56,10 +56,6 @@ | |||
56 | #define CONFIG_TIPC_NODES 255 | 56 | #define CONFIG_TIPC_NODES 255 |
57 | #endif | 57 | #endif |
58 | 58 | ||
59 | #ifndef CONFIG_TIPC_SLAVE_NODES | ||
60 | #define CONFIG_TIPC_SLAVE_NODES 0 | ||
61 | #endif | ||
62 | |||
63 | #ifndef CONFIG_TIPC_PORTS | 59 | #ifndef CONFIG_TIPC_PORTS |
64 | #define CONFIG_TIPC_PORTS 8191 | 60 | #define CONFIG_TIPC_PORTS 8191 |
65 | #endif | 61 | #endif |
@@ -82,7 +78,6 @@ const char tipc_alphabet[] = | |||
82 | u32 tipc_own_addr; | 78 | u32 tipc_own_addr; |
83 | int tipc_max_clusters; | 79 | int tipc_max_clusters; |
84 | int tipc_max_nodes; | 80 | int tipc_max_nodes; |
85 | int tipc_max_slaves; | ||
86 | int tipc_max_ports; | 81 | int tipc_max_ports; |
87 | int tipc_max_subscriptions; | 82 | int tipc_max_subscriptions; |
88 | int tipc_max_publications; | 83 | int tipc_max_publications; |
@@ -206,7 +201,6 @@ static int __init tipc_init(void) | |||
206 | tipc_max_ports = CONFIG_TIPC_PORTS; | 201 | tipc_max_ports = CONFIG_TIPC_PORTS; |
207 | tipc_max_clusters = CONFIG_TIPC_CLUSTERS; | 202 | tipc_max_clusters = CONFIG_TIPC_CLUSTERS; |
208 | tipc_max_nodes = CONFIG_TIPC_NODES; | 203 | tipc_max_nodes = CONFIG_TIPC_NODES; |
209 | tipc_max_slaves = CONFIG_TIPC_SLAVE_NODES; | ||
210 | tipc_net_id = 4711; | 204 | tipc_net_id = 4711; |
211 | 205 | ||
212 | if ((res = tipc_core_start())) | 206 | if ((res = tipc_core_start())) |
diff --git a/net/tipc/core.h b/net/tipc/core.h index 9403a226a570..8313a1689565 100644 --- a/net/tipc/core.h +++ b/net/tipc/core.h | |||
@@ -186,7 +186,6 @@ void tipc_dump_dbg(struct print_buf *, const char *fmt, ...); | |||
186 | extern u32 tipc_own_addr; | 186 | extern u32 tipc_own_addr; |
187 | extern int tipc_max_clusters; | 187 | extern int tipc_max_clusters; |
188 | extern int tipc_max_nodes; | 188 | extern int tipc_max_nodes; |
189 | extern int tipc_max_slaves; | ||
190 | extern int tipc_max_ports; | 189 | extern int tipc_max_ports; |
191 | extern int tipc_max_subscriptions; | 190 | extern int tipc_max_subscriptions; |
192 | extern int tipc_max_publications; | 191 | extern int tipc_max_publications; |
diff --git a/net/tipc/discover.c b/net/tipc/discover.c index f2ce36baf42e..80799f6ba892 100644 --- a/net/tipc/discover.c +++ b/net/tipc/discover.c | |||
@@ -149,10 +149,6 @@ void tipc_disc_recv_msg(struct sk_buff *buf, struct bearer *b_ptr) | |||
149 | } | 149 | } |
150 | if (!tipc_in_scope(dest, tipc_own_addr)) | 150 | if (!tipc_in_scope(dest, tipc_own_addr)) |
151 | return; | 151 | return; |
152 | if (is_slave(tipc_own_addr) && is_slave(orig)) | ||
153 | return; | ||
154 | if (is_slave(orig) && !in_own_cluster(orig)) | ||
155 | return; | ||
156 | if (in_own_cluster(orig)) { | 152 | if (in_own_cluster(orig)) { |
157 | /* Always accept link here */ | 153 | /* Always accept link here */ |
158 | struct sk_buff *rbuf; | 154 | struct sk_buff *rbuf; |
diff --git a/net/tipc/msg.h b/net/tipc/msg.h index aee53864d7a0..c1b6217838e6 100644 --- a/net/tipc/msg.h +++ b/net/tipc/msg.h | |||
@@ -850,7 +850,7 @@ static inline void msg_set_dataoctet(struct tipc_msg *m, u32 pos) | |||
850 | * Routing table message types | 850 | * Routing table message types |
851 | */ | 851 | */ |
852 | #define EXT_ROUTING_TABLE 0 | 852 | #define EXT_ROUTING_TABLE 0 |
853 | #define LOCAL_ROUTING_TABLE 1 | 853 | #define LOCAL_ROUTING_TABLE 1 /* obsoleted */ |
854 | #define SLAVE_ROUTING_TABLE 2 | 854 | #define SLAVE_ROUTING_TABLE 2 |
855 | #define ROUTE_ADDITION 3 | 855 | #define ROUTE_ADDITION 3 |
856 | #define ROUTE_REMOVAL 4 | 856 | #define ROUTE_REMOVAL 4 |
diff --git a/net/tipc/node.c b/net/tipc/node.c index c20bd851a44a..8ffbdb33b2cb 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -333,8 +333,6 @@ static void node_established_contact(struct tipc_node *n_ptr) | |||
333 | /* Syncronize broadcast acks */ | 333 | /* Syncronize broadcast acks */ |
334 | n_ptr->bclink.acked = tipc_bclink_get_last_sent(); | 334 | n_ptr->bclink.acked = tipc_bclink_get_last_sent(); |
335 | 335 | ||
336 | if (is_slave(tipc_own_addr)) | ||
337 | return; | ||
338 | if (!in_own_cluster(n_ptr->addr)) { | 336 | if (!in_own_cluster(n_ptr->addr)) { |
339 | /* Usage case 1 (see above) */ | 337 | /* Usage case 1 (see above) */ |
340 | c_ptr = tipc_cltr_find(tipc_own_addr); | 338 | c_ptr = tipc_cltr_find(tipc_own_addr); |
@@ -347,13 +345,6 @@ static void node_established_contact(struct tipc_node *n_ptr) | |||
347 | } | 345 | } |
348 | 346 | ||
349 | c_ptr = n_ptr->owner; | 347 | c_ptr = n_ptr->owner; |
350 | if (is_slave(n_ptr->addr)) { | ||
351 | /* Usage case 2 (see above) */ | ||
352 | tipc_cltr_bcast_new_route(c_ptr, n_ptr->addr, 1, tipc_max_nodes); | ||
353 | tipc_cltr_send_local_routes(c_ptr, n_ptr->addr); | ||
354 | return; | ||
355 | } | ||
356 | |||
357 | if (n_ptr->bclink.supported) { | 348 | if (n_ptr->bclink.supported) { |
358 | tipc_nmap_add(&tipc_cltr_bcast_nodes, n_ptr->addr); | 349 | tipc_nmap_add(&tipc_cltr_bcast_nodes, n_ptr->addr); |
359 | if (n_ptr->addr < tipc_own_addr) | 350 | if (n_ptr->addr < tipc_own_addr) |
@@ -362,9 +353,6 @@ static void node_established_contact(struct tipc_node *n_ptr) | |||
362 | 353 | ||
363 | /* Case 3 (see above) */ | 354 | /* Case 3 (see above) */ |
364 | tipc_net_send_external_routes(n_ptr->addr); | 355 | tipc_net_send_external_routes(n_ptr->addr); |
365 | tipc_cltr_send_slave_routes(c_ptr, n_ptr->addr); | ||
366 | tipc_cltr_bcast_new_route(c_ptr, n_ptr->addr, LOWEST_SLAVE, | ||
367 | tipc_highest_allowed_slave); | ||
368 | } | 356 | } |
369 | 357 | ||
370 | static void node_cleanup_finished(unsigned long node_addr) | 358 | static void node_cleanup_finished(unsigned long node_addr) |
@@ -404,33 +392,20 @@ static void node_lost_contact(struct tipc_node *n_ptr) | |||
404 | } | 392 | } |
405 | 393 | ||
406 | /* Update routing tables */ | 394 | /* Update routing tables */ |
407 | if (is_slave(tipc_own_addr)) { | 395 | if (!in_own_cluster(n_ptr->addr)) { |
408 | tipc_net_remove_as_router(n_ptr->addr); | 396 | /* Case 4 (see above) */ |
397 | c_ptr = tipc_cltr_find(tipc_own_addr); | ||
398 | tipc_cltr_bcast_lost_route(c_ptr, n_ptr->addr, 1, | ||
399 | tipc_max_nodes); | ||
409 | } else { | 400 | } else { |
410 | if (!in_own_cluster(n_ptr->addr)) { | 401 | /* Case 5 (see above) */ |
411 | /* Case 4 (see above) */ | 402 | c_ptr = tipc_cltr_find(n_ptr->addr); |
412 | c_ptr = tipc_cltr_find(tipc_own_addr); | 403 | if (n_ptr->bclink.supported) { |
413 | tipc_cltr_bcast_lost_route(c_ptr, n_ptr->addr, 1, | 404 | tipc_nmap_remove(&tipc_cltr_bcast_nodes, n_ptr->addr); |
414 | tipc_max_nodes); | 405 | if (n_ptr->addr < tipc_own_addr) |
415 | } else { | 406 | tipc_own_tag--; |
416 | /* Case 5 (see above) */ | ||
417 | c_ptr = tipc_cltr_find(n_ptr->addr); | ||
418 | if (is_slave(n_ptr->addr)) { | ||
419 | tipc_cltr_bcast_lost_route(c_ptr, n_ptr->addr, 1, | ||
420 | tipc_max_nodes); | ||
421 | } else { | ||
422 | if (n_ptr->bclink.supported) { | ||
423 | tipc_nmap_remove(&tipc_cltr_bcast_nodes, | ||
424 | n_ptr->addr); | ||
425 | if (n_ptr->addr < tipc_own_addr) | ||
426 | tipc_own_tag--; | ||
427 | } | ||
428 | tipc_net_remove_as_router(n_ptr->addr); | ||
429 | tipc_cltr_bcast_lost_route(c_ptr, n_ptr->addr, | ||
430 | LOWEST_SLAVE, | ||
431 | tipc_highest_allowed_slave); | ||
432 | } | ||
433 | } | 407 | } |
408 | tipc_net_remove_as_router(n_ptr->addr); | ||
434 | } | 409 | } |
435 | if (tipc_node_has_active_routes(n_ptr)) | 410 | if (tipc_node_has_active_routes(n_ptr)) |
436 | return; | 411 | return; |
@@ -482,7 +457,7 @@ struct tipc_node *tipc_node_select_next_hop(u32 addr, u32 selector) | |||
482 | return n_ptr; | 457 | return n_ptr; |
483 | 458 | ||
484 | /* Cluster local system nodes *must* have direct links */ | 459 | /* Cluster local system nodes *must* have direct links */ |
485 | if (!is_slave(addr) && in_own_cluster(addr)) | 460 | if (in_own_cluster(addr)) |
486 | return NULL; | 461 | return NULL; |
487 | 462 | ||
488 | /* Look for cluster local router with direct link to node */ | 463 | /* Look for cluster local router with direct link to node */ |
@@ -490,11 +465,6 @@ struct tipc_node *tipc_node_select_next_hop(u32 addr, u32 selector) | |||
490 | if (router_addr) | 465 | if (router_addr) |
491 | return tipc_node_select(router_addr, selector); | 466 | return tipc_node_select(router_addr, selector); |
492 | 467 | ||
493 | /* Slave nodes can only be accessed within own cluster via a | ||
494 | known router with direct link -- if no router was found,give up */ | ||
495 | if (is_slave(addr)) | ||
496 | return NULL; | ||
497 | |||
498 | /* Inter zone/cluster -- find any direct link to remote cluster */ | 468 | /* Inter zone/cluster -- find any direct link to remote cluster */ |
499 | addr = tipc_addr(tipc_zone(addr), tipc_cluster(addr), 0); | 469 | addr = tipc_addr(tipc_zone(addr), tipc_cluster(addr), 0); |
500 | n_ptr = tipc_net_select_remote_node(addr, selector); | 470 | n_ptr = tipc_net_select_remote_node(addr, selector); |
@@ -603,8 +573,7 @@ struct sk_buff *tipc_node_get_nodes(const void *req_tlv_area, int req_tlv_space) | |||
603 | return tipc_cfg_reply_none(); | 573 | return tipc_cfg_reply_none(); |
604 | } | 574 | } |
605 | 575 | ||
606 | /* For now, get space for all other nodes | 576 | /* For now, get space for all other nodes */ |
607 | (will need to modify this when slave nodes are supported */ | ||
608 | 577 | ||
609 | payload_size = TLV_SPACE(sizeof(node_info)) * (tipc_max_nodes - 1); | 578 | payload_size = TLV_SPACE(sizeof(node_info)) * (tipc_max_nodes - 1); |
610 | if (payload_size > 32768u) { | 579 | if (payload_size > 32768u) { |
diff --git a/net/tipc/port.c b/net/tipc/port.c index 7873283f4965..c033cb87b964 100644 --- a/net/tipc/port.c +++ b/net/tipc/port.c | |||
@@ -1110,10 +1110,7 @@ int tipc_connect2port(u32 ref, struct tipc_portid const *peer) | |||
1110 | msg_set_origport(msg, p_ptr->publ.ref); | 1110 | msg_set_origport(msg, p_ptr->publ.ref); |
1111 | msg_set_transp_seqno(msg, 42); | 1111 | msg_set_transp_seqno(msg, 42); |
1112 | msg_set_type(msg, TIPC_CONN_MSG); | 1112 | msg_set_type(msg, TIPC_CONN_MSG); |
1113 | if (!may_route(peer->node)) | 1113 | msg_set_hdr_sz(msg, SHORT_H_SIZE); |
1114 | msg_set_hdr_sz(msg, SHORT_H_SIZE); | ||
1115 | else | ||
1116 | msg_set_hdr_sz(msg, LONG_H_SIZE); | ||
1117 | 1114 | ||
1118 | p_ptr->probing_interval = PROBING_INTERVAL; | 1115 | p_ptr->probing_interval = PROBING_INTERVAL; |
1119 | p_ptr->probing_state = CONFIRMED; | 1116 | p_ptr->probing_state = CONFIRMED; |