sync with OpenBSD -current
This commit is contained in:
parent
8d80bb2dde
commit
0f90c06c31
15 changed files with 176 additions and 142 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ip6_forward.c,v 1.115 2024/02/22 14:25:58 bluhm Exp $ */
|
||||
/* $OpenBSD: ip6_forward.c,v 1.116 2024/02/28 10:57:20 bluhm Exp $ */
|
||||
/* $KAME: ip6_forward.c,v 1.75 2001/06/29 12:42:13 jinmei Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -89,7 +89,7 @@ ip6_forward(struct mbuf *m, struct rtentry *rt, int srcrt)
|
|||
struct route ro;
|
||||
struct ifnet *ifp = NULL;
|
||||
int error = 0, type = 0, code = 0, destmtu = 0;
|
||||
struct mbuf *mcopy = NULL;
|
||||
struct mbuf *mcopy;
|
||||
#ifdef IPSEC
|
||||
struct tdb *tdb = NULL;
|
||||
#endif /* IPSEC */
|
||||
|
@ -121,13 +121,13 @@ ip6_forward(struct mbuf *m, struct rtentry *rt, int srcrt)
|
|||
m->m_pkthdr.ph_ifidx);
|
||||
}
|
||||
m_freem(m);
|
||||
goto out;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (ip6->ip6_hlim <= IPV6_HLIMDEC) {
|
||||
icmp6_error(m, ICMP6_TIME_EXCEEDED,
|
||||
ICMP6_TIME_EXCEED_TRANSIT, 0);
|
||||
goto out;
|
||||
goto done;
|
||||
}
|
||||
ip6->ip6_hlim -= IPV6_HLIMDEC;
|
||||
|
||||
|
@ -175,12 +175,12 @@ reroute:
|
|||
m->m_pkthdr.ph_rtableid);
|
||||
if (rt == NULL) {
|
||||
ip6stat_inc(ip6s_noroute);
|
||||
if (mcopy) {
|
||||
if (mcopy != NULL) {
|
||||
icmp6_error(mcopy, ICMP6_DST_UNREACH,
|
||||
ICMP6_DST_UNREACH_NOROUTE, 0);
|
||||
}
|
||||
m_freem(m);
|
||||
goto out;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
ro.ro_rt = rt;
|
||||
|
@ -211,11 +211,11 @@ reroute:
|
|||
ip6->ip6_nxt,
|
||||
m->m_pkthdr.ph_ifidx, rt->rt_ifidx);
|
||||
}
|
||||
if (mcopy)
|
||||
if (mcopy != NULL)
|
||||
icmp6_error(mcopy, ICMP6_DST_UNREACH,
|
||||
ICMP6_DST_UNREACH_BEYONDSCOPE, 0);
|
||||
m_freem(m);
|
||||
goto out;
|
||||
goto done;
|
||||
}
|
||||
|
||||
#ifdef IPSEC
|
||||
|
@ -270,11 +270,11 @@ reroute:
|
|||
* type/code is based on suggestion by Rich Draves.
|
||||
* not sure if it is the best pick.
|
||||
*/
|
||||
if (mcopy)
|
||||
if (mcopy != NULL)
|
||||
icmp6_error(mcopy, ICMP6_DST_UNREACH,
|
||||
ICMP6_DST_UNREACH_ADDR, 0);
|
||||
m_freem(m);
|
||||
goto out;
|
||||
goto done;
|
||||
}
|
||||
type = ND_REDIRECT;
|
||||
}
|
||||
|
@ -327,18 +327,18 @@ reroute:
|
|||
if (mcopy != NULL)
|
||||
icmp6_error(mcopy, ICMP6_PACKET_TOO_BIG, 0, ifp->if_mtu);
|
||||
m_freem(m);
|
||||
goto out;
|
||||
goto done;
|
||||
|
||||
senderr:
|
||||
if (mcopy == NULL)
|
||||
goto out;
|
||||
goto done;
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
if (type == ND_REDIRECT) {
|
||||
icmp6_redirect_output(mcopy, rt);
|
||||
ip6stat_inc(ip6s_redirectsent);
|
||||
goto out;
|
||||
goto done;
|
||||
}
|
||||
goto freecopy;
|
||||
|
||||
|
@ -383,11 +383,11 @@ senderr:
|
|||
break;
|
||||
}
|
||||
icmp6_error(mcopy, type, code, destmtu);
|
||||
goto out;
|
||||
goto done;
|
||||
|
||||
freecopy:
|
||||
freecopy:
|
||||
m_freem(mcopy);
|
||||
out:
|
||||
done:
|
||||
rtfree(rt);
|
||||
if_put(ifp);
|
||||
#ifdef IPSEC
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ip6_input.c,v 1.258 2024/02/22 14:25:58 bluhm Exp $ */
|
||||
/* $OpenBSD: ip6_input.c,v 1.259 2024/02/28 10:57:20 bluhm Exp $ */
|
||||
/* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -366,7 +366,7 @@ ip6_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
|
|||
#if NPF > 0
|
||||
struct in6_addr odst;
|
||||
#endif
|
||||
int srcrt = 0;
|
||||
int pfrdr = 0;
|
||||
|
||||
KASSERT(*offp == 0);
|
||||
|
||||
|
@ -413,7 +413,7 @@ ip6_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
|
|||
goto bad;
|
||||
|
||||
ip6 = mtod(m, struct ip6_hdr *);
|
||||
srcrt = !IN6_ARE_ADDR_EQUAL(&odst, &ip6->ip6_dst);
|
||||
pfrdr = !IN6_ARE_ADDR_EQUAL(&odst, &ip6->ip6_dst);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -618,7 +618,7 @@ ip6_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
|
|||
}
|
||||
#endif /* IPSEC */
|
||||
|
||||
ip6_forward(m, rt, srcrt);
|
||||
ip6_forward(m, rt, pfrdr);
|
||||
*mp = NULL;
|
||||
return IPPROTO_DONE;
|
||||
bad:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ip6_output.c,v 1.287 2024/02/22 14:25:58 bluhm Exp $ */
|
||||
/* $OpenBSD: ip6_output.c,v 1.288 2024/02/28 10:57:20 bluhm Exp $ */
|
||||
/* $KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -748,8 +748,16 @@ reroute:
|
|||
(error = if_output_ml(ifp, &ml, sin6tosa(dst), ro->ro_rt)))
|
||||
goto done;
|
||||
ip6stat_inc(ip6s_fragmented);
|
||||
goto done;
|
||||
|
||||
done:
|
||||
freehdrs:
|
||||
m_freem(exthdrs.ip6e_hbh); /* m_freem will check if mbuf is 0 */
|
||||
m_freem(exthdrs.ip6e_dest1);
|
||||
m_freem(exthdrs.ip6e_rthdr);
|
||||
m_freem(exthdrs.ip6e_dest2);
|
||||
bad:
|
||||
m_freem(m);
|
||||
done:
|
||||
if (ro == &iproute && ro->ro_rt) {
|
||||
rtfree(ro->ro_rt);
|
||||
} else if (ro_pmtu == &iproute && ro_pmtu->ro_rt) {
|
||||
|
@ -760,16 +768,6 @@ done:
|
|||
tdb_unref(tdb);
|
||||
#endif /* IPSEC */
|
||||
return (error);
|
||||
|
||||
freehdrs:
|
||||
m_freem(exthdrs.ip6e_hbh); /* m_freem will check if mbuf is 0 */
|
||||
m_freem(exthdrs.ip6e_dest1);
|
||||
m_freem(exthdrs.ip6e_rthdr);
|
||||
m_freem(exthdrs.ip6e_dest2);
|
||||
/* FALLTHROUGH */
|
||||
bad:
|
||||
m_freem(m);
|
||||
goto done;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue