Fix: Remove reinject-data from write-queue when the address is lost

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fix: Correctly handle the counters if a reinjection has backpressure

The segment has been enqueued in the subflow. Thus, we have to handle
the queues and uncount it from wmem_queued.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fix: Copy mptcp_flags in tcp_fragment

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fix: Copy mptcp_flags in tso_fragment

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Build Fix

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fixes when disabling MPTCP at compile-time

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Sysctl cleanup

Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
IPv6 fixes

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Better handle Address ID when receiving JOINs

This allows to receive JOINs from the same address with different
Address IDs. This was a problem in a scenarios where the client
has one interface and is performing ifup/ifdown. In that case, the
server was maintaining the sockets state for each of the defunct
subflows.

Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Cleanup

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Retry establishing subflows when route is not yet available

When there is no route available then the subflows establishment can
fails. This might causes problems when only one address is available
on the client and server. In this case, MPTCP connection can end up with
no subflows available and so stall indefinitely.
Now, we handle the case where no route is yet available when
establishing new subflows. In this case we retry after 1 seconds to
re-establish them.

Note that I also renamed the mptcp_send_updatenotif(_wq) functions to
more obvious names.

Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Minor Cleanup

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fix: Use spin_lock in mptcp_vX_reqsk_queue_hash_add.

This function is called with bh disabled. Thus, it MUST NOT be
spin_lock_bh.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fix Bug#82: Review mptcp_vX_join_request

They are similar to tcp_vX_conn_request. Thus, we have to change them.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fix: null srtt in mptcp_check_snd_buf

If srtt is null then it is not possible to estimate the bandwidth.

Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Tested-by: Cheng Cui <ccuicron@gmail.com>
Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fix: Don't generate an ISN if it is not necessary

Commit 6188b878fd6b5846e3bc5b4a5966ae713c02fe52 alligned
mptcp_v4_join_request with tcp_v4_conn_request. One error remained,
where we always generated an isn.

This patch fixes it.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Cleanup of mptcp_ipv6.c

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Cleanup mptcp_ipv4.c

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Fix Bug#37: Handle SYN/ACK+Join retransmissions

This patch changes the handling of the meta-level keepalive timer.

Up to now, keepalives where handled at the meta-level.
From now on, keepalives are handled at the subflow-level. This allows
the meta-level to handle the SYN/ACK+Join retransmissions like a regular
TCP listener socket.

When the app sets the keep-alive option on the socket, this option is
pushed down to the subflows.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Change skb_unlink to __skb_unlink and a comment

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>