mptcp: add port parameter for mptcp_pm_announce_addr
This patch added a new parameter 'port' for mptcp_pm_announce_addr. If this parameter is true, we set the MPTCP_ADD_ADDR_PORT bit of the add_addr_signal. That means the announced address is added with a port number. 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
fbe0f87ac7
commit
0f5c9e3f07
3 changed files with 11 additions and 6 deletions
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
|
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
|
||||||
const struct mptcp_addr_info *addr,
|
const struct mptcp_addr_info *addr,
|
||||||
bool echo)
|
bool echo, bool port)
|
||||||
{
|
{
|
||||||
u8 add_addr = READ_ONCE(msk->pm.add_addr_signal);
|
u8 add_addr = READ_ONCE(msk->pm.add_addr_signal);
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ int mptcp_pm_announce_addr(struct mptcp_sock *msk,
|
||||||
add_addr |= BIT(MPTCP_ADD_ADDR_ECHO);
|
add_addr |= BIT(MPTCP_ADD_ADDR_ECHO);
|
||||||
if (addr->family == AF_INET6)
|
if (addr->family == AF_INET6)
|
||||||
add_addr |= BIT(MPTCP_ADD_ADDR_IPV6);
|
add_addr |= BIT(MPTCP_ADD_ADDR_IPV6);
|
||||||
|
if (port)
|
||||||
|
add_addr |= BIT(MPTCP_ADD_ADDR_PORT);
|
||||||
WRITE_ONCE(msk->pm.add_addr_signal, add_addr);
|
WRITE_ONCE(msk->pm.add_addr_signal, add_addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -156,7 +158,7 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
|
||||||
spin_lock_bh(&pm->lock);
|
spin_lock_bh(&pm->lock);
|
||||||
|
|
||||||
if (!READ_ONCE(pm->accept_addr)) {
|
if (!READ_ONCE(pm->accept_addr)) {
|
||||||
mptcp_pm_announce_addr(msk, addr, true);
|
mptcp_pm_announce_addr(msk, addr, true, addr->port);
|
||||||
mptcp_pm_add_addr_send_ack(msk);
|
mptcp_pm_add_addr_send_ack(msk);
|
||||||
} else if (mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_RECEIVED)) {
|
} else if (mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_RECEIVED)) {
|
||||||
pm->remote = *addr;
|
pm->remote = *addr;
|
||||||
|
|
|
@ -227,7 +227,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
|
||||||
|
|
||||||
if (!mptcp_pm_should_add_signal(msk)) {
|
if (!mptcp_pm_should_add_signal(msk)) {
|
||||||
pr_debug("retransmit ADD_ADDR id=%d", entry->addr.id);
|
pr_debug("retransmit ADD_ADDR id=%d", entry->addr.id);
|
||||||
mptcp_pm_announce_addr(msk, &entry->addr, false);
|
mptcp_pm_announce_addr(msk, &entry->addr, false, entry->addr.port);
|
||||||
mptcp_pm_add_addr_send_ack(msk);
|
mptcp_pm_add_addr_send_ack(msk);
|
||||||
entry->retrans_times++;
|
entry->retrans_times++;
|
||||||
}
|
}
|
||||||
|
@ -328,7 +328,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
|
||||||
if (local) {
|
if (local) {
|
||||||
if (mptcp_pm_alloc_anno_list(msk, local)) {
|
if (mptcp_pm_alloc_anno_list(msk, local)) {
|
||||||
msk->pm.add_addr_signaled++;
|
msk->pm.add_addr_signaled++;
|
||||||
mptcp_pm_announce_addr(msk, &local->addr, false);
|
mptcp_pm_announce_addr(msk, &local->addr, false, local->addr.port);
|
||||||
mptcp_pm_nl_add_addr_send_ack(msk);
|
mptcp_pm_nl_add_addr_send_ack(msk);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -376,6 +376,7 @@ void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
|
||||||
struct sock *sk = (struct sock *)msk;
|
struct sock *sk = (struct sock *)msk;
|
||||||
struct mptcp_addr_info remote;
|
struct mptcp_addr_info remote;
|
||||||
struct mptcp_addr_info local;
|
struct mptcp_addr_info local;
|
||||||
|
bool use_port = false;
|
||||||
|
|
||||||
pr_debug("accepted %d:%d remote family %d",
|
pr_debug("accepted %d:%d remote family %d",
|
||||||
msk->pm.add_addr_accepted, msk->pm.add_addr_accept_max,
|
msk->pm.add_addr_accepted, msk->pm.add_addr_accept_max,
|
||||||
|
@ -392,6 +393,8 @@ void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
|
||||||
remote = msk->pm.remote;
|
remote = msk->pm.remote;
|
||||||
if (!remote.port)
|
if (!remote.port)
|
||||||
remote.port = sk->sk_dport;
|
remote.port = sk->sk_dport;
|
||||||
|
else
|
||||||
|
use_port = true;
|
||||||
memset(&local, 0, sizeof(local));
|
memset(&local, 0, sizeof(local));
|
||||||
local.family = remote.family;
|
local.family = remote.family;
|
||||||
|
|
||||||
|
@ -399,7 +402,7 @@ void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
|
||||||
__mptcp_subflow_connect((struct sock *)msk, &local, &remote);
|
__mptcp_subflow_connect((struct sock *)msk, &local, &remote);
|
||||||
spin_lock_bh(&msk->pm.lock);
|
spin_lock_bh(&msk->pm.lock);
|
||||||
|
|
||||||
mptcp_pm_announce_addr(msk, &remote, true);
|
mptcp_pm_announce_addr(msk, &remote, true, use_port);
|
||||||
mptcp_pm_nl_add_addr_send_ack(msk);
|
mptcp_pm_nl_add_addr_send_ack(msk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -552,7 +552,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
|
||||||
|
|
||||||
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
|
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
|
||||||
const struct mptcp_addr_info *addr,
|
const struct mptcp_addr_info *addr,
|
||||||
bool echo);
|
bool echo, bool port);
|
||||||
int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id);
|
int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id);
|
||||||
int mptcp_pm_remove_subflow(struct mptcp_sock *msk, u8 local_id);
|
int mptcp_pm_remove_subflow(struct mptcp_sock *msk, u8 local_id);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue