]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: net - Add scope_id to struct ip_addr
authorAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 29 Mar 2022 12:09:37 +0000 (15:09 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 14 Apr 2022 11:10:37 +0000 (11:10 +0000)
This is needed for link-local IPv6 addresses.

src/lib/net.c
src/lib/net.h

index affeca355286c97ffa8aa38529591b8cb5715851..a11882b660b94689a764b0b408d53b732addf131 100644 (file)
@@ -137,6 +137,7 @@ sin_set_ip(union sockaddr_union *so, const struct ip_addr *ip)
        }
 
        so->sin.sin_family = ip->family;
+       so->sin6.sin6_scope_id = ip->scope_id;
        if (ip->family == AF_INET6)
                memcpy(&so->sin6.sin6_addr, &ip->u.ip6, sizeof(ip->u.ip6));
        else
@@ -152,10 +153,10 @@ sin_get_ip(const union sockaddr_union *so, struct ip_addr *ip)
 
        ip->family = so->sin.sin_family;
 
-       if (ip->family == AF_INET6)
+       if (ip->family == AF_INET6) {
                memcpy(&ip->u.ip6, &so->sin6.sin6_addr, sizeof(ip->u.ip6));
-       else
-       if (ip->family == AF_INET)
+               ip->scope_id = so->sin6.sin6_scope_id;
+       } else if (ip->family == AF_INET)
                memcpy(&ip->u.ip4, &so->sin.sin_addr, sizeof(ip->u.ip4));
        else
                i_zero(&ip->u);
index ec5f38387a9362cb38040a37eaccc759956b1ffa..474cf5b432edc39d671399555b8a6a6572ba1187 100644 (file)
@@ -26,6 +26,7 @@ struct ip_addr {
                struct in6_addr ip6;
                struct in_addr ip4;
        } u;
+       uint32_t scope_id;
 };
 ARRAY_DEFINE_TYPE(ip_addr, struct ip_addr);