[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.248 and 1.249

version 1.248, 2007/03/25 20:12:20 version 1.249, 2007/05/02 20:40:25
Line 1674  bad:
Line 1674  bad:
 struct in_ifaddr *  struct in_ifaddr *
 ip_rtaddr(struct in_addr dst)  ip_rtaddr(struct in_addr dst)
 {  {
         if (!in_hosteq(dst, satocsin(rtcache_getdst(&ipforward_rt))->sin_addr))          struct rtentry *rt;
                 rtcache_free(&ipforward_rt);          union {
         else                  struct sockaddr         dst;
                 rtcache_check(&ipforward_rt);                  struct sockaddr_in      dst4;
           } u;
         if (ipforward_rt.ro_rt == NULL) {  
                 struct sockaddr_in *sin = satosin(&ipforward_rt.ro_dst);          sockaddr_in_init(&u.dst4, &dst, 0);
   
                 sin->sin_family = AF_INET;          if ((rt = rtcache_lookup(&ipforward_rt, &u.dst)) == NULL)
                 sin->sin_len = sizeof(*sin);                  return NULL;
                 sin->sin_addr = dst;  
           return ifatoia(rt->rt_ifa);
                 rtcache_init(&ipforward_rt);  
                 if (ipforward_rt.ro_rt == NULL)  
                         return NULL;  
         }  
         return ifatoia(ipforward_rt.ro_rt->rt_ifa);  
 }  }
   
 /*  /*
Line 1841  ip_forward(struct mbuf *m, int srcrt)
Line 1836  ip_forward(struct mbuf *m, int srcrt)
         int error, type = 0, code = 0, destmtu = 0;          int error, type = 0, code = 0, destmtu = 0;
         struct mbuf *mcopy;          struct mbuf *mcopy;
         n_long dest;          n_long dest;
           union {
                   struct sockaddr         dst;
                   struct sockaddr_in      dst4;
           } u;
   
         /*          /*
          * We are now in the output path.           * We are now in the output path.
Line 1869  ip_forward(struct mbuf *m, int srcrt)
Line 1868  ip_forward(struct mbuf *m, int srcrt)
                 return;                  return;
         }          }
   
         if (!in_hosteq(ip->ip_dst,          sockaddr_in_init(&u.dst4, &ip->ip_dst, 0);
                        satocsin(rtcache_getdst(&ipforward_rt))->sin_addr))          if ((rt = rtcache_lookup(&ipforward_rt, &u.dst)) == NULL) {
                 rtcache_free(&ipforward_rt);                  icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, dest, 0);
         else                  return;
                 rtcache_check(&ipforward_rt);  
         if (ipforward_rt.ro_rt == NULL) {  
                 struct sockaddr_in *sin = satosin(&ipforward_rt.ro_dst);  
   
                 sin->sin_family = AF_INET;  
                 sin->sin_len = sizeof(*sin);  
                 sin->sin_addr = ip->ip_dst;  
   
                 rtcache_init(&ipforward_rt);  
                 if (ipforward_rt.ro_rt == NULL) {  
                         icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, dest, 0);  
                         return;  
                 }  
         }          }
         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.248  
changed lines
  Added in v.1.249

CVSweb <webmaster@jp.NetBSD.org>