Lines Matching refs:mp_opt

25 			       struct mptcp_options_received *mp_opt)
89 mp_opt->suboptions |= OPTION_MPTCP_CSUMREQD;
91 mp_opt->deny_join_id0 = !!(flags & MPTCP_CAP_DENY_JOIN_ID0);
93 mp_opt->suboptions |= subopt;
95 mp_opt->sndr_key = get_unaligned_be64(ptr);
99 mp_opt->rcvr_key = get_unaligned_be64(ptr);
108 mp_opt->suboptions |= OPTION_MPTCP_DSS;
109 mp_opt->use_map = 1;
110 mp_opt->mpc_map = 1;
111 mp_opt->use_ack = 0;
112 mp_opt->data_len = get_unaligned_be16(ptr);
116 mp_opt->csum = get_unaligned((__force __sum16 *)ptr);
117 mp_opt->suboptions |= OPTION_MPTCP_CSUMREQD;
121 version, flags, opsize, mp_opt->sndr_key,
122 mp_opt->rcvr_key, mp_opt->data_len, mp_opt->csum);
127 mp_opt->suboptions |= OPTION_MPTCP_MPJ_SYN;
128 mp_opt->backup = *ptr++ & MPTCPOPT_BACKUP;
129 mp_opt->join_id = *ptr++;
130 mp_opt->token = get_unaligned_be32(ptr);
132 mp_opt->nonce = get_unaligned_be32(ptr);
135 mp_opt->backup, mp_opt->join_id,
136 mp_opt->token, mp_opt->nonce);
138 mp_opt->suboptions |= OPTION_MPTCP_MPJ_SYNACK;
139 mp_opt->backup = *ptr++ & MPTCPOPT_BACKUP;
140 mp_opt->join_id = *ptr++;
141 mp_opt->thmac = get_unaligned_be64(ptr);
143 mp_opt->nonce = get_unaligned_be32(ptr);
146 mp_opt->backup, mp_opt->join_id,
147 mp_opt->thmac, mp_opt->nonce);
149 mp_opt->suboptions |= OPTION_MPTCP_MPJ_ACK;
151 memcpy(mp_opt->hmac, ptr, MPTCPOPT_HMAC_LEN);
164 mp_opt->mpc_map = 0;
166 mp_opt->data_fin = (flags & MPTCP_DSS_DATA_FIN) != 0;
167 mp_opt->dsn64 = (flags & MPTCP_DSS_DSN64) != 0;
168 mp_opt->use_map = (flags & MPTCP_DSS_HAS_MAP) != 0;
169 mp_opt->ack64 = (flags & MPTCP_DSS_ACK64) != 0;
170 mp_opt->use_ack = (flags & MPTCP_DSS_HAS_ACK);
173 mp_opt->data_fin, mp_opt->dsn64,
174 mp_opt->use_map, mp_opt->ack64,
175 mp_opt->use_ack);
179 if (mp_opt->use_ack) {
180 if (mp_opt->ack64)
186 if (mp_opt->use_map) {
187 if (mp_opt->dsn64)
200 mp_opt->suboptions |= OPTION_MPTCP_DSS;
201 if (mp_opt->use_ack) {
202 if (mp_opt->ack64) {
203 mp_opt->data_ack = get_unaligned_be64(ptr);
206 mp_opt->data_ack = get_unaligned_be32(ptr);
210 pr_debug("data_ack=%llu", mp_opt->data_ack);
213 if (mp_opt->use_map) {
214 if (mp_opt->dsn64) {
215 mp_opt->data_seq = get_unaligned_be64(ptr);
218 mp_opt->data_seq = get_unaligned_be32(ptr);
222 mp_opt->subflow_seq = get_unaligned_be32(ptr);
225 mp_opt->data_len = get_unaligned_be16(ptr);
229 mp_opt->suboptions |= OPTION_MPTCP_CSUMREQD;
230 mp_opt->csum = get_unaligned((__force __sum16 *)ptr);
235 mp_opt->data_seq, mp_opt->subflow_seq,
236 mp_opt->data_len, !!(mp_opt->suboptions & OPTION_MPTCP_CSUMREQD),
237 mp_opt->csum);
243 mp_opt->echo = (*ptr++) & MPTCP_ADDR_ECHO;
244 if (!mp_opt->echo) {
247 mp_opt->addr.family = AF_INET;
251 mp_opt->addr.family = AF_INET6;
258 mp_opt->addr.family = AF_INET;
262 mp_opt->addr.family = AF_INET6;
268 mp_opt->suboptions |= OPTION_MPTCP_ADD_ADDR;
269 mp_opt->addr.id = *ptr++;
270 mp_opt->addr.port = 0;
271 mp_opt->ahmac = 0;
272 if (mp_opt->addr.family == AF_INET) {
273 memcpy((u8 *)&mp_opt->addr.addr.s_addr, (u8 *)ptr, 4);
277 mp_opt->addr.port = htons(get_unaligned_be16(ptr));
283 memcpy(mp_opt->addr.addr6.s6_addr, (u8 *)ptr, 16);
287 mp_opt->addr.port = htons(get_unaligned_be16(ptr));
292 if (!mp_opt->echo) {
293 mp_opt->ahmac = get_unaligned_be64(ptr);
297 (mp_opt->addr.family == AF_INET6) ? "6" : "",
298 mp_opt->addr.id, mp_opt->ahmac, mp_opt->echo, ntohs(mp_opt->addr.port));
308 mp_opt->suboptions |= OPTION_MPTCP_RM_ADDR;
309 mp_opt->rm_list.nr = opsize - TCPOLEN_MPTCP_RM_ADDR_BASE;
310 for (i = 0; i < mp_opt->rm_list.nr; i++)
311 mp_opt->rm_list.ids[i] = *ptr++;
312 pr_debug("RM_ADDR: rm_list_nr=%d", mp_opt->rm_list.nr);
319 mp_opt->suboptions |= OPTION_MPTCP_PRIO;
320 mp_opt->backup = *ptr++ & MPTCP_PRIO_BKUP;
321 pr_debug("MP_PRIO: prio=%d", mp_opt->backup);
329 mp_opt->rcvr_key = get_unaligned_be64(ptr);
331 mp_opt->suboptions |= OPTION_MPTCP_FASTCLOSE;
332 pr_debug("MP_FASTCLOSE: recv_key=%llu", mp_opt->rcvr_key);
342 mp_opt->suboptions |= OPTION_MPTCP_RST;
344 mp_opt->reset_transient = flags & MPTCP_RST_TRANSIENT;
345 mp_opt->reset_reason = *ptr;
347 mp_opt->reset_transient, mp_opt->reset_reason);
355 mp_opt->suboptions |= OPTION_MPTCP_FAIL;
356 mp_opt->fail_seq = get_unaligned_be64(ptr);
357 pr_debug("MP_FAIL: data_seq=%llu", mp_opt->fail_seq);
366 struct mptcp_options_received *mp_opt)
373 mp_opt->suboptions = 0;
397 mptcp_parse_option(skb, ptr, opsize, mp_opt);
928 struct mptcp_options_received *mp_opt)
940 subflow->mp_join && (mp_opt->suboptions & OPTIONS_MPTCP_MPJ) &&
954 if (subflow->is_mptfo && mp_opt->suboptions & OPTION_MPTCP_MPC_ACK)
960 (((mp_opt->suboptions & OPTION_MPTCP_DSS) && mp_opt->use_ack) ||
961 ((mp_opt->suboptions & OPTION_MPTCP_ADD_ADDR) && !mp_opt->echo))) {
972 if (!(mp_opt->suboptions & OPTIONS_MPTCP_MPC)) {
981 if (mp_opt->deny_join_id0)
989 __mptcp_subflow_fully_established(msk, subflow, mp_opt);
1039 struct mptcp_options_received *mp_opt)
1052 new_snd_una = mptcp_expand_seq(old_snd_una, mp_opt->data_ack, mp_opt->ack64);
1074 trace_ack_update_msk(mp_opt->data_ack,
1097 struct mptcp_options_received *mp_opt)
1101 if (mp_opt->echo)
1106 &mp_opt->addr);
1108 pr_debug("msk=%p, ahmac=%llu, mp_opt->ahmac=%llu\n",
1109 msk, hmac, mp_opt->ahmac);
1111 return hmac == mp_opt->ahmac;
1119 struct mptcp_options_received mp_opt;
1142 mptcp_get_options(skb, &mp_opt);
1147 if (!check_fully_established(msk, sk, subflow, skb, &mp_opt))
1150 if (unlikely(mp_opt.suboptions != OPTION_MPTCP_DSS)) {
1151 if ((mp_opt.suboptions & OPTION_MPTCP_FASTCLOSE) &&
1152 READ_ONCE(msk->local_key) == mp_opt.rcvr_key) {
1158 if ((mp_opt.suboptions & OPTION_MPTCP_ADD_ADDR) &&
1159 add_addr_hmac_valid(msk, &mp_opt)) {
1160 if (!mp_opt.echo) {
1161 mptcp_pm_add_addr_received(sk, &mp_opt.addr);
1164 mptcp_pm_add_addr_echoed(msk, &mp_opt.addr);
1165 mptcp_pm_del_add_timer(msk, &mp_opt.addr, true);
1169 if (mp_opt.addr.port)
1173 if (mp_opt.suboptions & OPTION_MPTCP_RM_ADDR)
1174 mptcp_pm_rm_addr_received(msk, &mp_opt.rm_list);
1176 if (mp_opt.suboptions & OPTION_MPTCP_PRIO) {
1177 mptcp_pm_mp_prio_received(sk, mp_opt.backup);
1181 if (mp_opt.suboptions & OPTION_MPTCP_FAIL) {
1182 mptcp_pm_mp_fail_received(sk, mp_opt.fail_seq);
1186 if (mp_opt.suboptions & OPTION_MPTCP_RST) {
1188 subflow->reset_reason = mp_opt.reset_reason;
1189 subflow->reset_transient = mp_opt.reset_transient;
1193 if (!(mp_opt.suboptions & OPTION_MPTCP_DSS))
1200 if (mp_opt.use_ack)
1201 ack_update_msk(msk, sk, &mp_opt);
1209 if (mp_opt.data_fin && mp_opt.data_len == 1 &&
1210 mptcp_update_rcv_data_fin(msk, mp_opt.data_seq, mp_opt.dsn64))
1222 if (likely(mp_opt.use_map)) {
1223 if (mp_opt.mpc_map) {
1235 mpext->data_seq = mp_opt.data_seq;
1236 mpext->subflow_seq = mp_opt.subflow_seq;
1237 mpext->dsn64 = mp_opt.dsn64;
1238 mpext->data_fin = mp_opt.data_fin;
1240 mpext->data_len = mp_opt.data_len;
1242 mpext->csum_reqd = !!(mp_opt.suboptions & OPTION_MPTCP_CSUMREQD);
1245 mpext->csum = mp_opt.csum;