sync with OpenBSD -current
This commit is contained in:
parent
382ecd9441
commit
1b576c8ddf
25 changed files with 517 additions and 395 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: in6.c,v 1.262 2023/06/28 11:49:49 kn Exp $ */
|
||||
/* $OpenBSD: in6.c,v 1.263 2024/04/16 14:37:49 florian Exp $ */
|
||||
/* $KAME: in6.c,v 1.372 2004/06/14 08:14:21 itojun Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -565,7 +565,7 @@ in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra,
|
|||
* The destination address for a p2p link must have a family
|
||||
* of AF_UNSPEC or AF_INET6.
|
||||
*/
|
||||
if ((ifp->if_flags & IFF_POINTOPOINT) != 0 &&
|
||||
if ((ifp->if_flags & IFF_POINTOPOINT) &&
|
||||
ifra->ifra_dstaddr.sin6_family != AF_INET6 &&
|
||||
ifra->ifra_dstaddr.sin6_family != AF_UNSPEC)
|
||||
return (EAFNOSUPPORT);
|
||||
|
@ -603,19 +603,18 @@ in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra,
|
|||
* zone identifier.
|
||||
*/
|
||||
dst6 = ifra->ifra_dstaddr;
|
||||
if ((ifp->if_flags & (IFF_POINTOPOINT|IFF_LOOPBACK)) != 0 &&
|
||||
if ((ifp->if_flags & IFF_POINTOPOINT) &&
|
||||
(dst6.sin6_family == AF_INET6)) {
|
||||
error = in6_check_embed_scope(&dst6, ifp->if_index);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
/*
|
||||
* The destination address can be specified only for a p2p or a
|
||||
* loopback interface. If specified, the corresponding prefix length
|
||||
* must be 128.
|
||||
* The destination address can be specified only for a p2p interface.
|
||||
* If specified, the corresponding prefix length must be 128.
|
||||
*/
|
||||
if (ifra->ifra_dstaddr.sin6_family == AF_INET6) {
|
||||
if ((ifp->if_flags & (IFF_POINTOPOINT|IFF_LOOPBACK)) == 0)
|
||||
if (!(ifp->if_flags & IFF_POINTOPOINT))
|
||||
return (EINVAL);
|
||||
if (plen != 128)
|
||||
return (EINVAL);
|
||||
|
@ -652,7 +651,7 @@ in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra,
|
|||
ia6->ia_addr.sin6_family = AF_INET6;
|
||||
ia6->ia_addr.sin6_len = sizeof(ia6->ia_addr);
|
||||
ia6->ia6_updatetime = getuptime();
|
||||
if ((ifp->if_flags & (IFF_POINTOPOINT | IFF_LOOPBACK)) != 0) {
|
||||
if (ifp->if_flags & IFF_POINTOPOINT) {
|
||||
/*
|
||||
* XXX: some functions expect that ifa_dstaddr is not
|
||||
* NULL for p2p interfaces.
|
||||
|
@ -687,7 +686,7 @@ in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra,
|
|||
/*
|
||||
* If a new destination address is specified, scrub the old one and
|
||||
* install the new destination. Note that the interface must be
|
||||
* p2p or loopback (see the check above.)
|
||||
* p2p (see the check above.)
|
||||
*/
|
||||
if ((ifp->if_flags & IFF_POINTOPOINT) && dst6.sin6_family == AF_INET6 &&
|
||||
!IN6_ARE_ADDR_EQUAL(&dst6.sin6_addr, &ia6->ia_dstaddr.sin6_addr)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue