[BACK]Return to mld6.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / netinet6

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/netinet6/mld6.c between version 1.59.2.2 and 1.60

version 1.59.2.2, 2015/01/23 09:27:15 version 1.60, 2014/09/09 20:16:12
Line 188  mld_init(void)
Line 188  mld_init(void)
         ip6_opts.ip6po_hbh = hbh;          ip6_opts.ip6po_hbh = hbh;
         /* We will specify the hoplimit by a multicast option. */          /* We will specify the hoplimit by a multicast option. */
         ip6_opts.ip6po_hlim = -1;          ip6_opts.ip6po_hlim = -1;
         ip6_opts.ip6po_prefer_tempaddr = IP6PO_TEMPADDR_NOTPREFER;  
 }  }
   
 static void  static void
Line 196  mld_starttimer(struct in6_multi *in6m)
Line 195  mld_starttimer(struct in6_multi *in6m)
 {  {
         struct timeval now;          struct timeval now;
   
         KASSERT(in6m->in6m_timer != IN6M_TIMER_UNDEF);  
   
         microtime(&now);          microtime(&now);
         in6m->in6m_timer_expire.tv_sec = now.tv_sec + in6m->in6m_timer / hz;          in6m->in6m_timer_expire.tv_sec = now.tv_sec + in6m->in6m_timer / hz;
         in6m->in6m_timer_expire.tv_usec = now.tv_usec +          in6m->in6m_timer_expire.tv_usec = now.tv_usec +
Line 230  mld_timeo(void *arg)
Line 227  mld_timeo(void *arg)
         mutex_enter(softnet_lock);          mutex_enter(softnet_lock);
         KERNEL_LOCK(1, NULL);          KERNEL_LOCK(1, NULL);
   
         if (in6m->in6m_timer == IN6M_TIMER_UNDEF)  
                 goto out;  
   
         in6m->in6m_timer = IN6M_TIMER_UNDEF;          in6m->in6m_timer = IN6M_TIMER_UNDEF;
   
         switch (in6m->in6m_state) {          switch (in6m->in6m_state) {
Line 244  mld_timeo(void *arg)
Line 238  mld_timeo(void *arg)
                 break;                  break;
         }          }
   
 out:  
         KERNEL_UNLOCK_ONE(NULL);          KERNEL_UNLOCK_ONE(NULL);
         mutex_exit(softnet_lock);          mutex_exit(softnet_lock);
 }  }
Line 664  in6_addmulti(struct in6_addr *maddr6, st
Line 657  in6_addmulti(struct in6_addr *maddr6, st
                         return (NULL);                          return (NULL);
                 }                  }
                 in6m->in6m_ia = ia;                  in6m->in6m_ia = ia;
                 IFAREF(&ia->ia_ifa); /* gain a reference */                  ifaref(&ia->ia_ifa); /* gain a reference */
                 LIST_INSERT_HEAD(&ia->ia6_multiaddrs, in6m, in6m_entry);                  LIST_INSERT_HEAD(&ia->ia6_multiaddrs, in6m, in6m_entry);
   
                 /*                  /*
Line 676  in6_addmulti(struct in6_addr *maddr6, st
Line 669  in6_addmulti(struct in6_addr *maddr6, st
                 if (*errorp) {                  if (*errorp) {
                         LIST_REMOVE(in6m, in6m_entry);                          LIST_REMOVE(in6m, in6m_entry);
                         free(in6m, M_IPMADDR);                          free(in6m, M_IPMADDR);
                         IFAFREE(&ia->ia_ifa);                          ifafree(&ia->ia_ifa);
                         splx(s);                          splx(s);
                         return (NULL);                          return (NULL);
                 }                  }
Line 726  in6_delmulti(struct in6_multi *in6m)
Line 719  in6_delmulti(struct in6_multi *in6m)
                  */                   */
                 LIST_REMOVE(in6m, in6m_entry);                  LIST_REMOVE(in6m, in6m_entry);
                 if (in6m->in6m_ia != NULL) {                  if (in6m->in6m_ia != NULL) {
                         IFAFREE(&in6m->in6m_ia->ia_ifa); /* release reference */                          ifafree(&in6m->in6m_ia->ia_ifa); /* release reference */
                         in6m->in6m_ia = NULL;                          in6m->in6m_ia = NULL;
                 }                  }
   
