mptcp: Handle address-events differently

Up to now, the path-manager created an event that was put in the
event-queue. This event however already held the address-id taken from
mptcp_local. So, if we have a quick succession of address
add/del-commands (as it may happen for PPP) of the same address, we
might loose events because the address-id's don't match.

This patch modifys the path-manager so that it really only creates the
event and adds it to the event-queue without an id. The address-worker
then handles the real address-id and all the other stuff.

Path-manager is still not 100% correct. If the socket is locked we might
miss address-removal events and not send the remove_address. We probably
will need to add an atomic bit-field to handle this.

Reported-by: Vinothkumar Vivekanandan <vvinoth@watchy.in>
Tested-by: Vinothkumar Vivekanandan <vvinoth@watchy.in>
Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Fix: ipv6_pinfo alignement issue when creating the master_sk

There is a bug in inet6_create when the pinet6 pointer is initialized.
Due to alignement problem the pointer does not correspond to
offsetof(struct tcp6_sock, inet6). Indeed, the pointer is computed
as sizeof(struct tcp6_sock) - sizeof(struct ipv6_pinfo) which can cause
problem when padding is added.

Here is the output of pahole on an object compiled for the ARMv7
architecture that shows that the compiler added 4 bytes of padding:
struct tcp6_sock {
	struct tcp_sock            tcp;                  /*     0  1296 */
	/* --- cacheline 20 boundary (1280 bytes) was 16 bytes ago --- */
	struct ipv6_pinfo          inet6;                /*  1296   140 */
	/* --- cacheline 22 boundary (1408 bytes) was 28 bytes ago --- */

	/* size: 1440, cachelines: 23, members: 2 */
	/* padding: 4 */
	/* last cacheline: 32 bytes */
};

Even if the structure of inet6 is copied after mptcp_inherit_sk, there is a
allignment missmatch due to the incorrect pointer set in inet6_create (in
the meta_sk). The solution chosen is to copy the content of inet6 from the
meta_sk to the one of the master_sk similarly to what is done in the regular
TCP/IPv6 stack.

Signed-off-by: Gregory Detal <gregory.detal@uclouvain.be>
Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Merge remote-tracking branch 'upstream/mptcp_v0.88' into mptcp_v0.88_binder_v6