Lines Matching refs:ifp

100 #define	PREF(p, ifp) ((p) <= (uint32_t)(ifp)->int_metric ? ((p) != 0 ? 1 : 0) \  argument
101 : (p) - ((ifp)->int_metric))
112 struct interface *ifp, in trace_rdisc() argument
129 ifp ? ifp->int_name : "?", in trace_rdisc()
146 ifp ? ifp->int_name : "?", in trace_rdisc()
216 set_rdisc_mg(struct interface *ifp, in set_rdisc_mg() argument
227 if ((ifp->int_state & IS_NO_RDISC) == IS_NO_RDISC || in set_rdisc_mg()
233 if (!(ifp->int_if_flags & IFF_MULTICAST)) { in set_rdisc_mg()
235 ifp->int_state &= ~(IS_ALL_HOSTS | IS_ALL_ROUTERS); in set_rdisc_mg()
239 dosupply = should_supply(ifp); in set_rdisc_mg()
242 m.imr_interface.s_addr = ((ifp->int_if_flags & IFF_POINTOPOINT) && in set_rdisc_mg()
243 (ifp->int_dstaddr != 0) ? ifp->int_dstaddr : ifp->int_addr); in set_rdisc_mg()
244 if (dosupply || (ifp->int_state & IS_NO_ADV_IN) || !on) { in set_rdisc_mg()
246 if (ifp->int_state & IS_ALL_HOSTS) { in set_rdisc_mg()
252 ifp->int_state &= ~IS_ALL_HOSTS; in set_rdisc_mg()
255 } else if (!(ifp->int_state & IS_ALL_HOSTS)) { in set_rdisc_mg()
262 ifp->int_state |= IS_ALL_HOSTS; in set_rdisc_mg()
266 if (!dosupply || (ifp->int_state & IS_NO_ADV_OUT) || in set_rdisc_mg()
267 !IS_IFF_ROUTING(ifp->int_if_flags) || !on) { in set_rdisc_mg()
269 if (ifp->int_state & IS_ALL_ROUTERS) { in set_rdisc_mg()
275 ifp->int_state &= ~IS_ALL_ROUTERS; in set_rdisc_mg()
278 } else if (!(ifp->int_state & IS_ALL_ROUTERS)) { in set_rdisc_mg()
285 ifp->int_state |= IS_ALL_ROUTERS; in set_rdisc_mg()
297 struct interface *ifp; in set_supplier() local
336 for (ifp = ifnet; ifp; ifp = ifp->int_next) { in set_supplier()
337 if (ifp->int_state & IS_BROKE) in set_supplier()
339 ifp->int_rdisc_cnt = 0; in set_supplier()
340 ifp->int_rdisc_timer.tv_usec = rdisc_timer.tv_usec; in set_supplier()
341 ifp->int_rdisc_timer.tv_sec = now.tv_sec+MIN_WAITTIME; in set_supplier()
342 set_rdisc_mg(ifp, 1); in set_supplier()
454 if_bad_rdisc(struct interface *ifp) in if_bad_rdisc() argument
459 if (drp->dr_ifp != ifp) in if_bad_rdisc()
494 if_ok_rdisc(struct interface *ifp) in if_ok_rdisc() argument
496 set_rdisc_mg(ifp, 1); in if_ok_rdisc()
498 ifp->int_rdisc_cnt = 0; in if_ok_rdisc()
499 ifp->int_rdisc_timer.tv_sec = now.tv_sec + in if_ok_rdisc()
500 ((ifp->int_state & IS_NO_ADV_OUT) ? in if_ok_rdisc()
502 if (timercmp(&rdisc_timer, &ifp->int_rdisc_timer, > /* cstyle */)) in if_ok_rdisc()
503 rdisc_timer = ifp->int_rdisc_timer; in if_ok_rdisc()
512 struct interface *ifp; in del_rdisc() local
542 ifp = drp->dr_ifp; in del_rdisc()
544 if (drp->dr_ts != 0 && drp->dr_ifp == ifp) in del_rdisc()
556 naddr_ntoa(gate), ifp->int_name, i); in del_rdisc()
557 } else if (ifp->int_rdisc_cnt >= MAX_SOLICITATIONS) { in del_rdisc()
560 naddr_ntoa(gate), ifp->int_name); in del_rdisc()
561 ifp->int_rdisc_cnt = 0; in del_rdisc()
562 ifp->int_rdisc_timer.tv_sec = 0; in del_rdisc()
567 naddr_ntoa(gate), ifp->int_name); in del_rdisc()
579 struct interface *ifp; in rdisc_sort() local
636 ifp = drp->dr_ifp; in rdisc_sort()
650 drp->dr_pref = PREF(drp->dr_recv_pref, ifp); in rdisc_sort()
879 struct interface *ifp) in parse_ad() argument
899 if (!on_net(gate, ifp->int_net, ifp->int_mask)) { in parse_ad()
917 if ((drp->dr_gate == gate) && (drp->dr_ifp == ifp)) { in parse_ad()
931 if ((!(ifp->int_state & IS_SICK) && in parse_ad()
934 !((ifp->int_state ^ drp->dr_ifp->int_state) & in parse_ad()
966 new_drp->dr_ifp = ifp; in parse_ad()
972 new_drp->dr_pref = PREF(pref, ifp); in parse_ad()
975 if (!(ifp->int_state & IS_SICK)) in parse_ad()
976 ifp->int_rdisc_cnt = MAX_SOLICITATIONS; in parse_ad()
1006 struct interface *ifp, in send_rdisc() argument
1020 if (ifp->int_state & IS_DUP) in send_rdisc()
1035 if (ifp->int_if_flags & IFF_POINTOPOINT) { in send_rdisc()
1037 if (ifp->int_dstaddr == 0) in send_rdisc()
1040 sin.sin_addr.s_addr = ifp->int_dstaddr; in send_rdisc()
1043 sin.sin_addr.s_addr = ifp->int_brdaddr; in send_rdisc()
1056 ifindex = (type != mcast && ifp->int_phys != NULL) ? in send_rdisc()
1057 ifp->int_phys->phyi_index : 0; in send_rdisc()
1059 if (rdisc_sock_interface != ifp) { in send_rdisc()
1065 addr.s_addr = (ifp->int_if_flags & IFF_POINTOPOINT) ? in send_rdisc()
1066 ifp->int_dstaddr : ifp->int_addr; in send_rdisc()
1073 rdisc_sock_interface = ifp; in send_rdisc()
1076 trace_rdisc(msg, ifp->int_addr, sin.sin_addr.s_addr, ifp, p, p_size); in send_rdisc()
1079 if (!(ifp->int_state & IS_BROKE)) in send_rdisc()
1081 ifp->int_name, ", ", in send_rdisc()
1084 if (ifp != NULL) in send_rdisc()
1085 if_sick(ifp, _B_FALSE); in send_rdisc()
1092 send_adv(struct interface *ifp, in send_adv() argument
1098 if ((ifp->int_state & (IS_SUPPRESS_RDISC|IS_FLUSH_RDISC)) == in send_adv()
1109 u.ad.icmp_ad_life = (stopint || !should_supply(ifp) || in send_adv()
1110 (ifp->int_state & IS_SUPPRESS_RDISC)) ? 0 : in send_adv()
1111 htons(ifp->int_rdisc_int*3); in send_adv()
1114 u.ad.icmp_ad_info[0].icmp_ad_pref = htonl(ifp->int_rdisc_pref); in send_adv()
1116 u.ad.icmp_ad_info[0].icmp_ad_addr = ifp->int_addr; in send_adv()
1120 send_rdisc(&u, sizeof (u.ad), ifp, dst, type); in send_adv()
1122 if (ifp->int_state & IS_SUPPRESS_RDISC) in send_adv()
1123 ifp->int_state &= ~IS_FLUSH_RDISC; in send_adv()
1131 struct interface *ifp; in rdisc_adv() local
1138 for (ifp = ifnet; ifp; ifp = ifp->int_next) { in rdisc_adv()
1139 if ((ifp->int_state & (IS_NO_ADV_OUT | IS_BROKE)) || in rdisc_adv()
1140 (!forceadv && !IS_IFF_ROUTING(ifp->int_if_flags))) in rdisc_adv()
1144 if (IS_IFF_QUIET(ifp->int_if_flags)) in rdisc_adv()
1147 if (!timercmp(&ifp->int_rdisc_timer, &now, > /* cstyle */) || in rdisc_adv()
1149 send_adv(ifp, htonl(INADDR_ALLHOSTS_GROUP), in rdisc_adv()
1150 (ifp->int_state & IS_BCAST_RDISC) ? 1 : 2); in rdisc_adv()
1151 ifp->int_rdisc_cnt++; in rdisc_adv()
1153 intvl_random(&ifp->int_rdisc_timer, in rdisc_adv()
1154 (ifp->int_rdisc_int*3)/4, ifp->int_rdisc_int); in rdisc_adv()
1155 if (ifp->int_rdisc_cnt < MAX_INITIAL_ADVERTS && in rdisc_adv()
1156 (ifp->int_rdisc_timer.tv_sec > in rdisc_adv()
1158 ifp->int_rdisc_timer.tv_sec = in rdisc_adv()
1161 timevaladd(&ifp->int_rdisc_timer, &now); in rdisc_adv()
1163 if (timercmp(&rdisc_timer, &ifp->int_rdisc_timer, in rdisc_adv()
1165 rdisc_timer = ifp->int_rdisc_timer; in rdisc_adv()
1174 struct interface *ifp; in rdisc_sol() local
1182 for (ifp = ifnet; ifp; ifp = ifp->int_next) { in rdisc_sol()
1183 if (0 != (ifp->int_state & (IS_NO_SOL_OUT | IS_BROKE)) || in rdisc_sol()
1184 ifp->int_rdisc_cnt >= MAX_SOLICITATIONS) in rdisc_sol()
1188 if (IS_IFF_QUIET(ifp->int_if_flags)) in rdisc_sol()
1191 if (!timercmp(&ifp->int_rdisc_timer, &now, > /* cstyle */)) { in rdisc_sol()
1196 send_rdisc(&u, sizeof (u.so), ifp, in rdisc_sol()
1198 ((ifp->int_state&IS_BCAST_RDISC) ? bcast : mcast)); in rdisc_sol()
1200 if (++ifp->int_rdisc_cnt >= MAX_SOLICITATIONS) in rdisc_sol()
1203 ifp->int_rdisc_timer.tv_sec = SOLICITATION_INTERVAL; in rdisc_sol()
1204 ifp->int_rdisc_timer.tv_usec = 0; in rdisc_sol()
1205 timevaladd(&ifp->int_rdisc_timer, &now); in rdisc_sol()
1208 if (timercmp(&rdisc_timer, &ifp->int_rdisc_timer, in rdisc_sol()
1210 rdisc_timer = ifp->int_rdisc_timer; in rdisc_sol()
1222 struct interface *ifp, in ck_icmp() argument
1246 trace_rdisc(act, from, to, ifp, p, len); in ck_icmp()
1248 if (ifp == NULL) in ck_icmp()
1252 return (ifp); in ck_icmp()
1273 struct interface *ifp; in read_d() local
1307 ifp = receiving_interface(&msg, _B_FALSE); in read_d()
1308 ifp = ck_icmp("Recv", from.sin_addr.s_addr, ifp, in read_d()
1310 if (ifp == NULL) in read_d()
1313 if (IS_IFF_QUIET(ifp->int_if_flags)) { in read_d()
1315 ifp->int_name, ifp->int_if_flags); in read_d()
1327 if (!remote_address_ok(ifp, from.sin_addr.s_addr)) { in read_d()
1330 ifp->int_name); in read_d()
1336 if (ifp->int_state & IS_NO_ADV_IN) in read_d()
1365 ntohs(p->ad.icmp_ad_life), ifp); in read_d()
1372 if (!should_supply(ifp)) in read_d()
1374 if ((ifp->int_state & IS_NO_ADV_OUT) || in read_d()
1375 !IS_IFF_ROUTING(ifp->int_if_flags)) in read_d()
1386 send_adv(ifp, from.sin_addr.s_addr, 0); in read_d()
1406 rdisc_suppress(struct interface *ifp) in rdisc_suppress() argument
1408 if (ifp->int_state & IS_ADV_OUT) { in rdisc_suppress()
1410 "suppress rdisc adv", ifp->int_name); in rdisc_suppress()
1412 if (ifp->int_state & IS_SUPPRESS_RDISC) in rdisc_suppress()
1414 ifp->int_state |= (IS_SUPPRESS_RDISC|IS_FLUSH_RDISC); in rdisc_suppress()
1415 trace_misc("suppress rdisc adv on %s", ifp->int_name); in rdisc_suppress()
1421 rdisc_restore(struct interface *ifp) in rdisc_restore() argument
1423 if ((ifp->int_state & IS_SUPPRESS_RDISC) == 0) in rdisc_restore()
1425 ifp->int_state &= ~(IS_SUPPRESS_RDISC|IS_FLUSH_RDISC); in rdisc_restore()
1426 trace_misc("restoring rdisc adv on %s", ifp->int_name); in rdisc_restore()