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>
Cleanup

Signed-off-by: Christoph Paasch <christoph.paasch@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>
Minor Cleanup

Signed-off-by: Christoph Paasch <christoph.paasch@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>
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>
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>
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>
Cleanup of mptcp_ipv6.c

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

Signed-off-by: Christoph Paasch <christoph.paasch@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>
Change skb_unlink to __skb_unlink and a comment

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Fix Bug#90: Handle erros in mptcp_init and mptcp_pm_init

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Merge branch 'mptcp_trunk' into mptcp_ipext
Merge branch 'mptcp_ipext' into mptcp_sockopt

Conflicts:
	include/net/mptcp_v4.h
	include/net/mptcp_v6.h
	net/mptcp/mptcp_ipv4.c
	net/mptcp/mptcp_ipv6.c

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>