fr_ipaddr_t my_ipaddr;
struct sockaddr_storage salocal;
socklen_t salen;
+#ifdef HAVE_NET_IF_H
+ unsigned int scope_id = 0;
+#endif
/*
* Clear the thread local error stack as we may
*/
if (ifname) {
#ifdef HAVE_NET_IF_H
- unsigned int scope_id;
-
scope_id = if_nametoindex(ifname);
if (!scope_id) {
fr_strerror_printf_push("Failed finding interface %s: %s", ifname, fr_syserror(errno));
}
if (fr_ipaddr_from_sockaddr(&my_ipaddr, &my_port, &salocal, salen) < 0) return -1;
+
+#ifdef HAVE_NET_IF_H
+ /*
+ * fr_ipaddr_from_sockaddr clears scope_id for IPv4
+ */
+ if (ifname && scope_id && (my_ipaddr.af == AF_INET)) my_ipaddr.scope_id = scope_id;
+#endif
*src_port = my_port;
*src_ipaddr = my_ipaddr;