From: Aki Tuomi Date: Tue, 29 Mar 2022 12:09:37 +0000 (+0300) Subject: lib: net - Add scope_id to struct ip_addr X-Git-Tag: 2.4.0~4141 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=78938d2cfcfdfb4dfc70471e0286efd877ecb93c;p=thirdparty%2Fdovecot%2Fcore.git lib: net - Add scope_id to struct ip_addr This is needed for link-local IPv6 addresses. --- diff --git a/src/lib/net.c b/src/lib/net.c index affeca3552..a11882b660 100644 --- a/src/lib/net.c +++ b/src/lib/net.c @@ -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); diff --git a/src/lib/net.h b/src/lib/net.h index ec5f38387a..474cf5b432 100644 --- a/src/lib/net.h +++ b/src/lib/net.h @@ -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);