summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/nd6_rtr.c
diff options
context:
space:
mode:
authorume <ume@FreeBSD.org>2003-10-20 15:27:48 +0000
committerume <ume@FreeBSD.org>2003-10-20 15:27:48 +0000
commit1bfb4986099befab26dc0c1e40e47e89f92f62fb (patch)
tree9f0a5ced322cdbe6ab2dbce0993f3b61ac529326 /sys/netinet6/nd6_rtr.c
parent1ebf2012445124bd775073056a9019ead10872fa (diff)
downloadFreeBSD-src-1bfb4986099befab26dc0c1e40e47e89f92f62fb.zip
FreeBSD-src-1bfb4986099befab26dc0c1e40e47e89f92f62fb.tar.gz
correct linkmtu handling.
Obtained from: KAME
Diffstat (limited to 'sys/netinet6/nd6_rtr.c')
-rw-r--r--sys/netinet6/nd6_rtr.c37
1 files changed, 16 insertions, 21 deletions
diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c
index ec65cb7..e5e61dd 100644
--- a/sys/netinet6/nd6_rtr.c
+++ b/sys/netinet6/nd6_rtr.c
@@ -364,38 +364,33 @@ nd6_ra_input(m, off, icmp6len)
* MTU
*/
if (ndopts.nd_opts_mtu && ndopts.nd_opts_mtu->nd_opt_mtu_len == 1) {
- u_int32_t mtu;
+ u_long mtu;
+ u_long maxmtu;
- mtu = ntohl(ndopts.nd_opts_mtu->nd_opt_mtu_mtu);
+ mtu = (u_long)ntohl(ndopts.nd_opts_mtu->nd_opt_mtu_mtu);
/* lower bound */
if (mtu < IPV6_MMTU) {
nd6log((LOG_INFO, "nd6_ra_input: bogus mtu option "
- "mtu=%d sent from %s, ignoring\n",
+ "mtu=%lu sent from %s, ignoring\n",
mtu, ip6_sprintf(&ip6->ip6_src)));
goto skip;
}
/* upper bound */
- if (ndi->maxmtu) {
- if (mtu <= ndi->maxmtu) {
- int change = (ndi->linkmtu != mtu);
-
- ndi->linkmtu = mtu;
- if (change) /* in6_maxmtu may change */
- in6_setmaxmtu();
- } else {
- nd6log((LOG_INFO, "nd6_ra_input: bogus mtu "
- "mtu=%d sent from %s; "
- "exceeds maxmtu %d, ignoring\n",
- mtu, ip6_sprintf(&ip6->ip6_src),
- ndi->maxmtu));
- }
+ maxmtu = (ndi->maxmtu && ndi->maxmtu < ifp->if_mtu)
+ ? ndi->maxmtu : ifp->if_mtu;
+ if (mtu <= maxmtu) {
+ int change = (ndi->linkmtu != mtu);
+
+ ndi->linkmtu = mtu;
+ if (change) /* in6_maxmtu may change */
+ in6_setmaxmtu();
} else {
- nd6log((LOG_INFO, "nd6_ra_input: mtu option "
- "mtu=%d sent from %s; maxmtu unknown, "
- "ignoring\n",
- mtu, ip6_sprintf(&ip6->ip6_src)));
+ nd6log((LOG_INFO, "nd6_ra_input: bogus mtu "
+ "mtu=%lu sent from %s; "
+ "exceeds maxmtu %lu, ignoring\n",
+ mtu, ip6_sprintf(&ip6->ip6_src), maxmtu));
}
}
OpenPOWER on IntegriCloud