-#ifdef MPTCP_NOTYET
- struct mptcp_mpjoin_opt_req *join_req =
- (struct mptcp_mpjoin_opt_req *)cp;
- mp_so = mptcp_find_mpso(join_req->mmjo_peer_token);
- if (!mp_so) {
- mptcplog((LOG_ERR, "MPTCP Socket: "
- "%s: cannot find mp_so token = %x\n",
- __func__, join_req->mmjo_peer_token),
- MPTCP_SOCKET_DBG, MPTCP_LOGLVL_ERR);
- /* send RST */
- MPTCP_JOPT_ERROR_PATH(tp);
- return;
- }
- if (tp->t_mpflags & TMPF_PREESTABLISHED) {
- return;
- }
- mp_so->ms_remote_addr_id = join_req->mmjo_addr_id;
- mp_so->ms_remote_rand = join_req->mmjo_rand;
- tp->t_mpflags |= TMPF_PREESTABLISHED | TMPF_JOINED_FLOW;
- tp->t_mpflags |= TMPF_RECVD_JOIN;
- tp->t_inpcb->inp_socket->so_flags |= SOF_MP_SEC_SUBFLOW;
- if (join_req->mmjo_subtype & MPTCP_BACKUP) {
- tp->t_mpflags |= TMPF_BACKUP_PATH;
- }
-#endif
- } else if ((th->th_flags & (TH_SYN | TH_ACK)) == (TH_SYN | TH_ACK)) {
- struct mptcp_mpjoin_opt_rsp *join_rsp =
- (struct mptcp_mpjoin_opt_rsp *)cp;
-
- if (optlen != sizeof (struct mptcp_mpjoin_opt_rsp)) {
- mptcplog((LOG_ERR, "MPTCP Socket: "
- "SYN_ACK: unexpected optlen = %d mp "
- "option = %lu\n", optlen,
- sizeof (struct mptcp_mpjoin_opt_rsp)),
- MPTCP_SOCKET_DBG, MPTCP_LOGLVL_ERR);
- tp->t_mpflags &= ~TMPF_PREESTABLISHED;
- /* send RST and close */
- MPTCP_JOPT_ERROR_PATH(tp);
- return;
- }
-
- mptcp_set_raddr_rand(tp->t_local_aid,
- tptomptp(tp),
- join_rsp->mmjo_addr_id, join_rsp->mmjo_rand);
- error = mptcp_validate_join_hmac(tp,
- (u_char*)&join_rsp->mmjo_mac, SHA1_TRUNCATED);
- if (error) {
- mptcplog((LOG_ERR, "MPTCP Socket: %s: "
- "SYN_ACK error = %d \n", __func__, error),
- MPTCP_SOCKET_DBG, MPTCP_LOGLVL_ERR);
- tp->t_mpflags &= ~TMPF_PREESTABLISHED;
- /* send RST and close */
- MPTCP_JOPT_ERROR_PATH(tp);
- return;
- }
- tp->t_mpflags |= TMPF_SENT_JOIN;
- } else if ((th->th_flags & TH_ACK) &&
- (tp->t_mpflags & TMPF_PREESTABLISHED)) {
- struct mptcp_mpjoin_opt_rsp2 *join_rsp2 =
- (struct mptcp_mpjoin_opt_rsp2 *)cp;
-
- if (optlen != sizeof (struct mptcp_mpjoin_opt_rsp2)) {
- mptcplog((LOG_ERR, "MPTCP Socket: "
- "ACK: unexpected optlen = %d mp option "
- "= %lu \n", optlen,
- sizeof (struct mptcp_mpjoin_opt_rsp2)),
- MPTCP_SOCKET_DBG, MPTCP_LOGLVL_ERR);