Lines Matching defs:ifp

105 if_link(struct interface *ifp)
109 LIST_INSERT_HEAD(&ifnet, ifp, int_list);
111 hifp = AHASH(ifp->int_addr);
112 ifp->int_ahash_prev = hifp;
113 if ((ifp->int_ahash = *hifp) != NULL)
114 (*hifp)->int_ahash_prev = &ifp->int_ahash;
115 *hifp = ifp;
117 if (ifp->int_if_flags & IFF_BROADCAST) {
118 hifp = BHASH(ifp->int_brdaddr);
119 ifp->int_bhash_prev = hifp;
120 if ((ifp->int_bhash = *hifp) != NULL)
121 (*hifp)->int_bhash_prev = &ifp->int_bhash;
122 *hifp = ifp;
125 if (ifp->int_state & IS_REMOTE)
126 LIST_INSERT_HEAD(&remote_if, ifp, remote_list);
128 hifp = nhash(ifp->int_name);
129 if (ifp->int_state & IS_ALIAS) {
134 ifp->int_nhash_prev = hifp;
135 if ((ifp->int_nhash = *hifp) != NULL)
136 (*hifp)->int_nhash_prev = &ifp->int_nhash;
137 *hifp = ifp;
148 struct interface *ifp, *possible = NULL;
152 for (ifp = *AHASH(addr); ifp; ifp = ifp->int_ahash) {
153 if (ifp->int_addr != addr)
155 if ((ifp->int_state & remote) != 0)
157 if ((ifp->int_state & (IS_BROKE | IS_PASSIVE)) == 0)
158 return ifp;
159 possible = ifp;
165 for (ifp = *BHASH(addr); ifp; ifp = ifp->int_bhash) {
166 if (ifp->int_brdaddr != addr)
168 if ((ifp->int_state & remote) != 0)
170 if ((ifp->int_state & (IS_BROKE | IS_PASSIVE)) == 0)
171 return ifp;
172 possible = ifp;
185 struct interface *ifp;
188 for (ifp = *nhash(name); ifp != NULL; ifp = ifp->int_nhash) {
193 if (!strcmp(ifp->int_name, name)
194 && ((addr == 0 && !(ifp->int_state & IS_ALIAS))
195 || (ifp->int_addr == addr)))
196 return ifp;
213 struct interface *ifp;
216 LIST_FOREACH(ifp, &ifnet, int_list) {
217 if (ifp->int_index == ifindex)
218 return ifp;
239 struct interface *ifp, *maybe;
244 LIST_FOREACH(ifp, &ifnet, int_list) {
245 if (ifp->int_if_flags & IFF_POINTOPOINT) {
247 if (ifp->int_dstaddr == addr)
248 return ifp;
252 if (ifp->int_addr == addr)
253 return ifp;
257 if (on_net(addr, ifp->int_net, ifp->int_mask)
259 || ifp->int_mask > maybe->int_mask))
260 maybe = ifp;
299 struct interface *ifp) /* as seen on this interface */
307 if (ifp != NULL && ifp->int_ripv1_mask != HOST_MASK) {
311 if (on_net(addr, ifp->int_net, ifp->int_std_mask))
312 mask = ifp->int_ripv1_mask;
321 LIST_FOREACH(ifp, &ifnet, int_list) {
322 if (on_net(addr, ifp->int_std_net, ifp->int_std_mask)
323 && ifp->int_ripv1_mask > mask
324 && ifp->int_ripv1_mask != HOST_MASK)
325 mask = ifp->int_ripv1_mask;
350 struct interface *ifp) /* as seen on this interface */
352 naddr mask = ripv1_mask_net(addr, ifp);
391 struct interface *ifp;
393 LIST_FOREACH(ifp, &ifnet, int_list) {
394 if (ifp->int_mask != mask)
397 if (!iff_up(ifp->int_if_flags))
403 if ((!(ifp->int_state & IS_REMOTE) || !(if_flags & IS_REMOTE))
404 && ifp->int_addr == addr
405 && (((if_flags|ifp->int_if_flags) & IFF_POINTOPOINT) == 0))
406 return ifp;
408 if (on_net(ifp->int_dstaddr, ntohl(dstaddr),mask))
409 return ifp;
419 check_remote(struct interface *ifp)
424 if (!(ifp->int_state & IS_REMOTE))
427 rt = rtfind(ifp->int_addr);
430 &&on_net(ifp->int_addr,
437 if (!(ifp->int_state & IS_BROKE)) {
439 naddr_ntoa(ifp->int_addr));
440 if_bad(ifp);
449 ifdel(struct interface *ifp)
454 trace_if("Del", ifp);
456 ifp->int_state |= IS_BROKE;
458 LIST_REMOVE(ifp, int_list);
459 *ifp->int_ahash_prev = ifp->int_ahash;
460 if (ifp->int_ahash != 0)
461 ifp->int_ahash->int_ahash_prev = ifp->int_ahash_prev;
462 *ifp->int_nhash_prev = ifp->int_nhash;
463 if (ifp->int_nhash != 0)
464 ifp->int_nhash->int_nhash_prev = ifp->int_nhash_prev;
465 if (ifp->int_if_flags & IFF_BROADCAST) {
466 *ifp->int_bhash_prev = ifp->int_bhash;
467 if (ifp->int_bhash != 0)
468 ifp->int_bhash->int_bhash_prev = ifp->int_bhash_prev;
470 if (ifp->int_state & IS_REMOTE)
471 LIST_REMOVE(ifp, remote_list);
473 if (!(ifp->int_state & IS_ALIAS)) {
477 if (ifp1 != ifp
478 && !strcmp(ifp->int_name, ifp1->int_name))
482 if ((ifp->int_if_flags & IFF_MULTICAST) && rip_sock >= 0) {
487 gr.gr_interface = ifp->int_index;
499 if (rip_sock_mcast == ifp)
502 if (ifp->int_rip_sock >= 0) {
503 (void)close(ifp->int_rip_sock);
504 ifp->int_rip_sock = -1;
509 if (!IS_RIP_OFF(ifp->int_state))
518 set_rdisc_mg(ifp, 0);
519 if_bad_rdisc(ifp);
522 free(ifp);
529 if_sick(struct interface *ifp)
531 if (0 == (ifp->int_state & (IS_SICK | IS_BROKE))) {
532 ifp->int_state |= IS_SICK;
533 ifp->int_act_time = NEVER;
534 trace_if("Chg", ifp);
544 if_bad(struct interface *ifp)
549 if (ifp->int_state & IS_BROKE)
554 ifp->int_state |= (IS_BROKE | IS_SICK);
555 ifp->int_act_time = NEVER;
556 ifp->int_query_time = NEVER;
557 ifp->int_data.ts = now.tv_sec;
559 trace_if("Chg", ifp);
561 if (!(ifp->int_state & IS_ALIAS)) {
563 if (ifp1 != ifp
564 && !strcmp(ifp->int_name, ifp1->int_name))
568 if_bad_rdisc(ifp);
576 if_ok(struct interface *ifp,
582 if (!(ifp->int_state & IS_BROKE)) {
583 if (ifp->int_state & IS_SICK) {
586 ifp->int_name, naddr_ntoa(ifp->int_dstaddr));
587 ifp->int_state &= ~IS_SICK;
593 type, ifp->int_name, naddr_ntoa(ifp->int_dstaddr));
594 ifp->int_state &= ~(IS_BROKE | IS_SICK);
595 ifp->int_data.ts = 0;
597 if (!(ifp->int_state & IS_ALIAS)) {
599 if (ifp1 != ifp
600 && !strcmp(ifp->int_name, ifp1->int_name))
603 if_ok_rdisc(ifp);
606 if (ifp->int_state & IS_REMOTE) {
607 if (!addrouteforif(ifp))
659 struct interface ifs, ifs0, *ifp, *ifp1;
680 LIST_FOREACH(ifp, &ifnet, int_list)
681 ifp->int_state &= ~(IS_CHECKED | IS_DUP);
906 ifp = ifwithname(ifs.int_name, ((ifs.int_state & IS_ALIAS)
909 if (ifp != NULL) {
910 ifp->int_state |= IS_CHECKED;
912 if (0 != ((ifp->int_if_flags ^ ifs.int_if_flags)
917 || 0 != ((ifp->int_state ^ ifs.int_state)
919 || ifp->int_addr != ifs.int_addr
920 || ifp->int_brdaddr != ifs.int_brdaddr
921 || ifp->int_dstaddr != ifs.int_dstaddr
922 || ifp->int_mask != ifs.int_mask
923 || ifp->int_metric != ifs.int_metric) {
928 ifp->int_name);
929 ifdel(ifp);
930 ifp = NULL;
934 if (ifp != NULL) {
938 if (ifp->int_state & IS_ALIAS)
944 if (iff_up(ifp->int_if_flags)) {
946 ifp->int_name,
947 naddr_ntoa(ifp->int_dstaddr));
948 if_bad(ifp);
949 ifp->int_if_flags &= ~IFF_UP;
950 } else if (now.tv_sec>(ifp->int_data.ts
954 ifp->int_name,
956 ifp->int_data.ts);
957 ifdel(ifp);
958 ifp = NULL;
963 if (!iff_up(ifp->int_if_flags)) {
964 ifp->int_if_flags |= IFF_UP;
965 (void)if_ok(ifp, "");
971 if (now.tv_sec < ifp->int_data.ts+CHECK_BAD_INTERVAL)
974 in = ifs.int_data.ipackets - ifp->int_data.ipackets;
975 ierr = ifs.int_data.ierrors - ifp->int_data.ierrors;
976 out = ifs.int_data.opackets - ifp->int_data.opackets;
977 oerr = ifs.int_data.oerrors - ifp->int_data.oerrors;
984 if (!(ifp->int_if_flags & IFF_POINTOPOINT))
986 - ifp->int_data.odrops);
990 if (ifp->int_data.ts == 0) {
991 ifp->int_data = ifs.int_data;
994 ifp->int_data = ifs.int_data;
1015 if (!(ifp->int_state & IS_SICK)) {
1019 ifp->int_name,
1020 naddr_ntoa(ifp->int_dstaddr),
1022 if_sick(ifp);
1025 if (!(ifp->int_state & IS_BROKE)) {
1028 ifp->int_name,
1029 naddr_ntoa(ifp->int_dstaddr),
1031 if_bad(ifp);
1038 ifp->int_act_time = now.tv_sec;
1039 (void)if_ok(ifp, "");
1053 ifp = check_dup(ifs.int_addr,ifs.int_dstaddr,ifs.int_mask,
1055 if (ifp != NULL) {
1059 if (!strcmp(ifp->int_name, ifs.int_name))
1072 ifp->int_name,
1073 addrname(ifp->int_addr,ifp->int_mask,1),
1074 ((ifp->int_if_flags & IFF_POINTOPOINT)
1076 ((ifp->int_if_flags & IFF_POINTOPOINT)
1077 ? naddr_ntoa(ifp->int_dstaddr) : ""));
1079 ifp->int_state |= IS_DUP;
1094 ifp = (struct interface *)rtmalloc(sizeof(*ifp), "ifinit ifp");
1095 memcpy(ifp, &ifs, sizeof(*ifp));
1096 get_parms(ifp);
1097 if_link(ifp);
1098 trace_if("Add", ifp);
1103 && !(ifp->int_if_flags & IFF_POINTOPOINT)
1104 && ifp->int_addr != RIP_DEFAULT) {
1106 if (ifp1->int_mask == ifp->int_mask)
1113 if (!strcmp(ifp->int_name, ifp1->int_name))
1115 if (on_net(ifp->int_dstaddr,
1118 ifp->int_net, ifp->int_mask)) {
1121 ifp->int_name,
1122 addrname(htonl(ifp->int_net),
1123 ifp->int_mask, 1),
1132 if (!(ifp->int_state & IS_ALIAS)) {
1135 if (!(ifp->int_if_flags & IFF_LOOPBACK))
1137 if (!IS_RIP_OFF(ifp->int_state))
1141 if_ok_rdisc(ifp);
1142 rip_on(ifp);
1155 if ((advertise_mhome && ifp)
1158 && (ifp = ifwithaddr(myaddr, 0, 0)) != NULL
1163 if (rt->rt_ifp != ifp
1168 loop_rts.rts_ifp = ifp;
1176 loop_rts.rts_ifp = ifp;
1182 LIST_FOREACH_SAFE(ifp, &ifnet, int_list, ifp1) {
1185 if (!(ifp->int_state & (IS_CHECKED | IS_REMOTE))) {
1187 ifp->int_name);
1188 ifdel(ifp);
1192 if ((ifp->int_state & IS_BROKE)
1193 && !(ifp->int_state & IS_PASSIVE))
1199 if (!(ifp->int_state & IS_NO_RIPV1_OUT) && supplier)
1201 if (!(ifp->int_state & IS_NO_RIPV1_IN))
1205 LIST_FOREACH(ifp, &ifnet, int_list) {
1210 if (!addrouteforif(ifp))
1216 if ((ifp->int_if_flags & IFF_POINTOPOINT)
1217 && !(ifp->int_state & IS_REMOTE)
1222 del_static(ifp->int_addr, HOST_MASK, 0, 0);
1223 rt = rtget(ifp->int_addr, HOST_MASK);
1230 || rt->rt_metric > ifp->int_metric) {
1231 ifp1 = ifp;
1242 loop_rts.rts_ifp = ifp;
1244 rtadd(ifp->int_addr, HOST_MASK,
1273 check_net_syn(struct interface *ifp)
1284 ifp->int_state |= IS_NEED_NET_SYN;
1285 rt = rtget(ifp->int_std_addr, ifp->int_std_mask);
1289 || rt->rt_metric > ifp->int_metric)) {
1294 new.rts_ifp = ifp;
1295 new.rts_gate = ifp->int_addr;
1296 new.rts_router = ifp->int_addr;
1297 new.rts_metric = ifp->int_metric;
1298 rtadd(ifp->int_std_addr, ifp->int_std_mask,
1303 ifp->int_state &= ~IS_NEED_NET_SYN;
1305 rt = rtget(ifp->int_std_addr,
1306 ifp->int_std_mask);
1309 && rt->rt_ifp == ifp)
1320 addrouteforif(struct interface *ifp)
1329 if (ifp->int_state & IS_BROKE)
1335 if (ifp->int_state & IS_SUBNET)
1336 check_net_syn(ifp);
1338 dst = (0 != (ifp->int_if_flags & (IFF_POINTOPOINT | IFF_LOOPBACK))
1339 ? ifp->int_dstaddr
1340 : htonl(ifp->int_net));
1342 new.rts_ifp = ifp;
1343 new.rts_router = ifp->int_addr;
1344 new.rts_gate = ifp->int_addr;
1345 new.rts_metric = ifp->int_metric;
1351 if ((ifp->int_state & IS_REMOTE)
1352 && !(ifp->int_state & IS_EXTERNAL)
1353 && !check_remote(ifp))
1360 del_static(dst, ifp->int_mask, 0, 0);
1361 rt = rtget(dst, ifp->int_mask);
1363 if ((rt->rt_ifp != ifp
1364 || rt->rt_router != ifp->int_addr)
1365 && (!(ifp->int_state & IS_DUP)
1377 if (ifp->int_transitions++ > 0)
1379 ifp->int_name);
1381 rtadd(dst, ifp->int_mask, RS_IF, &new);