From 2ca1c5555c85bd3950448ac727da7f4bd4a9701b Mon Sep 17 00:00:00 2001 From: Benau Date: Mon, 20 Jan 2020 16:49:27 +0800 Subject: [PATCH] Allow connect to IPv4 only server with NAT64 for all platforms --- CMakeLists.txt | 7 +- sources.cmake | 2 +- src/network/ios_ipv6.cpp | 282 -------------------- src/network/ios_ipv6.hpp | 26 -- src/network/protocols/connect_to_server.cpp | 9 +- src/network/route.h | 249 ----------------- src/network/stk_ipv6.cpp | 14 +- 7 files changed, 15 insertions(+), 574 deletions(-) delete mode 100644 src/network/ios_ipv6.cpp delete mode 100644 src/network/ios_ipv6.hpp delete mode 100644 src/network/route.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d7500b3f1..3fc7361df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,6 @@ if (IOS) ADD_DEFINITIONS(-DIOS_STK) set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") option(USE_GLES2 "Use OpenGL ES2 renderer" ON) - find_library(RESOLV_LIBRARY NAMES resolv libresolv) endif() if((UNIX AND NOT APPLE) AND NOT SERVER_ONLY) @@ -608,11 +607,7 @@ if(NOT SERVER_ONLY) if(NOT USE_GLES2) target_link_libraries(supertuxkart ${OPENGL_gl_LIBRARY} ${GLEW_LIBRARIES}) elseif (IOS) - target_link_libraries(supertuxkart "-framework OpenGLES - -framework UIKit - -framework CoreMotion - -framework Foundation - -framework GLKit ${RESOLV_LIBRARY}") + target_link_libraries(supertuxkart "-framework OpenGLES -framework UIKit -framework CoreMotion -framework Foundation -framework GLKit") else() target_link_libraries(supertuxkart GLESv2) endif() diff --git a/sources.cmake b/sources.cmake index d4f28ae4d..ba4868d71 100644 --- a/sources.cmake +++ b/sources.cmake @@ -1,5 +1,5 @@ # Modify this file to change the last-modified date when you add/remove a file. -# This will then trigger a new cmake run automatically. +# This will then trigger a new cmake run automatically. file(GLOB_RECURSE STK_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.hpp") file(GLOB_RECURSE STK_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.cpp") file(GLOB_RECURSE STK_SHADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "data/shaders/*") diff --git a/src/network/ios_ipv6.cpp b/src/network/ios_ipv6.cpp deleted file mode 100644 index 0d33effc5..000000000 --- a/src/network/ios_ipv6.cpp +++ /dev/null @@ -1,282 +0,0 @@ -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2019 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -// Minimum code to allow iOS device to connect to IPv4 non-firewalled game server - -#ifdef IOS_STK - -#include "network/ios_ipv6.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include - -#if TARGET_IPHONE_SIMULATOR -#include -#else -#include "route.h" -#endif - -#include -#include -#define RESOLV_CONFIG_PATH ("/etc/resolv.conf") - -#define NAME_SVR ("nameserver") -#define NAME_SVR_LEN (10) - -namespace Mars -{ -// Based on Mars from tencent, licensed under MIT -#define SUCCESS (0) -#define FAILED (-1) -#define ROUNDUP(a) \ -((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) - - enum TLocalIPStack - { - ELocalIPStack_None = 0, - ELocalIPStack_IPv4 = 1, - ELocalIPStack_IPv6 = 2, - ELocalIPStack_Dual = 3, - }; - - typedef union sockaddr_union - { - struct sockaddr generic; - struct sockaddr_in in; - struct sockaddr_in6 in6; - } sockaddr_union; - - int getdefaultgateway(struct in_addr * addr) - { - /* net.route.0.inet.flags.gateway */ - int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET, - NET_RT_FLAGS, RTF_GATEWAY}; - size_t l; - char * buf, * p; - struct rt_msghdr * rt; - struct sockaddr * sa; - struct sockaddr * sa_tab[RTAX_MAX]; - int i; - int r = FAILED; - if (sysctl(mib, sizeof(mib)/sizeof(int), 0, &l, 0, 0) < 0) - { - return FAILED; - } - if (l>0) - { - buf = (char*)malloc(l); - if (sysctl(mib, sizeof(mib)/sizeof(int), buf, &l, 0, 0) < 0) - { - free(buf); - return FAILED; - } - for(p=buf; prtm_msglen) - { - rt = (struct rt_msghdr *)p; - sa = (struct sockaddr *)(rt + 1); - for(i=0; irtm_addrs & (1 << i)) - { - sa_tab[i] = sa; - sa = (struct sockaddr *)((char *)sa + ROUNDUP(sa->sa_len)); - } else - { - sa_tab[i] = NULL; - } - } - if ( ((rt->rtm_addrs & (RTA_DST|RTA_GATEWAY)) == (RTA_DST|RTA_GATEWAY)) - && sa_tab[RTAX_DST]->sa_family == AF_INET) - { - // && sa_tab[RTAX_GATEWAY]->sa_family == AF_INET) { - if (((struct sockaddr_in *)sa_tab[RTAX_DST])->sin_addr.s_addr == 0) - { - *addr = ((struct sockaddr_in *)(sa_tab[RTAX_GATEWAY]))->sin_addr; - r = SUCCESS; - break; - } - } - } - free(buf); - } - return r; - } - - int getdefaultgateway6(struct in6_addr * addr) - { - /* net.route.0.inet6.flags.gateway */ - int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET6, - NET_RT_FLAGS, RTF_GATEWAY}; - size_t l; - char * buf, * p; - struct rt_msghdr * rt; - struct sockaddr * sa; - struct sockaddr * sa_tab[RTAX_MAX]; - int i; - int r = FAILED; - if (sysctl(mib, sizeof(mib)/sizeof(int), 0, &l, 0, 0) < 0) - { - return FAILED; - } - if (l>0) - { - buf = (char*)malloc(l); - if (sysctl(mib, sizeof(mib)/sizeof(int), buf, &l, 0, 0) < 0) - { - free(buf); - return FAILED; - } - for(p=buf; prtm_msglen) - { - rt = (struct rt_msghdr *)p; - sa = (struct sockaddr *)(rt + 1); - for(i=0; irtm_addrs & (1 << i)) - { - sa_tab[i] = sa; - sa = (struct sockaddr *)((char *)sa + ROUNDUP(sa->sa_len)); - } else - { - sa_tab[i] = NULL; - } - } - if ( ((rt->rtm_addrs & (RTA_DST|RTA_GATEWAY)) == (RTA_DST|RTA_GATEWAY)) - && sa_tab[RTAX_DST]->sa_family == AF_INET6) - { - // && sa_tab[RTAX_GATEWAY]->sa_family == AF_INET6) { - if (IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *)sa_tab[RTAX_DST])->sin6_addr)) - { - *addr = ((struct sockaddr_in6 *)(sa_tab[RTAX_GATEWAY]))->sin6_addr; - r = SUCCESS; - break; - } - } - } - free(buf); - } - return r; - } - - static int _test_connect(int pf, struct sockaddr *addr, size_t addrlen) - { - int s = socket(pf, SOCK_DGRAM, IPPROTO_UDP); - if (s < 0) - return 0; - int ret; - do - { - ret = connect(s, addr, addrlen); - } - while (ret < 0 && errno == EINTR); - int success = (ret == 0); - do - { - ret = close(s); - } - while (ret < 0 && errno == EINTR); - return success; - } - - static int _have_ipv6() - { - static const struct sockaddr_in6 sin6_test = - { - .sin6_len = sizeof(sockaddr_in6), - .sin6_family = AF_INET6, - .sin6_port = htons(0xFFFF), - .sin6_addr.s6_addr = { - 0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - }; - sockaddr_union addr = { .in6 = sin6_test }; - return _test_connect(PF_INET6, &addr.generic, sizeof(addr.in6)); - } - - static int _have_ipv4() - { - static const struct sockaddr_in sin_test = - { - .sin_len = sizeof(sockaddr_in), - .sin_family = AF_INET, - .sin_port = htons(0xFFFF), - .sin_addr.s_addr = htonl(0x08080808L), // 8.8.8.8 - }; - sockaddr_union addr = { .in = sin_test }; - return _test_connect(PF_INET, &addr.generic, sizeof(addr.in)); - } - - TLocalIPStack local_ipstack_detect() - { - in6_addr addr6_gateway = {0}; - if (0 != getdefaultgateway6(&addr6_gateway)){ return ELocalIPStack_IPv4;} - if (IN6_IS_ADDR_UNSPECIFIED(&addr6_gateway)) { return ELocalIPStack_IPv4;} - - in_addr addr_gateway = {0}; - if (0 != getdefaultgateway(&addr_gateway)) { return ELocalIPStack_IPv6;} - if (INADDR_NONE == addr_gateway.s_addr || INADDR_ANY == addr_gateway.s_addr ) { return ELocalIPStack_IPv6;} - - int have_ipv4 = _have_ipv4(); - int have_ipv6 = _have_ipv6(); - int local_stack = 0; - if (have_ipv4) { local_stack |= ELocalIPStack_IPv4; } - if (have_ipv6) { local_stack |= ELocalIPStack_IPv6; } - if (ELocalIPStack_Dual != local_stack) { return (TLocalIPStack)local_stack; } - - int dns_ip_stack = 0; - struct __res_state stat = {0}; - res_ninit(&stat); - union res_sockaddr_union addrs[MAXNS] = {0}; - int count = res_getservers(const_cast(&stat), addrs, MAXNS); - for (int i = 0; i < count; ++i) - { - if (AF_INET == addrs[i].sin.sin_family) - { - dns_ip_stack |= ELocalIPStack_IPv4; - } - else if (AF_INET6 == addrs[i].sin.sin_family) - { - dns_ip_stack |= ELocalIPStack_IPv6; - } - } - res_ndestroy(&stat); - - return (TLocalIPStack)(ELocalIPStack_None == dns_ip_stack ? - local_stack : dns_ip_stack); - } -} - -// ============================================================================ -/** Return 1 if this iOS device has only IPv6 address, in this case we always - * create inet6 socket in enet and try to use the NAT64 (provided by iOS) - * to connect to IPv4 server. */ -int isIPV6Only() -{ - using namespace Mars; - int ipstack = local_ipstack_detect(); - if (ipstack == ELocalIPStack_IPv6) - return 1; - else - return 0; -} // isIPV6Only - -#endif diff --git a/src/network/ios_ipv6.hpp b/src/network/ios_ipv6.hpp deleted file mode 100644 index 562f109fd..000000000 --- a/src/network/ios_ipv6.hpp +++ /dev/null @@ -1,26 +0,0 @@ -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2019 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - -#ifdef __cplusplus -extern "C" { -#endif -int isIPV6Only(); -#ifdef __cplusplus -} -#endif - diff --git a/src/network/protocols/connect_to_server.cpp b/src/network/protocols/connect_to_server.cpp index b1860065d..0406ecc36 100644 --- a/src/network/protocols/connect_to_server.cpp +++ b/src/network/protocols/connect_to_server.cpp @@ -391,15 +391,14 @@ bool ConnectToServer::tryConnect(int timeout, int retry, bool another_port, std::string addr_string = m_server->getIPV6Address(); std::string port = StringUtils::toString(m_server->getAddress().getPort()); -#ifdef IOS_STK - // The ability to synthesize IPv6 addresses was added to getaddrinfo - // in iOS 9.2 - if (!m_server->useIPV6Connection()) + // Convert to a NAT64 address from IPv4 + if (!m_server->useIPV6Connection() && + NetworkConfig::get()->getIPType() == NetworkConfig::IP_V6_NAT64) { // From IPv4 addr_string = m_server->getAddress().toString(false/*show_port*/); + addr_string = NetworkConfig::get()->getNAT64Prefix() + addr_string; } -#endif if (getaddrinfo_compat(addr_string.c_str(), port.c_str(), &hints, &res) != 0 || res == NULL) return false; diff --git a/src/network/route.h b/src/network/route.h deleted file mode 100644 index 602c6d5bb..000000000 --- a/src/network/route.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2000-2013 Apple Inc. All rights reserved. - * - * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ - * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. The rights granted to you under the License - * may not be used to create, or enable the creation or redistribution of, - * unlawful or unlicensed copies of an Apple operating system, or to - * circumvent, violate, or enable the circumvention or violation of, any - * terms of an Apple operating system software license agreement. - * - * Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. - * - * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ - */ -/* - * Copyright (c) 1980, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)route.h 8.3 (Berkeley) 4/19/94 - * $FreeBSD: src/sys/net/route.h,v 1.36.2.1 2000/08/16 06:14:23 jayanth Exp $ - */ - -#ifndef _NET_ROUTE_H_ -#define _NET_ROUTE_H_ -#include -#include -#include -#include - -/* - * These numbers are used by reliable protocols for determining - * retransmission behavior and are included in the routing structure. - */ -struct rt_metrics { - u_int32_t rmx_locks; /* Kernel leaves these values alone */ - u_int32_t rmx_mtu; /* MTU for this path */ - u_int32_t rmx_hopcount; /* max hops expected */ - int32_t rmx_expire; /* lifetime for route, e.g. redirect */ - u_int32_t rmx_recvpipe; /* inbound delay-bandwidth product */ - u_int32_t rmx_sendpipe; /* outbound delay-bandwidth product */ - u_int32_t rmx_ssthresh; /* outbound gateway buffer limit */ - u_int32_t rmx_rtt; /* estimated round trip time */ - u_int32_t rmx_rttvar; /* estimated rtt variance */ - u_int32_t rmx_pksent; /* packets sent using this route */ - u_int32_t rmx_filler[4]; /* will be used for T/TCP later */ -}; - -/* - * rmx_rtt and rmx_rttvar are stored as microseconds; - */ -#define RTM_RTTUNIT 1000000 /* units for rtt, rttvar, as units per sec */ - - - -#define RTF_UP 0x1 /* route usable */ -#define RTF_GATEWAY 0x2 /* destination is a gateway */ -#define RTF_HOST 0x4 /* host entry (net otherwise) */ -#define RTF_REJECT 0x8 /* host or net unreachable */ -#define RTF_DYNAMIC 0x10 /* created dynamically (by redirect) */ -#define RTF_MODIFIED 0x20 /* modified dynamically (by redirect) */ -#define RTF_DONE 0x40 /* message confirmed */ -#define RTF_DELCLONE 0x80 /* delete cloned route */ -#define RTF_CLONING 0x100 /* generate new routes on use */ -#define RTF_XRESOLVE 0x200 /* external daemon resolves name */ -#define RTF_LLINFO 0x400 /* generated by link layer (e.g. ARP) */ -#define RTF_STATIC 0x800 /* manually added */ -#define RTF_BLACKHOLE 0x1000 /* just discard pkts (during updates) */ -#define RTF_NOIFREF 0x2000 /* not eligible for RTF_IFREF */ -#define RTF_PROTO2 0x4000 /* protocol specific routing flag */ -#define RTF_PROTO1 0x8000 /* protocol specific routing flag */ - -#define RTF_PRCLONING 0x10000 /* protocol requires cloning */ -#define RTF_WASCLONED 0x20000 /* route generated through cloning */ -#define RTF_PROTO3 0x40000 /* protocol specific routing flag */ -/* 0x80000 unused */ -#define RTF_PINNED 0x100000 /* future use */ -#define RTF_LOCAL 0x200000 /* route represents a local address */ -#define RTF_BROADCAST 0x400000 /* route represents a bcast address */ -#define RTF_MULTICAST 0x800000 /* route represents a mcast address */ -#define RTF_IFSCOPE 0x1000000 /* has valid interface scope */ -#define RTF_CONDEMNED 0x2000000 /* defunct; no longer modifiable */ -#define RTF_IFREF 0x4000000 /* route holds a ref to interface */ -#define RTF_PROXY 0x8000000 /* proxying, no interface scope */ -#define RTF_ROUTER 0x10000000 /* host is a router */ -/* 0x20000000 and up unassigned */ - -#define RTF_BITS \ - "\020\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE" \ - "\10DELCLONE\11CLONING\12XRESOLVE\13LLINFO\14STATIC\15BLACKHOLE" \ - "\16NOIFREF\17PROTO2\20PROTO1\21PRCLONING\22WASCLONED\23PROTO3" \ - "\25PINNED\26LOCAL\27BROADCAST\30MULTICAST\31IFSCOPE\32CONDEMNED" \ - "\33IFREF\34PROXY\35ROUTER" - -/* - * Routing statistics. - */ -struct rtstat { - short rts_badredirect; /* bogus redirect calls */ - short rts_dynamic; /* routes created by redirects */ - short rts_newgateway; /* routes modified by redirects */ - short rts_unreach; /* lookups which failed */ - short rts_wildcard; /* lookups satisfied by a wildcard */ -}; - -/* - * Structures for routing messages. - */ -struct rt_msghdr { - u_short rtm_msglen; /* to skip over non-understood messages */ - u_char rtm_version; /* future binary compatibility */ - u_char rtm_type; /* message type */ - u_short rtm_index; /* index for associated ifp */ - int rtm_flags; /* flags, incl. kern & message, e.g. DONE */ - int rtm_addrs; /* bitmask identifying sockaddrs in msg */ - pid_t rtm_pid; /* identify sender */ - int rtm_seq; /* for sender to identify action */ - int rtm_errno; /* why failed */ - int rtm_use; /* from rtentry */ - u_int32_t rtm_inits; /* which metrics we are initializing */ - struct rt_metrics rtm_rmx; /* metrics themselves */ -}; - -struct rt_msghdr2 { - u_short rtm_msglen; /* to skip over non-understood messages */ - u_char rtm_version; /* future binary compatibility */ - u_char rtm_type; /* message type */ - u_short rtm_index; /* index for associated ifp */ - int rtm_flags; /* flags, incl. kern & message, e.g. DONE */ - int rtm_addrs; /* bitmask identifying sockaddrs in msg */ - int32_t rtm_refcnt; /* reference count */ - int rtm_parentflags; /* flags of the parent route */ - int rtm_reserved; /* reserved field set to 0 */ - int rtm_use; /* from rtentry */ - u_int32_t rtm_inits; /* which metrics we are initializing */ - struct rt_metrics rtm_rmx; /* metrics themselves */ -}; - - -#define RTM_VERSION 5 /* Up the ante and ignore older versions */ - -/* - * Message types. - */ -#define RTM_ADD 0x1 /* Add Route */ -#define RTM_DELETE 0x2 /* Delete Route */ -#define RTM_CHANGE 0x3 /* Change Metrics or flags */ -#define RTM_GET 0x4 /* Report Metrics */ -#define RTM_LOSING 0x5 /* Kernel Suspects Partitioning */ -#define RTM_REDIRECT 0x6 /* Told to use different route */ -#define RTM_MISS 0x7 /* Lookup failed on this address */ -#define RTM_LOCK 0x8 /* fix specified metrics */ -#define RTM_OLDADD 0x9 /* caused by SIOCADDRT */ -#define RTM_OLDDEL 0xa /* caused by SIOCDELRT */ -#define RTM_RESOLVE 0xb /* req to resolve dst to LL addr */ -#define RTM_NEWADDR 0xc /* address being added to iface */ -#define RTM_DELADDR 0xd /* address being removed from iface */ -#define RTM_IFINFO 0xe /* iface going up/down etc. */ -#define RTM_NEWMADDR 0xf /* mcast group membership being added to if */ -#define RTM_DELMADDR 0x10 /* mcast group membership being deleted */ -#define RTM_IFINFO2 0x12 /* */ -#define RTM_NEWMADDR2 0x13 /* */ -#define RTM_GET2 0x14 /* */ - -/* - * Bitmask values for rtm_inits and rmx_locks. - */ -#define RTV_MTU 0x1 /* init or lock _mtu */ -#define RTV_HOPCOUNT 0x2 /* init or lock _hopcount */ -#define RTV_EXPIRE 0x4 /* init or lock _expire */ -#define RTV_RPIPE 0x8 /* init or lock _recvpipe */ -#define RTV_SPIPE 0x10 /* init or lock _sendpipe */ -#define RTV_SSTHRESH 0x20 /* init or lock _ssthresh */ -#define RTV_RTT 0x40 /* init or lock _rtt */ -#define RTV_RTTVAR 0x80 /* init or lock _rttvar */ - -/* - * Bitmask values for rtm_addrs. - */ -#define RTA_DST 0x1 /* destination sockaddr present */ -#define RTA_GATEWAY 0x2 /* gateway sockaddr present */ -#define RTA_NETMASK 0x4 /* netmask sockaddr present */ -#define RTA_GENMASK 0x8 /* cloning mask sockaddr present */ -#define RTA_IFP 0x10 /* interface name sockaddr present */ -#define RTA_IFA 0x20 /* interface addr sockaddr present */ -#define RTA_AUTHOR 0x40 /* sockaddr for author of redirect */ -#define RTA_BRD 0x80 /* for NEWADDR, broadcast or p-p dest addr */ - -/* - * Index offsets for sockaddr array for alternate internal encoding. - */ -#define RTAX_DST 0 /* destination sockaddr present */ -#define RTAX_GATEWAY 1 /* gateway sockaddr present */ -#define RTAX_NETMASK 2 /* netmask sockaddr present */ -#define RTAX_GENMASK 3 /* cloning mask sockaddr present */ -#define RTAX_IFP 4 /* interface name sockaddr present */ -#define RTAX_IFA 5 /* interface addr sockaddr present */ -#define RTAX_AUTHOR 6 /* sockaddr for author of redirect */ -#define RTAX_BRD 7 /* for NEWADDR, broadcast or p-p dest addr */ -#define RTAX_MAX 8 /* size of array to allocate */ - -struct rt_addrinfo { - int rti_addrs; - struct sockaddr* rti_info[RTAX_MAX]; -}; - - -#endif /* _NET_ROUTE_H_ */ - diff --git a/src/network/stk_ipv6.cpp b/src/network/stk_ipv6.cpp index 4768631d2..59e6214d0 100644 --- a/src/network/stk_ipv6.cpp +++ b/src/network/stk_ipv6.cpp @@ -226,7 +226,7 @@ void addMappedAddress(const ENetAddress* ea, const struct sockaddr_in6* in6) #else #include "network/stk_ipv6.hpp" -#include "network/ios_ipv6.hpp" +#include "network/network_config.hpp" #include "network/transport_address.hpp" #include "utils/string_utils.hpp" #include "utils/log.hpp" @@ -271,10 +271,14 @@ void stkInitialize() g_mapped_ipv6_used = 0; g_ipv6 = 0; g_mapped_ips.clear(); -#ifdef IOS_STK - if (isIPV6Only()) - g_ipv6 = 1; -#endif + + // For now only auto enable ipv6 socket in client with nat64, so in + // connect to server it will change the ipv4 address to nat64 one + if (NetworkConfig::get()->isClient()) + { + if (NetworkConfig::get()->getIPType() == NetworkConfig::IP_V6_NAT64) + g_ipv6 = 1; + } } // stkInitialize // ----------------------------------------------------------------------------