in6m 1659 netinet6/in6.c struct in6_multi *in6m, *next; in6m 1663 netinet6/in6.c for (in6m = LIST_FIRST(&oia->ia6_multiaddrs); in6m 1664 netinet6/in6.c in6m != LIST_END(&oia->ia6_multiaddrs); in6m = next) { in6m 1665 netinet6/in6.c next = LIST_NEXT(in6m, in6m_entry); in6m 1666 netinet6/in6.c IFAFREE(&in6m->in6m_ia->ia_ifa); in6m 1668 netinet6/in6.c in6m->in6m_ia = ia; in6m 1669 netinet6/in6.c LIST_INSERT_HEAD(&ia->ia6_multiaddrs, in6m, in6m_entry); in6m 1681 netinet6/in6.c for (in6m = LIST_FIRST(&oia->ia6_multiaddrs); in6m 1682 netinet6/in6.c in6m != LIST_END(&oia->ia6_multiaddrs); in6m = next) { in6m 1683 netinet6/in6.c next = LIST_NEXT(in6m, in6m_entry); in6m 1684 netinet6/in6.c IFAFREE(&in6m->in6m_ia->ia_ifa); /* release reference */ in6m 1685 netinet6/in6.c in6m->in6m_ia = NULL; in6m 1686 netinet6/in6.c LIST_INSERT_HEAD(&mk->mk_head, in6m, in6m_entry); in6m 1705 netinet6/in6.c struct in6_multi *in6m, *next; in6m 1707 netinet6/in6.c for (in6m = LIST_FIRST(&mk->mk_head); in6m 1708 netinet6/in6.c in6m != LIST_END(&mk->mk_head); in6m 1709 netinet6/in6.c in6m = next) { in6m 1710 netinet6/in6.c next = LIST_NEXT(in6m, in6m_entry); in6m 1711 netinet6/in6.c in6m->in6m_ia = ia; in6m 1714 netinet6/in6.c in6m, in6m_entry); in6m 1758 netinet6/in6.c struct in6_multi *in6m; in6m 1765 netinet6/in6.c while ((in6m = LIST_FIRST(&mk->mk_head)) != NULL) in6m 1766 netinet6/in6.c in6_delmulti(in6m); in6m 1785 netinet6/in6.c struct in6_multi *in6m; in6m 1792 netinet6/in6.c IN6_LOOKUP_MULTI(*maddr6, ifp, in6m); in6m 1793 netinet6/in6.c if (in6m != NULL) { in6m 1797 netinet6/in6.c in6m->in6m_refcount++; in6m 1803 netinet6/in6.c in6m = (struct in6_multi *) in6m 1804 netinet6/in6.c malloc(sizeof(*in6m), M_IPMADDR, M_NOWAIT); in6m 1805 netinet6/in6.c if (in6m == NULL) { in6m 1810 netinet6/in6.c in6m->in6m_addr = *maddr6; in6m 1811 netinet6/in6.c in6m->in6m_ifp = ifp; in6m 1812 netinet6/in6.c in6m->in6m_refcount = 1; in6m 1815 netinet6/in6.c free(in6m, M_IPMADDR); in6m 1820 netinet6/in6.c in6m->in6m_ia = ia; in6m 1822 netinet6/in6.c LIST_INSERT_HEAD(&ia->ia6_multiaddrs, in6m, in6m_entry); in6m 1838 netinet6/in6.c LIST_REMOVE(in6m, in6m_entry); in6m 1839 netinet6/in6.c free(in6m, M_IPMADDR); in6m 1848 netinet6/in6.c mld6_start_listening(in6m); in6m 1851 netinet6/in6.c return (in6m); in6m 1858 netinet6/in6.c in6_delmulti(in6m) in6m 1859 netinet6/in6.c struct in6_multi *in6m; in6m 1864 netinet6/in6.c if (--in6m->in6m_refcount == 0) { in6m 1869 netinet6/in6.c mld6_stop_listening(in6m); in6m 1874 netinet6/in6.c LIST_REMOVE(in6m, in6m_entry); in6m 1875 netinet6/in6.c if (in6m->in6m_ia) { in6m 1876 netinet6/in6.c IFAFREE(&in6m->in6m_ia->ia_ifa); /* release reference */ in6m 1886 netinet6/in6.c ifr.ifr_addr.sin6_addr = in6m->in6m_addr; in6m 1887 netinet6/in6.c (*in6m->in6m_ifp->if_ioctl)(in6m->in6m_ifp, in6m 1889 netinet6/in6.c free(in6m, M_IPMADDR); in6m 517 netinet6/in6_var.h #define IN6_LOOKUP_MULTI(addr, ifp, in6m) \ in6m 526 netinet6/in6_var.h (in6m) = NULL; \ in6m 528 netinet6/in6_var.h for ((in6m) = LIST_FIRST(&ia->ia6_multiaddrs); \ in6m 529 netinet6/in6_var.h (in6m) != LIST_END(&ia->ia6_multiaddrs) && \ in6m 530 netinet6/in6_var.h !IN6_ARE_ADDR_EQUAL(&(in6m)->in6m_addr, &(addr)); \ in6m 531 netinet6/in6_var.h (in6m) = LIST_NEXT((in6m), in6m_entry)) \ in6m 542 netinet6/in6_var.h #define IN6_NEXT_MULTI(step, in6m) \ in6m 546 netinet6/in6_var.h if (((in6m) = (step).i_in6m) != NULL) \ in6m 547 netinet6/in6_var.h (step).i_in6m = LIST_NEXT((in6m), in6m_entry); \ in6m 550 netinet6/in6_var.h (in6m) = LIST_FIRST(&(step).i_ia->ia6_multiaddrs); \ in6m 552 netinet6/in6_var.h if ((in6m) != NULL) { \ in6m 553 netinet6/in6_var.h (step).i_in6m = LIST_NEXT((in6m), in6m_entry); \ in6m 559 netinet6/in6_var.h #define IN6_FIRST_MULTI(step, in6m) \ in6m 565 netinet6/in6_var.h IN6_NEXT_MULTI((step), (in6m)); \ in6m 407 netinet6/ip6_input.c struct in6_multi *in6m = 0; in6m 414 netinet6/ip6_input.c IN6_LOOKUP_MULTI(ip6->ip6_dst, m->m_pkthdr.rcvif, in6m); in6m 415 netinet6/ip6_input.c if (in6m) in6m 1517 netinet6/ip6_mroute.c struct in6_multi *in6m; in6m 1568 netinet6/ip6_mroute.c IN6_LOOKUP_MULTI(ip6->ip6_dst, ifp, in6m); in6m 1569 netinet6/ip6_mroute.c if (in6m != NULL) { in6m 597 netinet6/ip6_output.c struct in6_multi *in6m; in6m 612 netinet6/ip6_output.c IN6_LOOKUP_MULTI(ip6->ip6_dst, ifp, in6m); in6m 613 netinet6/ip6_output.c if (in6m != NULL && in6m 128 netinet6/mld6.c mld6_start_listening(in6m) in6m 129 netinet6/mld6.c struct in6_multi *in6m; in6m 141 netinet6/mld6.c htons(in6m->in6m_ifp->if_index); /* XXX */ in6m 142 netinet6/mld6.c if (IN6_ARE_ADDR_EQUAL(&in6m->in6m_addr, &mld_all_nodes_linklocal) || in6m 143 netinet6/mld6.c IPV6_ADDR_MC_SCOPE(&in6m->in6m_addr) < IPV6_ADDR_SCOPE_LINKLOCAL) { in6m 144 netinet6/mld6.c in6m->in6m_timer = 0; in6m 145 netinet6/mld6.c in6m->in6m_state = MLD_OTHERLISTENER; in6m 147 netinet6/mld6.c mld6_sendpkt(in6m, MLD_LISTENER_REPORT, NULL); in6m 148 netinet6/mld6.c in6m->in6m_timer = in6m 151 netinet6/mld6.c in6m->in6m_state = MLD_IREPORTEDLAST; in6m 158 netinet6/mld6.c mld6_stop_listening(in6m) in6m 159 netinet6/mld6.c struct in6_multi *in6m; in6m 162 netinet6/mld6.c htons(in6m->in6m_ifp->if_index); /* XXX */ in6m 164 netinet6/mld6.c htons(in6m->in6m_ifp->if_index); /* XXX: necessary when mrouting */ in6m 166 netinet6/mld6.c if (in6m->in6m_state == MLD_IREPORTEDLAST && in6m 167 netinet6/mld6.c (!IN6_ARE_ADDR_EQUAL(&in6m->in6m_addr, &mld_all_nodes_linklocal)) && in6m 168 netinet6/mld6.c IPV6_ADDR_MC_SCOPE(&in6m->in6m_addr) > IPV6_ADDR_SCOPE_INTFACELOCAL) in6m 169 netinet6/mld6.c mld6_sendpkt(in6m, MLD_LISTENER_DONE, in6m 181 netinet6/mld6.c struct in6_multi *in6m; in6m 258 netinet6/mld6.c LIST_FOREACH(in6m, &ia->ia6_multiaddrs, in6m_entry) { in6m 259 netinet6/mld6.c if (IN6_ARE_ADDR_EQUAL(&in6m->in6m_addr, in6m 261 netinet6/mld6.c IPV6_ADDR_MC_SCOPE(&in6m->in6m_addr) < in6m 267 netinet6/mld6.c &in6m->in6m_addr)) in6m 271 netinet6/mld6.c mld6_sendpkt(in6m, MLD_LISTENER_REPORT, in6m 273 netinet6/mld6.c in6m->in6m_timer = 0; /* reset timer */ in6m 274 netinet6/mld6.c in6m->in6m_state = MLD_IREPORTEDLAST; in6m 275 netinet6/mld6.c } else if (in6m->in6m_timer == 0 || /* idle */ in6m 276 netinet6/mld6.c in6m->in6m_timer > timer) { in6m 277 netinet6/mld6.c in6m->in6m_timer = in6m 310 netinet6/mld6.c IN6_LOOKUP_MULTI(mldh->mld_addr, ifp, in6m); in6m 311 netinet6/mld6.c if (in6m) { in6m 312 netinet6/mld6.c in6m->in6m_timer = 0; /* transit to idle state */ in6m 313 netinet6/mld6.c in6m->in6m_state = MLD_OTHERLISTENER; /* clear flag */ in6m 337 netinet6/mld6.c struct in6_multi *in6m; in6m 350 netinet6/mld6.c IN6_FIRST_MULTI(step, in6m); in6m 351 netinet6/mld6.c while (in6m != NULL) { in6m 352 netinet6/mld6.c if (in6m->in6m_timer == 0) { in6m 354 netinet6/mld6.c } else if (--in6m->in6m_timer == 0) { in6m 355 netinet6/mld6.c mld6_sendpkt(in6m, MLD_LISTENER_REPORT, NULL); in6m 356 netinet6/mld6.c in6m->in6m_state = MLD_IREPORTEDLAST; in6m 360 netinet6/mld6.c IN6_NEXT_MULTI(step, in6m); in6m 366 netinet6/mld6.c mld6_sendpkt(in6m, type, dst) in6m 367 netinet6/mld6.c struct in6_multi *in6m; in6m 376 netinet6/mld6.c struct ifnet *ifp = in6m->in6m_ifp; in6m 420 netinet6/mld6.c ip6->ip6_dst = dst ? *dst : in6m->in6m_addr; in6m 431 netinet6/mld6.c mldh->mld_addr = in6m->in6m_addr; in6m 1211 netinet6/nd6.c struct in6_multi *in6m; in6m 1220 netinet6/nd6.c IN6_LOOKUP_MULTI(llsol, ifp, in6m); in6m 1221 netinet6/nd6.c if (in6m) in6m 1222 netinet6/nd6.c in6_delmulti(in6m);