[BACK]Return to ip_input.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / netinet

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/netinet/ip_input.c between version 1.231.2.2 and 1.231.2.3

version 1.231.2.2, 2006/12/10 07:19:10 version 1.231.2.3, 2006/12/18 11:42:21
Line 1679  ip_rtaddr(struct in_addr dst)
Line 1679  ip_rtaddr(struct in_addr dst)
   
         sin = satosin(&ipforward_rt.ro_dst);          sin = satosin(&ipforward_rt.ro_dst);
   
         if (ipforward_rt.ro_rt == NULL || !in_hosteq(dst, sin->sin_addr)) {          if (!in_hosteq(dst, sin->sin_addr))
                 if (ipforward_rt.ro_rt != NULL)                  rtcache_free(&ipforward_rt);
                         rtflush(&ipforward_rt);          else
                   rtcache_check(&ipforward_rt);
           if (ipforward_rt.ro_rt == NULL) {
                 sin->sin_family = AF_INET;                  sin->sin_family = AF_INET;
                 sin->sin_len = sizeof(*sin);                  sin->sin_len = sizeof(*sin);
                 sin->sin_addr = dst;                  sin->sin_addr = dst;
   
                 rtalloc(&ipforward_rt);                  rtcache_init(&ipforward_rt);
                   if (ipforward_rt.ro_rt == NULL)
                           return NULL;
         }          }
         if (ipforward_rt.ro_rt == NULL)          return (ifatoia(ipforward_rt.ro_rt->rt_ifa));
                 return NULL;  
         return ifatoia(ipforward_rt.ro_rt->rt_ifa);  
 }  }
   
 /*  /*
Line 1871  ip_forward(struct mbuf *m, int srcrt)
Line 1873  ip_forward(struct mbuf *m, int srcrt)
         }          }
   
         sin = satosin(&ipforward_rt.ro_dst);          sin = satosin(&ipforward_rt.ro_dst);
         if ((rt = ipforward_rt.ro_rt) == NULL ||          if (!in_hosteq(ip->ip_dst, sin->sin_addr))
             !in_hosteq(ip->ip_dst, sin->sin_addr)) {                  rtcache_free(&ipforward_rt);
                 if (ipforward_rt.ro_rt != NULL)          else
                         rtflush(&ipforward_rt);                  rtcache_check(&ipforward_rt);
           if (ipforward_rt.ro_rt == NULL) {
                 sin->sin_family = AF_INET;                  sin->sin_family = AF_INET;
                 sin->sin_len = sizeof(struct sockaddr_in);                  sin->sin_len = sizeof(struct sockaddr_in);
                 sin->sin_addr = ip->ip_dst;                  sin->sin_addr = ip->ip_dst;
   
                 rtalloc(&ipforward_rt);                  rtcache_init(&ipforward_rt);
                 if (ipforward_rt.ro_rt == NULL) {                  if (ipforward_rt.ro_rt == NULL) {
                         icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, dest, 0);                          icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, dest, 0);
                         return;                          return;
                 }                  }
                 rt = ipforward_rt.ro_rt;  
         }          }
           rt = ipforward_rt.ro_rt;
   
         /*          /*
          * Save at most 68 bytes of the packet in case           * Save at most 68 bytes of the packet in case

Legend:
Removed from v.1.231.2.2  
changed lines
  Added in v.1.231.2.3

CVSweb <webmaster@jp.NetBSD.org>