Lines Matching defs:rt

136 		struct rtentry *rt = la->la_rt;
138 if (rt->rt_expire && rt->rt_expire < uptime)
139 arptfree(rt); /* timer has expired; clear */
158 arp_rtrequest(struct ifnet *ifp, int req, struct rtentry *rt)
160 struct sockaddr *gate = rt->rt_gateway;
166 if (ISSET(rt->rt_flags,
173 if (rt->rt_flags & RTF_CLONING) {
174 rt->rt_expire = 0;
177 if ((rt->rt_flags & RTF_LOCAL) && rt->rt_llinfo == NULL)
178 rt->rt_expire = 0;
183 if (rt->rt_flags & (RTF_ANNOUNCE|RTF_LOCAL))
185 &satosin(rt_key(rt))->sin_addr.s_addr,
186 &satosin(rt_key(rt))->sin_addr.s_addr,
209 if (rt->rt_llinfo != NULL) {
216 rt->rt_llinfo = (caddr_t)la;
217 la->la_rt = rt;
218 rt->rt_flags |= RTF_LLINFO;
220 if ((rt->rt_flags & RTF_LOCAL) == 0)
221 rt->rt_expire = uptime;
228 la = (struct llinfo_arp *)rt->rt_llinfo;
235 rt->rt_llinfo = NULL;
236 rt->rt_flags &= ~RTF_LLINFO;
244 if (!ISSET(rt->rt_flags, RTF_LOCAL))
245 arpinvalidate(rt);
340 struct rtentry *rt = NULL;
355 rt = rt_getll(rt0);
357 if (ISSET(rt->rt_flags, RTF_REJECT) &&
358 (rt->rt_expire == 0 || rt->rt_expire > uptime)) {
360 return (rt == rt0 ? EHOSTDOWN : EHOSTUNREACH);
363 if (!ISSET(rt->rt_flags, RTF_LLINFO)) {
365 __func__, inet_ntop(AF_INET, &satosin(rt_key(rt))->sin_addr,
370 sdl = satosdl(rt->rt_gateway);
383 if ((rt->rt_expire == 0 || rt->rt_expire > uptime) &&
388 if (rt->rt_expire != 0 &&
389 rt->rt_expire - arpt_keep / 8 < uptime) {
392 la = (struct llinfo_arp *)rt->rt_llinfo;
403 &satosin(rt->rt_ifa->ifa_addr)->sin_addr.s_addr,
414 la = (struct llinfo_arp *)rt->rt_llinfo;
437 if (rt->rt_expire == 0) {
441 rt->rt_expire = uptime;
444 if (rt->rt_expire) {
446 if (la->la_asked == 0 || rt->rt_expire != uptime) {
447 rt->rt_expire = uptime;
452 rt->rt_expire += arpt_down;
462 if (reject == RTF_REJECT && !ISSET(rt->rt_flags, RTF_REJECT)) {
464 SET(rt->rt_flags, RTF_REJECT);
467 if (reject == ~RTF_REJECT && ISSET(rt->rt_flags, RTF_REJECT)) {
469 CLR(rt->rt_flags, RTF_REJECT);
473 arprequest(ifp, &satosin(rt->rt_ifa->ifa_addr)->sin_addr.s_addr,
555 struct rtentry *rt = NULL;
588 rt = rtalloc(sintosa(&sin), 0, rdomain);
589 if (rtisvalid(rt) && ISSET(rt->rt_flags, RTF_LOCAL) &&
590 rt->rt_ifidx == ifp->if_index)
592 rtfree(rt);
593 rt = NULL;
602 rt = arplookup(&isaddr, target, 0, rdomain);
605 if (rtisvalid(rt) && ISSET(rt->rt_flags, RTF_LOCAL) &&
606 rt->rt_ifidx == ifp->if_index && isaddr.s_addr != INADDR_ANY) {
611 } else if (rt != NULL) {
612 if (arpcache(ifp, ea, rt))
623 rtfree(rt);
624 rt = arplookup(&itaddr, 0, SIN_PROXY, rdomain);
629 if ((rt == NULL) || (rt->rt_ifidx != ifp->if_index))
631 eaddr = LLADDR(satosdl(rt->rt_gateway));
634 rtfree(rt);
639 rtfree(rt);
644 arpcache(struct ifnet *ifp, struct ether_arp *ea, struct rtentry *rt)
646 struct llinfo_arp *la = (struct llinfo_arp *)rt->rt_llinfo;
647 struct sockaddr_dl *sdl = satosdl(rt->rt_gateway);
667 if (ISSET(rt->rt_flags, RTF_PERMANENT_ARP|RTF_LOCAL)) {
673 } else if (rt->rt_ifidx != ifp->if_index) {
678 rifp = if_get(rt->rt_ifidx);
696 rt->rt_expire = 1;/* no longer static */
700 } else if (!if_isconnected(ifp, rt->rt_ifidx)) {
701 rifp = if_get(rt->rt_ifidx);
713 if (rt->rt_expire)
714 rt->rt_expire = uptime + arpt_keep;
715 rt->rt_flags &= ~RTF_REJECT;
719 rtm_send(rt, RTM_RESOLVE, 0, ifp->if_rdomain);
724 if_output_mq(ifp, &la->la_mq, &la_hold_total, rt_key(rt), rt);
730 arpinvalidate(struct rtentry *rt)
733 struct sockaddr_dl *sdl = satosdl(rt->rt_gateway);
736 la = (struct llinfo_arp *)rt->rt_llinfo;
751 arptfree(struct rtentry *rt)
755 KASSERT(!ISSET(rt->rt_flags, RTF_LOCAL));
756 arpinvalidate(rt);
758 ifp = if_get(rt->rt_ifidx);
761 if (!ISSET(rt->rt_flags, RTF_STATIC|RTF_CACHED))
762 rtdeletemsg(rt, ifp, ifp->if_rdomain);
772 struct rtentry *rt;
783 rt = rtalloc((struct sockaddr *)&sin, flags, tableid);
784 if (!rtisvalid(rt) || ISSET(rt->rt_flags, RTF_GATEWAY) ||
785 !ISSET(rt->rt_flags, RTF_LLINFO) ||
786 rt->rt_gateway->sa_family != AF_LINK) {
787 rtfree(rt);
791 if (proxy && !ISSET(rt->rt_flags, RTF_ANNOUNCE)) {
792 while ((rt = rtable_iterate(rt)) != NULL) {
793 if (ISSET(rt->rt_flags, RTF_ANNOUNCE)) {
799 return (rt);
809 struct rtentry *rt;
813 rt = arplookup(&in, 0, SIN_PROXY, rtableid);
814 if (!rtisvalid(rt)) {
815 rtfree(rt);
820 sdl = satosdl(rt->rt_gateway);
822 rtfree(rt);
826 ifp = if_get(rt->rt_ifidx);
828 rtfree(rt);
836 rtfree(rt);