mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 16:22:46 -04:00
Use embedded scope zone id to determine outgoing interface for link-local
and node-local addresses.
This commit is contained in:
parent
fb5780def8
commit
ea455de91d
1 changed files with 13 additions and 1 deletions
|
|
@ -555,6 +555,7 @@ selectroute(struct sockaddr_in6 *dstsock, struct ip6_pktopts *opts,
|
|||
struct sockaddr_in6 *sin6_next;
|
||||
struct in6_pktinfo *pi = NULL;
|
||||
struct in6_addr *dst = &dstsock->sin6_addr;
|
||||
uint32_t zoneid;
|
||||
#if 0
|
||||
char ip6buf[INET6_ADDRSTRLEN];
|
||||
|
||||
|
|
@ -585,7 +586,18 @@ selectroute(struct sockaddr_in6 *dstsock, struct ip6_pktopts *opts,
|
|||
} else
|
||||
goto getroute;
|
||||
}
|
||||
|
||||
/*
|
||||
* If destination address is LLA or link- or node-local multicast,
|
||||
* use it's embedded scope zone id to determine outgoing interface.
|
||||
*/
|
||||
if (IN6_IS_SCOPE_LINKLOCAL(dst) ||
|
||||
IN6_IS_ADDR_MC_NODELOCAL(dst)) {
|
||||
zoneid = ntohs(in6_getscope(dst));
|
||||
if (zoneid > 0) {
|
||||
ifp = in6_getlinkifnet(zoneid);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* If the destination address is a multicast address and the outgoing
|
||||
* interface for the address is specified by the caller, use it.
|
||||
|
|
|
|||
Loading…
Reference in a new issue