mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
mptcp: add port support for ADD_ADDR suboption writing
In rfc8684, the length of ADD_ADDR suboption with IPv4 address and port is 18 octets, but mptcp_write_options is 32-bit aligned, so we need to pad it to 20 octets. All the other port related option lengths need to be added up 2 octets similarly. This patch added a new field 'port' in mptcp_out_options. When this field is set with a port number, we need to add up 4 octets for the ADD_ADDR suboption, and put the port number into the suboption. Signed-off-by: Geliang Tang <geliangtang@gmail.com> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e1ef683222
commit
22fb85ffae
@ -46,6 +46,7 @@ struct mptcp_out_options {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
u8 addr_id;
|
u8 addr_id;
|
||||||
|
u16 port;
|
||||||
u64 ahmac;
|
u64 ahmac;
|
||||||
u8 rm_id;
|
u8 rm_id;
|
||||||
u8 join_id;
|
u8 join_id;
|
||||||
|
@ -1083,6 +1083,9 @@ mp_capable_done:
|
|||||||
len = TCPOLEN_MPTCP_ADD_ADDR6_BASE;
|
len = TCPOLEN_MPTCP_ADD_ADDR6_BASE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (opts->port)
|
||||||
|
len += TCPOLEN_MPTCP_PORT_LEN;
|
||||||
|
|
||||||
if (opts->ahmac) {
|
if (opts->ahmac) {
|
||||||
len += sizeof(opts->ahmac);
|
len += sizeof(opts->ahmac);
|
||||||
echo = 0;
|
echo = 0;
|
||||||
@ -1100,9 +1103,30 @@ mp_capable_done:
|
|||||||
ptr += 4;
|
ptr += 4;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (opts->ahmac) {
|
|
||||||
put_unaligned_be64(opts->ahmac, ptr);
|
if (!opts->port) {
|
||||||
ptr += 2;
|
if (opts->ahmac) {
|
||||||
|
put_unaligned_be64(opts->ahmac, ptr);
|
||||||
|
ptr += 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (opts->ahmac) {
|
||||||
|
u8 *bptr = (u8 *)ptr;
|
||||||
|
|
||||||
|
put_unaligned_be16(opts->port, bptr);
|
||||||
|
bptr += 2;
|
||||||
|
put_unaligned_be64(opts->ahmac, bptr);
|
||||||
|
bptr += 8;
|
||||||
|
put_unaligned_be16(TCPOPT_NOP << 8 |
|
||||||
|
TCPOPT_NOP, bptr);
|
||||||
|
|
||||||
|
ptr += 3;
|
||||||
|
} else {
|
||||||
|
put_unaligned_be32(opts->port << 16 |
|
||||||
|
TCPOPT_NOP << 8 |
|
||||||
|
TCPOPT_NOP, ptr);
|
||||||
|
ptr += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,14 +49,14 @@
|
|||||||
#define TCPOLEN_MPTCP_DSS_MAP64 14
|
#define TCPOLEN_MPTCP_DSS_MAP64 14
|
||||||
#define TCPOLEN_MPTCP_DSS_CHECKSUM 2
|
#define TCPOLEN_MPTCP_DSS_CHECKSUM 2
|
||||||
#define TCPOLEN_MPTCP_ADD_ADDR 16
|
#define TCPOLEN_MPTCP_ADD_ADDR 16
|
||||||
#define TCPOLEN_MPTCP_ADD_ADDR_PORT 18
|
#define TCPOLEN_MPTCP_ADD_ADDR_PORT 20
|
||||||
#define TCPOLEN_MPTCP_ADD_ADDR_BASE 8
|
#define TCPOLEN_MPTCP_ADD_ADDR_BASE 8
|
||||||
#define TCPOLEN_MPTCP_ADD_ADDR_BASE_PORT 10
|
#define TCPOLEN_MPTCP_ADD_ADDR_BASE_PORT 12
|
||||||
#define TCPOLEN_MPTCP_ADD_ADDR6 28
|
#define TCPOLEN_MPTCP_ADD_ADDR6 28
|
||||||
#define TCPOLEN_MPTCP_ADD_ADDR6_PORT 30
|
#define TCPOLEN_MPTCP_ADD_ADDR6_PORT 32
|
||||||
#define TCPOLEN_MPTCP_ADD_ADDR6_BASE 20
|
#define TCPOLEN_MPTCP_ADD_ADDR6_BASE 20
|
||||||
#define TCPOLEN_MPTCP_ADD_ADDR6_BASE_PORT 22
|
#define TCPOLEN_MPTCP_ADD_ADDR6_BASE_PORT 24
|
||||||
#define TCPOLEN_MPTCP_PORT_LEN 2
|
#define TCPOLEN_MPTCP_PORT_LEN 4
|
||||||
#define TCPOLEN_MPTCP_RM_ADDR_BASE 4
|
#define TCPOLEN_MPTCP_RM_ADDR_BASE 4
|
||||||
|
|
||||||
/* MPTCP MP_JOIN flags */
|
/* MPTCP MP_JOIN flags */
|
||||||
|
Loading…
Reference in New Issue
Block a user