From 9911f6bfeb5076ed5f84bde7cc9d01e966db6050 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Wed, 31 Jan 2024 18:17:51 +0100 Subject: 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 Change-Id: I887a107657059adeb14ae425576ae7ea9018f762 --- tools/gtp-link.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'tools/gtp-link.c') diff --git a/tools/gtp-link.c b/tools/gtp-link.c index feb2efe..325a45f 100644 --- a/tools/gtp-link.c +++ b/tools/gtp-link.c @@ -75,6 +75,7 @@ static int setup_socket(struct gtp_server_sock *gtp_sock, int family) { int fd1 = socket(family, SOCK_DGRAM, 0); int fd2 = socket(family, SOCK_DGRAM, 0); + int one = 1; if (fd1 < 0 || fd2 < 0) return -1; @@ -95,6 +96,10 @@ static int setup_socket(struct gtp_server_sock *gtp_sock, int family) gtp_sock->len = sizeof(struct sockaddr_in6); setup_sockaddr_in6(>p_sock->sockaddr.fd1.in6, 3386); setup_sockaddr_in6(>p_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; } -- cgit v1.2.3