Selaa lähdekoodia

core: setting the equivalent of IP_TOS socket option for IPv6

- reported in GH #598
Daniel-Constantin Mierla 9 vuotta sitten
vanhempi
commit
ff63e5c795
1 muutettua tiedostoa jossa 13 lisäystä ja 5 poistoa
  1. 13 5
      tcp_main.c

+ 13 - 5
tcp_main.c

@@ -2707,7 +2707,7 @@ int tcp_init(struct socket_info* sock_info)
 		}
 		}
 	}
 	}
 #endif
 #endif
-	
+
 	addr=&sock_info->su;
 	addr=&sock_info->su;
 	/* sock_info->proto=PROTO_TCP; */
 	/* sock_info->proto=PROTO_TCP; */
 	if (init_su(addr, &sock_info->address, sock_info->port_no)<0){
 	if (init_su(addr, &sock_info->address, sock_info->port_no)<0){
@@ -2749,10 +2749,18 @@ int tcp_init(struct socket_info* sock_info)
 #endif
 #endif
 	/* tos */
 	/* tos */
 	optval = tos;
 	optval = tos;
-	if (setsockopt(sock_info->socket, IPPROTO_IP, IP_TOS, (void*)&optval, 
-				sizeof(optval)) ==-1){
-		LM_WARN("setsockopt tos: %s (%d)\n", strerror(errno), tos);
-		/* continue since this is not critical */
+	if(sock_info->address.af==AF_INET){
+		if (setsockopt(sock_info->socket, IPPROTO_IP, IP_TOS, (void*)&optval,
+					sizeof(optval)) ==-1){
+			LM_WARN("setsockopt tos: %s (%d)\n", strerror(errno), tos);
+			/* continue since this is not critical */
+		}
+	} else if(sock_info->address.af==AF_INET6){
+		if (setsockopt(sock_info->socket, IPPROTO_IPV6, IPV6_TCLASS,
+					(void*)&optval, sizeof(optval)) ==-1) {
+			LM_WARN("setsockopt v6 tos: %s (%d)\n", strerror(errno), tos);
+			/* continue since this is not critical */
+		}
 	}
 	}
 #ifdef HAVE_TCP_DEFER_ACCEPT
 #ifdef HAVE_TCP_DEFER_ACCEPT
 	/* linux only */
 	/* linux only */