[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.344 and 1.345

version 1.344, 2016/10/18 07:30:31 version 1.345, 2016/12/08 05:16:33
Line 1183  ip_rtaddr(struct in_addr dst)
Line 1183  ip_rtaddr(struct in_addr dst)
   
         sockaddr_in_init(&u.dst4, &dst, 0);          sockaddr_in_init(&u.dst4, &dst, 0);
   
         SOFTNET_LOCK();  
         ro = percpu_getref(ipforward_rt_percpu);          ro = percpu_getref(ipforward_rt_percpu);
         rt = rtcache_lookup(ro, &u.dst);          rt = rtcache_lookup(ro, &u.dst);
         percpu_putref(ipforward_rt_percpu);          if (rt == NULL) {
         SOFTNET_UNLOCK();                  percpu_putref(ipforward_rt_percpu);
         if (rt == NULL)  
                 return NULL;                  return NULL;
           }
   
           rtcache_unref(rt, ro);
           percpu_putref(ipforward_rt_percpu);
   
         return ifatoia(rt->rt_ifa);          return ifatoia(rt->rt_ifa);
 }  }
Line 1349  ip_forward(struct mbuf *m, int srcrt, st
Line 1351  ip_forward(struct mbuf *m, int srcrt, st
         sockaddr_in_init(&u.dst4, &ip->ip_dst, 0);          sockaddr_in_init(&u.dst4, &ip->ip_dst, 0);
   
         ro = percpu_getref(ipforward_rt_percpu);          ro = percpu_getref(ipforward_rt_percpu);
         if ((rt = rtcache_lookup(ro, &u.dst)) == NULL) {          rt = rtcache_lookup(ro, &u.dst);
           if (rt == NULL) {
                 percpu_putref(ipforward_rt_percpu);                  percpu_putref(ipforward_rt_percpu);
                 icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, dest, 0);                  icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, dest, 0);
                 return;                  return;
Line 1393  ip_forward(struct mbuf *m, int srcrt, st
Line 1396  ip_forward(struct mbuf *m, int srcrt, st
                         code = ICMP_REDIRECT_HOST;                          code = ICMP_REDIRECT_HOST;
                 }                  }
         }          }
           rtcache_unref(rt, ro);
   
         error = ip_output(m, NULL, ro,          error = ip_output(m, NULL, ro,
             (IP_FORWARDING | (ip_directedbcast ? IP_ALLOWBROADCAST : 0)),              (IP_FORWARDING | (ip_directedbcast ? IP_ALLOWBROADCAST : 0)),
Line 1450  error:
Line 1454  error:
                 type = ICMP_UNREACH;                  type = ICMP_UNREACH;
                 code = ICMP_UNREACH_NEEDFRAG;                  code = ICMP_UNREACH_NEEDFRAG;
   
                 if ((rt = rtcache_validate(ro)) != NULL)                  if ((rt = rtcache_validate(ro)) != NULL) {
                         destmtu = rt->rt_ifp->if_mtu;                          destmtu = rt->rt_ifp->if_mtu;
                           rtcache_unref(rt, ro);
                   }
 #ifdef IPSEC  #ifdef IPSEC
                 if (ipsec_used)                  if (ipsec_used)
                         (void)ipsec4_forward(mcopy, &destmtu);                          (void)ipsec4_forward(mcopy, &destmtu);

Legend:
Removed from v.1.344  
changed lines
  Added in v.1.345

CVSweb <webmaster@jp.NetBSD.org>