Selaa lähdekoodia

core: socket info - skip ipv6 link local on interface discovery

(cherry picked from commit a5b1099c9061551a0b31db8ef88efb2e376b290c)
Daniel-Constantin Mierla 11 kuukautta sitten
vanhempi
commit
98032a98ea
1 muutettua tiedostoa jossa 10 lisäystä ja 0 poistoa
  1. 10 0
      src/core/socket_info.c

+ 10 - 0
src/core/socket_info.c

@@ -1740,6 +1740,16 @@ int add_interfaces(char *if_name, int family, unsigned short port,
 			continue;
 			continue;
 		if(family && family != ifa->ifa_addr->sa_family)
 		if(family && family != ifa->ifa_addr->sa_family)
 			continue;
 			continue;
+		if(ifa->ifa_addr->sa_family == AF_INET6) {
+			struct sockaddr_in6 *caddr = (struct sockaddr_in6 *)ifa->ifa_addr;
+			if((sr_bind_ipv6_link_local & KSR_IPV6_LINK_LOCAL_SKIP)
+					&& IN6_IS_ADDR_LINKLOCAL(&(caddr->sin6_addr))) {
+				LM_DBG("skipping iface [%s] fam: [%x] flg: [%lx] addr: [%s]\n",
+						ifa->ifa_name, ifa->ifa_addr->sa_family,
+						(unsigned long)ifa->ifa_flags, tmp);
+				continue;
+			}
+		}
 		sockaddr2ip_addr(&addr, (struct sockaddr *)ifa->ifa_addr);
 		sockaddr2ip_addr(&addr, (struct sockaddr *)ifa->ifa_addr);
 		tmp = ip_addr2a(&addr);
 		tmp = ip_addr2a(&addr);
 		if(ifa->ifa_flags & IFF_LOOPBACK)
 		if(ifa->ifa_flags & IFF_LOOPBACK)