]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
Simplify and fix RA lifetime calculation.
authorSimon Kelley <simon@thekelleys.org.uk>
Fri, 21 Dec 2012 16:23:26 +0000 (16:23 +0000)
committerSimon Kelley <simon@thekelleys.org.uk>
Fri, 21 Dec 2012 16:23:26 +0000 (16:23 +0000)
src/dhcp6.c
src/dnsmasq.h
src/radv.c

index b71cdacb7794dcaecd9f8c70eb115b98f2c31b0c..2296ab9d53d26f31315cbd45b9b3f62d5eccbb91 100644 (file)
@@ -488,6 +488,8 @@ static int construct_worker(struct in6_addr *local, int prefix,
 
   (void)scope;
   (void)flags;
+  (void)valid;
+  (void)preferred;
 
   struct cparam *param = vparam;
 
@@ -549,19 +551,6 @@ static int construct_worker(struct in6_addr *local, int prefix,
            
            log_context(AF_INET6, context);
          } 
-
-       if (context)
-         {
-           if (valid == -1)
-             context->valid = valid;
-           else
-             context->valid = valid + param->now;
-           
-           if (preferred == -1)
-             context->preferred = preferred;
-           else
-             context->preferred = preferred + param->now;
-         }
       }
   
   return 1;
index 5e4d3ab967d0752d8fa85220820d6449b5c95349..02ac627e789ba0cb29a8753acb2b1fa39c078d8b 100644 (file)
@@ -685,7 +685,6 @@ struct dhcp_context {
   int prefix, if_index;
   time_t ra_time, ra_short_period_start;
   char *template_interface;
-  int valid, preferred; /* times from address for constructed contexts */
 #endif
   int flags;
   struct dhcp_netid netid, *filter;
index debccb2a8f3f2b1b3dc97f139cc6e35319815890..c97661c5ec1dd0e5d3c3109be95b30da7ecee0ac 100644 (file)
@@ -331,10 +331,7 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
   struct ra_param *param = vparam;
 
   (void)scope; /* warning */
-  (void)flags;
-  (void)preferred;
-  (void)valid;
-
+  
   if (if_index == param->ind)
     {
       if (IN6_IS_ADDR_LINKLOCAL(local))
@@ -345,9 +342,7 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
          int do_prefix = 0;
          int do_slaac = 0;
          int deprecate  = 0;
-         int found_constructed = 0;
          unsigned int time = 0xffffffff;
-         int calc_valid = 0, calc_preferred = 0;
          struct dhcp_context *context;
          
          for (context = daemon->dhcp6; context; context = context->next)
@@ -376,17 +371,6 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
                    param->other = 1;
                  }
                
-               if (context->flags & CONTEXT_CONSTRUCTED)
-                 {
-                   found_constructed = 1;
-                   calc_valid = context->valid;
-                   calc_preferred = context->preferred;
-                   if (context->valid != -1)
-                     calc_valid -= (int)param->now;
-                   if (context->preferred != -1)
-                     calc_preferred -= (int)param->now;                        
-                 }
-               
                /* find floor time */
                if (time > context->lease_time)
                  time = context->lease_time;
@@ -417,10 +401,17 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
                param->found_context = 1;
              }
 
-         if (!found_constructed)
+         /* configured time is ceiling */
+         if ((unsigned int)valid > time)
+           valid = time;
+         
+         if ((flags & IFACE_DEPRECATED) || deprecate)
+           preferred = 0;
+         else 
            {
-             calc_valid = time;
-             calc_preferred = deprecate ? 0 : time;
+             /* configured time is ceiling */
+             if ((unsigned int)preferred > time)
+               preferred = time;
            }
          
          if (do_prefix)
@@ -441,8 +432,8 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
                  opt->prefix_len = prefix;
                  /* autonomous only if we're not doing dhcp, always set "on-link" */
                  opt->flags = do_slaac ? 0xC0 : 0x80;
-                 opt->valid_lifetime = htonl(calc_valid);
-                 opt->preferred_lifetime = htonl(calc_preferred);
+                 opt->valid_lifetime = htonl(valid);
+                 opt->preferred_lifetime = htonl(preferred);
                  opt->reserved = 0; 
                  opt->prefix = *local;