[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.343 and 1.344

version 1.343, 2016/10/18 01:15:20 version 1.344, 2016/10/18 07:30:31
Line 101  __KERNEL_RCSID(0, "$NetBSD$");
Line 101  __KERNEL_RCSID(0, "$NetBSD$");
 #include "opt_mrouting.h"  #include "opt_mrouting.h"
 #include "opt_mbuftrace.h"  #include "opt_mbuftrace.h"
 #include "opt_inet_csum.h"  #include "opt_inet_csum.h"
   #include "opt_net_mpsafe.h"
 #endif  #endif
   
 #include "arp.h"  #include "arp.h"
Line 294  static struct in_ifaddr *ip_match_our_ad
Line 295  static struct in_ifaddr *ip_match_our_ad
 static struct in_ifaddr *ip_match_our_address_broadcast(struct ifnet *,  static struct in_ifaddr *ip_match_our_address_broadcast(struct ifnet *,
                             struct ip *);                              struct ip *);
   
 /* XXX: Not yet enabled. */  #ifdef NET_MPSAFE
   #define SOFTNET_LOCK()          mutex_enter(softnet_lock)
   #define SOFTNET_UNLOCK()        mutex_exit(softnet_lock)
   #else
 #define SOFTNET_LOCK()          KASSERT(mutex_owned(softnet_lock))  #define SOFTNET_LOCK()          KASSERT(mutex_owned(softnet_lock))
 #define SOFTNET_UNLOCK()        KASSERT(mutex_owned(softnet_lock))  #define SOFTNET_UNLOCK()        KASSERT(mutex_owned(softnet_lock))
   #endif
   
 /*  /*
  * IP initialization: fill in IP protocol switch table.   * IP initialization: fill in IP protocol switch table.
Line 437  ipintr(void *arg __unused)
Line 442  ipintr(void *arg __unused)
   
         KASSERT(cpu_softintr_p());          KASSERT(cpu_softintr_p());
   
   #ifndef NET_MPSAFE
         mutex_enter(softnet_lock);          mutex_enter(softnet_lock);
   #endif
         while ((m = pktq_dequeue(ip_pktq)) != NULL) {          while ((m = pktq_dequeue(ip_pktq)) != NULL) {
                 ip_input(m);                  ip_input(m);
         }          }
   #ifndef NET_MPSAFE
         mutex_exit(softnet_lock);          mutex_exit(softnet_lock);
   #endif
 }  }
   
 /*  /*
Line 614  ip_input(struct mbuf *m)
Line 623  ip_input(struct mbuf *m)
                 struct in_addr odst = ip->ip_dst;                  struct in_addr odst = ip->ip_dst;
                 bool freed;                  bool freed;
   
                 SOFTNET_LOCK();  
                 freed = pfil_run_hooks(inet_pfil_hook, &m, ifp, PFIL_IN) != 0;                  freed = pfil_run_hooks(inet_pfil_hook, &m, ifp, PFIL_IN) != 0;
                 SOFTNET_UNLOCK();  
                 if (freed || m == NULL) {                  if (freed || m == NULL) {
                         m = NULL;                          m = NULL;
                         goto out;                          goto out;
Line 1334  ip_forward(struct mbuf *m, int srcrt, st
Line 1341  ip_forward(struct mbuf *m, int srcrt, st
                 return;                  return;
         }          }
   
         SOFTNET_LOCK();  
   
         if (ip->ip_ttl <= IPTTLDEC) {          if (ip->ip_ttl <= IPTTLDEC) {
                 icmp_error(m, ICMP_TIMXCEED, ICMP_TIMXCEED_INTRANS, dest, 0);                  icmp_error(m, ICMP_TIMXCEED, ICMP_TIMXCEED_INTRANS, dest, 0);
                 SOFTNET_UNLOCK();  
                 return;                  return;
         }          }
   
Line 1348  ip_forward(struct mbuf *m, int srcrt, st
Line 1352  ip_forward(struct mbuf *m, int srcrt, st
         if ((rt = rtcache_lookup(ro, &u.dst)) == NULL) {          if ((rt = rtcache_lookup(ro, &u.dst)) == 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);
                 SOFTNET_UNLOCK();  
                 return;                  return;
         }          }
   
Line 1419  ip_forward(struct mbuf *m, int srcrt, st
Line 1422  ip_forward(struct mbuf *m, int srcrt, st
         }          }
   
         percpu_putref(ipforward_rt_percpu);          percpu_putref(ipforward_rt_percpu);
         SOFTNET_UNLOCK();  
         return;          return;
   
 redirect:  redirect:
 error:  error:
         if (mcopy == NULL) {          if (mcopy == NULL) {
                 percpu_putref(ipforward_rt_percpu);                  percpu_putref(ipforward_rt_percpu);
                 SOFTNET_UNLOCK();  
                 return;                  return;
         }          }
   
Line 1468  error:
Line 1469  error:
                 if (mcopy)                  if (mcopy)
                         m_freem(mcopy);                          m_freem(mcopy);
                 percpu_putref(ipforward_rt_percpu);                  percpu_putref(ipforward_rt_percpu);
                 SOFTNET_UNLOCK();  
                 return;                  return;
         }          }
         icmp_error(mcopy, type, code, dest, destmtu);          icmp_error(mcopy, type, code, dest, destmtu);
         percpu_putref(ipforward_rt_percpu);          percpu_putref(ipforward_rt_percpu);
         SOFTNET_UNLOCK();  
 }  }
   
 void  void

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

CVSweb <webmaster@jp.NetBSD.org>