[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.171.2.4 and 1.172

version 1.171.2.4, 2010/03/11 15:04:29 version 1.172, 2008/05/04 07:22:14
Line 64 
Line 64 
 __KERNEL_RCSID(0, "$NetBSD$");  __KERNEL_RCSID(0, "$NetBSD$");
   
 #include "opt_inet.h"  #include "opt_inet.h"
 #include "opt_compat_netbsd.h"  
 #include "opt_ipsec.h"  #include "opt_ipsec.h"
 #include "opt_inet_csum.h"  #include "opt_inet_csum.h"
 #include "opt_ipkdb.h"  #include "opt_ipkdb.h"
Line 137  __KERNEL_RCSID(0, "$NetBSD$");
Line 136  __KERNEL_RCSID(0, "$NetBSD$");
 #include <netkey/key.h>  #include <netkey/key.h>
 #endif /* IPSEC */  #endif /* IPSEC */
   
 #ifdef COMPAT_50  
 #include <compat/sys/socket.h>  
 #endif  
   
 #ifdef IPKDB  #ifdef IPKDB
 #include <ipkdb/ipkdb.h>  #include <ipkdb/ipkdb.h>
 #endif  #endif
Line 232  EVCNT_ATTACH_STATIC(udp6_swcsum);
Line 227  EVCNT_ATTACH_STATIC(udp6_swcsum);
   
 #endif /* UDP_CSUM_COUNTERS */  #endif /* UDP_CSUM_COUNTERS */
   
 static void sysctl_net_inet_udp_setup(struct sysctllog **);  
   
 void  void
 udp_init(void)  udp_init(void)
 {  {
   
         sysctl_net_inet_udp_setup(NULL);  
   
         in_pcbinit(&udbtable, udbhashsize, udbhashsize);          in_pcbinit(&udbtable, udbhashsize, udbhashsize);
   
         MOWNER_ATTACH(&udp_tx_mowner);          MOWNER_ATTACH(&udp_tx_mowner);
Line 417  udp_input(struct mbuf *m, ...)
Line 408  udp_input(struct mbuf *m, ...)
         if (IN_MULTICAST(ip->ip_dst.s_addr) || n == 0) {          if (IN_MULTICAST(ip->ip_dst.s_addr) || n == 0) {
                 struct sockaddr_in6 src6, dst6;                  struct sockaddr_in6 src6, dst6;
   
                 memset(&src6, 0, sizeof(src6));                  bzero(&src6, sizeof(src6));
                 src6.sin6_family = AF_INET6;                  src6.sin6_family = AF_INET6;
                 src6.sin6_len = sizeof(struct sockaddr_in6);                  src6.sin6_len = sizeof(struct sockaddr_in6);
                 src6.sin6_addr.s6_addr[10] = src6.sin6_addr.s6_addr[11] = 0xff;                  src6.sin6_addr.s6_addr[10] = src6.sin6_addr.s6_addr[11] = 0xff;
                 memcpy(&src6.sin6_addr.s6_addr[12], &ip->ip_src,                  bcopy(&ip->ip_src, &src6.sin6_addr.s6_addr[12],
                         sizeof(ip->ip_src));                          sizeof(ip->ip_src));
                 src6.sin6_port = uh->uh_sport;                  src6.sin6_port = uh->uh_sport;
                 memset(&dst6, 0, sizeof(dst6));                  bzero(&dst6, sizeof(dst6));
                 dst6.sin6_family = AF_INET6;                  dst6.sin6_family = AF_INET6;
                 dst6.sin6_len = sizeof(struct sockaddr_in6);                  dst6.sin6_len = sizeof(struct sockaddr_in6);
                 dst6.sin6_addr.s6_addr[10] = dst6.sin6_addr.s6_addr[11] = 0xff;                  dst6.sin6_addr.s6_addr[10] = dst6.sin6_addr.s6_addr[11] = 0xff;
                 memcpy(&dst6.sin6_addr.s6_addr[12], &ip->ip_dst,                  bcopy(&ip->ip_dst, &dst6.sin6_addr.s6_addr[12],
                         sizeof(ip->ip_dst));                          sizeof(ip->ip_dst));
                 dst6.sin6_port = uh->uh_dport;                  dst6.sin6_port = uh->uh_dport;
   
Line 584  udp6_input(struct mbuf **mp, int *offp, 
Line 575  udp6_input(struct mbuf **mp, int *offp, 
         /*          /*
          * Construct source and dst sockaddrs.           * Construct source and dst sockaddrs.
          */           */
         memset(&src, 0, sizeof(src));          bzero(&src, sizeof(src));
         src.sin6_family = AF_INET6;          src.sin6_family = AF_INET6;
         src.sin6_len = sizeof(struct sockaddr_in6);          src.sin6_len = sizeof(struct sockaddr_in6);
         src.sin6_addr = ip6->ip6_src;          src.sin6_addr = ip6->ip6_src;
         src.sin6_port = uh->uh_sport;          src.sin6_port = uh->uh_sport;
         memset(&dst, 0, sizeof(dst));          bzero(&dst, sizeof(dst));
         dst.sin6_family = AF_INET6;          dst.sin6_family = AF_INET6;
         dst.sin6_len = sizeof(struct sockaddr_in6);          dst.sin6_len = sizeof(struct sockaddr_in6);
         dst.sin6_addr = ip6->ip6_dst;          dst.sin6_addr = ip6->ip6_dst;
Line 648  udp4_sendup(struct mbuf *m, int off /* o
Line 639  udp4_sendup(struct mbuf *m, int off /* o
   
         if ((n = m_copypacket(m, M_DONTWAIT)) != NULL) {          if ((n = m_copypacket(m, M_DONTWAIT)) != NULL) {
                 if (inp && (inp->inp_flags & INP_CONTROLOPTS                  if (inp && (inp->inp_flags & INP_CONTROLOPTS
 #ifdef SO_OTIMESTAMP  
                          || so->so_options & SO_OTIMESTAMP  
 #endif  
                          || so->so_options & SO_TIMESTAMP)) {                           || so->so_options & SO_TIMESTAMP)) {
                         struct ip *ip = mtod(n, struct ip *);                          struct ip *ip = mtod(n, struct ip *);
                         ip_savecontrol(inp, &opts, ip, n);                          ip_savecontrol(inp, &opts, ip, n);
Line 698  udp6_sendup(struct mbuf *m, int off /* o
Line 686  udp6_sendup(struct mbuf *m, int off /* o
   
         if ((n = m_copypacket(m, M_DONTWAIT)) != NULL) {          if ((n = m_copypacket(m, M_DONTWAIT)) != NULL) {
                 if (in6p && (in6p->in6p_flags & IN6P_CONTROLOPTS                  if (in6p && (in6p->in6p_flags & IN6P_CONTROLOPTS
 #ifdef SO_OTIMESTAMP                            || in6p->in6p_socket->so_options & SO_TIMESTAMP)) {
                     || in6p->in6p_socket->so_options & SO_OTIMESTAMP  
 #endif  
                     || in6p->in6p_socket->so_options & SO_TIMESTAMP)) {  
                         struct ip6_hdr *ip6 = mtod(n, struct ip6_hdr *);                          struct ip6_hdr *ip6 = mtod(n, struct ip6_hdr *);
                         ip6_savecontrol(in6p, &opts, ip6, n);                          ip6_savecontrol(in6p, &opts, ip6, n);
                 }                  }
Line 840  udp4_realinput(struct sockaddr_in *src, 
Line 825  udp4_realinput(struct sockaddr_in *src, 
                 }                  }
 #endif  #endif
   
                 /*  
                  * Check the minimum TTL for socket.  
                  */  
                 if (mtod(m, struct ip *)->ip_ttl < inp->inp_ip_minttl)  
                         goto bad;  
   
                 udp4_sendup(m, off, (struct sockaddr *)src, inp->inp_socket);                  udp4_sendup(m, off, (struct sockaddr *)src, inp->inp_socket);
                 rcvcnt++;                  rcvcnt++;
         }          }
Line 1021  udp_ctlinput(int cmd, const struct socka
Line 1000  udp_ctlinput(int cmd, const struct socka
 }  }
   
 int  int
 udp_ctloutput(int op, struct socket *so, struct sockopt *sopt)  udp_ctloutput(int op, struct socket *so, int level, int optname,
       struct mbuf **mp)
 {  {
         int s;          int s;
         int error = 0;          int error = 0;
           struct mbuf *m;
         struct inpcb *inp;          struct inpcb *inp;
         int family;          int family;
         int optval;  
   
         family = so->so_proto->pr_domain->dom_family;          family = so->so_proto->pr_domain->dom_family;
   
Line 1035  udp_ctloutput(int op, struct socket *so,
Line 1015  udp_ctloutput(int op, struct socket *so,
         switch (family) {          switch (family) {
 #ifdef INET  #ifdef INET
         case PF_INET:          case PF_INET:
                 if (sopt->sopt_level != IPPROTO_UDP) {                  if (level != IPPROTO_UDP) {
                         error = ip_ctloutput(op, so, sopt);                          error = ip_ctloutput(op, so, level, optname, mp);
                         goto end;                          goto end;
                 }                  }
                 break;                  break;
 #endif  #endif
 #ifdef INET6  #ifdef INET6
         case PF_INET6:          case PF_INET6:
                 if (sopt->sopt_level != IPPROTO_UDP) {                  if (level != IPPROTO_UDP) {
                         error = ip6_ctloutput(op, so, sopt);                          error = ip6_ctloutput(op, so, level, optname, mp);
                         goto end;                          goto end;
                 }                  }
                 break;                  break;
Line 1057  udp_ctloutput(int op, struct socket *so,
Line 1037  udp_ctloutput(int op, struct socket *so,
   
         switch (op) {          switch (op) {
         case PRCO_SETOPT:          case PRCO_SETOPT:
                   m = *mp;
                 inp = sotoinpcb(so);                  inp = sotoinpcb(so);
   
                 switch (sopt->sopt_name) {                  switch (optname) {
                 case UDP_ENCAP:                  case UDP_ENCAP:
                         error = sockopt_getint(sopt, &optval);                          if (m == NULL || m->m_len != sizeof(int)) {
                         if (error)                                  error = EINVAL;
                                 break;                                  break;
                           }
   
                         switch(optval) {                          switch(*mtod(m, int *)) {
 #ifdef IPSEC_NAT_T  #ifdef IPSEC_NAT_T
                         case 0:                          case 0:
                                 inp->inp_flags &= ~INP_ESPINUDP_ALL;                                  inp->inp_flags &= ~INP_ESPINUDP_ALL;
Line 1091  udp_ctloutput(int op, struct socket *so,
Line 1073  udp_ctloutput(int op, struct socket *so,
                         error = ENOPROTOOPT;                          error = ENOPROTOOPT;
                         break;                          break;
                 }                  }
                   if (m != NULL) {
                           m_free(m);
                   }
                 break;                  break;
   
         default:          default:
Line 1371  sysctl_net_inet_udp_stats(SYSCTLFN_ARGS)
Line 1356  sysctl_net_inet_udp_stats(SYSCTLFN_ARGS)
 /*  /*
  * Sysctl for udp variables.   * Sysctl for udp variables.
  */   */
 static void  SYSCTL_SETUP(sysctl_net_inet_udp_setup, "sysctl net.inet.udp subtree setup")
 sysctl_net_inet_udp_setup(struct sysctllog **clog)  
 {  {
   
         sysctl_createv(clog, 0, NULL, NULL,          sysctl_createv(clog, 0, NULL, NULL,

Legend:
Removed from v.1.171.2.4  
changed lines
  Added in v.1.172

CVSweb <webmaster@jp.NetBSD.org>