Lines Matching defs:ifa

190  * pointer to the softc of its vhid, ifa->ifa_carp. That could be either
315 #define IFNET_FOREACH_IFA(ifp, ifa) \
316 CK_STAILQ_FOREACH((ifa), &(ifp)->if_addrhead, ifa_link) \
317 if ((ifa)->ifa_carp != NULL)
319 #define CARP_FOREACH_IFA(sc, ifa) \
323 ((ifa) = sc->sc_ifas[_i]) != NULL; \
389 struct ifaddr *ifa;
419 CARP_FOREACH_IFA(sc, ifa) {
420 in.s_addr = ifatoia(ifa)->ia_addr.sin_addr.s_addr;
421 if (ifa->ifa_addr->sa_family == AF_INET &&
438 CARP_FOREACH_IFA(sc, ifa) {
439 in6 = ifatoia6(ifa)->ia_addr.sin6_addr;
442 if (ifa->ifa_addr->sa_family == AF_INET6 &&
746 carp_source_is_self(const struct mbuf *m, struct ifaddr *ifa, sa_family_t af)
761 in4 = ifatoia(ifa)->ia_addr.sin_addr;
767 in6 = ifatoia6(ifa)->ia_addr.sin6_addr;
780 struct ifaddr *ifa, *match;
798 IFNET_FOREACH_IFA(ifp, ifa) {
799 if (match == NULL && ifa->ifa_carp != NULL &&
800 ifa->ifa_addr->sa_family == af &&
801 ifa->ifa_carp->sc_vhid == vhid)
802 match = ifa;
803 if (vhid == 0 && carp_source_is_self(m, ifa, af))
806 ifa = error ? NULL : match;
807 if (ifa != NULL)
808 ifa_ref(ifa);
810 if (ifa == NULL) {
820 return (ifa);
827 struct ifaddr *ifa;
836 ifa = carp_find_ifa(m, af, ch->carp_vhid);
837 if (ifa == NULL) {
842 sc = ifa->ifa_carp;
852 ifa_free(ifa);
857 if (ifa->ifa_addr->sa_family == AF_INET) {
862 ifa_free(ifa);
951 struct ifaddr *ifa;
957 ifa = carp_find_ifa(m, af, vh->vrrp_vrtid);
958 if (ifa == NULL) {
963 sc = ifa->ifa_carp;
966 ifa_free(ifa);
1188 struct ifaddr *ifa, *best;
1195 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
1196 if (ifa->ifa_addr->sa_family == af &&
1197 (best == NULL || ifa_preferred(best, ifa)))
1198 best = ifa;
1210 struct ifaddr *ifa;
1261 ifa = carp_best_ifa(AF_INET, sc->sc_carpdev);
1262 if (ifa != NULL) {
1264 ifatoia(ifa)->ia_addr.sin_addr.s_addr;
1265 ifa_free(ifa);
1312 ifa = carp_best_ifa(AF_INET6, sc->sc_carpdev);
1313 if (ifa != NULL) {
1314 bcopy(IFA_IN6(ifa), &ip6->ip6_src,
1316 ifa_free(ifa);
1358 struct ifaddr *ifa;
1400 ifa = carp_best_ifa(AF_INET, sc->sc_carpdev);
1401 if (ifa != NULL) {
1403 ifatoia(ifa)->ia_addr.sin_addr.s_addr;
1404 ifa_free(ifa);
1473 ifa = carp_best_ifa(AF_INET6, sc->sc_carpdev);
1474 if (ifa != NULL) {
1475 bcopy(IFA_IN6(ifa), &ip6->ip6_src,
1477 ifa_free(ifa);
1538 struct ifaddr *ifa;
1540 CARP_FOREACH_IFA(sc, ifa)
1541 carp_ifa_addroute(ifa);
1545 carp_ifa_addroute(struct ifaddr *ifa)
1548 switch (ifa->ifa_addr->sa_family) {
1551 in_addprefix(ifatoia(ifa));
1552 ifa_add_loopback_route(ifa,
1553 (struct sockaddr *)&ifatoia(ifa)->ia_addr);
1558 ifa_add_loopback_route(ifa,
1559 (struct sockaddr *)&ifatoia6(ifa)->ia_addr);
1560 nd6_add_ifa_lle(ifatoia6(ifa));
1569 struct ifaddr *ifa;
1571 CARP_FOREACH_IFA(sc, ifa)
1572 carp_ifa_delroute(ifa);
1576 carp_ifa_delroute(struct ifaddr *ifa)
1579 switch (ifa->ifa_addr->sa_family) {
1582 ifa_del_loopback_route(ifa,
1583 (struct sockaddr *)&ifatoia(ifa)->ia_addr);
1584 in_scrubprefix(ifatoia(ifa), LLE_STATIC);
1589 ifa_del_loopback_route(ifa,
1590 (struct sockaddr *)&ifatoia6(ifa)->ia_addr);
1591 nd6_rem_ifa_lle(ifatoia6(ifa), 1);
1598 carp_master(struct ifaddr *ifa)
1600 struct carp_softc *sc = ifa->ifa_carp;
1614 struct ifaddr *ifa;
1619 CARP_FOREACH_IFA(sc, ifa) {
1620 if (ifa->ifa_addr->sa_family != AF_INET)
1622 addr = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
1628 carp_iamatch(struct ifaddr *ifa, uint8_t **enaddr)
1630 struct carp_softc *sc = ifa->ifa_carp;
1646 struct ifaddr *ifa;
1649 CARP_FOREACH_IFA(sc, ifa) {
1650 if (ifa->ifa_addr->sa_family != AF_INET6)
1653 in6 = IFA_IN6(ifa);
1661 * Returns ifa in case it's a carp address and it is MASTER, or if the address
1667 struct ifaddr *ifa;
1671 ifa = NULL;
1672 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
1673 if (ifa->ifa_addr->sa_family != AF_INET6)
1675 if (!IN6_ARE_ADDR_EQUAL(taddr, IFA_IN6(ifa)))
1677 if (ifa->ifa_carp && ifa->ifa_carp->sc_state != MASTER)
1678 ifa = NULL;
1680 ifa_ref(ifa);
1684 return (ifa);
1690 struct ifaddr *ifa;
1694 IFNET_FOREACH_IFA(ifp, ifa)
1695 if (ifa->ifa_addr->sa_family == AF_INET6 &&
1696 IN6_ARE_ADDR_EQUAL(taddr, IFA_IN6(ifa))) {
1697 struct carp_softc *sc = ifa->ifa_carp;
2440 carp_get_vhid(struct ifaddr *ifa)
2443 if (ifa == NULL || ifa->ifa_carp == NULL)
2446 return (ifa->ifa_carp->sc_vhid);
2450 carp_attach(struct ifaddr *ifa, int vhid)
2452 struct ifnet *ifp = ifa->ifa_ifp;
2457 KASSERT(ifa->ifa_carp == NULL, ("%s: ifa %p attached", __func__, ifa));
2459 switch (ifa->ifa_addr->sa_family) {
2485 error = carp_multicast_setup(cif, ifa->ifa_addr->sa_family);
2496 switch (ifa->ifa_addr->sa_family) {
2511 ifa_ref(ifa);
2514 sc->sc_ifas[index - 1] = ifa;
2515 ifa->ifa_carp = sc;
2527 carp_detach(struct ifaddr *ifa, bool keep_cif)
2529 struct ifnet *ifp = ifa->ifa_ifp;
2531 struct carp_softc *sc = ifa->ifa_carp;
2534 KASSERT(sc != NULL, ("%s: %p not attached", __func__, ifa));
2542 if (sc->sc_ifas[i] == ifa)
2544 KASSERT(i < index, ("%s: %p no backref", __func__, ifa));
2549 switch (ifa->ifa_addr->sa_family) {
2564 carp_ifa_delroute(ifa);
2565 carp_multicast_cleanup(cif, ifa->ifa_addr->sa_family);
2567 ifa->ifa_carp = NULL;
2568 ifa_free(ifa);