Lines Matching refs:opts

397 		       unsigned int *size, struct mptcp_out_options *opts)  in mptcp_syn_options()  argument
406 opts->suboptions = OPTION_MPTCP_MPC_SYN; in mptcp_syn_options()
407 opts->csum_reqd = mptcp_is_checksum_enabled(sock_net(sk)); in mptcp_syn_options()
408 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_syn_options()
414 opts->suboptions = OPTION_MPTCP_MPJ_SYN; in mptcp_syn_options()
415 opts->join_id = subflow->local_id; in mptcp_syn_options()
416 opts->token = subflow->remote_token; in mptcp_syn_options()
417 opts->nonce = subflow->local_nonce; in mptcp_syn_options()
418 opts->backup = subflow->request_bkup; in mptcp_syn_options()
461 struct mptcp_out_options *opts) in mptcp_established_options_mp() argument
492 opts->data_len = data_len; in mptcp_established_options_mp()
493 opts->suboptions = OPTION_MPTCP_MPC_ACK; in mptcp_established_options_mp()
494 opts->sndr_key = subflow->local_key; in mptcp_established_options_mp()
495 opts->rcvr_key = subflow->remote_key; in mptcp_established_options_mp()
496 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_mp()
497 opts->allow_join_id0 = mptcp_allow_join_id0(sock_net(sk)); in mptcp_established_options_mp()
506 if (opts->csum_reqd) { in mptcp_established_options_mp()
508 opts->data_seq = mpext->data_seq; in mptcp_established_options_mp()
509 opts->subflow_seq = mpext->subflow_seq; in mptcp_established_options_mp()
510 opts->csum = mpext->csum; in mptcp_established_options_mp()
524 opts->suboptions = OPTION_MPTCP_MPJ_ACK; in mptcp_established_options_mp()
525 memcpy(opts->hmac, subflow->hmac, MPTCPOPT_HMAC_LEN); in mptcp_established_options_mp()
567 struct mptcp_out_options *opts) in mptcp_established_options_dss() argument
577 opts->csum_reqd = READ_ONCE(msk->csum_enabled); in mptcp_established_options_dss()
584 if (opts->csum_reqd) in mptcp_established_options_dss()
587 opts->ext_copy = *mpext; in mptcp_established_options_dss()
593 mptcp_write_data_fin(subflow, skb, &opts->ext_copy); in mptcp_established_options_dss()
594 opts->suboptions = OPTION_MPTCP_DSS; in mptcp_established_options_dss()
601 opts->ext_copy.use_ack = 0; in mptcp_established_options_dss()
610 opts->ext_copy.data_ack = ack_seq; in mptcp_established_options_dss()
611 opts->ext_copy.ack64 = 1; in mptcp_established_options_dss()
614 opts->ext_copy.data_ack32 = (uint32_t)ack_seq; in mptcp_established_options_dss()
615 opts->ext_copy.ack64 = 0; in mptcp_established_options_dss()
617 opts->ext_copy.use_ack = 1; in mptcp_established_options_dss()
618 opts->suboptions = OPTION_MPTCP_DSS; in mptcp_established_options_dss()
661 struct mptcp_out_options *opts) in mptcp_established_options_add_addr() argument
675 (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || in mptcp_established_options_add_addr()
676 !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &opts->addr, in mptcp_established_options_add_addr()
682 len = mptcp_add_addr_len(opts->addr.family, echo, port); in mptcp_established_options_add_addr()
689 opts->suboptions = 0; in mptcp_established_options_add_addr()
696 opts->ahmac = 0; in mptcp_established_options_add_addr()
699 opts->suboptions |= OPTION_MPTCP_ADD_ADDR; in mptcp_established_options_add_addr()
701 opts->ahmac = add_addr_generate_hmac(msk->local_key, in mptcp_established_options_add_addr()
703 &opts->addr); in mptcp_established_options_add_addr()
706 opts->addr.id, opts->ahmac, echo, ntohs(opts->addr.port)); in mptcp_established_options_add_addr()
714 struct mptcp_out_options *opts) in mptcp_established_options_rm_addr() argument
732 opts->suboptions |= OPTION_MPTCP_RM_ADDR; in mptcp_established_options_rm_addr()
733 opts->rm_list = rm_list; in mptcp_established_options_rm_addr()
735 for (i = 0; i < opts->rm_list.nr; i++) in mptcp_established_options_rm_addr()
736 pr_debug("rm_list_ids[%d]=%d", i, opts->rm_list.ids[i]); in mptcp_established_options_rm_addr()
744 struct mptcp_out_options *opts) in mptcp_established_options_mp_prio() argument
753 OPTION_MPTCP_MPC_ACK) & opts->suboptions)) in mptcp_established_options_mp_prio()
761 opts->suboptions |= OPTION_MPTCP_PRIO; in mptcp_established_options_mp_prio()
762 opts->backup = subflow->request_bkup; in mptcp_established_options_mp_prio()
764 pr_debug("prio=%d", opts->backup); in mptcp_established_options_mp_prio()
772 struct mptcp_out_options *opts) in mptcp_established_options_rst() argument
780 opts->suboptions |= OPTION_MPTCP_RST; in mptcp_established_options_rst()
781 opts->reset_transient = subflow->reset_transient; in mptcp_established_options_rst()
782 opts->reset_reason = subflow->reset_reason; in mptcp_established_options_rst()
790 struct mptcp_out_options *opts) in mptcp_established_options_mp_fail() argument
801 opts->suboptions |= OPTION_MPTCP_FAIL; in mptcp_established_options_mp_fail()
802 opts->fail_seq = subflow->map_seq; in mptcp_established_options_mp_fail()
804 pr_debug("MP_FAIL fail_seq=%llu", opts->fail_seq); in mptcp_established_options_mp_fail()
811 struct mptcp_out_options *opts) in mptcp_established_options() argument
819 opts->suboptions = 0; in mptcp_established_options()
825 if (mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
829 if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
837 if (mptcp_established_options_mp(sk, skb, snd_data_fin, &opt_size, remaining, opts)) in mptcp_established_options()
839 else if (mptcp_established_options_dss(sk, skb, snd_data_fin, &opt_size, remaining, opts)) { in mptcp_established_options()
841 if (mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
856 if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, opts)) { in mptcp_established_options()
860 } else if (mptcp_established_options_rm_addr(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
866 if (mptcp_established_options_mp_prio(sk, &opt_size, remaining, opts)) { in mptcp_established_options()
876 struct mptcp_out_options *opts) in mptcp_synack_options() argument
881 opts->suboptions = OPTION_MPTCP_MPC_SYNACK; in mptcp_synack_options()
882 opts->sndr_key = subflow_req->local_key; in mptcp_synack_options()
883 opts->csum_reqd = subflow_req->csum_reqd; in mptcp_synack_options()
884 opts->allow_join_id0 = subflow_req->allow_join_id0; in mptcp_synack_options()
890 opts->suboptions = OPTION_MPTCP_MPJ_SYNACK; in mptcp_synack_options()
891 opts->backup = subflow_req->backup; in mptcp_synack_options()
892 opts->join_id = subflow_req->local_id; in mptcp_synack_options()
893 opts->thmac = subflow_req->thmac; in mptcp_synack_options()
894 opts->nonce = subflow_req->local_nonce; in mptcp_synack_options()
896 subflow_req, opts->backup, opts->join_id, in mptcp_synack_options()
897 opts->thmac, opts->nonce); in mptcp_synack_options()
1256 struct mptcp_out_options *opts) in mptcp_write_options() argument
1258 if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) { in mptcp_write_options()
1268 put_unaligned_be64(opts->fail_seq, ptr); in mptcp_write_options()
1273 if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { in mptcp_write_options()
1276 opts->reset_transient, in mptcp_write_options()
1277 opts->reset_reason); in mptcp_write_options()
1284 if (likely(OPTION_MPTCP_DSS & opts->suboptions)) { in mptcp_write_options()
1285 struct mptcp_ext *mpext = &opts->ext_copy; in mptcp_write_options()
1309 if (opts->csum_reqd) in mptcp_write_options()
1330 if (opts->csum_reqd) { in mptcp_write_options()
1339 OPTION_MPTCP_MPC_ACK) & opts->suboptions) { in mptcp_write_options()
1342 if (OPTION_MPTCP_MPC_SYN & opts->suboptions) { in mptcp_write_options()
1344 } else if (OPTION_MPTCP_MPC_SYNACK & opts->suboptions) { in mptcp_write_options()
1346 } else if (opts->data_len) { in mptcp_write_options()
1348 if (opts->csum_reqd) in mptcp_write_options()
1354 if (opts->csum_reqd) in mptcp_write_options()
1357 if (!opts->allow_join_id0) in mptcp_write_options()
1365 opts->suboptions)) in mptcp_write_options()
1368 put_unaligned_be64(opts->sndr_key, ptr); in mptcp_write_options()
1370 if (!((OPTION_MPTCP_MPC_ACK) & opts->suboptions)) in mptcp_write_options()
1373 put_unaligned_be64(opts->rcvr_key, ptr); in mptcp_write_options()
1375 if (!opts->data_len) in mptcp_write_options()
1378 if (opts->csum_reqd) { in mptcp_write_options()
1379 put_unaligned_be32(opts->data_len << 16 | in mptcp_write_options()
1380 __mptcp_make_csum(opts->data_seq, in mptcp_write_options()
1381 opts->subflow_seq, in mptcp_write_options()
1382 opts->data_len, in mptcp_write_options()
1383 opts->csum), ptr); in mptcp_write_options()
1385 put_unaligned_be32(opts->data_len << 16 | in mptcp_write_options()
1392 } else if (OPTION_MPTCP_MPJ_SYN & opts->suboptions) { in mptcp_write_options()
1395 opts->backup, opts->join_id); in mptcp_write_options()
1396 put_unaligned_be32(opts->token, ptr); in mptcp_write_options()
1398 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1400 } else if (OPTION_MPTCP_MPJ_SYNACK & opts->suboptions) { in mptcp_write_options()
1403 opts->backup, opts->join_id); in mptcp_write_options()
1404 put_unaligned_be64(opts->thmac, ptr); in mptcp_write_options()
1406 put_unaligned_be32(opts->nonce, ptr); in mptcp_write_options()
1408 } else if (OPTION_MPTCP_MPJ_ACK & opts->suboptions) { in mptcp_write_options()
1411 memcpy(ptr, opts->hmac, MPTCPOPT_HMAC_LEN); in mptcp_write_options()
1413 } else if (OPTION_MPTCP_ADD_ADDR & opts->suboptions) { in mptcp_write_options()
1418 if (opts->addr.family == AF_INET6) in mptcp_write_options()
1422 if (opts->addr.port) in mptcp_write_options()
1425 if (opts->ahmac) { in mptcp_write_options()
1426 len += sizeof(opts->ahmac); in mptcp_write_options()
1431 len, echo, opts->addr.id); in mptcp_write_options()
1432 if (opts->addr.family == AF_INET) { in mptcp_write_options()
1433 memcpy((u8 *)ptr, (u8 *)&opts->addr.addr.s_addr, 4); in mptcp_write_options()
1437 else if (opts->addr.family == AF_INET6) { in mptcp_write_options()
1438 memcpy((u8 *)ptr, opts->addr.addr6.s6_addr, 16); in mptcp_write_options()
1443 if (!opts->addr.port) { in mptcp_write_options()
1444 if (opts->ahmac) { in mptcp_write_options()
1445 put_unaligned_be64(opts->ahmac, ptr); in mptcp_write_options()
1449 u16 port = ntohs(opts->addr.port); in mptcp_write_options()
1451 if (opts->ahmac) { in mptcp_write_options()
1456 put_unaligned_be64(opts->ahmac, bptr); in mptcp_write_options()
1471 if (OPTION_MPTCP_PRIO & opts->suboptions) { in mptcp_write_options()
1480 opts->backup, TCPOPT_NOP); in mptcp_write_options()
1484 if (OPTION_MPTCP_RM_ADDR & opts->suboptions) { in mptcp_write_options()
1488 TCPOLEN_MPTCP_RM_ADDR_BASE + opts->rm_list.nr, in mptcp_write_options()
1489 0, opts->rm_list.ids[0]); in mptcp_write_options()
1491 while (i < opts->rm_list.nr) { in mptcp_write_options()
1494 id1 = opts->rm_list.ids[i]; in mptcp_write_options()
1495 id2 = i + 1 < opts->rm_list.nr ? opts->rm_list.ids[i + 1] : TCPOPT_NOP; in mptcp_write_options()
1496 id3 = i + 2 < opts->rm_list.nr ? opts->rm_list.ids[i + 2] : TCPOPT_NOP; in mptcp_write_options()
1497 id4 = i + 3 < opts->rm_list.nr ? opts->rm_list.ids[i + 3] : TCPOPT_NOP; in mptcp_write_options()