Lines Matching refs:ifp

95 if_link(struct interface *ifp)
99 LIST_INSERT_HEAD(&ifnet, ifp, int_list);
101 hifp = AHASH(ifp->int_addr);
102 ifp->int_ahash_prev = hifp;
103 if ((ifp->int_ahash = *hifp) != NULL)
104 (*hifp)->int_ahash_prev = &ifp->int_ahash;
105 *hifp = ifp;
107 if (ifp->int_if_flags & IFF_BROADCAST) {
108 hifp = BHASH(ifp->int_brdaddr);
109 ifp->int_bhash_prev = hifp;
110 if ((ifp->int_bhash = *hifp) != NULL)
111 (*hifp)->int_bhash_prev = &ifp->int_bhash;
112 *hifp = ifp;
115 if (ifp->int_state & IS_REMOTE)
116 LIST_INSERT_HEAD(&remote_if, ifp, remote_list);
118 hifp = nhash(ifp->int_name);
119 if (ifp->int_state & IS_ALIAS) {
124 ifp->int_nhash_prev = hifp;
125 if ((ifp->int_nhash = *hifp) != NULL)
126 (*hifp)->int_nhash_prev = &ifp->int_nhash;
127 *hifp = ifp;
138 struct interface *ifp, *possible = NULL;
142 for (ifp = *AHASH(addr); ifp; ifp = ifp->int_ahash) {
143 if (ifp->int_addr != addr)
145 if ((ifp->int_state & remote) != 0)
147 if ((ifp->int_state & (IS_BROKE | IS_PASSIVE)) == 0)
148 return ifp;
149 possible = ifp;
155 for (ifp = *BHASH(addr); ifp; ifp = ifp->int_bhash) {
156 if (ifp->int_brdaddr != addr)
158 if ((ifp->int_state & remote) != 0)
160 if ((ifp->int_state & (IS_BROKE | IS_PASSIVE)) == 0)
161 return ifp;
162 possible = ifp;
175 struct interface *ifp;
178 for (ifp = *nhash(name); ifp != NULL; ifp = ifp->int_nhash) {
183 if (!strcmp(ifp->int_name, name)
184 && ((addr == 0 && !(ifp->int_state & IS_ALIAS))
185 || (ifp->int_addr == addr)))
186 return ifp;
203 struct interface *ifp;
206 LIST_FOREACH(ifp, &ifnet, int_list) {
207 if (ifp->int_index == ifindex)
208 return ifp;
229 struct interface *ifp, *maybe;
234 LIST_FOREACH(ifp, &ifnet, int_list) {
235 if (ifp->int_if_flags & IFF_POINTOPOINT) {
237 if (ifp->int_dstaddr == addr)
238 return ifp;
242 if (ifp->int_addr == addr)
243 return ifp;
247 if (on_net(addr, ifp->int_net, ifp->int_mask)
249 || ifp->int_mask > maybe->int_mask))
250 maybe = ifp;
289 struct interface *ifp) /* as seen on this interface */
297 if (ifp != NULL && ifp->int_ripv1_mask != HOST_MASK) {
301 if (on_net(addr, ifp->int_net, ifp->int_std_mask))
302 mask = ifp->int_ripv1_mask;
311 LIST_FOREACH(ifp, &ifnet, int_list) {
312 if (on_net(addr, ifp->int_std_net, ifp->int_std_mask)
313 && ifp->int_ripv1_mask > mask
314 && ifp->int_ripv1_mask != HOST_MASK)
315 mask = ifp->int_ripv1_mask;
340 struct interface *ifp) /* as seen on this interface */
342 naddr mask = ripv1_mask_net(addr, ifp);
381 struct interface *ifp;
383 LIST_FOREACH(ifp, &ifnet, int_list) {
384 if (ifp->int_mask != mask)
387 if (!iff_up(ifp->int_if_flags))
393 if ((!(ifp->int_state & IS_REMOTE) || !(if_flags & IS_REMOTE))
394 && ifp->int_addr == addr
395 && (((if_flags|ifp->int_if_flags) & IFF_POINTOPOINT) == 0))
396 return ifp;
398 if (on_net(ifp->int_dstaddr, ntohl(dstaddr),mask))
399 return ifp;
409 check_remote(struct interface *ifp)
414 if (!(ifp->int_state & IS_REMOTE))
417 rt = rtfind(ifp->int_addr);
420 &&on_net(ifp->int_addr,
427 if (!(ifp->int_state & IS_BROKE)) {
429 naddr_ntoa(ifp->int_addr));
430 if_bad(ifp);
439 ifdel(struct interface *ifp)
444 trace_if("Del", ifp);
446 ifp->int_state |= IS_BROKE;
448 LIST_REMOVE(ifp, int_list);
449 *ifp->int_ahash_prev = ifp->int_ahash;
450 if (ifp->int_ahash != 0)
451 ifp->int_ahash->int_ahash_prev = ifp->int_ahash_prev;
452 *ifp->int_nhash_prev = ifp->int_nhash;
453 if (ifp->int_nhash != 0)
454 ifp->int_nhash->int_nhash_prev = ifp->int_nhash_prev;
455 if (ifp->int_if_flags & IFF_BROADCAST) {
456 *ifp->int_bhash_prev = ifp->int_bhash;
457 if (ifp->int_bhash != 0)
458 ifp->int_bhash->int_bhash_prev = ifp->int_bhash_prev;
460 if (ifp->int_state & IS_REMOTE)
461 LIST_REMOVE(ifp, remote_list);
463 if (!(ifp->int_state & IS_ALIAS)) {
467 if (ifp1 != ifp
468 && !strcmp(ifp->int_name, ifp1->int_name))
472 if ((ifp->int_if_flags & IFF_MULTICAST) && rip_sock >= 0) {
477 gr.gr_interface = ifp->int_index;
489 if (rip_sock_mcast == ifp)
492 if (ifp->int_rip_sock >= 0) {
493 (void)close(ifp->int_rip_sock);
494 ifp->int_rip_sock = -1;
499 if (!IS_RIP_OFF(ifp->int_state))
508 set_rdisc_mg(ifp, 0);
509 if_bad_rdisc(ifp);
512 free(ifp);
519 if_sick(struct interface *ifp)
521 if (0 == (ifp->int_state & (IS_SICK | IS_BROKE))) {
522 ifp->int_state |= IS_SICK;
523 ifp->int_act_time = NEVER;
524 trace_if("Chg", ifp);
534 if_bad(struct interface *ifp)
539 if (ifp->int_state & IS_BROKE)
544 ifp->int_state |= (IS_BROKE | IS_SICK);
545 ifp->int_act_time = NEVER;
546 ifp->int_query_time = NEVER;
547 ifp->int_data.ts = now.tv_sec;
549 trace_if("Chg", ifp);
551 if (!(ifp->int_state & IS_ALIAS)) {
553 if (ifp1 != ifp
554 && !strcmp(ifp->int_name, ifp1->int_name))
558 if_bad_rdisc(ifp);
566 if_ok(struct interface *ifp,
572 if (!(ifp->int_state & IS_BROKE)) {
573 if (ifp->int_state & IS_SICK) {
576 ifp->int_name, naddr_ntoa(ifp->int_dstaddr));
577 ifp->int_state &= ~IS_SICK;
583 type, ifp->int_name, naddr_ntoa(ifp->int_dstaddr));
584 ifp->int_state &= ~(IS_BROKE | IS_SICK);
585 ifp->int_data.ts = 0;
587 if (!(ifp->int_state & IS_ALIAS)) {
589 if (ifp1 != ifp
590 && !strcmp(ifp->int_name, ifp1->int_name))
593 if_ok_rdisc(ifp);
596 if (ifp->int_state & IS_REMOTE) {
597 if (!addrouteforif(ifp))
649 struct interface ifs, ifs0, *ifp, *ifp1;
670 LIST_FOREACH(ifp, &ifnet, int_list)
671 ifp->int_state &= ~(IS_CHECKED | IS_DUP);
893 ifp = ifwithname(ifs.int_name, ((ifs.int_state & IS_ALIAS)
896 if (ifp != NULL) {
897 ifp->int_state |= IS_CHECKED;
899 if (0 != ((ifp->int_if_flags ^ ifs.int_if_flags)
904 || 0 != ((ifp->int_state ^ ifs.int_state)
906 || ifp->int_addr != ifs.int_addr
907 || ifp->int_brdaddr != ifs.int_brdaddr
908 || ifp->int_dstaddr != ifs.int_dstaddr
909 || ifp->int_mask != ifs.int_mask
910 || ifp->int_metric != ifs.int_metric) {
915 ifp->int_name);
916 ifdel(ifp);
917 ifp = NULL;
921 if (ifp != NULL) {
925 if (ifp->int_state & IS_ALIAS)
931 if (iff_up(ifp->int_if_flags)) {
933 ifp->int_name,
934 naddr_ntoa(ifp->int_dstaddr));
935 if_bad(ifp);
936 ifp->int_if_flags &= ~IFF_UP;
937 } else if (now.tv_sec>(ifp->int_data.ts
941 ifp->int_name,
943 ifp->int_data.ts);
944 ifdel(ifp);
945 ifp = NULL;
950 if (!iff_up(ifp->int_if_flags)) {
951 ifp->int_if_flags |= IFF_UP;
952 (void)if_ok(ifp, "");
958 if (now.tv_sec < ifp->int_data.ts+CHECK_BAD_INTERVAL)
961 in = ifs.int_data.ipackets - ifp->int_data.ipackets;
962 ierr = ifs.int_data.ierrors - ifp->int_data.ierrors;
963 out = ifs.int_data.opackets - ifp->int_data.opackets;
964 oerr = ifs.int_data.oerrors - ifp->int_data.oerrors;
967 if (ifp->int_data.ts == 0) {
968 ifp->int_data = ifs.int_data;
971 ifp->int_data = ifs.int_data;
992 if (!(ifp->int_state & IS_SICK)) {
996 ifp->int_name,
997 naddr_ntoa(ifp->int_dstaddr),
999 if_sick(ifp);
1002 if (!(ifp->int_state & IS_BROKE)) {
1005 ifp->int_name,
1006 naddr_ntoa(ifp->int_dstaddr),
1008 if_bad(ifp);
1015 ifp->int_act_time = now.tv_sec;
1016 (void)if_ok(ifp, "");
1030 ifp = check_dup(ifs.int_addr,ifs.int_dstaddr,ifs.int_mask,
1032 if (ifp != NULL) {
1036 if (!strcmp(ifp->int_name, ifs.int_name))
1049 ifp->int_name,
1050 addrname(ifp->int_addr,ifp->int_mask,1),
1051 ((ifp->int_if_flags & IFF_POINTOPOINT)
1053 ((ifp->int_if_flags & IFF_POINTOPOINT)
1054 ? naddr_ntoa(ifp->int_dstaddr) : ""));
1056 ifp->int_state |= IS_DUP;
1071 ifp = (struct interface *)rtmalloc(sizeof(*ifp), "ifinit ifp");
1072 memcpy(ifp, &ifs, sizeof(*ifp));
1073 get_parms(ifp);
1074 if_link(ifp);
1075 trace_if("Add", ifp);
1080 && !(ifp->int_if_flags & IFF_POINTOPOINT)
1081 && ifp->int_addr != RIP_DEFAULT) {
1083 if (ifp1->int_mask == ifp->int_mask)
1090 if (!strcmp(ifp->int_name, ifp1->int_name))
1092 if (on_net(ifp->int_dstaddr,
1095 ifp->int_net, ifp->int_mask)) {
1098 ifp->int_name,
1099 addrname(htonl(ifp->int_net),
1100 ifp->int_mask, 1),
1109 if (!(ifp->int_state & IS_ALIAS)) {
1112 if (!(ifp->int_if_flags & IFF_LOOPBACK))
1114 if (!IS_RIP_OFF(ifp->int_state))
1118 if_ok_rdisc(ifp);
1119 rip_on(ifp);
1132 if ((advertise_mhome && ifp)
1135 && (ifp = ifwithaddr(myaddr, 0, 0)) != NULL
1140 if (rt->rt_ifp != ifp
1145 loop_rts.rts_ifp = ifp;
1153 loop_rts.rts_ifp = ifp;
1159 LIST_FOREACH_SAFE(ifp, &ifnet, int_list, ifp1) {
1162 if (!(ifp->int_state & (IS_CHECKED | IS_REMOTE))) {
1164 ifp->int_name);
1165 ifdel(ifp);
1169 if ((ifp->int_state & IS_BROKE)
1170 && !(ifp->int_state & IS_PASSIVE))
1176 if (!(ifp->int_state & IS_NO_RIPV1_OUT) && supplier)
1178 if (!(ifp->int_state & IS_NO_RIPV1_IN))
1182 LIST_FOREACH(ifp, &ifnet, int_list) {
1187 if (!addrouteforif(ifp))
1193 if ((ifp->int_if_flags & IFF_POINTOPOINT)
1194 && !(ifp->int_state & IS_REMOTE)
1199 del_static(ifp->int_addr, HOST_MASK, 0, 0);
1200 rt = rtget(ifp->int_addr, HOST_MASK);
1207 || rt->rt_metric > ifp->int_metric) {
1208 ifp1 = ifp;
1219 loop_rts.rts_ifp = ifp;
1221 rtadd(ifp->int_addr, HOST_MASK,
1250 check_net_syn(struct interface *ifp)
1261 ifp->int_state |= IS_NEED_NET_SYN;
1262 rt = rtget(ifp->int_std_addr, ifp->int_std_mask);
1266 || rt->rt_metric > ifp->int_metric)) {
1271 new.rts_ifp = ifp;
1272 new.rts_gate = ifp->int_addr;
1273 new.rts_router = ifp->int_addr;
1274 new.rts_metric = ifp->int_metric;
1275 rtadd(ifp->int_std_addr, ifp->int_std_mask,
1280 ifp->int_state &= ~IS_NEED_NET_SYN;
1282 rt = rtget(ifp->int_std_addr,
1283 ifp->int_std_mask);
1286 && rt->rt_ifp == ifp)
1297 addrouteforif(struct interface *ifp)
1306 if (ifp->int_state & IS_BROKE)
1312 if (ifp->int_state & IS_SUBNET)
1313 check_net_syn(ifp);
1315 dst = (0 != (ifp->int_if_flags & (IFF_POINTOPOINT | IFF_LOOPBACK))
1316 ? ifp->int_dstaddr
1317 : htonl(ifp->int_net));
1319 new.rts_ifp = ifp;
1320 new.rts_router = ifp->int_addr;
1321 new.rts_gate = ifp->int_addr;
1322 new.rts_metric = ifp->int_metric;
1328 if ((ifp->int_state & IS_REMOTE)
1329 && !(ifp->int_state & IS_EXTERNAL)
1330 && !check_remote(ifp))
1337 del_static(dst, ifp->int_mask, 0, 0);
1338 rt = rtget(dst, ifp->int_mask);
1340 if ((rt->rt_ifp != ifp
1341 || rt->rt_router != ifp->int_addr)
1342 && (!(ifp->int_state & IS_DUP)
1354 if (ifp->int_transitions++ > 0)
1356 ifp->int_name);
1358 rtadd(dst, ifp->int_mask, RS_IF, &new);