Module: sip-router Branch: master Commit: 084be456bc0fab015cf9964ac85651fa60ea77c9 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=084be456...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: Wed Mar 27 20:53:00 2013 +0100
core: set TOS for IPv6 UDP sockets
- reported by Klaus Feichtinger, FS#179
---
udp_server.c | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/udp_server.c b/udp_server.c index 3889a65..d4efe13 100644 --- a/udp_server.c +++ b/udp_server.c @@ -321,11 +321,24 @@ int udp_init(struct socket_info* sock_info) } /* tos */ optval = tos; - if (setsockopt(sock_info->socket, IPPROTO_IP, IP_TOS, (void*)&optval, - sizeof(optval)) ==-1){ - LOG(L_WARN, "WARNING: udp_init: setsockopt tos: %s\n", strerror(errno)); - /* continue since this is not critical */ + if (addr->s.sa_family==AF_INET){ + if (setsockopt(sock_info->socket, IPPROTO_IP, IP_TOS, (void*)&optval, + sizeof(optval)) ==-1){ + LOG(L_WARN, "WARNING: udp_init: setsockopt tos: %s\n", + strerror(errno)); + /* continue since this is not critical */ + } +#ifdef USE_IPV6 + } else if (addr->s.sa_family==AF_INET6){ + if (setsockopt(sock_info->socket, IPPROTO_IPV6, IPV6_TCLASS, + (void*)&optval, sizeof(optval)) ==-1) { + LOG(L_WARN, "WARNING: udp_init: setsockopt v6 tos: %s\n", + strerror(errno)); + /* continue since this is not critical */ + } +#endif } + #if defined (__OS_linux) && defined(UDP_ERRORS) optval=1; /* enable error receiving on unconnected sockets */