Fix: Send fourth ack after updating the windows

We have to make sure that the window and everything has been updated,
prior to sending the fourth ack. Thus, we move the call to tcp_send_ack
a little bit lower.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Fix: Store the original values of snd/rcv-buffers and use them

If we don't do this, the server-side new subflows have a bloated up
snd/rcv-buffer (as it's a clone from the meta). This will then end up in
strange values for rcv_wnd of the new subflow, and incorrect setting of
the subflow-level rcv_ssthresh. As the autotuning during slow-start is
handled by rcv_ssthresh, this incorrect setting prevents correct
autotuning.

This patch makes a first step, by storing the original values of
snd/rcv-buffer in the mpcb.
New subflows on the server-side will thus get correct buffer-sizes. This
will allow in a follow-up patch to correctly increase the
snd/rcv-buffers (and meta-level rcv_ssthresh) upon establishment of
new subflows and thus allow a proper autotuning during slowstart.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Increase rcv_ssthresh when adding a new subflow

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Fix: Correctly close subflows

A subflow is being closed only through a call to tcp_close, thus setting
tp->closing to 1. It may happen, that a subflow is not being closed,
while the meta-socket is dying. E.g., upon mptcp_sub_close, the meta had
not yet sk_shutdown et to SHUTDOWN_MASK. Thus, only a subflow-fin will
be sent and the sk_state of the subflow changed.

We must make sure that *all* subflows get closed properly when the meta
is dying. This is achieved through checking the tp-closing flag in
mptcp_destroy_sock.

Further, this patch correctly sets sk_shutdown when we only send a
subflow-fin on a subflow. Finally, we call more agressively
mptcp_sub_force_close(), as this will make sure that the subflows really
disappear.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Fix: Allow timing out upon MP_FAST_CLOSE

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