Lines Matching defs:mpts

90 static void mptcp_connorder_helper(struct mptsub *mpts);
257 struct mptsub *mpts;
273 mpts = mptcp_subflow_alloc(M_WAITOK);
274 if (mpts == NULL) {
278 MPTS_ADDREF(mpts); /* for this routine */
281 mpts->mpts_src_sl = *src_sl;
284 mpts->mpts_dst_sl = *dst_sl;
287 error = mptcp_subflow_add(mpte, mpts, p, ifscope);
289 *pcid = mpts->mpts_connid;
292 if (mpts != NULL) {
294 MPTS_LOCK(mpts);
295 if (mpts->mpts_flags & MPTSF_ATTACHED) {
296 MPTS_UNLOCK(mpts);
297 MPTS_REMREF(mpts);
298 mptcp_subflow_del(mpte, mpts, TRUE);
301 MPTS_UNLOCK(mpts);
303 MPTS_REMREF(mpts);
362 struct mptsub *mpts;
377 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
378 if ((error = copyout(&mpts->mpts_connid, cidp,
379 sizeof (mpts->mpts_connid))) != 0)
382 cidp += sizeof (mpts->mpts_connid);
400 struct mptsub *mpts;
408 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
409 if (mpts->mpts_connid == *cid || *cid == CONNID_ANY)
412 if (mpts == NULL)
415 MPTS_LOCK(mpts);
416 ifp = mpts->mpts_outif;
417 *cid = mpts->mpts_connid;
419 *soerror = mpts->mpts_soerror;
421 if (mpts->mpts_flags & MPTSF_CONNECTING)
423 if (mpts->mpts_flags & MPTSF_CONNECTED)
425 if (mpts->mpts_flags & MPTSF_DISCONNECTING)
427 if (mpts->mpts_flags & MPTSF_DISCONNECTED)
429 if (mpts->mpts_flags & MPTSF_BOUND_IF)
431 if (mpts->mpts_flags & MPTSF_BOUND_IP)
433 if (mpts->mpts_flags & MPTSF_BOUND_PORT)
435 if (mpts->mpts_flags & MPTSF_PREFERRED)
437 if (mpts->mpts_flags & MPTSF_MP_CAPABLE)
439 if (mpts->mpts_flags & MPTSF_MP_DEGRADED)
441 if (mpts->mpts_flags & MPTSF_MP_READY)
443 if (mpts->mpts_flags & MPTSF_ACTIVE)
446 VERIFY(mpts->mpts_src_sl != NULL);
447 se = TAILQ_FIRST(&mpts->mpts_src_sl->sl_head);
456 VERIFY(mpts->mpts_dst_sl != NULL);
457 se = TAILQ_FIRST(&mpts->mpts_dst_sl->sl_head);
468 if (mpts->mpts_socket != NULL) {
475 struct socket *so = mpts->mpts_socket;
488 __func__, mpts->mpts_connid, mpts->mpts_flags));
490 MPTS_UNLOCK(mpts);
500 struct mptsub *mpts, *mpts1;
511 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
512 if (mpts->mpts_connid == cid)
515 if (mpts == NULL) {
536 MPTS_LOCK(mpts);
537 mpts->mpts_flags &= ~MPTSF_PREFERRED;
538 mpts->mpts_rank = rank;
539 if (mpts1 != NULL && mpts != mpts1) {
542 mpts->mpts_rank = (mpts1->mpts_rank + 1);
547 MPTS_UNLOCK(mpts);
556 if (mpts1 != mpts &&
561 } else if (mpts1 == mpts) {
578 mptcp_connorder_helper(struct mptsub *mpts)
580 struct socket *so = mpts->mpts_socket;
587 if (mpts->mpts_flags & MPTSF_PREFERRED)
592 mpts->mpts_connid, mpts->mpts_flags));
603 struct mptsub *mpts;
615 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
616 if (mpts->mpts_connid == cid)
619 if (mpts == NULL) {
624 MPTS_LOCK(mpts);
625 *rank = mpts->mpts_rank;
626 MPTS_UNLOCK(mpts);
753 struct mptsub *mpts;
802 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
803 if (mpts->mpts_connid != cid)
805 MPTS_LOCK(mpts);
806 mpts->mpts_flags |= MPTSF_USER_DISCONNECT;
807 mptcp_subflow_disconnect(mpte, mpts, FALSE);
808 MPTS_UNLOCK(mpts);
812 if (mpts == NULL) {
880 struct mptsub *mpts;
895 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
896 MPTS_LOCK(mpts);
897 mpts->mpts_flags |= MPTSF_USER_DISCONNECT;
898 MPTS_UNLOCK(mpts);
903 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
904 MPTS_LOCK(mpts);
905 mpts->mpts_flags |= MPTSF_USER_DISCONNECT;
906 mptcp_subflow_disconnect(mpte, mpts, FALSE);
907 MPTS_UNLOCK(mpts);
948 struct mptsub *mpts;
971 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
972 MPTS_LOCK(mpts);
973 if (mpts->mpts_flags & MPTSF_MP_CAPABLE) {
979 MPTS_ADDREF_LOCKED(mpts); /* for us */
980 so = mpts->mpts_socket;
987 mptcp_subflow_sopeeloff(mpte, mpts, so);
988 MPTS_UNLOCK(mpts);
990 mptcp_subflow_del(mpte, mpts, FALSE);
991 MPTS_REMREF(mpts); /* ours */
1445 struct mptsub *mpts;
1488 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
1491 MPTS_LOCK(mpts);
1492 mpts->mpts_flags &= ~(MPTSF_SOPT_OLDVAL|MPTSF_SOPT_INPROG);
1493 mpts->mpts_oldintval = 0;
1495 VERIFY(mpts->mpts_socket != NULL);
1496 so = mpts->mpts_socket;
1499 mpts->mpts_flags |= MPTSF_SOPT_OLDVAL;
1500 mpts->mpts_oldintval = smpo.mpo_intval;
1503 MPTS_UNLOCK(mpts);
1507 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
1510 MPTS_LOCK(mpts);
1511 mpts->mpts_flags |= MPTSF_SOPT_INPROG;
1512 VERIFY(mpts->mpts_socket != NULL);
1513 so = mpts->mpts_socket;
1517 MPTS_UNLOCK(mpts);
1523 TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
1526 MPTS_LOCK(mpts);
1527 if (!(mpts->mpts_flags & MPTSF_SOPT_INPROG)) {
1529 mpts->mpts_flags &= ~MPTSF_SOPT_OLDVAL;
1530 mpts->mpts_oldintval = 0;
1531 MPTS_UNLOCK(mpts);
1534 if (!(mpts->mpts_flags & MPTSF_SOPT_OLDVAL)) {
1535 mpts->mpts_flags &= ~MPTSF_SOPT_INPROG;
1536 VERIFY(mpts->mpts_oldintval == 0);
1537 MPTS_UNLOCK(mpts);
1542 VERIFY(mpts->mpts_socket != NULL);
1543 so = mpts->mpts_socket;
1545 smpo.mpo_intval = mpts->mpts_oldintval;
1549 mpts->mpts_oldintval = 0;
1550 mpts->mpts_flags &= ~(MPTSF_SOPT_OLDVAL|MPTSF_SOPT_INPROG);
1551 MPTS_UNLOCK(mpts);