[BACK]Return to udp_usrreq.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/udp_usrreq.c between version 1.103.2.10 and 1.134.2.4

version 1.103.2.10, 2005/11/10 14:11:08 version 1.134.2.4, 2005/05/06 08:40:21
Line 146  int udpcksum = 1;
Line 146  int udpcksum = 1;
 #else  #else
 int     udpcksum = 0;           /* XXX */  int     udpcksum = 0;           /* XXX */
 #endif  #endif
 int     udp_do_loopback_cksum = 0;  
   
 struct  inpcbtable udbtable;  struct  inpcbtable udbtable;
 struct  udpstat udpstat;  struct  udpstat udpstat;
Line 187  struct mowner udp_tx_mowner = { "udp", "
Line 186  struct mowner udp_tx_mowner = { "udp", "
 #ifdef UDP_CSUM_COUNTERS  #ifdef UDP_CSUM_COUNTERS
 #include <sys/device.h>  #include <sys/device.h>
   
 #if defined(INET)  
 struct evcnt udp_hwcsum_bad = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,  struct evcnt udp_hwcsum_bad = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,
     NULL, "udp", "hwcsum bad");      NULL, "udp", "hwcsum bad");
 struct evcnt udp_hwcsum_ok = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,  struct evcnt udp_hwcsum_ok = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,
Line 197  struct evcnt udp_hwcsum_data = EVCNT_INI
Line 195  struct evcnt udp_hwcsum_data = EVCNT_INI
 struct evcnt udp_swcsum = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,  struct evcnt udp_swcsum = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,
     NULL, "udp", "swcsum");      NULL, "udp", "swcsum");
   
   #define UDP_CSUM_COUNTER_INCR(ev)       (ev)->ev_count++
   
 EVCNT_ATTACH_STATIC(udp_hwcsum_bad);  EVCNT_ATTACH_STATIC(udp_hwcsum_bad);
 EVCNT_ATTACH_STATIC(udp_hwcsum_ok);  EVCNT_ATTACH_STATIC(udp_hwcsum_ok);
 EVCNT_ATTACH_STATIC(udp_hwcsum_data);  EVCNT_ATTACH_STATIC(udp_hwcsum_data);
 EVCNT_ATTACH_STATIC(udp_swcsum);  EVCNT_ATTACH_STATIC(udp_swcsum);
 #endif /* defined(INET) */  
   
 #if defined(INET6)  
 struct evcnt udp6_hwcsum_bad = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,  
     NULL, "udp6", "hwcsum bad");  
 struct evcnt udp6_hwcsum_ok = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,  
     NULL, "udp6", "hwcsum ok");  
 struct evcnt udp6_hwcsum_data = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,  
     NULL, "udp6", "hwcsum data");  
 struct evcnt udp6_swcsum = EVCNT_INITIALIZER(EVCNT_TYPE_MISC,  
     NULL, "udp6", "swcsum");  
   
 EVCNT_ATTACH_STATIC(udp6_hwcsum_bad);  
 EVCNT_ATTACH_STATIC(udp6_hwcsum_ok);  
 EVCNT_ATTACH_STATIC(udp6_hwcsum_data);  
 EVCNT_ATTACH_STATIC(udp6_swcsum);  
 #endif /* defined(INET6) */  
   
 #define UDP_CSUM_COUNTER_INCR(ev)       (ev)->ev_count++  
   
 #else  #else
   
