Lines Matching refs:opts

399 		       unsigned int *size, struct mptcp_out_options *opts)  in mptcp_syn_options()  argument
408 opts->suboptions = OPTION_MPTCP_MPC_SYN; in mptcp_syn_options()
409 opts->csum_reqd = mptcp_is_checksum_enabled(sock_net(sk)); in mptcp_syn_options()
410 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_syn_options()
416 opts->suboptions = OPTION_MPTCP_MPJ_SYN; in mptcp_syn_options()
417 opts->join_id = subflow->local_id; in mptcp_syn_options()
418 opts->token = subflow->remote_token; in mptcp_syn_options()
419 opts->nonce = subflow->local_nonce; in mptcp_syn_options()
420 opts->backup = subflow->request_bkup; in mptcp_syn_options()
441 struct mptcp_out_options *opts) in mptcp_established_options_mp() argument
472 opts->data_len = data_len; in mptcp_established_options_mp()
473 opts->suboptions = OPTION_MPTCP_MPC_ACK; in mptcp_established_options_mp()
474 opts->sndr_key = subflow->local_key; in mptcp_established_options_mp()
475 opts->rcvr_key = subflow->remote_key; in mptcp_established_options_mp()
476 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_mp()
477 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_established_options_mp()
486 if (opts->csum_reqd) { in mptcp_established_options_mp()
488 opts->data_seq = mpext->data_seq; in mptcp_established_options_mp()
489 opts->subflow_seq = mpext->subflow_seq; in mptcp_established_options_mp()
490 opts->csum = mpext->csum; in mptcp_established_options_mp()
504 opts->suboptions = OPTION_MPTCP_MPJ_ACK; in mptcp_established_options_mp()
505 memcpy(opts->hmac, subflow->hmac, MPTCPOPT_HMAC_LEN); in mptcp_established_options_mp()
555 struct mptcp_out_options *opts) in mptcp_established_options_dss() argument
565 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_dss()
572 if (opts->csum_reqd) in mptcp_established_options_dss()
575 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()
649 struct mptcp_out_options *opts) in mptcp_established_options_add_addr() argument
662 (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || in mptcp_established_options_add_addr()
663 !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &opts->addr, in mptcp_established_options_add_addr()
669 len = mptcp_add_addr_len(opts->addr.family, echo, !!opts->addr.port); in mptcp_established_options_add_addr()
676 opts->suboptions = 0; in mptcp_established_options_add_addr()
683 opts->ahmac = 0; in mptcp_established_options_add_addr()
686 opts->suboptions |= OPTION_MPTCP_ADD_ADDR; in mptcp_established_options_add_addr()
688 opts->ahmac = add_addr_generate_hmac(msk->local_key, in mptcp_established_options_add_addr()
690 &opts->addr); in mptcp_established_options_add_addr()
693 opts->addr.id, opts->ahmac, echo, ntohs(opts->addr.port)); in mptcp_established_options_add_addr()
701 struct mptcp_out_options *opts) in mptcp_established_options_rm_addr() argument
719 opts->suboptions |= OPTION_MPTCP_RM_ADDR; in mptcp_established_options_rm_addr()
720 opts->rm_list = rm_list; in mptcp_established_options_rm_addr()
722 for (i = 0; i < opts->rm_list.nr; i++) in mptcp_established_options_rm_addr()
723 pr_debug("rm_list_ids[%d]=%d", i, opts->rm_list.ids[i]); in mptcp_established_options_rm_addr()
731 struct mptcp_out_options *opts) in mptcp_established_options_mp_prio() argument
738 if (!subflow->send_mp_prio || (opts->suboptions & OPTIONS_MPTCP_MPC)) in mptcp_established_options_mp_prio()
746 opts->suboptions |= OPTION_MPTCP_PRIO; in mptcp_established_options_mp_prio()
747 opts->backup = subflow->request_bkup; in mptcp_established_options_mp_prio()
749 pr_debug("prio=%d", opts->backup); in mptcp_established_options_mp_prio()
757 struct mptcp_out_options *opts) in mptcp_established_options_rst() argument
765 opts->suboptions |= OPTION_MPTCP_RST; in mptcp_established_options_rst()
766 opts->reset_transient = subflow->reset_transient; in mptcp_established_options_rst()
767 opts->reset_reason = subflow->reset_reason; in mptcp_established_options_rst()
776 struct mptcp_out_options *opts) in mptcp_established_options_fastclose() argument
788 opts->suboptions |= OPTION_MPTCP_FASTCLOSE; in mptcp_established_options_fastclose()
789 opts->rcvr_key = msk->remote_key; in mptcp_established_options_fastclose()
791 pr_debug("FASTCLOSE key=%llu", opts->rcvr_key); in mptcp_established_options_fastclose()
799 struct mptcp_out_options *opts) in mptcp_established_options_mp_fail() argument
810 opts->suboptions |= OPTION_MPTCP_FAIL; in mptcp_established_options_mp_fail()
811 opts->fail_seq = subflow->map_seq; in mptcp_established_options_mp_fail()
813 pr_debug("MP_FAIL fail_seq=%llu", opts->fail_seq); in mptcp_established_options_mp_fail()
821 struct mptcp_out_options *opts) in mptcp_established_options() argument
829 opts->suboptions = 0; in mptcp_established_options()
835 if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) || in mptcp_established_options()
836 mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
841 if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
849 if (mptcp_established_options_mp(sk, skb, snd_data_fin, &opt_size, remaining, opts)) in mptcp_established_options()
851 else if (mptcp_established_options_dss(sk, skb, snd_data_fin, &opt_size, remaining, opts)) { in mptcp_established_options()
856 remaining - opt_size, opts)) { in mptcp_established_options()
871 if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
875 } else if (mptcp_established_options_rm_addr(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
881 if (mptcp_established_options_mp_prio(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
891 struct mptcp_out_options *opts) in mptcp_synack_options() argument
896 opts->suboptions = OPTION_MPTCP_MPC_SYNACK; in mptcp_synack_options()
897 opts->sndr_key = subflow_req->local_key; in mptcp_synack_options()
898 opts->csum_reqd = subflow_req->csum_reqd; in mptcp_synack_options()
899 opts->allow_join_id0 = subflow_req->allow_join_id0; in mptcp_synack_options()
905 opts->suboptions = OPTION_MPTCP_MPJ_SYNACK; in mptcp_synack_options()
906 opts->backup = subflow_req->backup; in mptcp_synack_options()
907 opts->join_id = subflow_req->local_id; in mptcp_synack_options()
908 opts->thmac = subflow_req->thmac; in mptcp_synack_options()
909 opts->nonce = subflow_req->local_nonce; in mptcp_synack_options()
911 subflow_req, opts->backup, opts->join_id, in mptcp_synack_options()
912 opts->thmac, opts->nonce); in mptcp_synack_options()
1322 struct mptcp_out_options *opts) in mptcp_write_options() argument
1349 if (likely(OPTION_MPTCP_DSS & opts->suboptions)) { in mptcp_write_options()
1350 struct mptcp_ext *mpext = &opts->ext_copy; in mptcp_write_options()
1374 if (opts->csum_reqd) in mptcp_write_options()
1395 if (opts->csum_reqd) { in mptcp_write_options()
1410 if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) in mptcp_write_options()
1412 } else if (OPTIONS_MPTCP_MPC & opts->suboptions) { in mptcp_write_options()
1415 if (OPTION_MPTCP_MPC_SYN & opts->suboptions) { in mptcp_write_options()
1417 } else if (OPTION_MPTCP_MPC_SYNACK & opts->suboptions) { in mptcp_write_options()
1419 } else if (opts->data_len) { in mptcp_write_options()
1421 if (opts->csum_reqd) in mptcp_write_options()
1427 if (opts->csum_reqd) in mptcp_write_options()
1430 if (!opts->allow_join_id0) in mptcp_write_options()
1438 opts->suboptions)) in mptcp_write_options()
1441 put_unaligned_be64(opts->sndr_key, ptr); in mptcp_write_options()
1443 if (!((OPTION_MPTCP_MPC_ACK) & opts->suboptions)) in mptcp_write_options()
1446 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1448 if (!opts->data_len) in mptcp_write_options()
1451 if (opts->csum_reqd) { in mptcp_write_options()
1452 put_len_csum(opts->data_len, in mptcp_write_options()
1453 __mptcp_make_csum(opts->data_seq, in mptcp_write_options()
1454 opts->subflow_seq, in mptcp_write_options()
1455 opts->data_len, in mptcp_write_options()
1456 ~csum_unfold(opts->csum)), in mptcp_write_options()
1459 put_unaligned_be32(opts->data_len << 16 | in mptcp_write_options()
1466 } else if (OPTIONS_MPTCP_MPJ & opts->suboptions) { in mptcp_write_options()
1467 if (OPTION_MPTCP_MPJ_SYN & opts->suboptions) { in mptcp_write_options()
1470 opts->backup, opts->join_id); in mptcp_write_options()
1471 put_unaligned_be32(opts->token, ptr); in mptcp_write_options()
1473 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1475 } else if (OPTION_MPTCP_MPJ_SYNACK & opts->suboptions) { in mptcp_write_options()
1478 opts->backup, opts->join_id); in mptcp_write_options()
1479 put_unaligned_be64(opts->thmac, ptr); in mptcp_write_options()
1481 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1486 memcpy(ptr, opts->hmac, MPTCPOPT_HMAC_LEN); in mptcp_write_options()
1489 } else if (OPTION_MPTCP_ADD_ADDR & opts->suboptions) { in mptcp_write_options()
1494 if (opts->addr.family == AF_INET6) in mptcp_write_options()
1498 if (opts->addr.port) in mptcp_write_options()
1501 if (opts->ahmac) { in mptcp_write_options()
1502 len += sizeof(opts->ahmac); in mptcp_write_options()
1507 len, echo, opts->addr.id); in mptcp_write_options()
1508 if (opts->addr.family == AF_INET) { in mptcp_write_options()
1509 memcpy((u8 *)ptr, (u8 *)&opts->addr.addr.s_addr, 4); in mptcp_write_options()
1513 else if (opts->addr.family == AF_INET6) { in mptcp_write_options()
1514 memcpy((u8 *)ptr, opts->addr.addr6.s6_addr, 16); in mptcp_write_options()
1519 if (!opts->addr.port) { in mptcp_write_options()
1520 if (opts->ahmac) { in mptcp_write_options()
1521 put_unaligned_be64(opts->ahmac, ptr); in mptcp_write_options()
1525 u16 port = ntohs(opts->addr.port); in mptcp_write_options()
1527 if (opts->ahmac) { in mptcp_write_options()
1532 put_unaligned_be64(opts->ahmac, bptr); in mptcp_write_options()
1545 } else if (unlikely(OPTION_MPTCP_FASTCLOSE & opts->suboptions)) { in mptcp_write_options()
1550 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1553 if (OPTION_MPTCP_RST & opts->suboptions) in mptcp_write_options()
1556 } else if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) { in mptcp_write_options()
1565 put_unaligned_be64(opts->fail_seq, ptr); in mptcp_write_options()
1568 if (OPTION_MPTCP_RST & opts->suboptions) in mptcp_write_options()
1571 } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { in mptcp_write_options()
1575 opts->reset_transient, in mptcp_write_options()
1576 opts->reset_reason); in mptcp_write_options()
1580 if (OPTION_MPTCP_PRIO & opts->suboptions) { in mptcp_write_options()
1586 opts->backup, TCPOPT_NOP); in mptcp_write_options()
1593 if (OPTION_MPTCP_RM_ADDR & opts->suboptions) { in mptcp_write_options()
1597 TCPOLEN_MPTCP_RM_ADDR_BASE + opts->rm_list.nr, in mptcp_write_options()
1598 0, opts->rm_list.ids[0]); in mptcp_write_options()
1600 while (i < opts->rm_list.nr) { in mptcp_write_options()
1603 id1 = opts->rm_list.ids[i]; in mptcp_write_options()
1604 id2 = i + 1 < opts->rm_list.nr ? opts->rm_list.ids[i + 1] : TCPOPT_NOP; in mptcp_write_options()
1605 id3 = i + 2 < opts->rm_list.nr ? opts->rm_list.ids[i + 2] : TCPOPT_NOP; in mptcp_write_options()
1606 id4 = i + 3 < opts->rm_list.nr ? opts->rm_list.ids[i + 3] : TCPOPT_NOP; in mptcp_write_options()