Anyone? I'll probably put this in tomorrow. Diffs are piling up...

On Thu, Mar 04, 2021 at 11:47:10AM +0100, Florian Obser wrote:
> Works fine here, OK florian
> 
> On Wed, Mar 03, 2021 at 08:50:59PM -0300, Fernando Gont wrote:
> > This revised patch adresses a minor issue pointed out by Florian (avoid
> > floating-point math). At this point this is unnecessary, since the
> > IPv6 temporary address lifetimes are not configurable.
> > 
> > P.S.: Patch also available at:
> > https://www.gont.com.ar/files/fgont-patch-rfc8981-v0.3.diff
> > 
> > Thanks,
> > Fernando
> > 
> > 
> > 
> > 
> > diff --git engine.c engine.c
> > index 4160d798261..3ddf0303dd9 100644
> > --- engine.c
> > +++ engine.c
> > @@ -88,11 +88,15 @@
> >  #define    RTR_SOLICITATION_INTERVAL       4
> >  #define    MAX_RTR_SOLICITATIONS           3
> >  
> > -/* constants for RFC 4941 autoconf privacy extension */
> > -#define PRIV_MAX_DESYNC_FACTOR     600     /* 10 minutes */
> > +/*
> > + * Constants for RFC 8981 autoconf privacy extensions
> > + *
> > + * PRIV_PREFERRED_LIFETIME > (PRIV_MAX_DESYNC_FACTOR + PRIV_REGEN_ADVANCE)
> > + */
> >  #define PRIV_VALID_LIFETIME        172800  /* 2 days */
> >  #define PRIV_PREFERRED_LIFETIME    86400   /* 1 day */
> > -#define    PRIV_REGEN_ADVANCE      5       /* 5 seconds */
> > +#define PRIV_MAX_DESYNC_FACTOR     34560   /* PRIV_PREFERRED_LIFETIME * 
> > 0.4 */
> > +#define PRIV_REGEN_ADVANCE 5       /* 5 seconds */
> >  
> >  enum if_state {
> >     IF_DOWN,
> > @@ -198,6 +202,7 @@ struct address_proposal {
> >     uint8_t                          prefix_len;
> >     uint32_t                         vltime;
> >     uint32_t                         pltime;
> > +   uint32_t                         desync_factor;
> >     uint8_t                          soiikey[SLAACD_SOIIKEY_LEN];
> >     uint32_t                         mtu;
> >  };
> > @@ -327,8 +332,6 @@ static struct imsgev    *iev_frontend;
> >  static struct imsgev       *iev_main;
> >  int64_t                     proposal_id;
> >  
> > -uint32_t            desync_factor;
> > -
> >  void
> >  engine_sig_handler(int sig, short event, void *arg)
> >  {
> > @@ -399,8 +402,6 @@ engine(int debug, int verbose)
> >  
> >     LIST_INIT(&slaacd_interfaces);
> >  
> > -   desync_factor = arc4random_uniform(PRIV_MAX_DESYNC_FACTOR);
> > -
> >     event_dispatch();
> >  
> >     engine_shutdown();
> > @@ -1858,14 +1859,18 @@ update_iface_ra_prefix(struct slaacd_iface *iface, 
> > struct radv *ra,
> >  
> >             if (addr_proposal->privacy) {
> >                     struct timespec now;
> > -                   int64_t         ltime;
> > +                   int64_t         ltime, mtime;
> >  
> >                     if (clock_gettime(CLOCK_MONOTONIC, &now))
> >                             fatal("clock_gettime");
> >  
> > -                   ltime = MINIMUM(addr_proposal->created.tv_sec +
> > -                       PRIV_PREFERRED_LIFETIME - desync_factor,
> > -                       now.tv_sec + prefix->pltime) - now.tv_sec;
> > +                   mtime = addr_proposal->created.tv_sec +
> > +                       PRIV_PREFERRED_LIFETIME -
> > +                       addr_proposal->desync_factor;
> > +
> > +                   ltime = MINIMUM(mtime, now.tv_sec + prefix->pltime) -
> > +                       now.tv_sec;
> > +
> >                     pltime = ltime > 0 ? ltime : 0;
> >  
> >                     ltime = MINIMUM(addr_proposal->created.tv_sec +
> > @@ -1873,7 +1878,7 @@ update_iface_ra_prefix(struct slaacd_iface *iface, 
> > struct radv *ra,
> >                         now.tv_sec;
> >                     vltime = ltime > 0 ? ltime : 0;
> >  
> > -                   if (pltime > PRIV_REGEN_ADVANCE)
> > +                   if ((mtime - now.tv_sec) > PRIV_REGEN_ADVANCE)
> >                             found_privacy = 1;
> >             } else {
> >                     pltime = prefix->pltime;
> > @@ -1919,11 +1924,11 @@ update_iface_ra_prefix(struct slaacd_iface *iface, 
> > struct radv *ra,
> >  
> >     /* privacy addresses do not depend on eui64 */
> >     if (!found_privacy && iface->autoconfprivacy) {
> > -           if (prefix->pltime < desync_factor) {
> > +           if (prefix->pltime < PRIV_REGEN_ADVANCE) {
> >                     log_warnx("%s: pltime from %s is too small: %d < %d; "
> >                         "not generating privacy address", __func__,
> >                         sin6_to_str(&ra->from), prefix->pltime,
> > -                       desync_factor);
> > +                       PRIV_REGEN_ADVANCE);
> >             } else
> >                     /* new privacy proposal */
> >                     gen_address_proposal(iface, ra, prefix, 1);
> > @@ -2055,8 +2060,11 @@ gen_address_proposal(struct slaacd_iface *iface, 
> > struct radv *ra, struct
> >     if (privacy) {
> >             addr_proposal->vltime = MINIMUM(prefix->vltime,
> >                 PRIV_VALID_LIFETIME);
> > +           addr_proposal->desync_factor =
> > +               arc4random_uniform(PRIV_MAX_DESYNC_FACTOR);
> > +
> >             addr_proposal->pltime = MINIMUM(prefix->pltime,
> > -               PRIV_PREFERRED_LIFETIME - desync_factor);
> > +               PRIV_PREFERRED_LIFETIME - addr_proposal->desync_factor);
> >     } else {
> >             addr_proposal->vltime = prefix->vltime;
> >             addr_proposal->pltime = prefix->pltime;
> > diff --git slaacd.8 slaacd.8
> > index fb9bb3d0c60..44057ea4785 100644
> > --- slaacd.8
> > +++ slaacd.8
> > @@ -110,15 +110,6 @@ socket used for communication with
> >  .Re
> >  .Pp
> >  .Rs
> > -.%A T. Narten
> > -.%A R. Draves
> > -.%A S. Krishnan
> > -.%D September 2007
> > -.%R RFC 4941
> > -.%T Privacy Extensions for Stateless Address Autoconfiguration in IPv6
> > -.Re
> > -.Pp
> > -.Rs
> >  .%A F. Gont
> >  .%D April 2014
> >  .%R RFC 7217
> > @@ -152,6 +143,16 @@ socket used for communication with
> >  .%R RFC 8106
> >  .%T IPv6 Router Advertisement Options for DNS Configuration
> >  .Re
> > +.Pp
> > +.Rs
> > +.%A F. Gont
> > +.%A S. Krishnan
> > +.%A T. Narten
> > +.%A R. Draves
> > +.%D February 2021
> > +.%R RFC 8981
> > +.%T Temporary Address Extensions for Stateless Address Autoconfiguration 
> > in IPv6
> > +.Re
> >  .Sh HISTORY
> >  The
> >  .Nm
> > 
> 
> 
> -- 
> I'm not entirely sure you are real.
> 

-- 
I'm not entirely sure you are real.

Reply via email to