On Sun, Jul 22, 2018 at 10:32:31AM +0200, Björn Ketelaars wrote: > On Sun 22/07/2018 07:27, Björn Ketelaars wrote: > > Now that rad(8) is able to advertise a MTU I think it would be nice to > > have slaacctl(8) show this advertisement. The patch below touches both > > sbin/slaacd and usr.sbin/slaacctl. The addition to sbin/slaacd/engine.c > > makes sure that MTU RA messages are parsed, and that the result is made > > available. BTW running slaacd in the foreground already enables one to > > see the advertised MTU, see debug_log_ra(). > > The addition to usr.sbin/slaacctl/slaacctl.c enables one to view the > > advertised MTU. > > New diff as tb@ found a mistake in the first one affecting > ND_OPT_REDIRECTED_HEADER, ND_OPT_SOURCE_LINKADDR and > ND_OPT_TARGET_LINKADDR as well. >
Do you intend to set the mtu on the interface? If not I'm a bit reluctand to parse and show it. I know that we are showing the nameservers and not do anything with them. When I wrote that code there was every intention to do something with the nameservers. For various reasons that didn't happen (yet). Maybe we shoud not parse & show the nameservers, either (until if and when we do something with them). > > diff --git sbin/slaacd/engine.c sbin/slaacd/engine.c > index 961e1b115b6..2e114cdaf0b 100644 > --- sbin/slaacd/engine.c > +++ sbin/slaacd/engine.c > @@ -156,6 +156,7 @@ struct radv { > uint16_t router_lifetime; /* in seconds */ > uint32_t reachable_time; /* in milliseconds */ > uint32_t retrans_time; /* in milliseconds */ > + uint32_t mtu; > LIST_HEAD(, radv_prefix) prefixes; > uint32_t rdns_lifetime; > LIST_HEAD(, radv_rdns) rdns_servers; > @@ -832,6 +833,7 @@ send_interface_info(struct slaacd_iface *iface, pid_t pid) > cei_ra.router_lifetime = ra->router_lifetime; > cei_ra.reachable_time = ra->reachable_time; > cei_ra.retrans_time = ra->retrans_time; > + cei_ra.mtu = ra->mtu; > engine_imsg_compose_frontend(IMSG_CTL_SHOW_INTERFACE_INFO_RA, > pid, &cei_ra, sizeof(cei_ra)); > > @@ -1125,6 +1127,7 @@ parse_ra(struct slaacd_iface *iface, struct imsg_ra *ra) > while ((size_t)len >= sizeof(struct nd_opt_hdr)) { > struct nd_opt_hdr *nd_opt_hdr = (struct nd_opt_hdr *)p; > struct nd_opt_prefix_info *prf; > + struct nd_opt_mtu *mtu; > struct nd_opt_rdnss *rdnss; > struct nd_opt_dnssl *dnssl; > struct in6_addr *in6; > @@ -1227,11 +1230,18 @@ parse_ra(struct slaacd_iface *iface, struct imsg_ra > *ra) > > LIST_INSERT_HEAD(&radv->dnssls, ra_dnssl, entries); > > + break; > + case ND_OPT_MTU: > + if (nd_opt_hdr->nd_opt_len != 1) { > + log_warnx("invalid ND_OPT_MTU: len != 1"); > + goto err; > + } > + mtu = (struct nd_opt_mtu*) nd_opt_hdr; > + radv->mtu = ntohl(mtu->nd_opt_mtu_mtu); > break; > case ND_OPT_REDIRECTED_HEADER: > case ND_OPT_SOURCE_LINKADDR: > case ND_OPT_TARGET_LINKADDR: > - case ND_OPT_MTU: > case ND_OPT_ROUTE_INFO: > #if 0 > log_debug("\tOption: %u (len: %u) not implemented", > diff --git sbin/slaacd/slaacd.h sbin/slaacd/slaacd.h > index 910be91e687..33e85909ce9 100644 > --- sbin/slaacd/slaacd.h > +++ sbin/slaacd/slaacd.h > @@ -109,6 +109,7 @@ struct ctl_engine_info_ra { > uint16_t router_lifetime; /* in seconds */ > uint32_t reachable_time; /* in milliseconds */ > uint32_t retrans_time; /* in milliseconds */ > + uint32_t mtu; > }; > > struct ctl_engine_info_ra_prefix { > diff --git usr.sbin/slaacctl/slaacctl.c usr.sbin/slaacctl/slaacctl.c > index 5b2a22f12e6..97b460aee08 100644 > --- usr.sbin/slaacctl/slaacctl.c > +++ usr.sbin/slaacctl/slaacctl.c > @@ -228,6 +228,8 @@ show_interface_msg(struct imsg *imsg) > printf("\t\tDefault Router Preference: %s\n", cei_ra->rpref); > printf("\t\tReachable Time: %9ums, Retrans Timer: %9ums\n", > cei_ra->reachable_time, cei_ra->retrans_time); > + if (cei_ra->mtu) > + printf("\t\tMTU: %u bytes\n", cei_ra->mtu); > break; > case IMSG_CTL_SHOW_INTERFACE_INFO_RA_PREFIX: > cei_ra_prefix = imsg->data; > -- I'm not entirely sure you are real.