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);