Lines Matching defs:ia

235 	struct in_ifaddr *ia;
240 IN_ADDRLIST_READER_FOREACH(ia) {
241 if ((in.s_addr & ia->ia_netmask) == ia->ia_net) {
247 IN_ADDRLIST_READER_FOREACH(ia) {
248 if ((in.s_addr & ia->ia_subnetmask) == ia->ia_subnet) {
271 #define ia (ifatoia(ifa))
276 ((in.s_addr & ia->ia_netmask) == ia->ia_net)) {
284 (in.s_addr & ia->ia_subnetmask) == ia->ia_subnet) {
293 #undef ia
343 struct in_ifaddr *ia;
348 IN_ADDRLIST_READER_FOREACH(ia) {
349 if ((ifp = ia->ia_ifp) == 0)
405 struct in_ifaddr *ia = NULL;
452 ia = in_get_ia_from_ifp_psref(ifp, &psref);
463 if (ia != NULL)
464 ia4_release(ia, &psref);
466 IN_ADDRHASH_READER_FOREACH(ia,
468 if (ia->ia_ifp == ifp &&
469 in_hosteq(ia->ia_addr.sin_addr,
473 if (ia != NULL)
474 ia4_acquire(ia, &psref);
480 ia == NULL) {
491 if (ia == NULL || ia->ia_addr.sin_family != AF_INET)
494 ifra->ifra_addr = ia->ia_addr;
496 } else if (in_hosteq(ia->ia_addr.sin_addr,
518 if (ia == NULL &&
532 if (ia == NULL) {
533 ia = malloc(sizeof(*ia), M_IFADDR, M_WAITOK|M_ZERO);
534 if (ia == NULL) {
538 ia->ia_ifa.ifa_addr = sintosa(&ia->ia_addr);
539 ia->ia_ifa.ifa_dstaddr = sintosa(&ia->ia_dstaddr);
540 ia->ia_ifa.ifa_netmask = sintosa(&ia->ia_sockmask);
542 ia->ia_ifa.ifa_getifa = in_getifa;
544 ia->ia_ifa.ifa_getifa = NULL;
546 ia->ia_sockmask.sin_len = 8;
547 ia->ia_sockmask.sin_family = AF_INET;
549 ia->ia_broadaddr.sin_len = sizeof(ia->ia_addr);
550 ia->ia_broadaddr.sin_family = AF_INET;
552 ia->ia_ifp = ifp;
553 ia->ia_idsalt = cprng_fast32() % 65535;
554 LIST_INIT(&ia->ia_multiaddrs);
555 IN_ADDRHASH_ENTRY_INIT(ia);
556 IN_ADDRLIST_ENTRY_INIT(ia);
557 ifa_psref_init(&ia->ia_ifa);
559 * We need a reference to make ia survive over in_ifinit
562 ifaref(&ia->ia_ifa);
582 if (ia == NULL) {
592 ifreq_setaddr(cmd, ifr, sintocsa(&ia->ia_addr));
600 ifreq_setdstaddr(cmd, ifr, sintocsa(&ia->ia_broadaddr));
608 ifreq_setdstaddr(cmd, ifr, sintocsa(&ia->ia_dstaddr));
617 oldaddr = ia->ia_sockmask;
627 oldaddr = ia->ia_dstaddr;
628 ia->ia_dstaddr = *satocsin(ifreq_getdstaddr(cmd, ifr));
629 if ((error = if_addr_init(ifp, &ia->ia_ifa, false)) != 0) {
630 ia->ia_dstaddr = oldaddr;
633 if (ia->ia_flags & IFA_ROUTE) {
634 ia->ia_ifa.ifa_dstaddr = sintosa(&oldaddr);
635 rtinit(&ia->ia_ifa, RTM_DELETE, RTF_HOST);
636 ia->ia_ifa.ifa_dstaddr = sintosa(&ia->ia_dstaddr);
637 rtinit(&ia->ia_ifa, RTM_ADD, RTF_HOST|RTF_UP);
646 ia->ia_broadaddr = *satocsin(ifreq_getbroadaddr(cmd, ifr));
651 in_addrhash_remove(ia);
654 error = in_ifinit(ifp, ia, satocsin(ifreq_getaddr(cmd, ifr)),
661 in_scrubprefix(ia);
662 ia->ia_sockmask = *satocsin(ifreq_getaddr(cmd, ifr));
663 ia->ia_subnetmask = ia->ia_sockmask.sin_addr.s_addr;
665 in_addrhash_remove(ia);
668 error = in_ifinit(ifp, ia, NULL, NULL, 0);
674 in_scrubprefix(ia);
675 ia->ia_sockmask = ifra->ifra_mask;
676 ia->ia_subnetmask = ia->ia_sockmask.sin_addr.s_addr;
688 in_addrhash_remove(ia);
691 error = in_ifinit(ifp, ia, &ifra->ifra_addr,
696 ia->ia_broadaddr = ifra->ifra_broadaddr;
701 ifra->ifra_mask = ia->ia_sockmask;
703 (ia->ia_dstaddr.sin_family == AF_INET))
704 ifra->ifra_dstaddr = ia->ia_dstaddr;
706 (ia->ia_broadaddr.sin_family == AF_INET))
707 ifra->ifra_broadaddr = ia->ia_broadaddr;
714 ifr->ifr_addrflags = ia->ia4_flags;
718 ia4_release(ia, &psref);
719 ifaref(&ia->ia_ifa);
720 in_purgeaddr(&ia->ia_ifa);
721 pfil_run_addrhooks(if_pfil, cmd, &ia->ia_ifa);
722 ifafree(&ia->ia_ifa);
723 ia = NULL;
743 ifaref(&ia->ia_ifa);
744 ifa_insert(ifp, &ia->ia_ifa);
747 TAILQ_INSERT_TAIL(&in_ifaddrhead, ia, ia_list);
748 IN_ADDRLIST_WRITER_INSERT_TAIL(ia);
749 in_addrhash_insert_locked(ia);
751 ifafree(&ia->ia_ifa);
754 in_addrhash_insert(ia);
759 pfil_run_addrhooks(if_pfil, cmd, &ia->ia_ifa);
761 KASSERT(ia != NULL);
762 in_purgeaddr(&ia->ia_ifa);
763 ia = NULL;
767 if (!newifaddr && ia != NULL)
768 ia4_release(ia, &psref);
790 struct in_ifaddr *ia;
792 ia = (struct in_ifaddr *)ifa;
793 if ((ia->ia_ifp->if_flags & IFF_UNNUMBERED)) {
797 if (ia->ia_addr.sin_addr.s_addr == INADDR_ANY ||
798 (ia->ia_ifp->if_flags & IFF_POINTOPOINT &&
799 in_hosteq(ia->ia_dstaddr.sin_addr, ia->ia_addr.sin_addr)))
812 struct in_ifaddr *ia, *p;
819 ia = (struct in_ifaddr *)ifa;
820 if ((ia->ia_ifp->if_flags & IFF_UNNUMBERED)) {
831 if (!in_hosteq(p->ia_addr.sin_addr, ia->ia_addr.sin_addr))
833 if (p->ia_ifp != ia->ia_ifp)
853 in_scrubaddr(struct in_ifaddr *ia)
857 if (ia->ia_dad_stop != NULL)
858 ia->ia_dad_stop(&ia->ia_ifa);
860 in_scrubprefix(ia);
861 in_ifremlocal(&ia->ia_ifa);
864 if (ia->ia_allhosts != NULL) {
865 in_delmulti(ia->ia_allhosts);
866 ia->ia_allhosts = NULL;
881 struct in_ifaddr *ia = (void *) ifa;
887 in_scrubaddr(ia);
890 in_addrhash_remove_locked(ia);
891 TAILQ_REMOVE(&in_ifaddrhead, ia, ia_list);
892 IN_ADDRLIST_WRITER_REMOVE(ia);
893 ifa_remove(ifp, &ia->ia_ifa);
896 IN_ADDRHASH_ENTRY_DESTROY(ia);
897 IN_ADDRLIST_ENTRY_DESTROY(ia);
898 ifafree(&ia->ia_ifa);
903 in_addrhash_insert_locked(struct in_ifaddr *ia)
908 LIST_INSERT_HEAD(&IN_IFADDR_HASH(ia->ia_addr.sin_addr.s_addr), ia,
910 IN_ADDRHASH_ENTRY_INIT(ia);
911 IN_ADDRHASH_WRITER_INSERT_HEAD(ia);
915 in_addrhash_insert(struct in_ifaddr *ia)
919 in_addrhash_insert_locked(ia);
924 in_addrhash_remove_locked(struct in_ifaddr *ia)
929 LIST_REMOVE(ia, ia_hash);
930 IN_ADDRHASH_WRITER_REMOVE(ia);
934 in_addrhash_remove(struct in_ifaddr *ia)
938 in_addrhash_remove_locked(ia);
943 IN_ADDRHASH_ENTRY_DESTROY(ia);
1051 struct in_ifaddr *ia;
1100 ia = (struct in_ifaddr *)ifa;
1104 memcpy(&iflr->addr, &ia->ia_addr, ia->ia_addr.sin_len);
1107 memcpy(&iflr->dstaddr, &ia->ia_dstaddr,
1108 ia->ia_dstaddr.sin_len);
1113 in_mask2len(&ia->ia_sockmask.sin_addr);
1127 memcpy(&ifra.ifra_addr, &ia->ia_addr,
1128 ia->ia_addr.sin_len);
1130 memcpy(&ifra.ifra_dstaddr, &ia->ia_dstaddr,
1131 ia->ia_dstaddr.sin_len);
1133 memcpy(&ifra.ifra_dstaddr, &ia->ia_sockmask,
1134 ia->ia_sockmask.sin_len);
1150 in_ifinit(struct ifnet *ifp, struct in_ifaddr *ia,
1158 sin = &ia->ia_addr;
1160 dst = &ia->ia_dstaddr;
1165 oldaddr = ia->ia_addr;
1166 olddst = ia->ia_dstaddr;
1167 oldflags = ia->ia4_flags;
1168 ia->ia_addr = *sin;
1169 ia->ia_dstaddr = *dst;
1171 !in_hosteq(ia->ia_addr.sin_addr, oldaddr.sin_addr);
1173 scrub = oldaddr.sin_family != ia->ia_dstaddr.sin_family ||
1174 !in_hosteq(ia->ia_dstaddr.sin_addr, olddst.sin_addr);
1181 if (ia->ia4_flags & IN_IFF_DUPLICATED) {
1182 ia->ia4_flags &= ~IN_IFF_DUPLICATED;
1186 ia->ia4_flags |= IN_IFF_DETACHED;
1187 ia->ia4_flags &= ~IN_IFF_TENTATIVE;
1189 ia->ia4_flags |= IN_IFF_TRYTENTATIVE;
1197 error = if_addr_init(ifp, &ia->ia_ifa, true);
1200 ia->ia4_flags &= ~IN_IFF_TRYTENTATIVE;
1202 ia->ia_addr = oldaddr;
1203 ia->ia_dstaddr = olddst;
1204 ia->ia4_flags = oldflags;
1213 int newflags = ia->ia4_flags;
1215 ia->ia_ifa.ifa_addr = sintosa(&oldaddr);
1216 ia->ia_ifa.ifa_dstaddr = sintosa(&olddst);
1217 ia->ia4_flags = oldflags;
1219 in_scrubaddr(ia);
1221 in_scrubprefix(ia);
1222 ia->ia_ifa.ifa_addr = sintosa(&ia->ia_addr);
1223 ia->ia_ifa.ifa_dstaddr = sintosa(&ia->ia_dstaddr);
1224 ia->ia4_flags = newflags;
1227 i = ia->ia_addr.sin_addr.s_addr;
1229 ia->ia_netmask = INADDR_BROADCAST; /* default to /32 */
1231 ia->ia_netmask = IN_CLASSA_NET;
1233 ia->ia_netmask = IN_CLASSB_NET;
1235 ia->ia_netmask = IN_CLASSC_NET;
1241 if (ia->ia_subnetmask == 0) {
1242 ia->ia_subnetmask = ia->ia_netmask;
1243 ia->ia_sockmask.sin_addr.s_addr = ia->ia_subnetmask;
1245 ia->ia_netmask &= ia->ia_subnetmask;
1247 ia->ia_net = i & ia->ia_netmask;
1248 ia->ia_subnet = i & ia->ia_subnetmask;
1249 in_socktrim(&ia->ia_sockmask);
1254 ia->ia_ifa.ifa_metric = ifp->if_metric;
1256 if (ia->ia_subnetmask == IN_RFC3021_MASK) {
1257 ia->ia_broadaddr.sin_addr.s_addr = INADDR_BROADCAST;
1258 ia->ia_netbroadcast.s_addr = INADDR_BROADCAST;
1260 ia->ia_broadaddr.sin_addr.s_addr =
1261 ia->ia_subnet | ~ia->ia_subnetmask;
1262 ia->ia_netbroadcast.s_addr =
1263 ia->ia_net | ~ia->ia_netmask;
1266 ia->ia_dstaddr = ia->ia_addr;
1269 if (ia->ia_dstaddr.sin_family != AF_INET)
1275 in_ifaddlocal(&ia->ia_ifa);
1278 error = in_addprefix(ia, flags);
1285 if ((ifp->if_flags & IFF_MULTICAST) != 0 && ia->ia_allhosts == NULL) {
1289 ia->ia_allhosts = in_addmulti(&addr, ifp);
1294 ia->ia4_flags & IN_IFF_TENTATIVE &&
1296 ia->ia_dad_start((struct ifaddr *)ia);
1312 struct in_ifaddr *ia;
1326 IN_ADDRLIST_READER_FOREACH(ia) {
1327 if (rtinitflags(ia))
1328 p = ia->ia_dstaddr.sin_addr;
1330 p = ia->ia_addr.sin_addr;
1331 p.s_addr &= ia->ia_sockmask.sin_addr.s_addr;
1337 if ((ia->ia_ifp->if_flags & IFF_UNNUMBERED))
1346 if (ia->ia_flags & IFA_ROUTE) {
1391 struct in_ifaddr *ia;
1409 IN_ADDRLIST_READER_FOREACH(ia) {
1410 if (rtinitflags(ia))
1411 p = ia->ia_dstaddr.sin_addr;
1413 p = ia->ia_addr.sin_addr;
1414 p.s_addr &= ia->ia_sockmask.sin_addr.s_addr;
1420 if ((ia->ia_ifp->if_flags & IFF_UNNUMBERED))
1426 if ((ia->ia_flags & IFA_ROUTE) == 0) {
1430 ia4_acquire(ia, &psref);
1437 error = rtinit(&ia->ia_ifa, RTM_ADD,
1438 rtinitflags(ia) | RTF_UP);
1440 ia->ia_flags |= IFA_ROUTE;
1449 in_rt_ifa_matcher, &target->ia_ifa, &ia->ia_ifa);
1452 ia4_release(ia, &psref);
1497 #define ia (ifatoia(ifa))
1501 !in_hosteq(in, ia->ia_addr.sin_addr) &&
1502 (in_hosteq(in, ia->ia_broadaddr.sin_addr) ||
1503 in_hosteq(in, ia->ia_netbroadcast) ||
1509 ia->ia_subnetmask != IN_RFC3021_MASK &&
1510 (in.s_addr == ia->ia_subnet ||
1511 in.s_addr == ia->ia_net)))) {
1518 #undef ia
1528 struct in_ifaddr *ia;
1547 ia = (struct in_ifaddr *)ifa;
1550 if (ia->ia4_flags & IN_IFF_DETACHED) {
1551 ia->ia4_flags &= ~IN_IFF_DETACHED;
1552 if (if_do_dad(ifp) && ia->ia_dad_start != NULL)
1553 ia->ia4_flags |= IN_IFF_TENTATIVE;
1554 else if ((ia->ia4_flags & IN_IFF_TENTATIVE) == 0)
1558 if (ia->ia4_flags & IN_IFF_TENTATIVE) {
1560 ia->ia4_flags &= ~IN_IFF_DUPLICATED;
1561 ia->ia_dad_start(ifa);
1586 struct in_ifaddr *ia;
1599 ia = (struct in_ifaddr *)ifa;
1602 if (ia->ia_dad_stop != NULL)
1603 ia->ia_dad_stop(ifa);
1608 if (!(ia->ia4_flags & IN_IFF_DETACHED)) {
1609 ia->ia4_flags |= IN_IFF_DETACHED;
1610 ia->ia4_flags &=
1843 struct in_ifaddr *ia = NULL;
1885 ia = ifatoia(ifa);
1887 if (ia == NULL) {
1898 IN_ADDRLIST_READER_FOREACH(ia) {
1899 if (!(ia->ia_ifp->if_flags & IFF_LOOPBACK))
1902 if (ia != NULL)
1903 ia4_acquire(ia, psref);
1906 /* ia is already referenced by psref */
1907 ia = ifatoia(ifa);
1909 if (ia == NULL) {
1927 if (ia != NULL)
1928 ia4_release(ia, psref);
1933 ia = in_get_ia_from_ifp_psref(ifp, psref);
1935 ia = NULL;
1936 if (ia == NULL || ia->ia4_flags & IN_IFF_NOTREADY) {
1938 if (ia != NULL)
1939 ia4_release(ia, psref);
1941 ia = NULL;
1947 if (ia->ia_ifa.ifa_getifa != NULL) {
1948 ia = ifatoia((*ia->ia_ifa.ifa_getifa)(&ia->ia_ifa,
1950 if (ia == NULL) {
1955 ia4_acquire(ia, psref);
1963 return ia;