Lines Matching refs:mp_opt

23 			       struct mptcp_options_received *mp_opt)  in mptcp_parse_option()  argument
77 mp_opt->mp_capable = 1; in mptcp_parse_option()
79 mp_opt->sndr_key = get_unaligned_be64(ptr); in mptcp_parse_option()
83 mp_opt->rcvr_key = get_unaligned_be64(ptr); in mptcp_parse_option()
92 mp_opt->dss = 1; in mptcp_parse_option()
93 mp_opt->use_map = 1; in mptcp_parse_option()
94 mp_opt->mpc_map = 1; in mptcp_parse_option()
95 mp_opt->data_len = get_unaligned_be16(ptr); in mptcp_parse_option()
99 version, flags, opsize, mp_opt->sndr_key, in mptcp_parse_option()
100 mp_opt->rcvr_key, mp_opt->data_len); in mptcp_parse_option()
104 mp_opt->mp_join = 1; in mptcp_parse_option()
106 mp_opt->backup = *ptr++ & MPTCPOPT_BACKUP; in mptcp_parse_option()
107 mp_opt->join_id = *ptr++; in mptcp_parse_option()
108 mp_opt->token = get_unaligned_be32(ptr); in mptcp_parse_option()
110 mp_opt->nonce = get_unaligned_be32(ptr); in mptcp_parse_option()
113 mp_opt->backup, mp_opt->join_id, in mptcp_parse_option()
114 mp_opt->token, mp_opt->nonce); in mptcp_parse_option()
116 mp_opt->backup = *ptr++ & MPTCPOPT_BACKUP; in mptcp_parse_option()
117 mp_opt->join_id = *ptr++; in mptcp_parse_option()
118 mp_opt->thmac = get_unaligned_be64(ptr); in mptcp_parse_option()
120 mp_opt->nonce = get_unaligned_be32(ptr); in mptcp_parse_option()
123 mp_opt->backup, mp_opt->join_id, in mptcp_parse_option()
124 mp_opt->thmac, mp_opt->nonce); in mptcp_parse_option()
127 memcpy(mp_opt->hmac, ptr, MPTCPOPT_HMAC_LEN); in mptcp_parse_option()
130 mp_opt->mp_join = 0; in mptcp_parse_option()
142 mp_opt->mpc_map = 0; in mptcp_parse_option()
144 mp_opt->data_fin = (flags & MPTCP_DSS_DATA_FIN) != 0; in mptcp_parse_option()
145 mp_opt->dsn64 = (flags & MPTCP_DSS_DSN64) != 0; in mptcp_parse_option()
146 mp_opt->use_map = (flags & MPTCP_DSS_HAS_MAP) != 0; in mptcp_parse_option()
147 mp_opt->ack64 = (flags & MPTCP_DSS_ACK64) != 0; in mptcp_parse_option()
148 mp_opt->use_ack = (flags & MPTCP_DSS_HAS_ACK); in mptcp_parse_option()
151 mp_opt->data_fin, mp_opt->dsn64, in mptcp_parse_option()
152 mp_opt->use_map, mp_opt->ack64, in mptcp_parse_option()
153 mp_opt->use_ack); in mptcp_parse_option()
157 if (mp_opt->use_ack) { in mptcp_parse_option()
158 if (mp_opt->ack64) in mptcp_parse_option()
164 if (mp_opt->use_map) { in mptcp_parse_option()
165 if (mp_opt->dsn64) in mptcp_parse_option()
180 mp_opt->dss = 1; in mptcp_parse_option()
182 if (mp_opt->use_ack) { in mptcp_parse_option()
183 if (mp_opt->ack64) { in mptcp_parse_option()
184 mp_opt->data_ack = get_unaligned_be64(ptr); in mptcp_parse_option()
187 mp_opt->data_ack = get_unaligned_be32(ptr); in mptcp_parse_option()
191 pr_debug("data_ack=%llu", mp_opt->data_ack); in mptcp_parse_option()
194 if (mp_opt->use_map) { in mptcp_parse_option()
195 if (mp_opt->dsn64) { in mptcp_parse_option()
196 mp_opt->data_seq = get_unaligned_be64(ptr); in mptcp_parse_option()
199 mp_opt->data_seq = get_unaligned_be32(ptr); in mptcp_parse_option()
203 mp_opt->subflow_seq = get_unaligned_be32(ptr); in mptcp_parse_option()
206 mp_opt->data_len = get_unaligned_be16(ptr); in mptcp_parse_option()
210 mp_opt->data_seq, mp_opt->subflow_seq, in mptcp_parse_option()
211 mp_opt->data_len); in mptcp_parse_option()
217 mp_opt->echo = (*ptr++) & MPTCP_ADDR_ECHO; in mptcp_parse_option()
218 if (!mp_opt->echo) { in mptcp_parse_option()
221 mp_opt->family = MPTCP_ADDR_IPVERSION_4; in mptcp_parse_option()
225 mp_opt->family = MPTCP_ADDR_IPVERSION_6; in mptcp_parse_option()
232 mp_opt->family = MPTCP_ADDR_IPVERSION_4; in mptcp_parse_option()
236 mp_opt->family = MPTCP_ADDR_IPVERSION_6; in mptcp_parse_option()
242 mp_opt->add_addr = 1; in mptcp_parse_option()
243 mp_opt->addr_id = *ptr++; in mptcp_parse_option()
244 pr_debug("ADD_ADDR: id=%d, echo=%d", mp_opt->addr_id, mp_opt->echo); in mptcp_parse_option()
245 if (mp_opt->family == MPTCP_ADDR_IPVERSION_4) { in mptcp_parse_option()
246 memcpy((u8 *)&mp_opt->addr.s_addr, (u8 *)ptr, 4); in mptcp_parse_option()
250 mp_opt->port = get_unaligned_be16(ptr); in mptcp_parse_option()
256 memcpy(mp_opt->addr6.s6_addr, (u8 *)ptr, 16); in mptcp_parse_option()
260 mp_opt->port = get_unaligned_be16(ptr); in mptcp_parse_option()
265 if (!mp_opt->echo) { in mptcp_parse_option()
266 mp_opt->ahmac = get_unaligned_be64(ptr); in mptcp_parse_option()
277 mp_opt->rm_addr = 1; in mptcp_parse_option()
278 mp_opt->rm_id = *ptr++; in mptcp_parse_option()
279 pr_debug("RM_ADDR: id=%d", mp_opt->rm_id); in mptcp_parse_option()
288 struct mptcp_options_received *mp_opt) in mptcp_get_options() argument
295 mp_opt->mp_capable = 0; in mptcp_get_options()
296 mp_opt->mp_join = 0; in mptcp_get_options()
297 mp_opt->add_addr = 0; in mptcp_get_options()
298 mp_opt->ahmac = 0; in mptcp_get_options()
299 mp_opt->port = 0; in mptcp_get_options()
300 mp_opt->rm_addr = 0; in mptcp_get_options()
301 mp_opt->dss = 0; in mptcp_get_options()
325 mptcp_parse_option(skb, ptr, opsize, mp_opt); in mptcp_get_options()
726 struct mptcp_options_received *mp_opt) in check_fully_established() argument
738 subflow->mp_join && mp_opt->mp_join && in check_fully_established()
755 if (mp_opt->dss && mp_opt->use_ack) { in check_fully_established()
768 if (!mp_opt->mp_capable) { in check_fully_established()
779 mptcp_subflow_fully_established(subflow, mp_opt); in check_fully_established()
815 struct mptcp_options_received *mp_opt) in update_una() argument
824 new_snd_una = expand_ack(old_snd_una, mp_opt->data_ack, mp_opt->ack64); in update_una()
859 struct mptcp_options_received *mp_opt) in add_addr_hmac_valid() argument
863 if (mp_opt->echo) in add_addr_hmac_valid()
866 if (mp_opt->family == MPTCP_ADDR_IPVERSION_4) in add_addr_hmac_valid()
869 mp_opt->addr_id, &mp_opt->addr); in add_addr_hmac_valid()
874 mp_opt->addr_id, &mp_opt->addr6); in add_addr_hmac_valid()
879 (unsigned long long)mp_opt->ahmac); in add_addr_hmac_valid()
881 return hmac == mp_opt->ahmac; in add_addr_hmac_valid()
888 struct mptcp_options_received mp_opt; in mptcp_incoming_options() local
894 mptcp_get_options(skb, &mp_opt); in mptcp_incoming_options()
895 if (!check_fully_established(msk, sk, subflow, skb, &mp_opt)) in mptcp_incoming_options()
898 if (mp_opt.add_addr && add_addr_hmac_valid(msk, &mp_opt)) { in mptcp_incoming_options()
901 addr.port = htons(mp_opt.port); in mptcp_incoming_options()
902 addr.id = mp_opt.addr_id; in mptcp_incoming_options()
903 if (mp_opt.family == MPTCP_ADDR_IPVERSION_4) { in mptcp_incoming_options()
905 addr.addr = mp_opt.addr; in mptcp_incoming_options()
908 else if (mp_opt.family == MPTCP_ADDR_IPVERSION_6) { in mptcp_incoming_options()
910 addr.addr6 = mp_opt.addr6; in mptcp_incoming_options()
913 if (!mp_opt.echo) { in mptcp_incoming_options()
920 mp_opt.add_addr = 0; in mptcp_incoming_options()
923 if (mp_opt.rm_addr) { in mptcp_incoming_options()
924 mptcp_pm_rm_addr_received(msk, mp_opt.rm_id); in mptcp_incoming_options()
925 mp_opt.rm_addr = 0; in mptcp_incoming_options()
928 if (!mp_opt.dss) in mptcp_incoming_options()
934 if (mp_opt.use_ack) in mptcp_incoming_options()
935 update_una(msk, &mp_opt); in mptcp_incoming_options()
943 if (mp_opt.data_fin && mp_opt.data_len == 1 && in mptcp_incoming_options()
944 mptcp_update_rcv_data_fin(msk, mp_opt.data_seq, mp_opt.dsn64) && in mptcp_incoming_options()
957 if (mp_opt.use_map) { in mptcp_incoming_options()
958 if (mp_opt.mpc_map) { in mptcp_incoming_options()
970 mpext->data_seq = mp_opt.data_seq; in mptcp_incoming_options()
971 mpext->subflow_seq = mp_opt.subflow_seq; in mptcp_incoming_options()
972 mpext->dsn64 = mp_opt.dsn64; in mptcp_incoming_options()
973 mpext->data_fin = mp_opt.data_fin; in mptcp_incoming_options()
975 mpext->data_len = mp_opt.data_len; in mptcp_incoming_options()