l_ptr->peer_session = WILDCARD_SESSION;
        l_ptr->bearer_id = b_ptr->identity;
        l_ptr->tolerance = b_ptr->tolerance;
+       l_ptr->snd_nxt = 1;
+       l_ptr->rcv_nxt = 1;
        l_ptr->state = TIPC_LINK_RESETTING;
 
        l_ptr->pmsg = (struct tipc_msg *)&l_ptr->proto_msg;
                        pl = node_active_link(l->owner, 0);
                        if (pl && link_probing(pl))
                                break;
+                       l->state = TIPC_LINK_WORKING;
                        actions |= LINK_ACTIVATE;
                        if (!l->owner->working_links)
                                actions |= SND_BCAST_SYNC;
                        pl = node_active_link(l->owner, 0);
                        if (pl && link_probing(pl))
                                break;
+                       l->state = TIPC_LINK_WORKING;
                        actions |= LINK_ACTIVATE;
                        if (!l->owner->working_links)
                                actions |= SND_BCAST_SYNC;
        link_reset_statistics(l_ptr);
 }
 
-void tipc_link_activate(struct tipc_link *link)
-{
-       struct tipc_node *node = link->owner;
-
-       link->rcv_nxt = 1;
-       link->stats.recv_info = 1;
-       link->silent_intv_cnt = 0;
-       link->state = TIPC_LINK_WORKING;
-       link->exec_mode = TIPC_LINK_OPEN;
-       tipc_node_link_up(node, link->bearer_id);
-       tipc_bearer_add_dest(node->net, link->bearer_id, link->addr);
-}
-
 /**
  * __tipc_link_xmit(): same as tipc_link_xmit, but destlink is known & locked
  * @link: link to use
 
 void tipc_link_purge_backlog(struct tipc_link *l);
 void tipc_link_reset_all(struct tipc_node *node);
 void tipc_link_reset(struct tipc_link *l_ptr);
-void tipc_link_activate(struct tipc_link *link);
 int __tipc_link_xmit(struct net *net, struct tipc_link *link,
                     struct sk_buff_head *list);
 int tipc_link_xmit(struct tipc_link *link,     struct sk_buff_head *list,
 
        n->action_flags |= TIPC_NOTIFY_LINK_UP;
        n->link_id = l->peer_bearer_id << 16 | l->bearer_id;
 
+       tipc_bearer_add_dest(n->net, bearer_id, n->addr);
+
        pr_debug("Established link <%s> on network plane %c\n",
                 l->name, l->net_plane);
 
        /* No active links ? => take both active slots */
-       if (*slot0 < 0) {
+       if (!tipc_node_is_up(n)) {
                *slot0 = bearer_id;
                *slot1 = bearer_id;
                node_established_contact(n);
        rc = tipc_link_rcv(l, skb, &xmitq);
 
        if (unlikely(rc & TIPC_LINK_UP_EVT))
-               tipc_link_activate(l);
+               tipc_node_link_up(n, bearer_id);
        if (unlikely(rc & TIPC_LINK_DOWN_EVT))
                tipc_link_reset(l);
        skb = NULL;