| 1589 | */ |
| 1590 | |
| 1591 | static void |
| 1592 | inp_gcmoptions(struct ip6_moptions *imo) |
| 1593 | { |
| 1594 | struct in6_mfilter *imf; |
| 1595 | struct in6_multi *inm; |
| 1596 | struct ifnet *ifp; |
| 1597 | |
| 1598 | while ((imf = ip6_mfilter_first(&imo->im6o_head)) != NULL) { |
| 1599 | ip6_mfilter_remove(&imo->im6o_head, imf); |
| 1600 | |
| 1601 | im6f_leave(imf); |
| 1602 | if ((inm = imf->im6f_in6m) != NULL) { |
| 1603 | if ((ifp = inm->in6m_ifp) != NULL) { |
| 1604 | CURVNET_SET(ifp->if_vnet); |
| 1605 | (void)in6_leavegroup(inm, imf); |
| 1606 | CURVNET_RESTORE(); |
| 1607 | } else { |
| 1608 | (void)in6_leavegroup(inm, imf); |
| 1609 | } |
| 1610 | } |
| 1611 | ip6_mfilter_free(imf); |
| 1612 | } |
| 1613 | free(imo, M_IP6MOPTS); |
| 1614 | } |
| 1615 | |
| 1616 | void |
| 1617 | ip6_freemoptions(struct ip6_moptions *imo) |
no test coverage detected