gtp-link: set IPv6 socket only

GTP driver bails out for IPv4-mapped-IPv6 socket with EADDRNOAVAIL,
to prevent issues with setsockopt IPV6_ADDRFORM.

GTP control plane checks that tunnel family matches the socket family
for this GTP device, ie. there is a 1:1 mapping between the socket
listener and the device which determines the supported IP tunnel header.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Change-Id: I887a107657059adeb14ae425576ae7ea9018f762
diff --git a/tools/gtp-link.c b/tools/gtp-link.c
index feb2efe..6979459 100644
--- a/tools/gtp-link.c
+++ b/tools/gtp-link.c
@@ -95,6 +95,10 @@
 		gtp_sock->len = sizeof(struct sockaddr_in6);
 		setup_sockaddr_in6(&gtp_sock->sockaddr.fd1.in6, 3386);
 		setup_sockaddr_in6(&gtp_sock->sockaddr.fd2.in6, 2152);
+		if (setsockopt(fd1, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one)) < 0)
+			perror("setsockopt IPV6_V6ONLY: ");
+		if (setsockopt(fd2, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one)) < 0)
+			perror("setsockopt IPV6_V6ONLY: ");
 		break;
 	}