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
|
||||
};
|
||||
u8 addr_id;
|
||||
u16 port;
|
||||
u64 ahmac;
|
||||
u8 rm_id;
|
||||
u8 join_id;
|
||||
|
@ -1083,6 +1083,9 @@ mp_capable_done:
|
||||
len = TCPOLEN_MPTCP_ADD_ADDR6_BASE;
|
||||
#endif
|
||||
|
||||
if (opts->port)
|
||||
len += TCPOLEN_MPTCP_PORT_LEN;
|
||||
|
||||
if (opts->ahmac) {
|
||||
len += sizeof(opts->ahmac);
|
||||
echo = 0;
|
||||
@ -1100,10 +1103,31 @@ mp_capable_done:
|
||||
ptr += 4;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!opts->port) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (OPTION_MPTCP_RM_ADDR & opts->suboptions) {
|
||||
|
@ -49,14 +49,14 @@
|
||||
#define TCPOLEN_MPTCP_DSS_MAP64 14
|
||||
#define TCPOLEN_MPTCP_DSS_CHECKSUM 2
|
||||
#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_PORT 10
|
||||
#define TCPOLEN_MPTCP_ADD_ADDR_BASE_PORT 12
|
||||
#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_PORT 22
|
||||
#define TCPOLEN_MPTCP_PORT_LEN 2
|
||||
#define TCPOLEN_MPTCP_ADD_ADDR6_BASE_PORT 24
|
||||
#define TCPOLEN_MPTCP_PORT_LEN 4
|
||||
#define TCPOLEN_MPTCP_RM_ADDR_BASE 4
|
||||
|
||||
/* MPTCP MP_JOIN flags */
|
||||
|
Loading…
Reference in New Issue
Block a user