return rc;
 }
 
+static int smc_llc_srv_conf_link(struct smc_link *link,
+                                struct smc_link *link_new,
+                                enum smc_lgr_type lgr_new_t)
+{
+       struct smc_link_group *lgr = link->lgr;
+       struct smc_llc_qentry *qentry = NULL;
+       int rc;
+
+       /* send CONFIRM LINK request over the RoCE fabric */
+       rc = smc_llc_send_confirm_link(link_new, SMC_LLC_REQ);
+       if (rc)
+               return -ENOLINK;
+       /* receive CONFIRM LINK response over the RoCE fabric */
+       qentry = smc_llc_wait(lgr, link, SMC_LLC_WAIT_FIRST_TIME,
+                             SMC_LLC_CONFIRM_LINK);
+       if (!qentry) {
+               /* send DELETE LINK */
+               smc_llc_send_delete_link(link, link_new->link_id, SMC_LLC_REQ,
+                                        false, SMC_LLC_DEL_LOST_PATH);
+               return -ENOLINK;
+       }
+       smc_llc_link_active(link_new);
+       lgr->type = lgr_new_t;
+       smc_llc_flow_qentry_del(&lgr->llc_flow_lcl);
+       return 0;
+}
+
 int smc_llc_srv_add_link(struct smc_link *link)
 {
        enum smc_lgr_type lgr_new_t = SMC_LGR_SYMMETRIC;
        rc = smc_llc_srv_rkey_exchange(link, link_new);
        if (rc)
                goto out_err;
-       /* tbd: rc = smc_llc_srv_conf_link(link, link_new, lgr_new_t); */
+       rc = smc_llc_srv_conf_link(link, link_new, lgr_new_t);
        if (rc)
                goto out_err;
        return 0;