Lines Matching refs:opts
402 unsigned int *size, struct mptcp_out_options *opts) in mptcp_syn_options() argument
411 opts->suboptions = OPTION_MPTCP_MPC_SYN; in mptcp_syn_options()
412 opts->csum_reqd = mptcp_is_checksum_enabled(sock_net(sk)); in mptcp_syn_options()
413 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_syn_options()
419 opts->suboptions = OPTION_MPTCP_MPJ_SYN; in mptcp_syn_options()
420 opts->join_id = subflow->local_id; in mptcp_syn_options()
421 opts->token = subflow->remote_token; in mptcp_syn_options()
422 opts->nonce = subflow->local_nonce; in mptcp_syn_options()
423 opts->backup = subflow->request_bkup; in mptcp_syn_options()
443 struct mptcp_out_options *opts) in mptcp_established_options_mp() argument
474 opts->data_len = data_len; in mptcp_established_options_mp()
475 opts->suboptions = OPTION_MPTCP_MPC_ACK; in mptcp_established_options_mp()
476 opts->sndr_key = subflow->local_key; in mptcp_established_options_mp()
477 opts->rcvr_key = subflow->remote_key; in mptcp_established_options_mp()
478 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_mp()
479 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_established_options_mp()
488 if (opts->csum_reqd) { in mptcp_established_options_mp()
490 opts->data_seq = mpext->data_seq; in mptcp_established_options_mp()
491 opts->subflow_seq = mpext->subflow_seq; in mptcp_established_options_mp()
492 opts->csum = mpext->csum; in mptcp_established_options_mp()
506 opts->suboptions = OPTION_MPTCP_MPJ_ACK; in mptcp_established_options_mp()
507 memcpy(opts->hmac, subflow->hmac, MPTCPOPT_HMAC_LEN); in mptcp_established_options_mp()
556 struct mptcp_out_options *opts) in mptcp_established_options_dss() argument
566 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_dss()
573 if (opts->csum_reqd) in mptcp_established_options_dss()
576 opts->ext_copy = *mpext; in mptcp_established_options_dss()
581 mptcp_write_data_fin(subflow, skb, &opts->ext_copy); in mptcp_established_options_dss()
582 opts->suboptions = OPTION_MPTCP_DSS; in mptcp_established_options_dss()
589 opts->ext_copy.use_ack = 0; in mptcp_established_options_dss()
598 opts->ext_copy.data_ack = ack_seq; in mptcp_established_options_dss()
599 opts->ext_copy.ack64 = 1; in mptcp_established_options_dss()
602 opts->ext_copy.data_ack32 = (uint32_t)ack_seq; in mptcp_established_options_dss()
603 opts->ext_copy.ack64 = 0; in mptcp_established_options_dss()
605 opts->ext_copy.use_ack = 1; in mptcp_established_options_dss()
606 opts->suboptions = OPTION_MPTCP_DSS; in mptcp_established_options_dss()
648 struct mptcp_out_options *opts) in mptcp_established_options_add_addr() argument
661 (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || in mptcp_established_options_add_addr()
662 !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &opts->addr, in mptcp_established_options_add_addr()
672 else if (opts->suboptions & OPTION_MPTCP_DSS) in mptcp_established_options_add_addr()
675 len = mptcp_add_addr_len(opts->addr.family, echo, !!opts->addr.port); in mptcp_established_options_add_addr()
682 opts->suboptions = 0; in mptcp_established_options_add_addr()
689 opts->ahmac = 0; in mptcp_established_options_add_addr()
692 opts->suboptions |= OPTION_MPTCP_ADD_ADDR; in mptcp_established_options_add_addr()
695 opts->ahmac = add_addr_generate_hmac(msk->local_key, in mptcp_established_options_add_addr()
697 &opts->addr); in mptcp_established_options_add_addr()
702 opts->addr.id, opts->ahmac, echo, ntohs(opts->addr.port)); in mptcp_established_options_add_addr()
710 struct mptcp_out_options *opts) in mptcp_established_options_rm_addr() argument
728 opts->suboptions |= OPTION_MPTCP_RM_ADDR; in mptcp_established_options_rm_addr()
729 opts->rm_list = rm_list; in mptcp_established_options_rm_addr()
731 for (i = 0; i < opts->rm_list.nr; i++) in mptcp_established_options_rm_addr()
732 pr_debug("rm_list_ids[%d]=%d\n", i, opts->rm_list.ids[i]); in mptcp_established_options_rm_addr()
733 MPTCP_ADD_STATS(sock_net(sk), MPTCP_MIB_RMADDRTX, opts->rm_list.nr); in mptcp_established_options_rm_addr()
740 struct mptcp_out_options *opts) in mptcp_established_options_mp_prio() argument
747 if (!subflow->send_mp_prio || (opts->suboptions & OPTIONS_MPTCP_MPC)) in mptcp_established_options_mp_prio()
755 opts->suboptions |= OPTION_MPTCP_PRIO; in mptcp_established_options_mp_prio()
756 opts->backup = subflow->request_bkup; in mptcp_established_options_mp_prio()
758 pr_debug("prio=%d\n", opts->backup); in mptcp_established_options_mp_prio()
766 struct mptcp_out_options *opts) in mptcp_established_options_rst() argument
774 opts->suboptions |= OPTION_MPTCP_RST; in mptcp_established_options_rst()
775 opts->reset_transient = subflow->reset_transient; in mptcp_established_options_rst()
776 opts->reset_reason = subflow->reset_reason; in mptcp_established_options_rst()
785 struct mptcp_out_options *opts) in mptcp_established_options_fastclose() argument
797 opts->suboptions |= OPTION_MPTCP_FASTCLOSE; in mptcp_established_options_fastclose()
798 opts->rcvr_key = msk->remote_key; in mptcp_established_options_fastclose()
800 pr_debug("FASTCLOSE key=%llu\n", opts->rcvr_key); in mptcp_established_options_fastclose()
808 struct mptcp_out_options *opts) in mptcp_established_options_mp_fail() argument
819 opts->suboptions |= OPTION_MPTCP_FAIL; in mptcp_established_options_mp_fail()
820 opts->fail_seq = subflow->map_seq; in mptcp_established_options_mp_fail()
822 pr_debug("MP_FAIL fail_seq=%llu\n", opts->fail_seq); in mptcp_established_options_mp_fail()
830 struct mptcp_out_options *opts) in mptcp_established_options() argument
838 opts->suboptions = 0; in mptcp_established_options()
844 if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) || in mptcp_established_options()
845 mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
850 if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
858 if (mptcp_established_options_mp(sk, skb, snd_data_fin, &opt_size, opts)) in mptcp_established_options()
860 else if (mptcp_established_options_dss(sk, skb, snd_data_fin, &opt_size, opts)) { in mptcp_established_options()
865 remaining - opt_size, opts)) { in mptcp_established_options()
880 if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
884 } else if (mptcp_established_options_rm_addr(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
890 if (mptcp_established_options_mp_prio(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
900 struct mptcp_out_options *opts) in mptcp_synack_options() argument
905 opts->suboptions = OPTION_MPTCP_MPC_SYNACK; in mptcp_synack_options()
906 opts->sndr_key = subflow_req->local_key; in mptcp_synack_options()
907 opts->csum_reqd = subflow_req->csum_reqd; in mptcp_synack_options()
908 opts->allow_join_id0 = subflow_req->allow_join_id0; in mptcp_synack_options()
914 opts->suboptions = OPTION_MPTCP_MPJ_SYNACK; in mptcp_synack_options()
915 opts->backup = subflow_req->request_bkup; in mptcp_synack_options()
916 opts->join_id = subflow_req->local_id; in mptcp_synack_options()
917 opts->thmac = subflow_req->thmac; in mptcp_synack_options()
918 opts->nonce = subflow_req->local_nonce; in mptcp_synack_options()
920 subflow_req, opts->backup, opts->join_id, in mptcp_synack_options()
921 opts->thmac, opts->nonce); in mptcp_synack_options()
1352 struct mptcp_out_options *opts) in mptcp_write_options() argument
1379 if (likely(OPTION_MPTCP_DSS & opts->suboptions)) { in mptcp_write_options()
1380 struct mptcp_ext *mpext = &opts->ext_copy; in mptcp_write_options()
1404 if (opts->csum_reqd) in mptcp_write_options()
1425 if (opts->csum_reqd) { in mptcp_write_options()
1440 if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) in mptcp_write_options()
1442 } else if (OPTIONS_MPTCP_MPC & opts->suboptions) { in mptcp_write_options()
1445 if (OPTION_MPTCP_MPC_SYN & opts->suboptions) { in mptcp_write_options()
1447 } else if (OPTION_MPTCP_MPC_SYNACK & opts->suboptions) { in mptcp_write_options()
1449 } else if (opts->data_len) { in mptcp_write_options()
1451 if (opts->csum_reqd) in mptcp_write_options()
1457 if (opts->csum_reqd) in mptcp_write_options()
1460 if (!opts->allow_join_id0) in mptcp_write_options()
1468 opts->suboptions)) in mptcp_write_options()
1471 put_unaligned_be64(opts->sndr_key, ptr); in mptcp_write_options()
1473 if (!((OPTION_MPTCP_MPC_ACK) & opts->suboptions)) in mptcp_write_options()
1476 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1478 if (!opts->data_len) in mptcp_write_options()
1481 if (opts->csum_reqd) { in mptcp_write_options()
1482 put_len_csum(opts->data_len, in mptcp_write_options()
1483 __mptcp_make_csum(opts->data_seq, in mptcp_write_options()
1484 opts->subflow_seq, in mptcp_write_options()
1485 opts->data_len, in mptcp_write_options()
1486 ~csum_unfold(opts->csum)), in mptcp_write_options()
1489 put_unaligned_be32(opts->data_len << 16 | in mptcp_write_options()
1496 } else if (OPTIONS_MPTCP_MPJ & opts->suboptions) { in mptcp_write_options()
1497 if (OPTION_MPTCP_MPJ_SYN & opts->suboptions) { in mptcp_write_options()
1500 opts->backup, opts->join_id); in mptcp_write_options()
1501 put_unaligned_be32(opts->token, ptr); in mptcp_write_options()
1503 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1505 } else if (OPTION_MPTCP_MPJ_SYNACK & opts->suboptions) { in mptcp_write_options()
1508 opts->backup, opts->join_id); in mptcp_write_options()
1509 put_unaligned_be64(opts->thmac, ptr); in mptcp_write_options()
1511 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1516 memcpy(ptr, opts->hmac, MPTCPOPT_HMAC_LEN); in mptcp_write_options()
1519 } else if (OPTION_MPTCP_ADD_ADDR & opts->suboptions) { in mptcp_write_options()
1524 if (opts->addr.family == AF_INET6) in mptcp_write_options()
1528 if (opts->addr.port) in mptcp_write_options()
1531 if (opts->ahmac) { in mptcp_write_options()
1532 len += sizeof(opts->ahmac); in mptcp_write_options()
1537 len, echo, opts->addr.id); in mptcp_write_options()
1538 if (opts->addr.family == AF_INET) { in mptcp_write_options()
1539 memcpy((u8 *)ptr, (u8 *)&opts->addr.addr.s_addr, 4); in mptcp_write_options()
1543 else if (opts->addr.family == AF_INET6) { in mptcp_write_options()
1544 memcpy((u8 *)ptr, opts->addr.addr6.s6_addr, 16); in mptcp_write_options()
1549 if (!opts->addr.port) { in mptcp_write_options()
1550 if (opts->ahmac) { in mptcp_write_options()
1551 put_unaligned_be64(opts->ahmac, ptr); in mptcp_write_options()
1555 u16 port = ntohs(opts->addr.port); in mptcp_write_options()
1557 if (opts->ahmac) { in mptcp_write_options()
1562 put_unaligned_be64(opts->ahmac, bptr); in mptcp_write_options()
1575 } else if (unlikely(OPTION_MPTCP_FASTCLOSE & opts->suboptions)) { in mptcp_write_options()
1580 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1583 if (OPTION_MPTCP_RST & opts->suboptions) in mptcp_write_options()
1586 } else if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) { in mptcp_write_options()
1595 put_unaligned_be64(opts->fail_seq, ptr); in mptcp_write_options()
1598 if (OPTION_MPTCP_RST & opts->suboptions) in mptcp_write_options()
1601 } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { in mptcp_write_options()
1605 opts->reset_transient, in mptcp_write_options()
1606 opts->reset_reason); in mptcp_write_options()
1610 if (OPTION_MPTCP_PRIO & opts->suboptions) { in mptcp_write_options()
1616 opts->backup, TCPOPT_NOP); in mptcp_write_options()
1622 if (OPTION_MPTCP_RM_ADDR & opts->suboptions) { in mptcp_write_options()
1626 TCPOLEN_MPTCP_RM_ADDR_BASE + opts->rm_list.nr, in mptcp_write_options()
1627 0, opts->rm_list.ids[0]); in mptcp_write_options()
1629 while (i < opts->rm_list.nr) { in mptcp_write_options()
1632 id1 = opts->rm_list.ids[i]; in mptcp_write_options()
1633 id2 = i + 1 < opts->rm_list.nr ? opts->rm_list.ids[i + 1] : TCPOPT_NOP; in mptcp_write_options()
1634 id3 = i + 2 < opts->rm_list.nr ? opts->rm_list.ids[i + 2] : TCPOPT_NOP; in mptcp_write_options()
1635 id4 = i + 3 < opts->rm_list.nr ? opts->rm_list.ids[i + 3] : TCPOPT_NOP; in mptcp_write_options()