Lines Matching refs:opts

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