|
@@ -35,7 +35,7 @@
|
|
*/
|
|
*/
|
|
|
|
|
|
#include "core.h"
|
|
#include "core.h"
|
|
-#include "link.h"
|
|
|
|
|
|
+#include "node.h"
|
|
#include "discover.h"
|
|
#include "discover.h"
|
|
|
|
|
|
/* min delay during bearer start up */
|
|
/* min delay during bearer start up */
|
|
@@ -125,7 +125,6 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
|
|
{
|
|
{
|
|
struct tipc_net *tn = net_generic(net, tipc_net_id);
|
|
struct tipc_net *tn = net_generic(net, tipc_net_id);
|
|
struct tipc_node *node;
|
|
struct tipc_node *node;
|
|
- struct tipc_link *link;
|
|
|
|
struct tipc_media_addr maddr;
|
|
struct tipc_media_addr maddr;
|
|
struct sk_buff *rbuf;
|
|
struct sk_buff *rbuf;
|
|
struct tipc_msg *msg = buf_msg(buf);
|
|
struct tipc_msg *msg = buf_msg(buf);
|
|
@@ -170,13 +169,10 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
|
|
return;
|
|
return;
|
|
tipc_node_lock(node);
|
|
tipc_node_lock(node);
|
|
node->capabilities = caps;
|
|
node->capabilities = caps;
|
|
- link = node->links[bearer->identity].link;
|
|
|
|
|
|
|
|
/* Prepare to validate requesting node's signature and media address */
|
|
/* Prepare to validate requesting node's signature and media address */
|
|
sign_match = (signature == node->signature);
|
|
sign_match = (signature == node->signature);
|
|
- addr_match = link && !memcmp(&link->media_addr, &maddr, sizeof(maddr));
|
|
|
|
- link_up = link && tipc_link_is_up(link);
|
|
|
|
-
|
|
|
|
|
|
+ tipc_node_check_dest(node, bearer, &link_up, &addr_match, &maddr);
|
|
|
|
|
|
/* These three flags give us eight permutations: */
|
|
/* These three flags give us eight permutations: */
|
|
|
|
|
|
@@ -239,16 +235,8 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
|
|
if (accept_sign)
|
|
if (accept_sign)
|
|
node->signature = signature;
|
|
node->signature = signature;
|
|
|
|
|
|
- if (accept_addr) {
|
|
|
|
- if (!link)
|
|
|
|
- link = tipc_link_create(node, bearer, &maddr);
|
|
|
|
- if (link) {
|
|
|
|
- memcpy(&link->media_addr, &maddr, sizeof(maddr));
|
|
|
|
- tipc_link_reset(link);
|
|
|
|
- } else {
|
|
|
|
- respond = false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ if (accept_addr && !tipc_node_update_dest(node, bearer, &maddr))
|
|
|
|
+ respond = false;
|
|
|
|
|
|
/* Send response, if necessary */
|
|
/* Send response, if necessary */
|
|
if (respond && (mtyp == DSC_REQ_MSG)) {
|
|
if (respond && (mtyp == DSC_REQ_MSG)) {
|