Line 748  in6_delmulti(struct in6_multi *in6m)
Line 741  in6_delmulti(struct in6_multi *in6m)
                  */                   */
                 sockaddr_in6_init(&sin6, &in6m->in6m_addr, 0, 0, 0);                  sockaddr_in6_init(&sin6, &in6m->in6m_addr, 0, 0, 0);
                 if_mcast_op(in6m->in6m_ifp, SIOCDELMULTI, sin6tosa(&sin6));                  if_mcast_op(in6m->in6m_ifp, SIOCDELMULTI, sin6tosa(&sin6));
   
                 /* Tell mld_timeo we're halting the timer */  
                 in6m->in6m_timer = IN6M_TIMER_UNDEF;  
                 callout_halt(&in6m->in6m_timer_ch, softnet_lock);  
                 callout_destroy(&in6m->in6m_timer_ch);                  callout_destroy(&in6m->in6m_timer_ch);
   
                 free(in6m, M_IPMADDR);                  free(in6m, M_IPMADDR);
         }          }
         splx(s);          splx(s);
Line 810  in6_savemkludge(struct in6_ifaddr *oia)
Line 798  in6_savemkludge(struct in6_ifaddr *oia)
                 KASSERT(ia != oia);                  KASSERT(ia != oia);
                 while ((in6m = LIST_FIRST(&oia->ia6_multiaddrs)) != NULL) {                  while ((in6m = LIST_FIRST(&oia->ia6_multiaddrs)) != NULL) {
                         LIST_REMOVE(in6m, in6m_entry);                          LIST_REMOVE(in6m, in6m_entry);
                         IFAREF(&ia->ia_ifa);                          ifaref(&ia->ia_ifa);
                         IFAFREE(&in6m->in6m_ia->ia_ifa);                          ifafree(&in6m->in6m_ia->ia_ifa);
                         in6m->in6m_ia = ia;                          in6m->in6m_ia = ia;
                         LIST_INSERT_HEAD(&ia->ia6_multiaddrs, in6m, in6m_entry);                          LIST_INSERT_HEAD(&ia->ia6_multiaddrs, in6m, in6m_entry);
                 }                  }
Line 827  in6_savemkludge(struct in6_ifaddr *oia)
Line 815  in6_savemkludge(struct in6_ifaddr *oia)
   
                 while ((in6m = LIST_FIRST(&oia->ia6_multiaddrs)) != NULL) {                  while ((in6m = LIST_FIRST(&oia->ia6_multiaddrs)) != NULL) {
                         LIST_REMOVE(in6m, in6m_entry);                          LIST_REMOVE(in6m, in6m_entry);
                         IFAFREE(&in6m->in6m_ia->ia_ifa); /* release reference */                          ifafree(&in6m->in6m_ia->ia_ifa); /* release reference */
                         in6m->in6m_ia = NULL;                          in6m->in6m_ia = NULL;
                         LIST_INSERT_HEAD(&mk->mk_head, in6m, in6m_entry);                          LIST_INSERT_HEAD(&mk->mk_head, in6m, in6m_entry);
                 }                  }
Line 854  in6_restoremkludge(struct in6_ifaddr *ia
Line 842  in6_restoremkludge(struct in6_ifaddr *ia
         while ((in6m = LIST_FIRST(&mk->mk_head)) != NULL) {          while ((in6m = LIST_FIRST(&mk->mk_head)) != NULL) {
                 LIST_REMOVE(in6m, in6m_entry);                  LIST_REMOVE(in6m, in6m_entry);
                 in6m->in6m_ia = ia;                  in6m->in6m_ia = ia;
                 IFAREF(&ia->ia_ifa);                  ifaref(&ia->ia_ifa);
                 LIST_INSERT_HEAD(&ia->ia6_multiaddrs, in6m, in6m_entry);                  LIST_INSERT_HEAD(&ia->ia6_multiaddrs, in6m, in6m_entry);
         }          }
 }  }

Legend:
Removed from v.1.59.2.2  
changed lines
  Added in v.1.60

CVSweb <webmaster@jp.NetBSD.org>