Module: kamailio
Branch: master
Commit: cd6d509d4030143364a50971870d02ffdc83c175
URL: 
https://github.com/kamailio/kamailio/commit/cd6d509d4030143364a50971870d02ffdc83c175

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date: 2019-04-24T11:33:53+02:00

core: compare parsed ipv6 addresses in ipv6_get_netif_scope()

---

Modified: src/core/socket_info.c
Modified: src/core/socket_info.h

---

Diff:  
https://github.com/kamailio/kamailio/commit/cd6d509d4030143364a50971870d02ffdc83c175.diff
Patch: 
https://github.com/kamailio/kamailio/commit/cd6d509d4030143364a50971870d02ffdc83c175.patch

---

diff --git a/src/core/socket_info.c b/src/core/socket_info.c
index c77e4b8227..4ed7b56487 100644
--- a/src/core/socket_info.c
+++ b/src/core/socket_info.c
@@ -105,7 +105,7 @@
  * return the scope for IPv6 interface matching the ipval parameter
  * - needed for binding to link local IPv6 addresses
  */
-unsigned int ipv6_get_netif_scope(const char *ipval)
+unsigned int ipv6_get_netif_scope(char *ipval)
 {
        struct ifaddrs *netiflist = NULL;
        struct ifaddrs *netif = NULL;
@@ -113,6 +113,20 @@ unsigned int ipv6_get_netif_scope(const char *ipval)
        unsigned int iscope = 0;
        int i = 0;
        int r = 0;
+       ip_addr_t *ipa = NULL;
+       ip_addr_t vaddr;
+       str ips;
+
+       ips.s = ipval;
+       ips.len = strlen(ipval);
+
+       ipa = str2ip6(&ips);
+       if(ipa==NULL) {
+               LM_ERR("could not parse ipv6 address: %s\n", ipval);
+               return 0;
+       }
+       memcpy(&vaddr, ipa, sizeof(ip_addr_t));
+       ipa = NULL;
 
        /* walk over the list of all network interface addresses */
        if(getifaddrs(&netiflist)!=0) {
@@ -136,10 +150,15 @@ unsigned int ipv6_get_netif_scope(const char *ipval)
                                        break;
                                }
                        }
-                       /* if the ips matche, get scope index from interface 
name */
-                       if(strcmp(ipaddr, ipval)==0){
-                               iscope=if_nametoindex(netif->ifa_name);
-                               goto done;
+                       ips.s = ipaddr;
+                       ips.len = strlen(ipaddr);
+                       ipa = str2ip6(&ips);
+                       if(ipa!=NULL) {
+                               /* if the ips match, get scope index from 
interface name */
+                               if(ip_addr_cmp(&vaddr, ipa)) {
+                                       iscope=if_nametoindex(netif->ifa_name);
+                                       goto done;
+                               }
                        }
                }
        }
diff --git a/src/core/socket_info.h b/src/core/socket_info.h
index e8c684407c..37bfd897f1 100644
--- a/src/core/socket_info.h
+++ b/src/core/socket_info.h
@@ -151,6 +151,6 @@ typedef struct _sr_phostp {
 struct socket_info* lookup_local_socket(str *phostp);
 int parse_protohostport(str* ins, sr_phostp_t *r);
 
-unsigned int ipv6_get_netif_scope(const char *ipval);
+unsigned int ipv6_get_netif_scope(char *ipval);
 
 #endif


_______________________________________________
Kamailio (SER) - Development Mailing List
[email protected]
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to