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.

Reply via email to