Line 461  static int
Line 442  static int
 udp6_input_checksum(struct mbuf *m, const struct udphdr *uh, int off, int len)  udp6_input_checksum(struct mbuf *m, const struct udphdr *uh, int off, int len)
 {  {
   
         /*  
          * XXX it's better to record and check if this mbuf is  
          * already checked.  
          */  
   
         if (__predict_false((m->m_flags & M_LOOP) && !udp_do_loopback_cksum)) {          if (__predict_false((m->m_flags & M_LOOP) && !udp_do_loopback_cksum)) {
                 goto good;                  goto good;
         }          }
Line 473  udp6_input_checksum(struct mbuf *m, cons
Line 449  udp6_input_checksum(struct mbuf *m, cons
                 udp6stat.udp6s_nosum++;                  udp6stat.udp6s_nosum++;
                 goto bad;                  goto bad;
         }          }
           if (in6_cksum(m, IPPROTO_UDP, off, len) != 0) {
         switch (m->m_pkthdr.csum_flags &  
             ((m->m_pkthdr.rcvif->if_csum_flags_rx & M_CSUM_UDPv6) |  
             M_CSUM_TCP_UDP_BAD | M_CSUM_DATA)) {  
         case M_CSUM_UDPv6|M_CSUM_TCP_UDP_BAD:  
                 UDP_CSUM_COUNTER_INCR(&udp6_hwcsum_bad);  
                 udp6stat.udp6s_badsum++;                  udp6stat.udp6s_badsum++;
                 goto bad;                  goto bad;
   
 #if 0 /* notyet */  
         case M_CSUM_UDPv6|M_CSUM_DATA:  
 #endif  
   
         case M_CSUM_UDPv6:  
                 /* Checksum was okay. */  
                 UDP_CSUM_COUNTER_INCR(&udp6_hwcsum_ok);  
                 break;  
   
         default:  
                 /*  
                  * Need to compute it ourselves.  Maybe skip checksum  
                  * on loopback interfaces.  
                  */  
                 UDP_CSUM_COUNTER_INCR(&udp6_swcsum);  
                 if (in6_cksum(m, IPPROTO_UDP, off, len) != 0) {  
                         udp6stat.udp6s_badsum++;  
                         goto bad;  
                 }  
         }          }
   
 good:  good:
Line 1157  int udp_recvspace = 40 * (1024 + sizeof(
Line 1108  int udp_recvspace = 40 * (1024 + sizeof(
 /*ARGSUSED*/  /*ARGSUSED*/
 int  int
 udp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,  udp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
         struct mbuf *control, struct lwp *l)          struct mbuf *control, struct proc *p)
 {  {
         struct inpcb *inp;          struct inpcb *inp;
         struct proc *p;  
         int s;          int s;
         int error = 0;          int error = 0;
   
         p = l ? l->l_proc : NULL;  
         if (req == PRU_CONTROL)          if (req == PRU_CONTROL)
                 return (in_control(so, (long)m, (caddr_t)nam,                  return (in_control(so, (long)m, (caddr_t)nam,
                     (struct ifnet *)control, p));                      (struct ifnet *)control, p));
Line 1384  SYSCTL_SETUP(sysctl_net_inet_udp_setup, 
Line 1333  SYSCTL_SETUP(sysctl_net_inet_udp_setup, 
                        sysctl_inpcblist, 0, &udbtable, 0,                         sysctl_inpcblist, 0, &udbtable, 0,
                        CTL_NET, PF_INET, IPPROTO_UDP, CTL_CREATE,                         CTL_NET, PF_INET, IPPROTO_UDP, CTL_CREATE,
                        CTL_EOL);                         CTL_EOL);
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT,  
                        CTLTYPE_STRUCT, "stats",  
                        SYSCTL_DESCR("UDP statistics"),  
                        NULL, 0, &udpstat, sizeof(udpstat),  
                        CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_STATS,  
                        CTL_EOL);  
 }  }
 #endif  #endif
   
Line 1458  udp4_espinudp(m, off, src, so)
Line 1400  udp4_espinudp(m, off, src, so)
         }          }
   
         if (inp->inp_flags & INP_ESPINUDP_NON_IKE) {          if (inp->inp_flags & INP_ESPINUDP_NON_IKE) {
                 u_int32_t *st = (u_int32_t *)data;                  u_int64_t *st = (u_int64_t *)data;
   
                 if ((len <= sizeof(u_int64_t) + sizeof(struct esp))                  if ((len <= sizeof(u_int64_t) + sizeof(struct esp))
                     || ((st[0] | st[1]) != 0))                      || (*st != 0))
                         return 0; /* Normal UDP processing */                          return 0; /* Normal UDP processing */
   
                 skip = sizeof(struct udphdr) + sizeof(u_int64_t);                  skip = sizeof(struct udphdr) + sizeof(u_int64_t);

Legend:
Removed from v.1.103.2.10  
changed lines
  Added in v.1.134.2.4

CVSweb <webmaster@jp.NetBSD.org>