Stop using SOL_TCP, SOL_IP and SOL_IPV6.
Instead, use IPPROTO_TCP, _IP and _IPv6. This fixes an issue on OS X where it didn't create an UDP socket that listened on IPv4.
This commit is contained in:
		
							parent
							
								
									a0a8f8f81f
								
							
						
					
					
						commit
						a31e1f03c4
					
				
					 3 changed files with 15 additions and 20 deletions
				
			
		|  | @ -719,10 +719,10 @@ static void send_udppacket(node_t *n, vpn_packet_t *origpkt) { | |||
| 	if(priorityinheritance && origpriority != listen_socket[sock].priority) { | ||||
| 		listen_socket[sock].priority = origpriority; | ||||
| 		switch(sa->sa.sa_family) { | ||||
| #if defined(SOL_IP) && defined(IP_TOS) | ||||
| #if defined(IPPROTO_IP) && defined(IP_TOS) | ||||
| 		case AF_INET: | ||||
| 			logger(DEBUG_TRAFFIC, LOG_DEBUG, "Setting IPv4 outgoing packet priority to %d", origpriority); | ||||
| 			if(setsockopt(listen_socket[sock].udp.fd, SOL_IP, IP_TOS, &origpriority, sizeof origpriority)) /* SO_PRIORITY doesn't seem to work */ | ||||
| 			if(setsockopt(listen_socket[sock].udp.fd, IPPROTO_IP, IP_TOS, &origpriority, sizeof origpriority)) /* SO_PRIORITY doesn't seem to work */ | ||||
| 				logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "setsockopt", sockstrerror(sockerrno)); | ||||
| 			break; | ||||
| #endif | ||||
|  |  | |||
|  | @ -591,7 +591,7 @@ bool setup_myself_reloadable(void) { | |||
| 		subnet_add(NULL, s); | ||||
| 	} | ||||
| 
 | ||||
| #if !defined(SOL_IP) || !defined(IP_TOS) | ||||
| #if !defined(IPPROTO_IP) || !defined(IP_TOS) | ||||
| 	if(priorityinheritance) | ||||
| 		logger(DEBUG_ALWAYS, LOG_WARNING, "%s not supported on this platform for IPv4 connections", "PriorityInheritance"); | ||||
| #endif | ||||
|  |  | |||
|  | @ -35,11 +35,6 @@ | |||
| #include "utils.h" | ||||
| #include "xalloc.h" | ||||
| 
 | ||||
| /* Needed on Mac OS/X */ | ||||
| #ifndef SOL_TCP | ||||
| #define SOL_TCP IPPROTO_TCP | ||||
| #endif | ||||
| 
 | ||||
| int addressfamily = AF_UNSPEC; | ||||
| int maxtimeout = 900; | ||||
| int seconds_till_retry = 5; | ||||
|  | @ -73,14 +68,14 @@ static void configure_tcp(connection_t *c) { | |||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| #if defined(SOL_TCP) && defined(TCP_NODELAY) | ||||
| #if defined(IPPROTO_TCP) && defined(TCP_NODELAY) | ||||
| 	option = 1; | ||||
| 	setsockopt(c->socket, SOL_TCP, TCP_NODELAY, (void *)&option, sizeof option); | ||||
| 	setsockopt(c->socket, IPPROTO_TCP, TCP_NODELAY, (void *)&option, sizeof option); | ||||
| #endif | ||||
| 
 | ||||
| #if defined(SOL_IP) && defined(IP_TOS) && defined(IPTOS_LOWDELAY) | ||||
| #if defined(IPPROTO_IP) && defined(IP_TOS) && defined(IPTOS_LOWDELAY) | ||||
| 	option = IPTOS_LOWDELAY; | ||||
| 	setsockopt(c->socket, SOL_IP, IP_TOS, (void *)&option, sizeof option); | ||||
| 	setsockopt(c->socket, IPPROTO_IP, IP_TOS, (void *)&option, sizeof option); | ||||
| #endif | ||||
| 
 | ||||
| #if defined(IPPROTO_IPV6) && defined(IPV6_TCLASS) && defined(IPTOS_LOWDELAY) | ||||
|  | @ -168,9 +163,9 @@ int setup_listen_socket(const sockaddr_t *sa) { | |||
| 	option = 1; | ||||
| 	setsockopt(nfd, SOL_SOCKET, SO_REUSEADDR, (void *)&option, sizeof option); | ||||
| 
 | ||||
| #if defined(SOL_IPV6) && defined(IPV6_V6ONLY) | ||||
| #if defined(IPPROTO_IPV6) && defined(IPV6_V6ONLY) | ||||
| 	if(sa->sa.sa_family == AF_INET6) | ||||
| 		setsockopt(nfd, SOL_IPV6, IPV6_V6ONLY, (void *)&option, sizeof option); | ||||
| 		setsockopt(nfd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&option, sizeof option); | ||||
| #endif | ||||
| 
 | ||||
| 	if(get_config_string | ||||
|  | @ -266,10 +261,10 @@ int setup_vpn_in_socket(const sockaddr_t *sa) { | |||
| #define IP_DONTFRAGMENT IP_DONTFRAG | ||||
| #endif | ||||
| 
 | ||||
| #if defined(SOL_IP) && defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DO) | ||||
| #if defined(IPPROTO_IP) && defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DO) | ||||
| 	if(myself->options & OPTION_PMTU_DISCOVERY) { | ||||
| 		option = IP_PMTUDISC_DO; | ||||
| 		setsockopt(nfd, SOL_IP, IP_MTU_DISCOVER, (void *)&option, sizeof(option)); | ||||
| 		setsockopt(nfd, IPPROTO_IP, IP_MTU_DISCOVER, (void *)&option, sizeof(option)); | ||||
| 	} | ||||
| #elif defined(IPPROTO_IP) && defined(IP_DONTFRAGMENT) | ||||
| 	if(myself->options & OPTION_PMTU_DISCOVERY) { | ||||
|  | @ -278,10 +273,10 @@ int setup_vpn_in_socket(const sockaddr_t *sa) { | |||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| #if defined(SOL_IPV6) && defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO) | ||||
| #if defined(IPPROTO_IPV6) && defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO) | ||||
| 	if(myself->options & OPTION_PMTU_DISCOVERY) { | ||||
| 		option = IPV6_PMTUDISC_DO; | ||||
| 		setsockopt(nfd, SOL_IPV6, IPV6_MTU_DISCOVER, (void *)&option, sizeof(option)); | ||||
| 		setsockopt(nfd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, (void *)&option, sizeof(option)); | ||||
| 	} | ||||
| #elif defined(IPPROTO_IPV6) && defined(IPV6_DONTFRAG) | ||||
| 	if(myself->options & OPTION_PMTU_DISCOVERY) { | ||||
|  | @ -522,10 +517,10 @@ begin: | |||
| #endif | ||||
| 
 | ||||
| 	if(proxytype != PROXY_EXEC) { | ||||
| #if defined(SOL_IPV6) && defined(IPV6_V6ONLY) | ||||
| #if defined(IPPROTO_IPV6) && defined(IPV6_V6ONLY) | ||||
| 		int option = 1; | ||||
| 		if(c->address.sa.sa_family == AF_INET6) | ||||
| 			setsockopt(c->socket, SOL_IPV6, IPV6_V6ONLY, (void *)&option, sizeof option); | ||||
| 			setsockopt(c->socket, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&option, sizeof option); | ||||
| #endif | ||||
| 
 | ||||
| 		bind_to_interface(c->socket); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue