Lines Matching defs:ifma
1071 struct ifmultiaddr *ifma;
1075 ifma = CK_STAILQ_FIRST(&ifp->if_multiaddrs);
1076 CK_STAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifmultiaddr, ifma_link);
1077 if_delmulti_locked(ifp, ifma, 1);
2804 struct ifmultiaddr *ifma;
2814 ifma = if_findmulti(ifp, &ifr->ifr_addr);
2816 if (ifma != NULL)
2819 error = if_addmulti(ifp, &ifr->ifr_addr, &ifma);
3408 struct ifmultiaddr *ifma;
3412 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
3414 if (sa_dl_equal(ifma->ifma_addr, sa))
3417 if (sa_equal(ifma->ifma_addr, sa))
3422 return ifma;
3436 struct ifmultiaddr *ifma;
3439 ifma = malloc(sizeof *ifma, M_IFMADDR, mflags |
3441 if (ifma == NULL)
3446 free(ifma, M_IFMADDR);
3450 ifma->ifma_addr = dupsa;
3452 ifma->ifma_ifp = ifp;
3453 ifma->ifma_refcount = 1;
3454 ifma->ifma_protospec = NULL;
3457 ifma->ifma_lladdr = NULL;
3458 return (ifma);
3463 free(ifma->ifma_addr, M_IFMADDR);
3464 free(ifma, M_IFMADDR);
3468 ifma->ifma_lladdr = dupsa;
3470 return (ifma);
3483 if_freemulti_internal(struct ifmultiaddr *ifma)
3486 KASSERT(ifma->ifma_refcount == 0, ("if_freemulti: refcount %d",
3487 ifma->ifma_refcount));
3489 if (ifma->ifma_lladdr != NULL)
3490 free(ifma->ifma_lladdr, M_IFMADDR);
3493 printf("%s freeing ifma: %p\n", __func__, ifma);
3495 free(ifma->ifma_addr, M_IFMADDR);
3496 free(ifma, M_IFMADDR);
3502 struct ifmultiaddr *ifma;
3504 ifma = __containerof(ctx, struct ifmultiaddr, ifma_epoch_ctx);
3505 if_freemulti_internal(ifma);
3509 if_freemulti(struct ifmultiaddr *ifma)
3511 KASSERT(ifma->ifma_refcount == 0, ("if_freemulti_epoch: refcount %d",
3512 ifma->ifma_refcount));
3514 NET_EPOCH_CALL(if_destroymulti, &ifma->ifma_epoch_ctx);
3539 struct ifmultiaddr *ifma, *ll_ifma;
3555 ifma = if_findmulti(ifp, sa);
3556 if (ifma != NULL) {
3557 ifma->ifma_refcount++;
3559 *retifma = ifma;
3567 * refcount or allocate an ifma for that also.
3588 ifma = if_allocmulti(ifp, sa, llsa, M_NOWAIT);
3589 if (ifma == NULL) {
3605 --ifma->ifma_refcount;
3606 if_freemulti(ifma);
3615 ifma->ifma_llifma = ll_ifma;
3619 * We now have a new multicast address, ifma, and possibly a new or
3623 ifma->ifma_flags |= IFMA_F_ENQUEUED;
3624 CK_STAILQ_INSERT_HEAD(&ifp->if_multiaddrs, ifma, ifma_link);
3627 *retifma = ifma;
3630 * Must generate the message while holding the lock so that 'ifma'
3633 rt_newmaddrmsg(RTM_NEWMADDR, ifma);
3688 struct ifmultiaddr *ifma;
3695 ifma = if_findmulti(ifp, sa);
3696 if (ifma != NULL)
3697 lastref = if_delmulti_locked(ifp, ifma, 0);
3700 if (ifma == NULL)
3717 struct ifmultiaddr *ifma;
3721 CK_STAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, next)
3722 if_delmulti_locked(ifp, ifma, 0);
3727 if_delmulti_ifma(struct ifmultiaddr *ifma)
3729 if_delmulti_ifma_flags(ifma, 0);
3739 if_delmulti_ifma_flags(struct ifmultiaddr *ifma, int flags)
3743 MCDPRINTF("%s freeing ifma: %p\n", __func__, ifma);
3747 ifp = ifma->ifma_ifp;
3770 lastref = if_delmulti_locked(ifp, ifma, flags);
3793 if_delmulti_locked(struct ifnet *ifp, struct ifmultiaddr *ifma, int detaching)
3797 if (ifp != NULL && ifma->ifma_ifp != NULL) {
3798 KASSERT(ifma->ifma_ifp == ifp,
3803 ifp = ifma->ifma_ifp;
3804 MCDPRINTF("%s freeing %p from %s \n", __func__, ifma, ifp ? ifp->if_xname : "");
3822 rt_newmaddrmsg(RTM_DELMADDR, ifma);
3823 ifma->ifma_ifp = NULL;
3827 if (--ifma->ifma_refcount > 0)
3830 if (ifp != NULL && detaching == 0 && (ifma->ifma_flags & IFMA_F_ENQUEUED)) {
3831 CK_STAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifmultiaddr, ifma_link);
3832 ifma->ifma_flags &= ~IFMA_F_ENQUEUED;
3835 * If this ifma is a network-layer ifma, a link-layer ifma may
3838 ll_ifma = ifma->ifma_llifma;
3840 KASSERT(ifma->ifma_lladdr != NULL,
3860 MPASS(ifma != ifmatmp);
3863 if_freemulti(ifma);
4659 struct ifmultiaddr *ifma;
4664 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
4665 if (ifma->ifma_addr->sa_family == AF_LINK)
4683 struct ifmultiaddr *ifma;
4690 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
4691 if (ifma->ifma_addr->sa_family != AF_LINK)
4693 count += (*cb)(cb_arg, (struct sockaddr_dl *)ifma->ifma_addr,