Lines Matching defs:ifma

1098 	struct ifmultiaddr *ifma;
1102 ifma = CK_STAILQ_FIRST(&ifp->if_multiaddrs);
1103 CK_STAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifmultiaddr, ifma_link);
1104 if_delmulti_locked(ifp, ifma, 1);
2793 struct ifmultiaddr *ifma;
2803 ifma = if_findmulti(ifp, &ifr->ifr_addr);
2805 if (ifma != NULL)
2808 error = if_addmulti(ifp, &ifr->ifr_addr, &ifma);
3318 struct ifmultiaddr *ifma;
3322 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
3324 if (sa_dl_equal(ifma->ifma_addr, sa))
3327 if (sa_equal(ifma->ifma_addr, sa))
3332 return ifma;
3346 struct ifmultiaddr *ifma;
3349 ifma = malloc(sizeof *ifma, M_IFMADDR, mflags |
3351 if (ifma == NULL)
3356 free(ifma, M_IFMADDR);
3360 ifma->ifma_addr = dupsa;
3362 ifma->ifma_ifp = ifp;
3363 ifma->ifma_refcount = 1;
3364 ifma->ifma_protospec = NULL;
3367 ifma->ifma_lladdr = NULL;
3368 return (ifma);
3373 free(ifma->ifma_addr, M_IFMADDR);
3374 free(ifma, M_IFMADDR);
3378 ifma->ifma_lladdr = dupsa;
3380 return (ifma);
3393 if_freemulti_internal(struct ifmultiaddr *ifma)
3396 KASSERT(ifma->ifma_refcount == 0, ("if_freemulti: refcount %d",
3397 ifma->ifma_refcount));
3399 if (ifma->ifma_lladdr != NULL)
3400 free(ifma->ifma_lladdr, M_IFMADDR);
3403 printf("%s freeing ifma: %p\n", __func__, ifma);
3405 free(ifma->ifma_addr, M_IFMADDR);
3406 free(ifma, M_IFMADDR);
3412 struct ifmultiaddr *ifma;
3414 ifma = __containerof(ctx, struct ifmultiaddr, ifma_epoch_ctx);
3415 if_freemulti_internal(ifma);
3419 if_freemulti(struct ifmultiaddr *ifma)
3421 KASSERT(ifma->ifma_refcount == 0, ("if_freemulti_epoch: refcount %d",
3422 ifma->ifma_refcount));
3424 NET_EPOCH_CALL(if_destroymulti, &ifma->ifma_epoch_ctx);
3449 struct ifmultiaddr *ifma, *ll_ifma;
3465 ifma = if_findmulti(ifp, sa);
3466 if (ifma != NULL) {
3467 ifma->ifma_refcount++;
3469 *retifma = ifma;
3477 * refcount or allocate an ifma for that also.
3498 ifma = if_allocmulti(ifp, sa, llsa, M_NOWAIT);
3499 if (ifma == NULL) {
3515 --ifma->ifma_refcount;
3516 if_freemulti(ifma);
3525 ifma->ifma_llifma = ll_ifma;
3529 * We now have a new multicast address, ifma, and possibly a new or
3533 ifma->ifma_flags |= IFMA_F_ENQUEUED;
3534 CK_STAILQ_INSERT_HEAD(&ifp->if_multiaddrs, ifma, ifma_link);
3537 *retifma = ifma;
3540 * Must generate the message while holding the lock so that 'ifma'
3543 rt_newmaddrmsg(RTM_NEWMADDR, ifma);
3598 struct ifmultiaddr *ifma;
3605 ifma = if_findmulti(ifp, sa);
3606 if (ifma != NULL)
3607 lastref = if_delmulti_locked(ifp, ifma, 0);
3610 if (ifma == NULL)
3627 struct ifmultiaddr *ifma;
3631 CK_STAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, next)
3632 if_delmulti_locked(ifp, ifma, 0);
3637 if_delmulti_ifma(struct ifmultiaddr *ifma)
3639 if_delmulti_ifma_flags(ifma, 0);
3649 if_delmulti_ifma_flags(struct ifmultiaddr *ifma, int flags)
3653 MCDPRINTF("%s freeing ifma: %p\n", __func__, ifma);
3657 ifp = ifma->ifma_ifp;
3680 lastref = if_delmulti_locked(ifp, ifma, flags);
3703 if_delmulti_locked(struct ifnet *ifp, struct ifmultiaddr *ifma, int detaching)
3707 if (ifp != NULL && ifma->ifma_ifp != NULL) {
3708 KASSERT(ifma->ifma_ifp == ifp,
3713 ifp = ifma->ifma_ifp;
3714 MCDPRINTF("%s freeing %p from %s \n", __func__, ifma, ifp ? ifp->if_xname : "");
3732 rt_newmaddrmsg(RTM_DELMADDR, ifma);
3733 ifma->ifma_ifp = NULL;
3737 if (--ifma->ifma_refcount > 0)
3740 if (ifp != NULL && detaching == 0 && (ifma->ifma_flags & IFMA_F_ENQUEUED)) {
3741 CK_STAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifmultiaddr, ifma_link);
3742 ifma->ifma_flags &= ~IFMA_F_ENQUEUED;
3745 * If this ifma is a network-layer ifma, a link-layer ifma may
3748 ll_ifma = ifma->ifma_llifma;
3750 KASSERT(ifma->ifma_lladdr != NULL,
3770 MPASS(ifma != ifmatmp);
3773 if_freemulti(ifma);
4292 struct ifmultiaddr *ifma;
4297 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
4298 if (ifma->ifma_addr->sa_family == AF_LINK)
4309 struct ifmultiaddr *ifma;
4316 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
4317 if (ifma->ifma_addr->sa_family != AF_LINK)
4319 count += (*cb)(cb_arg, (struct sockaddr_dl *)ifma->ifma_addr,