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