]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_sip: Handle IPv4 mapped IPv6 clients when NAT is enabled
authorMatthew Jordan <mjordan@digium.com>
Wed, 8 Apr 2015 11:53:16 +0000 (11:53 +0000)
committerMatthew Jordan <mjordan@digium.com>
Wed, 8 Apr 2015 11:53:16 +0000 (11:53 +0000)
When udpbindaddr is set to the IPv6 bind all address of '::', Asterisk will
attempt to handle both IPv4 and IPv6 addresses, although the information will
be stored in a struct with an AF_INET6 address type. However, the current
NAT handling code won't handle the IPv4 mapped IPv6 addresses correctly.
This patch adds an additional check for the mapped address case, allowing
the NAT code to handle clients even when the address is IPv6.

Review: https://reviewboard.asterisk.org/r/4563/

ASTERISK-18032 #close
Reported by: Christoph Timm
patches:
  nat_with_ipv6.diff submitted by Valentin Vidić (License 6697)
........

Merged revisions 434288 from http://svn.asterisk.org/svn/asterisk/branches/11

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434289 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index b891eef7c1070e8e6b42bd98c27df49edc568882..fa577b887cb4060a548b80d23ab8631f049a8846 100644 (file)
@@ -3773,7 +3773,7 @@ static void ast_sip_ouraddrfor(const struct ast_sockaddr *them, struct ast_socka
        ast_ouraddrfor(them, us);
        ast_sockaddr_copy(&theirs, them);
 
-       if (ast_sockaddr_is_ipv6(&theirs)) {
+       if (ast_sockaddr_is_ipv6(&theirs) && !ast_sockaddr_is_ipv4_mapped(&theirs)) {
                if (localaddr && !ast_sockaddr_isnull(&externaddr) && !ast_sockaddr_is_any(&bindaddr)) {
                        ast_log(LOG_WARNING, "Address remapping activated in sip.conf "
                                "but we're using IPv6, which doesn't need it. Please "