Lines Matching defs:ia

137 	struct in_ifaddr *ia;
141 CK_STAILQ_FOREACH(ia, &V_in_ifaddrhead, ia_link) {
142 if ((i & ia->ia_subnetmask) == ia->ia_subnet)
156 struct in_ifaddr *ia;
160 CK_LIST_FOREACH(ia, INADDR_HASH(in.s_addr), ia_hash)
161 if (IA_SIN(ia)->sin_addr.s_addr == in.s_addr)
173 struct in_ifaddr *ia;
177 CK_LIST_FOREACH(ia, INADDR_HASH(in.s_addr), ia_hash)
178 if (IA_SIN(ia)->sin_addr.s_addr == in.s_addr &&
179 (ia->ia_ifa.ifa_carp == NULL ||
180 carp_master_p(&ia->ia_ifa)) &&
181 ia->ia_ifa.ifa_ifp->if_fib == fib)
194 struct in_ifaddr *ia;
201 ia = (struct in_ifaddr *)ifa;
202 if (ia->ia_addr.sin_addr.s_addr == in.s_addr)
219 struct in_ifaddr *ia;
222 CK_LIST_FOREACH(ia, INADDR_HASH(original_addr), ia_hash) {
223 in_addr_t addr = IA_SIN(ia)->sin_addr.s_addr;
224 uint32_t fib = ia->ia_ifa.ifa_ifp->if_fib;
227 if ((original_ia != ia) && (original_addr == addr)) {
228 ifa_ref(&ia->ia_ifa);
230 return (ia);
248 struct in_ifaddr *ia = NULL, *ia_lo = NULL;
252 CK_STAILQ_FOREACH(ia, &V_in_ifaddrhead, ia_link) {
253 uint32_t ia_fib = ia->ia_ifa.ifa_ifp->if_fib;
257 if (!IN_LOOPBACK(ntohl(IA_SIN(ia)->sin_addr.s_addr)))
260 ia_lo = ia;
263 if (ia == NULL)
264 ia = ia_lo;
266 return (ia);
337 struct in_ifaddr *ia;
394 ia = (struct in_ifaddr *)ifa;
395 if (ia->ia_addr.sin_addr.s_addr == addr->sin_addr.s_addr)
401 ia = (struct in_ifaddr *)ifa;
403 &ia->ia_addr.sin_addr) == 0)
415 *addr = ia->ia_addr;
423 *addr = ia->ia_broadaddr;
431 *addr = ia->ia_dstaddr;
435 *addr = ia->ia_sockmask;
483 struct in_ifaddr *ia;
524 ia = NULL;
535 ia = it;
541 if (ia != NULL)
545 ia = (struct in_ifaddr *)ifa;
546 ifa->ifa_addr = (struct sockaddr *)&ia->ia_addr;
547 ifa->ifa_dstaddr = (struct sockaddr *)&ia->ia_dstaddr;
548 ifa->ifa_netmask = (struct sockaddr *)&ia->ia_sockmask;
549 callout_init_rw(&ia->ia_garp_timer, &ifp->if_addr_lock,
552 ia->ia_ifp = ifp;
553 ia->ia_addr = *addr;
555 ia->ia_sockmask = *mask;
556 ia->ia_subnetmask = ntohl(ia->ia_sockmask.sin_addr.s_addr);
571 ia->ia_subnetmask = IN_CLASSA_NET;
573 ia->ia_subnetmask = IN_CLASSB_NET;
575 ia->ia_subnetmask = IN_CLASSC_NET;
576 ia->ia_sockmask.sin_addr.s_addr = htonl(ia->ia_subnetmask);
578 ia->ia_subnet = ntohl(addr->sin_addr.s_addr) & ia->ia_subnetmask;
579 in_socktrim(&ia->ia_sockmask);
583 ia->ia_broadaddr = *broadaddr;
584 } else if (ia->ia_subnetmask == IN_RFC3021_MASK) {
585 ia->ia_broadaddr.sin_addr.s_addr = INADDR_BROADCAST;
586 ia->ia_broadaddr.sin_len = sizeof(struct sockaddr_in);
587 ia->ia_broadaddr.sin_family = AF_INET;
589 ia->ia_broadaddr.sin_addr.s_addr =
590 htonl(ia->ia_subnet | ~ia->ia_subnetmask);
591 ia->ia_broadaddr.sin_len = sizeof(struct sockaddr_in);
592 ia->ia_broadaddr.sin_family = AF_INET;
597 ia->ia_dstaddr = *dstaddr;
600 error = (*carp_attach_p)(&ia->ia_ifa, vhid);
612 CK_STAILQ_INSERT_TAIL(&V_in_ifaddrhead, ia, ia_link);
613 CK_LIST_INSERT_HEAD(INADDR_HASH(ia->ia_addr.sin_addr.s_addr), ia,
622 error = (*ifp->if_ioctl)(ifp, SIOCSIFADDR, (caddr_t)ia);
631 error = in_addprefix(ia);
639 if (vhid == 0 && ia_need_loopback_route(ia)) {
642 eia = in_localip_more(ia);
645 error = ifa_add_loopback_route((struct ifaddr *)ia,
646 (struct sockaddr *)&ia->ia_addr);
675 (void )in_scrubprefix(ia, LLE_STATIC);
678 if (ia->ia_ifa.ifa_carp)
679 (*carp_detach_p)(&ia->ia_ifa, false);
682 CK_STAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifaddr, ifa_link);
684 ifa_free(&ia->ia_ifa); /* if_addrhead */
687 CK_STAILQ_REMOVE(&V_in_ifaddrhead, ia, in_ifaddr, ia_link);
688 CK_LIST_REMOVE(ia, ia_hash);
689 ifa_free(&ia->ia_ifa); /* in_ifaddrhead */
701 struct in_ifaddr *ia;
718 ia = NULL;
727 if (deleteAny && ia == NULL && (cred == NULL ||
729 ia = it;
734 ia = it;
736 if (it != ia)
740 if (ia == NULL) {
745 CK_STAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifaddr, ifa_link);
747 ifa_free(&ia->ia_ifa); /* if_addrhead */
750 CK_STAILQ_REMOVE(&V_in_ifaddrhead, ia, in_ifaddr, ia_link);
751 CK_LIST_REMOVE(ia, ia_hash);
756 in_scrubprefix(ia, LLE_STATIC);
764 in_ifadown(&ia->ia_ifa, 1);
766 if (ia->ia_ifa.ifa_carp)
767 (*carp_detach_p)(&ia->ia_ifa, cmd == SIOCAIFADDR);
785 if (callout_stop(&ia->ia_garp_timer) == 1) {
786 ifa_free(&ia->ia_ifa);
790 EVENTHANDLER_INVOKE(ifaddr_event_ext, ifp, &ia->ia_ifa,
792 ifa_free(&ia->ia_ifa); /* in_ifaddrhead */
804 struct in_ifaddr *ia;
816 ia = NULL;
827 ia = it;
831 if (ia == NULL) {
836 ifra->ifra_mask = ia->ia_sockmask;
838 ia->ia_dstaddr.sin_family == AF_INET)
839 ifra->ifra_dstaddr = ia->ia_dstaddr;
841 ia->ia_broadaddr.sin_family == AF_INET)
842 ifra->ifra_broadaddr = ia->ia_broadaddr;
915 * * add "prefix" route towards 192.0.2.0/24 via @ia interface,
916 * using @ia as an address source.
918 * @ia ifp in the gateway and using @ia as an address source.
922 * * add "prefix" host route via V_loif, using @ia as an address source.
926 * * add "prefix" host route towards 10.0.0.2 via this interface, using @ia
930 * @ia ifp in the gateway and using @ia as an address source.
934 * * add "prefix" host route via @ia interface, using @ia as an address source.
940 * Checks if @ia needs to install loopback route to @ia address via
946 ia_need_loopback_route(const struct in_ifaddr *ia)
948 struct ifnet *ifp = ia->ia_ifp;
952 (ia->ia_addr.sin_addr.s_addr == INADDR_ANY))
957 ia->ia_dstaddr.sin_addr.s_addr == ia->ia_addr.sin_addr.s_addr)
962 (ia->ia_sockmask.sin_addr.s_addr == INADDR_BROADCAST))
969 * Calculate "prefix" route corresponding to @ia.
972 ia_getrtprefix(const struct in_ifaddr *ia, struct in_addr *prefix, struct in_addr *mask)
975 if (ia->ia_ifp->if_flags & IFF_POINTOPOINT) {
977 *prefix = ia->ia_dstaddr.sin_addr;
979 } else if (ia->ia_ifp->if_flags & IFF_LOOPBACK) {
981 *prefix = ia->ia_addr.sin_addr;
984 /* Cases 1,2: return actual ia prefix */
985 *prefix = ia->ia_addr.sin_addr;
986 *mask = ia->ia_sockmask.sin_addr;
996 in_handle_ifaddr_route(int cmd, struct in_ifaddr *ia)
998 struct ifaddr *ifa = &ia->ia_ifa;
1004 ia_getrtprefix(ia, &daddr, &maddr);
1020 struct ifnet *ifp = ia->ia_ifp;
1023 (!(ia->ia_ifp->if_flags & (IFF_POINTOPOINT|IFF_LOOPBACK)))) {
1043 struct in_ifaddr *ia;
1051 CK_STAILQ_FOREACH(ia, &V_in_ifaddrhead, ia_link) {
1052 ia_getrtprefix(ia, &p, &m);
1058 if (target->ia_ifp->if_fib != ia->ia_ifp->if_fib)
1065 if (ia->ia_flags & IFA_ROUTE) {
1101 * Removes either all lle entries for given @ia, or lle
1102 * corresponding to @ia address.
1105 in_scrubprefixlle(struct in_ifaddr *ia, int all, u_int flags)
1119 mask.sin_addr.s_addr = ia->ia_subnetmask;
1120 ifp = ia->ia_ifp;
1129 addr.sin_addr.s_addr = ntohl(ia->ia_addr.sin_addr.s_addr);
1133 addr.sin_addr.s_addr = ia->ia_addr.sin_addr.s_addr;
1147 struct in_ifaddr *ia;
1185 CK_STAILQ_FOREACH(ia, &V_in_ifaddrhead, ia_link) {
1186 ia_getrtprefix(ia, &p, &m);
1192 if ((ia->ia_ifp->if_flags & IFF_UP) == 0)
1200 if ((ia->ia_flags & IFA_ROUTE) == 0) {
1201 ifa_ref(&ia->ia_ifa);
1210 in_scrubprefixlle(target, target->ia_ifp != ia->ia_ifp,
1212 error = in_handle_ifaddr_route(RTM_ADD, ia);
1214 ia->ia_flags |= IFA_ROUTE;
1218 ifa_free(&ia->ia_ifa);
1273 in_ifaddr_broadcast(struct in_addr in, struct in_ifaddr *ia)
1276 return ((in.s_addr == ia->ia_broadaddr.sin_addr.s_addr ||
1281 (V_broadcast_lowest && ia->ia_subnetmask != IN_RFC3021_MASK &&
1282 ntohl(in.s_addr) == ia->ia_subnet)) &&
1288 ia->ia_subnetmask != (u_long)0xffffffff);
1347 struct in_ifaddr *ia;
1356 ia = (struct in_ifaddr *)ifa;
1357 if ((ia->ia_flags & IFA_ROUTE) == 0)
1363 in_scrubprefix(ia, 0);
1379 ia = (struct in_ifaddr *)ifa;
1380 if (ia->ia_flags & IFA_ROUTE)
1385 error = in_handle_ifaddr_route(RTM_ADD, ia);
1387 ia->ia_flags |= IFA_ROUTE;
1585 struct in_ifaddr *ia = (struct in_ifaddr *)ifaof_ifpforaddr(l3addr, ifp);
1588 if (ia == NULL)
1596 dst_addr = IA_SIN(ia)->sin_addr;
1597 mask_addr.s_addr = htonl(ia->ia_subnetmask);