Lines Matching refs:ifp
312 if_link(struct interface *ifp, uint32_t ifindex) in if_link() argument
316 link_in((void **)&ifnet, ifp, offsetof(struct interface, int_link)); in if_link()
318 HADD(&ahash_tbl, ifp); in if_link()
319 HADD(&nhash_tbl, ifp); in if_link()
321 if (ifp->int_if_flags & IFF_BROADCAST) in if_link()
322 HADD(&bhash_tbl, ifp); in if_link()
339 size = strcspn(ifp->int_name, ":"); in if_link()
340 (void) strncpy(phyi->phyi_name, ifp->int_name, in if_link()
345 link_in((void **)&phyi->phyi_interface, ifp, in if_link()
347 ifp->int_phys = phyi; in if_link()
357 struct interface *ifp, *possible = NULL; in ifwithaddr() local
362 for (ifp = HFIRST(&ahash_tbl, &addr); ifp != NULL; in ifwithaddr()
363 ifp = ifp->int_ahash.hl_next) { in ifwithaddr()
364 if (ifp->int_addr != addr) in ifwithaddr()
366 if (ifp->int_state & remote_state) in ifwithaddr()
368 if (!(ifp->int_state & (IS_BROKE | IS_PASSIVE))) in ifwithaddr()
369 return (ifp); in ifwithaddr()
370 possible = ifp; in ifwithaddr()
376 for (ifp = HFIRST(&bhash_tbl, &addr); ifp != NULL; in ifwithaddr()
377 ifp = ifp->int_bhash.hl_next) { in ifwithaddr()
378 if (ifp->int_brdaddr != addr) in ifwithaddr()
380 if (ifp->int_state & remote_state) in ifwithaddr()
382 if (!(ifp->int_state & (IS_BROKE | IS_PASSIVE))) in ifwithaddr()
383 return (ifp); in ifwithaddr()
384 possible = ifp; in ifwithaddr()
395 struct interface *ifp; in ifwithname() local
398 for (ifp = HFIRST(&nhash_tbl, name); ifp != NULL; in ifwithname()
399 ifp = ifp->int_nhash.hl_next) { in ifwithname()
400 if (strcmp(ifp->int_name, name) == 0) in ifwithname()
401 return (ifp); in ifwithname()
437 struct interface *ifp; in findremoteif() local
439 for (ifp = HFIRST(&ahash_tbl, &addr); ifp != NULL; in findremoteif()
440 ifp = ifp->int_ahash.hl_next) { in findremoteif()
441 if ((ifp->int_state & IS_REMOTE) && ifp->int_addr == addr) in findremoteif()
442 return (ifp); in findremoteif()
451 struct interface *ifp; in findifaddr() local
453 for (ifp = HFIRST(&ahash_tbl, &addr); ifp != NULL; in findifaddr()
454 ifp = ifp->int_ahash.hl_next) { in findifaddr()
455 if (ifp->int_addr == addr) in findifaddr()
456 return (ifp); in findifaddr()
495 addr_on_ifp(in_addr_t addr, struct interface *ifp, in addr_on_ifp() argument
503 if (ifp->int_state & IS_DUP) in addr_on_ifp()
506 if (ifp->int_if_flags & IFF_POINTOPOINT) { in addr_on_ifp()
507 if (ifp->int_dstaddr == addr) { in addr_on_ifp()
512 if (ifp->int_addr == addr) { in addr_on_ifp()
513 if (IS_PASSIVE_IFP(ifp)) in addr_on_ifp()
516 ifp->int_name); in addr_on_ifp()
522 if (on_net(addr, ifp->int_net, ifp->int_mask) && in addr_on_ifp()
524 ifp->int_mask > p_best->int_mask)) { in addr_on_ifp()
525 *best = ifp; in addr_on_ifp()
541 struct interface *ifp, *maybe; in iflookup() local
545 for (ifp = ifnet; ifp != NULL; ifp = ifp->int_next) { in iflookup()
548 if (addr_on_ifp(addr, ifp, &maybe)) in iflookup()
549 return (ifp); in iflookup()
576 const struct interface *ifp) /* as seen on this interface */ in ripv1_mask_net() argument
584 if (ifp != NULL && ifp->int_ripv1_mask != HOST_MASK) { in ripv1_mask_net()
589 if (on_net(addr, ifp->int_net, ifp->int_std_mask)) in ripv1_mask_net()
590 mask = ifp->int_ripv1_mask; in ripv1_mask_net()
600 for (ifp = ifnet; ifp != NULL; ifp = ifp->int_next) { in ripv1_mask_net()
601 if (on_net(addr, ifp->int_std_net, ifp->int_std_mask) && in ripv1_mask_net()
602 ifp->int_ripv1_mask > mask && in ripv1_mask_net()
603 ifp->int_ripv1_mask != HOST_MASK) in ripv1_mask_net()
604 mask = ifp->int_ripv1_mask; in ripv1_mask_net()
636 const struct interface *ifp) /* as seen on this interface */ in ripv1_mask_host() argument
638 in_addr_t mask = ripv1_mask_net(addr, ifp); in ripv1_mask_host()
692 struct interface *ifp; in check_dup() local
697 for (ifp = ifnet; ifp != NULL; ifp = ifp->int_next) { in check_dup()
699 if (name != NULL && strcmp(name, ifp->int_name) == 0) in check_dup()
708 if (!allowdups && (ifp->int_state & IS_DUP)) in check_dup()
711 if (ifp->int_mask != mask) in check_dup()
714 if (!IS_IFF_UP(ifp->int_if_flags)) in check_dup()
721 if ((ifp->int_addr == addr && in check_dup()
722 ((if_flags|ifp->int_if_flags) & IFF_POINTOPOINT) == 0) || in check_dup()
723 on_net(ifp->int_dstaddr, dstaddr_h, mask)) { in check_dup()
725 if (!(ifp->int_state & IS_ALIAS)) in check_dup()
727 if (!IS_RIP_OUT_OFF(ifp->int_state)) in check_dup()
729 if (IS_IFF_ROUTING(ifp->int_if_flags)) in check_dup()
733 best_ifp = ifp; in check_dup()
746 check_remote(struct interface *ifp) in check_remote() argument
751 if (!(ifp->int_state & IS_REMOTE)) in check_remote()
754 rt = rtfind(ifp->int_addr); in check_remote()
757 on_net(ifp->int_addr, rt->rt_ifp->int_net, rt->rt_ifp->int_mask)) { in check_remote()
765 if (!(ifp->int_state & IS_BROKE)) { in check_remote()
767 naddr_ntoa(ifp->int_addr)); in check_remote()
768 if_bad(ifp, _B_FALSE); in check_remote()
775 ifdel(struct interface *ifp) in ifdel() argument
781 trace_if("Del", ifp); in ifdel()
783 ifp->int_state |= IS_BROKE; in ifdel()
786 link_out(ifp, offsetof(struct interface, int_link)); in ifdel()
787 hash_unlink(&ahash_tbl, ifp); in ifdel()
788 hash_unlink(&nhash_tbl, ifp); in ifdel()
789 if (ifp->int_if_flags & IFF_BROADCAST) in ifdel()
790 hash_unlink(&bhash_tbl, ifp); in ifdel()
793 if ((phyi = ifp->int_phys) != NULL) { in ifdel()
794 link_out(ifp, offsetof(struct interface, int_ilist)); in ifdel()
807 if (!(ifp->int_state & IS_DUP) && in ifdel()
808 (wire.if_new = check_dup(ifp->int_name, ifp->int_addr, in ifdel()
809 ifp->int_dstaddr, ifp->int_mask, ifp->int_if_flags, in ifdel()
814 wire.if_new->int_name, ifp->int_name); in ifdel()
817 wire.if_old = ifp; in ifdel()
818 wire.metric_delta = wire.if_new->int_metric - ifp->int_metric; in ifdel()
840 rip_mcast_off(ifp); in ifdel()
841 if (rip_sock_interface == ifp) in ifdel()
844 set_rdisc_mg(ifp, 0); in ifdel()
850 if (!(ifp->int_state & IS_DUP) && !IS_IFF_QUIET(ifp->int_if_flags)) { in ifdel()
852 if (!IS_RIP_OFF(ifp->int_state)) in ifdel()
854 if (!IS_RIP_OUT_OFF(ifp->int_state)) in ifdel()
856 if (IS_IFF_ROUTING(ifp->int_if_flags)) in ifdel()
866 (void) rn_walktree(rhead, walk_bad, ifp); in ifdel()
867 kern_flush_ifp(ifp); in ifdel()
869 if_bad_rdisc(ifp); in ifdel()
872 free(ifp); in ifdel()
878 if_sick(struct interface *ifp, boolean_t recurse) in if_sick() argument
882 if (0 == (ifp->int_state & (IS_SICK | IS_BROKE))) { in if_sick()
883 ifp->int_state |= IS_SICK; in if_sick()
884 ifp->int_act_time = NEVER; in if_sick()
885 trace_if("Chg", ifp); in if_sick()
888 if (recurse && ifp->int_phys != NULL) { in if_sick()
890 for (ifp1 = ifp->int_phys->phyi_interface; in if_sick()
892 if (ifp1 != ifp) in if_sick()
902 if_bad(struct interface *ifp, boolean_t recurse) in if_bad() argument
907 if (ifp->int_state & IS_BROKE) in if_bad()
912 ifp->int_state |= (IS_BROKE | IS_SICK); in if_bad()
913 ifp->int_act_time = NEVER; in if_bad()
914 ifp->int_query_time = NEVER; in if_bad()
917 trace_if("Chg", ifp); in if_bad()
919 if (recurse && ifp->int_phys != NULL) { in if_bad()
921 for (ifp1 = ifp->int_phys->phyi_interface; in if_bad()
923 if (ifp1 != ifp) in if_bad()
929 if (!(ifp->int_state & IS_DUP) && in if_bad()
930 (wire.if_new = check_dup(ifp->int_name, ifp->int_addr, in if_bad()
931 ifp->int_dstaddr, ifp->int_mask, ifp->int_if_flags, in if_bad()
935 wire.if_new->int_name, ifp->int_name); in if_bad()
936 wire.if_old = ifp; in if_bad()
937 wire.metric_delta = wire.if_new->int_metric - ifp->int_metric; in if_bad()
943 set_rdisc_mg(ifp, 0); in if_bad()
944 rip_mcast_off(ifp); in if_bad()
945 ifp->int_state |= IS_DUP; in if_bad()
951 if (rip_sock_interface == ifp) in if_bad()
954 (void) rn_walktree(rhead, walk_bad, ifp); in if_bad()
955 if_bad_rdisc(ifp); in if_bad()
962 if_ok(struct interface *ifp, const char *type, boolean_t recurse) in if_ok() argument
967 if (ifp->int_state & IS_BROKE) { in if_ok()
969 type, ifp->int_name, naddr_ntoa(ifp->int_dstaddr)); in if_ok()
970 ifp->int_state &= ~(IS_BROKE | IS_SICK); in if_ok()
972 } else if (ifp->int_state & IS_SICK) { in if_ok()
974 type, ifp->int_name, naddr_ntoa(ifp->int_dstaddr)); in if_ok()
975 ifp->int_state &= ~IS_SICK; in if_ok()
978 if (recurse && ifp->int_phys != NULL && IS_IFF_UP(ifp->int_if_flags)) { in if_ok()
979 ifp->int_phys->phyi_data.ts = 0; in if_ok()
982 for (ifp1 = ifp->int_phys->phyi_interface; in if_ok()
984 if (ifp1 != ifp) in if_ok()
990 if (!(ifp->int_state & IS_DUP)) in if_ok()
991 if_ok_rdisc(ifp); in if_ok()
993 if (ifp->int_state & IS_REMOTE) in if_ok()
994 (void) addrouteforif(ifp); in if_ok()
999 remote_address_ok(struct interface *ifp, in_addr_t addr) in remote_address_ok() argument
1001 if (ifp->int_if_flags & IFF_POINTOPOINT) { in remote_address_ok()
1002 if (addr == ifp->int_dstaddr) in remote_address_ok()
1004 } else if (on_net(addr, ifp->int_net, ifp->int_mask)) { in remote_address_ok()
1031 struct interface ifs, *ifp, *ifp1; in ifscan() local
1056 for (ifp = ifnet; ifp != NULL; ifp = ifp->int_next) in ifscan()
1057 ifp->int_state &= ~IS_CHECKED; in ifscan()
1348 ifp = check_dup(ifs.int_name, ifs.int_addr, ifs.int_dstaddr, in ifscan()
1350 if (ifp != NULL) { in ifscan()
1358 ifp->int_name, in ifscan()
1359 addrname(ifp->int_addr, ifp->int_mask, 1), in ifscan()
1360 ((ifp->int_if_flags & IFF_POINTOPOINT) ? in ifscan()
1362 ((ifp->int_if_flags & IFF_POINTOPOINT) ? in ifscan()
1363 naddr_ntoa(ifp->int_dstaddr) : "")); in ifscan()
1376 ifp = ifwithname(ifs.int_name); in ifscan()
1377 if (ifp != NULL) { in ifscan()
1378 ifp->int_state |= IS_CHECKED; in ifscan()
1379 ifp->int_state = (ifp->int_state & ~IS_DUP) | in ifscan()
1382 if ((ifp->int_phys == NULL && ifindex != 0) || in ifscan()
1383 (ifp->int_phys != NULL && in ifscan()
1384 ifp->int_phys->phyi_index != ifindex) || in ifscan()
1385 0 != ((ifp->int_if_flags ^ ifs.int_if_flags) in ifscan()
1389 ifp->int_addr != ifs.int_addr || in ifscan()
1390 ifp->int_brdaddr != ifs.int_brdaddr || in ifscan()
1391 ifp->int_dstaddr != ifs.int_dstaddr || in ifscan()
1392 ifp->int_mask != ifs.int_mask || in ifscan()
1393 ifp->int_metric != ifs.int_metric) { in ifscan()
1399 ifp->int_name); in ifscan()
1400 ifdel(ifp); in ifscan()
1401 ifp = NULL; in ifscan()
1405 if (ifp != NULL) { in ifscan()
1408 if (IS_IFF_UP(ifp->int_if_flags)) { in ifscan()
1411 ifp->int_name, in ifscan()
1412 naddr_ntoa(ifp->int_dstaddr)); in ifscan()
1413 if_bad(ifp, _B_FALSE); in ifscan()
1414 ifp->int_if_flags &= ~IFF_UP; in ifscan()
1415 } else if (ifp->int_phys != NULL && in ifscan()
1416 now.tv_sec > (ifp->int_phys->phyi_data.ts + in ifscan()
1420 ifp->int_name, in ifscan()
1422 ifp->int_phys->phyi_data.ts); in ifscan()
1423 ifdel(ifp); in ifscan()
1428 if (!IS_IFF_UP(ifp->int_if_flags)) { in ifscan()
1429 ifp->int_if_flags |= IFF_UP; in ifscan()
1430 if_ok(ifp, "", _B_FALSE); in ifscan()
1437 if ((phyi = ifp->int_phys) == NULL || in ifscan()
1443 if (get_if_kstats(ifp, &newstats) == -1) { in ifscan()
1488 if (!(ifp->int_state & IS_SICK)) { in ifscan()
1492 ifp->int_name, in ifscan()
1493 naddr_ntoa(ifp->int_dstaddr), in ifscan()
1495 if_sick(ifp, _B_TRUE); in ifscan()
1498 if (!(ifp->int_state & IS_BROKE)) { in ifscan()
1502 ifp->int_name, in ifscan()
1503 naddr_ntoa(ifp->int_dstaddr), in ifscan()
1505 if_bad(ifp, _B_TRUE); in ifscan()
1511 ifp->int_act_time = now.tv_sec; in ifscan()
1512 if_ok(ifp, "", _B_TRUE); in ifscan()
1539 ifp = rtmalloc(sizeof (*ifp), "ifscan ifp"); in ifscan()
1540 (void) memcpy(ifp, &ifs, sizeof (*ifp)); in ifscan()
1541 get_parms(ifp); in ifscan()
1542 if_link(ifp, ifindex); in ifscan()
1543 trace_if("Add", ifp); in ifscan()
1545 if (ifp->int_phys != NULL && in ifscan()
1546 get_if_kstats(ifp, &ifp->int_phys->phyi_data) == -1) { in ifscan()
1550 ifp->int_phys->phyi_name); in ifscan()
1555 if (!(ifp->int_if_flags & (IFF_POINTOPOINT|IFF_LOOPBACK))) { in ifscan()
1558 if (ifp1->int_mask == ifp->int_mask) in ifscan()
1571 if (ifp->int_phys == ifp1->int_phys) in ifscan()
1574 if (on_net(ifp->int_addr, in ifscan()
1577 ifp->int_net, ifp->int_mask)) { in ifscan()
1581 ifp->int_name, in ifscan()
1582 addrname(htonl(ifp->int_net), in ifscan()
1583 ifp->int_mask, 1), in ifscan()
1592 if (!(ifp->int_state & IS_DUP) && in ifscan()
1593 !IS_IFF_QUIET(ifp->int_if_flags)) { in ifscan()
1596 if (!IS_RIP_OFF(ifp->int_state)) in ifscan()
1598 if (!IS_RIP_OUT_OFF(ifp->int_state)) in ifscan()
1600 if (IS_IFF_ROUTING(ifp->int_if_flags)) in ifscan()
1603 if_ok_rdisc(ifp); in ifscan()
1604 rip_on(ifp); in ifscan()
1643 (ifp = ifwithaddr(myaddr, _B_FALSE, _B_FALSE)) != NULL && in ifscan()
1648 if (rt->rt_ifp != ifp || in ifscan()
1653 loop_rts.rts_ifp = ifp; in ifscan()
1662 loop_rts.rts_ifp = ifp; in ifscan()
1670 for (ifp = ifnet; ifp != NULL; ifp = ifp1) { in ifscan()
1671 ifp1 = ifp->int_next; /* because we may delete it */ in ifscan()
1674 if (!(ifp->int_state & (IS_CHECKED | IS_REMOTE))) { in ifscan()
1676 ifp->int_name); in ifscan()
1677 ifdel(ifp); in ifscan()
1681 if ((ifp->int_state & IS_BROKE) && in ifscan()
1682 !(ifp->int_state & IS_PASSIVE)) in ifscan()
1689 if (!(ifp->int_state & (IS_NO_RIPV1_OUT | IS_DUP)) && in ifscan()
1690 should_supply(ifp)) in ifscan()
1692 if (!(ifp->int_state & IS_NO_RIPV1_IN)) in ifscan()
1696 for (ifp = ifnet; ifp != NULL; ifp = ifp->int_next) { in ifscan()
1702 if (addrouteforif(ifp) == 0) in ifscan()
1709 if ((ifp->int_if_flags & IFF_POINTOPOINT) && in ifscan()
1710 !(ifp->int_state & IS_REMOTE) && foundloopback) { in ifscan()
1715 del_static(ifp->int_addr, HOST_MASK, 0, ifp, 0); in ifscan()
1716 rt = rtget(ifp->int_addr, HOST_MASK); in ifscan()
1723 rt->rt_metric > ifp->int_metric) { in ifscan()
1724 ifp1 = ifp; in ifscan()
1735 loop_rts.rts_ifp = ifp; in ifscan()
1738 rtadd(ifp->int_addr, HOST_MASK, in ifscan()
1768 check_net_syn(struct interface *ifp) in check_net_syn() argument
1779 ifp->int_state |= IS_NEED_NET_SYN; in check_net_syn()
1780 rt = rtget(ifp->int_std_addr, ifp->int_std_mask); in check_net_syn()
1784 rt->rt_metric > ifp->int_metric)) { in check_net_syn()
1790 new.rts_ifp = ifp; in check_net_syn()
1791 new.rts_gate = ifp->int_addr; in check_net_syn()
1792 new.rts_router = ifp->int_addr; in check_net_syn()
1793 new.rts_metric = ifp->int_metric; in check_net_syn()
1795 rtadd(ifp->int_std_addr, ifp->int_std_mask, in check_net_syn()
1800 ifp->int_state &= ~IS_NEED_NET_SYN; in check_net_syn()
1802 rt = rtget(ifp->int_std_addr, ifp->int_std_mask); in check_net_syn()
1805 rt->rt_ifp == ifp) in check_net_syn()
1817 addrouteforif(struct interface *ifp) in addrouteforif() argument
1826 if (ifp->int_state & IS_BROKE) in addrouteforif()
1833 if ((ifp->int_state & IS_DUP) || in addrouteforif()
1834 ((ifp->int_if_flags & IFF_POINTOPOINT) && ifp->int_dstaddr == 0)) in addrouteforif()
1841 if (ifp->int_state & IS_SUBNET) in addrouteforif()
1842 check_net_syn(ifp); in addrouteforif()
1844 dst = (0 != (ifp->int_if_flags & (IFF_POINTOPOINT | IFF_LOOPBACK)) ? in addrouteforif()
1845 ifp->int_dstaddr : htonl(ifp->int_net)); in addrouteforif()
1848 new.rts_ifp = ifp; in addrouteforif()
1849 new.rts_router = ifp->int_addr; in addrouteforif()
1850 new.rts_gate = ifp->int_addr; in addrouteforif()
1851 new.rts_metric = ifp->int_metric; in addrouteforif()
1853 if (ifp->int_if_flags & IFF_POINTOPOINT) in addrouteforif()
1855 else if (ifp->int_if_flags & IFF_LOOPBACK) in addrouteforif()
1864 if ((ifp->int_state & IS_REMOTE) && in addrouteforif()
1865 !(ifp->int_state & IS_EXTERNAL) && in addrouteforif()
1866 !check_remote(ifp)) in addrouteforif()
1874 del_static(dst, ifp->int_mask, 0, ifp, 0); in addrouteforif()
1875 rt = rtget(dst, ifp->int_mask); in addrouteforif()
1876 if (!IS_IFF_ROUTING(ifp->int_if_flags)) in addrouteforif()
1879 if ((rt->rt_ifp != ifp || rt->rt_router != ifp->int_addr) && in addrouteforif()
1890 if (ifp->int_transitions++ > 0) in addrouteforif()
1893 ifp->int_name, ifp->int_transitions); in addrouteforif()
1895 rtadd(dst, ifp->int_mask, rt_newstate, &new); in addrouteforif()
1924 get_if_kstats(struct interface *ifp, struct phyi_data *newdata) in get_if_kstats() argument
1926 struct physical_interface *phyi = ifp->int_phys; in get_if_kstats()
1963 if (!(ifp->int_if_flags & IFF_LOOPBACK)) { in get_if_kstats()
1987 should_supply(struct interface *ifp) in should_supply() argument
1989 if (ifp != NULL && !IS_IFF_ROUTING(ifp->int_if_flags)) in should_supply()