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
This commit is contained in:
parent
38b5e239d6
commit
9911f6bfeb
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue