Lines Matching refs:opts

405 		       unsigned int *size, struct mptcp_out_options *opts)  in mptcp_syn_options()  argument
414 opts->suboptions = OPTION_MPTCP_MPC_SYN; in mptcp_syn_options()
415 opts->csum_reqd = mptcp_is_checksum_enabled(sock_net(sk)); in mptcp_syn_options()
416 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_syn_options()
422 opts->suboptions = OPTION_MPTCP_MPJ_SYN; in mptcp_syn_options()
423 opts->join_id = subflow->local_id; in mptcp_syn_options()
424 opts->token = subflow->remote_token; in mptcp_syn_options()
425 opts->nonce = subflow->local_nonce; in mptcp_syn_options()
426 opts->backup = subflow->request_bkup; in mptcp_syn_options()
446 struct mptcp_out_options *opts) in mptcp_established_options_mp() argument
477 opts->data_len = data_len; in mptcp_established_options_mp()
478 opts->suboptions = OPTION_MPTCP_MPC_ACK; in mptcp_established_options_mp()
479 opts->sndr_key = subflow->local_key; in mptcp_established_options_mp()
480 opts->rcvr_key = subflow->remote_key; in mptcp_established_options_mp()
481 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_mp()
482 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_established_options_mp()
491 if (opts->csum_reqd) { in mptcp_established_options_mp()
493 opts->data_seq = mpext->data_seq; in mptcp_established_options_mp()
494 opts->subflow_seq = mpext->subflow_seq; in mptcp_established_options_mp()
495 opts->csum = mpext->csum; in mptcp_established_options_mp()
509 opts->suboptions = OPTION_MPTCP_MPJ_ACK; in mptcp_established_options_mp()
510 memcpy(opts->hmac, subflow->hmac, MPTCPOPT_HMAC_LEN); in mptcp_established_options_mp()
559 struct mptcp_out_options *opts) in mptcp_established_options_dss() argument
569 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_dss()
576 if (opts->csum_reqd) in mptcp_established_options_dss()
579 opts->ext_copy = *mpext; in mptcp_established_options_dss()
584 mptcp_write_data_fin(subflow, skb, &opts->ext_copy); in mptcp_established_options_dss()
585 opts->suboptions = OPTION_MPTCP_DSS; in mptcp_established_options_dss()
592 opts->ext_copy.use_ack = 0; in mptcp_established_options_dss()
601 opts->ext_copy.data_ack = ack_seq; in mptcp_established_options_dss()
602 opts->ext_copy.ack64 = 1; in mptcp_established_options_dss()
605 opts->ext_copy.data_ack32 = (uint32_t)ack_seq; in mptcp_established_options_dss()
606 opts->ext_copy.ack64 = 0; in mptcp_established_options_dss()
608 opts->ext_copy.use_ack = 1; in mptcp_established_options_dss()
609 opts->suboptions = OPTION_MPTCP_DSS; in mptcp_established_options_dss()
652 struct mptcp_out_options *opts) in mptcp_established_options_add_addr() argument
665 (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || in mptcp_established_options_add_addr()
666 !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &opts->addr, in mptcp_established_options_add_addr()
672 len = mptcp_add_addr_len(opts->addr.family, echo, !!opts->addr.port); in mptcp_established_options_add_addr()
679 opts->suboptions = 0; in mptcp_established_options_add_addr()
686 opts->ahmac = 0; in mptcp_established_options_add_addr()
689 opts->suboptions |= OPTION_MPTCP_ADD_ADDR; in mptcp_established_options_add_addr()
692 opts->ahmac = add_addr_generate_hmac(msk->local_key, in mptcp_established_options_add_addr()
694 &opts->addr); in mptcp_established_options_add_addr()
699 opts->addr.id, opts->ahmac, echo, ntohs(opts->addr.port)); in mptcp_established_options_add_addr()
707 struct mptcp_out_options *opts) in mptcp_established_options_rm_addr() argument
725 opts->suboptions |= OPTION_MPTCP_RM_ADDR; in mptcp_established_options_rm_addr()
726 opts->rm_list = rm_list; in mptcp_established_options_rm_addr()
728 for (i = 0; i < opts->rm_list.nr; i++) in mptcp_established_options_rm_addr()
729 pr_debug("rm_list_ids[%d]=%d\n", i, opts->rm_list.ids[i]); in mptcp_established_options_rm_addr()
730 MPTCP_ADD_STATS(sock_net(sk), MPTCP_MIB_RMADDRTX, opts->rm_list.nr); in mptcp_established_options_rm_addr()
737 struct mptcp_out_options *opts) in mptcp_established_options_mp_prio() argument
744 if (!subflow->send_mp_prio || (opts->suboptions & OPTIONS_MPTCP_MPC)) in mptcp_established_options_mp_prio()
752 opts->suboptions |= OPTION_MPTCP_PRIO; in mptcp_established_options_mp_prio()
753 opts->backup = subflow->request_bkup; in mptcp_established_options_mp_prio()
755 pr_debug("prio=%d\n", opts->backup); in mptcp_established_options_mp_prio()
763 struct mptcp_out_options *opts) in mptcp_established_options_rst() argument
771 opts->suboptions |= OPTION_MPTCP_RST; in mptcp_established_options_rst()
772 opts->reset_transient = subflow->reset_transient; in mptcp_established_options_rst()
773 opts->reset_reason = subflow->reset_reason; in mptcp_established_options_rst()
782 struct mptcp_out_options *opts) in mptcp_established_options_fastclose() argument
794 opts->suboptions |= OPTION_MPTCP_FASTCLOSE; in mptcp_established_options_fastclose()
795 opts->rcvr_key = msk->remote_key; in mptcp_established_options_fastclose()
797 pr_debug("FASTCLOSE key=%llu\n", opts->rcvr_key); in mptcp_established_options_fastclose()
805 struct mptcp_out_options *opts) in mptcp_established_options_mp_fail() argument
816 opts->suboptions |= OPTION_MPTCP_FAIL; in mptcp_established_options_mp_fail()
817 opts->fail_seq = subflow->map_seq; in mptcp_established_options_mp_fail()
819 pr_debug("MP_FAIL fail_seq=%llu\n", opts->fail_seq); in mptcp_established_options_mp_fail()
827 struct mptcp_out_options *opts) in mptcp_established_options() argument
835 opts->suboptions = 0; in mptcp_established_options()
841 if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) || in mptcp_established_options()
842 mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
847 if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
855 if (mptcp_established_options_mp(sk, skb, snd_data_fin, &opt_size, opts)) in mptcp_established_options()
857 else if (mptcp_established_options_dss(sk, skb, snd_data_fin, &opt_size, opts)) { in mptcp_established_options()
862 remaining - opt_size, opts)) { in mptcp_established_options()
877 if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
881 } else if (mptcp_established_options_rm_addr(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
887 if (mptcp_established_options_mp_prio(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
897 struct mptcp_out_options *opts) in mptcp_synack_options() argument
902 opts->suboptions = OPTION_MPTCP_MPC_SYNACK; in mptcp_synack_options()
903 opts->sndr_key = subflow_req->local_key; in mptcp_synack_options()
904 opts->csum_reqd = subflow_req->csum_reqd; in mptcp_synack_options()
905 opts->allow_join_id0 = subflow_req->allow_join_id0; in mptcp_synack_options()
911 opts->suboptions = OPTION_MPTCP_MPJ_SYNACK; in mptcp_synack_options()
912 opts->backup = subflow_req->request_bkup; in mptcp_synack_options()
913 opts->join_id = subflow_req->local_id; in mptcp_synack_options()
914 opts->thmac = subflow_req->thmac; in mptcp_synack_options()
915 opts->nonce = subflow_req->local_nonce; in mptcp_synack_options()
917 subflow_req, opts->backup, opts->join_id, in mptcp_synack_options()
918 opts->thmac, opts->nonce); in mptcp_synack_options()
1346 struct mptcp_out_options *opts) in mptcp_write_options() argument
1373 if (likely(OPTION_MPTCP_DSS & opts->suboptions)) { in mptcp_write_options()
1374 struct mptcp_ext *mpext = &opts->ext_copy; in mptcp_write_options()
1398 if (opts->csum_reqd) in mptcp_write_options()
1419 if (opts->csum_reqd) { in mptcp_write_options()
1434 if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) in mptcp_write_options()
1436 } else if (OPTIONS_MPTCP_MPC & opts->suboptions) { in mptcp_write_options()
1439 if (OPTION_MPTCP_MPC_SYN & opts->suboptions) { in mptcp_write_options()
1441 } else if (OPTION_MPTCP_MPC_SYNACK & opts->suboptions) { in mptcp_write_options()
1443 } else if (opts->data_len) { in mptcp_write_options()
1445 if (opts->csum_reqd) in mptcp_write_options()
1451 if (opts->csum_reqd) in mptcp_write_options()
1454 if (!opts->allow_join_id0) in mptcp_write_options()
1462 opts->suboptions)) in mptcp_write_options()
1465 put_unaligned_be64(opts->sndr_key, ptr); in mptcp_write_options()
1467 if (!((OPTION_MPTCP_MPC_ACK) & opts->suboptions)) in mptcp_write_options()
1470 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1472 if (!opts->data_len) in mptcp_write_options()
1475 if (opts->csum_reqd) { in mptcp_write_options()
1476 put_len_csum(opts->data_len, in mptcp_write_options()
1477 __mptcp_make_csum(opts->data_seq, in mptcp_write_options()
1478 opts->subflow_seq, in mptcp_write_options()
1479 opts->data_len, in mptcp_write_options()
1480 ~csum_unfold(opts->csum)), in mptcp_write_options()
1483 put_unaligned_be32(opts->data_len << 16 | in mptcp_write_options()
1490 } else if (OPTIONS_MPTCP_MPJ & opts->suboptions) { in mptcp_write_options()
1491 if (OPTION_MPTCP_MPJ_SYN & opts->suboptions) { in mptcp_write_options()
1494 opts->backup, opts->join_id); in mptcp_write_options()
1495 put_unaligned_be32(opts->token, ptr); in mptcp_write_options()
1497 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1499 } else if (OPTION_MPTCP_MPJ_SYNACK & opts->suboptions) { in mptcp_write_options()
1502 opts->backup, opts->join_id); in mptcp_write_options()
1503 put_unaligned_be64(opts->thmac, ptr); in mptcp_write_options()
1505 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1510 memcpy(ptr, opts->hmac, MPTCPOPT_HMAC_LEN); in mptcp_write_options()
1513 } else if (OPTION_MPTCP_ADD_ADDR & opts->suboptions) { in mptcp_write_options()
1518 if (opts->addr.family == AF_INET6) in mptcp_write_options()
1522 if (opts->addr.port) in mptcp_write_options()
1525 if (opts->ahmac) { in mptcp_write_options()
1526 len += sizeof(opts->ahmac); in mptcp_write_options()
1531 len, echo, opts->addr.id); in mptcp_write_options()
1532 if (opts->addr.family == AF_INET) { in mptcp_write_options()
1533 memcpy((u8 *)ptr, (u8 *)&opts->addr.addr.s_addr, 4); in mptcp_write_options()
1537 else if (opts->addr.family == AF_INET6) { in mptcp_write_options()
1538 memcpy((u8 *)ptr, opts->addr.addr6.s6_addr, 16); in mptcp_write_options()
1543 if (!opts->addr.port) { in mptcp_write_options()
1544 if (opts->ahmac) { in mptcp_write_options()
1545 put_unaligned_be64(opts->ahmac, ptr); in mptcp_write_options()
1549 u16 port = ntohs(opts->addr.port); in mptcp_write_options()
1551 if (opts->ahmac) { in mptcp_write_options()
1556 put_unaligned_be64(opts->ahmac, bptr); in mptcp_write_options()
1569 } else if (unlikely(OPTION_MPTCP_FASTCLOSE & opts->suboptions)) { in mptcp_write_options()
1574 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1577 if (OPTION_MPTCP_RST & opts->suboptions) in mptcp_write_options()
1580 } else if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) { in mptcp_write_options()
1589 put_unaligned_be64(opts->fail_seq, ptr); in mptcp_write_options()
1592 if (OPTION_MPTCP_RST & opts->suboptions) in mptcp_write_options()
1595 } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { in mptcp_write_options()
1599 opts->reset_transient, in mptcp_write_options()
1600 opts->reset_reason); in mptcp_write_options()
1604 if (OPTION_MPTCP_PRIO & opts->suboptions) { in mptcp_write_options()
1610 opts->backup, TCPOPT_NOP); in mptcp_write_options()
1616 if (OPTION_MPTCP_RM_ADDR & opts->suboptions) { in mptcp_write_options()
1620 TCPOLEN_MPTCP_RM_ADDR_BASE + opts->rm_list.nr, in mptcp_write_options()
1621 0, opts->rm_list.ids[0]); in mptcp_write_options()
1623 while (i < opts->rm_list.nr) { in mptcp_write_options()
1626 id1 = opts->rm_list.ids[i]; in mptcp_write_options()
1627 id2 = i + 1 < opts->rm_list.nr ? opts->rm_list.ids[i + 1] : TCPOPT_NOP; in mptcp_write_options()
1628 id3 = i + 2 < opts->rm_list.nr ? opts->rm_list.ids[i + 2] : TCPOPT_NOP; in mptcp_write_options()
1629 id4 = i + 3 < opts->rm_list.nr ? opts->rm_list.ids[i + 3] : TCPOPT_NOP; in mptcp_write_options()