Lines Matching refs:opts
404 unsigned int *size, struct mptcp_out_options *opts) in mptcp_syn_options() argument
413 opts->suboptions = OPTION_MPTCP_MPC_SYN; in mptcp_syn_options()
414 opts->csum_reqd = mptcp_is_checksum_enabled(sock_net(sk)); in mptcp_syn_options()
415 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_syn_options()
421 opts->suboptions = OPTION_MPTCP_MPJ_SYN; in mptcp_syn_options()
422 opts->join_id = subflow->local_id; in mptcp_syn_options()
423 opts->token = subflow->remote_token; in mptcp_syn_options()
424 opts->nonce = subflow->local_nonce; in mptcp_syn_options()
425 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()
560 struct mptcp_out_options *opts) in mptcp_established_options_dss() argument
570 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_dss()
577 if (opts->csum_reqd) in mptcp_established_options_dss()
580 opts->ext_copy = *mpext; in mptcp_established_options_dss()
586 mptcp_write_data_fin(subflow, skb, &opts->ext_copy); in mptcp_established_options_dss()
587 opts->suboptions = OPTION_MPTCP_DSS; in mptcp_established_options_dss()
594 opts->ext_copy.use_ack = 0; in mptcp_established_options_dss()
603 opts->ext_copy.data_ack = ack_seq; in mptcp_established_options_dss()
604 opts->ext_copy.ack64 = 1; in mptcp_established_options_dss()
607 opts->ext_copy.data_ack32 = (uint32_t)ack_seq; in mptcp_established_options_dss()
608 opts->ext_copy.ack64 = 0; in mptcp_established_options_dss()
610 opts->ext_copy.use_ack = 1; in mptcp_established_options_dss()
611 opts->suboptions = OPTION_MPTCP_DSS; in mptcp_established_options_dss()
654 struct mptcp_out_options *opts) in mptcp_established_options_add_addr() argument
667 (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || in mptcp_established_options_add_addr()
668 !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &opts->addr, in mptcp_established_options_add_addr()
674 len = mptcp_add_addr_len(opts->addr.family, echo, !!opts->addr.port); in mptcp_established_options_add_addr()
681 opts->suboptions = 0; in mptcp_established_options_add_addr()
688 opts->ahmac = 0; in mptcp_established_options_add_addr()
691 opts->suboptions |= OPTION_MPTCP_ADD_ADDR; in mptcp_established_options_add_addr()
693 opts->ahmac = add_addr_generate_hmac(msk->local_key, in mptcp_established_options_add_addr()
695 &opts->addr); in mptcp_established_options_add_addr()
698 opts->addr.id, opts->ahmac, echo, ntohs(opts->addr.port)); in mptcp_established_options_add_addr()
706 struct mptcp_out_options *opts) in mptcp_established_options_rm_addr() argument
724 opts->suboptions |= OPTION_MPTCP_RM_ADDR; in mptcp_established_options_rm_addr()
725 opts->rm_list = rm_list; in mptcp_established_options_rm_addr()
727 for (i = 0; i < opts->rm_list.nr; i++) in mptcp_established_options_rm_addr()
728 pr_debug("rm_list_ids[%d]=%d", i, opts->rm_list.ids[i]); in mptcp_established_options_rm_addr()
736 struct mptcp_out_options *opts) in mptcp_established_options_mp_prio() argument
743 if (!subflow->send_mp_prio || (opts->suboptions & OPTIONS_MPTCP_MPC)) in mptcp_established_options_mp_prio()
751 opts->suboptions |= OPTION_MPTCP_PRIO; in mptcp_established_options_mp_prio()
752 opts->backup = subflow->request_bkup; in mptcp_established_options_mp_prio()
754 pr_debug("prio=%d", opts->backup); in mptcp_established_options_mp_prio()
762 struct mptcp_out_options *opts) in mptcp_established_options_rst() argument
770 opts->suboptions |= OPTION_MPTCP_RST; in mptcp_established_options_rst()
771 opts->reset_transient = subflow->reset_transient; in mptcp_established_options_rst()
772 opts->reset_reason = subflow->reset_reason; in mptcp_established_options_rst()
781 struct mptcp_out_options *opts) in mptcp_established_options_fastclose() argument
793 opts->suboptions |= OPTION_MPTCP_FASTCLOSE; in mptcp_established_options_fastclose()
794 opts->rcvr_key = msk->remote_key; in mptcp_established_options_fastclose()
796 pr_debug("FASTCLOSE key=%llu", opts->rcvr_key); in mptcp_established_options_fastclose()
804 struct mptcp_out_options *opts) in mptcp_established_options_mp_fail() argument
815 opts->suboptions |= OPTION_MPTCP_FAIL; in mptcp_established_options_mp_fail()
816 opts->fail_seq = subflow->map_seq; in mptcp_established_options_mp_fail()
818 pr_debug("MP_FAIL fail_seq=%llu", opts->fail_seq); in mptcp_established_options_mp_fail()
826 struct mptcp_out_options *opts) in mptcp_established_options() argument
834 opts->suboptions = 0; in mptcp_established_options()
840 if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) || in mptcp_established_options()
841 mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
846 if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
854 if (mptcp_established_options_mp(sk, skb, snd_data_fin, &opt_size, remaining, opts)) in mptcp_established_options()
856 else if (mptcp_established_options_dss(sk, skb, snd_data_fin, &opt_size, remaining, opts)) { in mptcp_established_options()
861 remaining - opt_size, opts)) { in mptcp_established_options()
876 if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
880 } else if (mptcp_established_options_rm_addr(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
886 if (mptcp_established_options_mp_prio(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
896 struct mptcp_out_options *opts) in mptcp_synack_options() argument
901 opts->suboptions = OPTION_MPTCP_MPC_SYNACK; in mptcp_synack_options()
902 opts->sndr_key = subflow_req->local_key; in mptcp_synack_options()
903 opts->csum_reqd = subflow_req->csum_reqd; in mptcp_synack_options()
904 opts->allow_join_id0 = subflow_req->allow_join_id0; in mptcp_synack_options()
910 opts->suboptions = OPTION_MPTCP_MPJ_SYNACK; in mptcp_synack_options()
911 opts->backup = subflow_req->backup; in mptcp_synack_options()
912 opts->join_id = subflow_req->local_id; in mptcp_synack_options()
913 opts->thmac = subflow_req->thmac; in mptcp_synack_options()
914 opts->nonce = subflow_req->local_nonce; in mptcp_synack_options()
916 subflow_req, opts->backup, opts->join_id, in mptcp_synack_options()
917 opts->thmac, opts->nonce); in mptcp_synack_options()
1331 struct mptcp_out_options *opts) in mptcp_write_options() argument
1358 if (likely(OPTION_MPTCP_DSS & opts->suboptions)) { in mptcp_write_options()
1359 struct mptcp_ext *mpext = &opts->ext_copy; in mptcp_write_options()
1383 if (opts->csum_reqd) in mptcp_write_options()
1404 if (opts->csum_reqd) { in mptcp_write_options()
1419 if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) in mptcp_write_options()
1421 } else if (OPTIONS_MPTCP_MPC & opts->suboptions) { in mptcp_write_options()
1424 if (OPTION_MPTCP_MPC_SYN & opts->suboptions) { in mptcp_write_options()
1426 } else if (OPTION_MPTCP_MPC_SYNACK & opts->suboptions) { in mptcp_write_options()
1428 } else if (opts->data_len) { in mptcp_write_options()
1430 if (opts->csum_reqd) in mptcp_write_options()
1436 if (opts->csum_reqd) in mptcp_write_options()
1439 if (!opts->allow_join_id0) in mptcp_write_options()
1447 opts->suboptions)) in mptcp_write_options()
1450 put_unaligned_be64(opts->sndr_key, ptr); in mptcp_write_options()
1452 if (!((OPTION_MPTCP_MPC_ACK) & opts->suboptions)) in mptcp_write_options()
1455 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1457 if (!opts->data_len) in mptcp_write_options()
1460 if (opts->csum_reqd) { in mptcp_write_options()
1461 put_len_csum(opts->data_len, in mptcp_write_options()
1462 __mptcp_make_csum(opts->data_seq, in mptcp_write_options()
1463 opts->subflow_seq, in mptcp_write_options()
1464 opts->data_len, in mptcp_write_options()
1465 ~csum_unfold(opts->csum)), in mptcp_write_options()
1468 put_unaligned_be32(opts->data_len << 16 | in mptcp_write_options()
1475 } else if (OPTIONS_MPTCP_MPJ & opts->suboptions) { in mptcp_write_options()
1476 if (OPTION_MPTCP_MPJ_SYN & opts->suboptions) { in mptcp_write_options()
1479 opts->backup, opts->join_id); in mptcp_write_options()
1480 put_unaligned_be32(opts->token, ptr); in mptcp_write_options()
1482 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1484 } else if (OPTION_MPTCP_MPJ_SYNACK & opts->suboptions) { in mptcp_write_options()
1487 opts->backup, opts->join_id); in mptcp_write_options()
1488 put_unaligned_be64(opts->thmac, ptr); in mptcp_write_options()
1490 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1495 memcpy(ptr, opts->hmac, MPTCPOPT_HMAC_LEN); in mptcp_write_options()
1498 } else if (OPTION_MPTCP_ADD_ADDR & opts->suboptions) { in mptcp_write_options()
1503 if (opts->addr.family == AF_INET6) in mptcp_write_options()
1507 if (opts->addr.port) in mptcp_write_options()
1510 if (opts->ahmac) { in mptcp_write_options()
1511 len += sizeof(opts->ahmac); in mptcp_write_options()
1516 len, echo, opts->addr.id); in mptcp_write_options()
1517 if (opts->addr.family == AF_INET) { in mptcp_write_options()
1518 memcpy((u8 *)ptr, (u8 *)&opts->addr.addr.s_addr, 4); in mptcp_write_options()
1522 else if (opts->addr.family == AF_INET6) { in mptcp_write_options()
1523 memcpy((u8 *)ptr, opts->addr.addr6.s6_addr, 16); in mptcp_write_options()
1528 if (!opts->addr.port) { in mptcp_write_options()
1529 if (opts->ahmac) { in mptcp_write_options()
1530 put_unaligned_be64(opts->ahmac, ptr); in mptcp_write_options()
1534 u16 port = ntohs(opts->addr.port); in mptcp_write_options()
1536 if (opts->ahmac) { in mptcp_write_options()
1541 put_unaligned_be64(opts->ahmac, bptr); in mptcp_write_options()
1554 } else if (unlikely(OPTION_MPTCP_FASTCLOSE & opts->suboptions)) { in mptcp_write_options()
1559 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1562 if (OPTION_MPTCP_RST & opts->suboptions) in mptcp_write_options()
1565 } else if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) { in mptcp_write_options()
1574 put_unaligned_be64(opts->fail_seq, ptr); in mptcp_write_options()
1577 if (OPTION_MPTCP_RST & opts->suboptions) in mptcp_write_options()
1580 } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { in mptcp_write_options()
1584 opts->reset_transient, in mptcp_write_options()
1585 opts->reset_reason); in mptcp_write_options()
1589 if (OPTION_MPTCP_PRIO & opts->suboptions) { in mptcp_write_options()
1595 opts->backup, TCPOPT_NOP); in mptcp_write_options()
1601 if (OPTION_MPTCP_RM_ADDR & opts->suboptions) { in mptcp_write_options()
1605 TCPOLEN_MPTCP_RM_ADDR_BASE + opts->rm_list.nr, in mptcp_write_options()
1606 0, opts->rm_list.ids[0]); in mptcp_write_options()
1608 while (i < opts->rm_list.nr) { in mptcp_write_options()
1611 id1 = opts->rm_list.ids[i]; in mptcp_write_options()
1612 id2 = i + 1 < opts->rm_list.nr ? opts->rm_list.ids[i + 1] : TCPOPT_NOP; in mptcp_write_options()
1613 id3 = i + 2 < opts->rm_list.nr ? opts->rm_list.ids[i + 2] : TCPOPT_NOP; in mptcp_write_options()
1614 id4 = i + 3 < opts->rm_list.nr ? opts->rm_list.ids[i + 3] : TCPOPT_NOP; in mptcp_write_options()