options.c (30f60bae80922582a16e80b070171a865fce58cd) options.c (fef6b7ecfbd465b7e27530e797c00b7384f78e44)
1// SPDX-License-Identifier: GPL-2.0
2/* Multipath TCP
3 *
4 * Copyright (c) 2017 - 2019, Intel Corporation.
5 */
6
7#define pr_fmt(fmt) "MPTCP: " fmt
8

--- 638 unchanged lines hidden (view full) ---

647
648 len = mptcp_add_addr_len(opts->addr.family, echo, port);
649 if (remaining < len)
650 return false;
651
652 *size = len;
653 if (drop_other_suboptions)
654 *size -= opt_size;
1// SPDX-License-Identifier: GPL-2.0
2/* Multipath TCP
3 *
4 * Copyright (c) 2017 - 2019, Intel Corporation.
5 */
6
7#define pr_fmt(fmt) "MPTCP: " fmt
8

--- 638 unchanged lines hidden (view full) ---

647
648 len = mptcp_add_addr_len(opts->addr.family, echo, port);
649 if (remaining < len)
650 return false;
651
652 *size = len;
653 if (drop_other_suboptions)
654 *size -= opt_size;
655 opts->suboptions |= OPTION_MPTCP_ADD_ADDR;
655 if (opts->addr.family == AF_INET) {
656 if (opts->addr.family == AF_INET) {
656 opts->suboptions |= OPTION_MPTCP_ADD_ADDR;
657 if (!echo) {
658 opts->ahmac = add_addr_generate_hmac(msk->local_key,
659 msk->remote_key,
660 opts->addr.id,
661 &opts->addr.addr,
662 ntohs(opts->addr.port));
663 }
664 }
665#if IS_ENABLED(CONFIG_MPTCP_IPV6)
666 else if (opts->addr.family == AF_INET6) {
657 if (!echo) {
658 opts->ahmac = add_addr_generate_hmac(msk->local_key,
659 msk->remote_key,
660 opts->addr.id,
661 &opts->addr.addr,
662 ntohs(opts->addr.port));
663 }
664 }
665#if IS_ENABLED(CONFIG_MPTCP_IPV6)
666 else if (opts->addr.family == AF_INET6) {
667 opts->suboptions |= OPTION_MPTCP_ADD_ADDR6;
668 if (!echo) {
669 opts->ahmac = add_addr6_generate_hmac(msk->local_key,
670 msk->remote_key,
671 opts->addr.id,
672 &opts->addr.addr6,
673 ntohs(opts->addr.port));
674 }
675 }

--- 517 unchanged lines hidden (view full) ---

1193 goto mp_capable_done;
1194
1195 put_unaligned_be32(opts->ext_copy.data_len << 16 |
1196 TCPOPT_NOP << 8 | TCPOPT_NOP, ptr);
1197 ptr += 1;
1198 }
1199
1200mp_capable_done:
667 if (!echo) {
668 opts->ahmac = add_addr6_generate_hmac(msk->local_key,
669 msk->remote_key,
670 opts->addr.id,
671 &opts->addr.addr6,
672 ntohs(opts->addr.port));
673 }
674 }

--- 517 unchanged lines hidden (view full) ---

1192 goto mp_capable_done;
1193
1194 put_unaligned_be32(opts->ext_copy.data_len << 16 |
1195 TCPOPT_NOP << 8 | TCPOPT_NOP, ptr);
1196 ptr += 1;
1197 }
1198
1199mp_capable_done:
1201 if ((OPTION_MPTCP_ADD_ADDR
1202#if IS_ENABLED(CONFIG_MPTCP_IPV6)
1203 | OPTION_MPTCP_ADD_ADDR6
1204#endif
1205 ) & opts->suboptions) {
1200 if (OPTION_MPTCP_ADD_ADDR & opts->suboptions) {
1206 u8 len = TCPOLEN_MPTCP_ADD_ADDR_BASE;
1207 u8 echo = MPTCP_ADDR_ECHO;
1208
1209#if IS_ENABLED(CONFIG_MPTCP_IPV6)
1201 u8 len = TCPOLEN_MPTCP_ADD_ADDR_BASE;
1202 u8 echo = MPTCP_ADDR_ECHO;
1203
1204#if IS_ENABLED(CONFIG_MPTCP_IPV6)
1210 if (OPTION_MPTCP_ADD_ADDR6 & opts->suboptions)
1205 if (opts->addr.family == AF_INET6)
1211 len = TCPOLEN_MPTCP_ADD_ADDR6_BASE;
1212#endif
1213
1214 if (opts->addr.port)
1215 len += TCPOLEN_MPTCP_PORT_LEN;
1216
1217 if (opts->ahmac) {
1218 len += sizeof(opts->ahmac);
1219 echo = 0;
1220 }
1221
1222 *ptr++ = mptcp_option(MPTCPOPT_ADD_ADDR,
1223 len, echo, opts->addr.id);
1206 len = TCPOLEN_MPTCP_ADD_ADDR6_BASE;
1207#endif
1208
1209 if (opts->addr.port)
1210 len += TCPOLEN_MPTCP_PORT_LEN;
1211
1212 if (opts->ahmac) {
1213 len += sizeof(opts->ahmac);
1214 echo = 0;
1215 }
1216
1217 *ptr++ = mptcp_option(MPTCPOPT_ADD_ADDR,
1218 len, echo, opts->addr.id);
1224 if (OPTION_MPTCP_ADD_ADDR & opts->suboptions) {
1219 if (opts->addr.family == AF_INET) {
1225 memcpy((u8 *)ptr, (u8 *)&opts->addr.addr.s_addr, 4);
1226 ptr += 1;
1227 }
1228#if IS_ENABLED(CONFIG_MPTCP_IPV6)
1220 memcpy((u8 *)ptr, (u8 *)&opts->addr.addr.s_addr, 4);
1221 ptr += 1;
1222 }
1223#if IS_ENABLED(CONFIG_MPTCP_IPV6)
1229 else if (OPTION_MPTCP_ADD_ADDR6 & opts->suboptions) {
1224 else if (opts->addr.family == AF_INET6) {
1230 memcpy((u8 *)ptr, opts->addr.addr6.s6_addr, 16);
1231 ptr += 4;
1232 }
1233#endif
1234
1235 if (!opts->addr.port) {
1236 if (opts->ahmac) {
1237 put_unaligned_be64(opts->ahmac, ptr);

--- 158 unchanged lines hidden ---
1225 memcpy((u8 *)ptr, opts->addr.addr6.s6_addr, 16);
1226 ptr += 4;
1227 }
1228#endif
1229
1230 if (!opts->addr.port) {
1231 if (opts->ahmac) {
1232 put_unaligned_be64(opts->ahmac, ptr);

--- 158 unchanged lines hidden ---