[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.168.2.1 and 1.174.2.2

version 1.168.2.1, 2008/05/18 12:35:30 version 1.174.2.2, 2009/07/23 23:32:48
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 136  __KERNEL_RCSID(0, "$NetBSD$");
Line 137  __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 408  udp_input(struct mbuf *m, ...)
Line 413  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;
   
                 bzero(&src6, sizeof(src6));                  memset(&src6, 0, 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;
                 bcopy(&ip->ip_src, &src6.sin6_addr.s6_addr[12],                  memcpy(&src6.sin6_addr.s6_addr[12], &ip->ip_src,
                         sizeof(ip->ip_src));                          sizeof(ip->ip_src));
                 src6.sin6_port = uh->uh_sport;                  src6.sin6_port = uh->uh_sport;
                 bzero(&dst6, sizeof(dst6));                  memset(&dst6, 0, 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;
                 bcopy(&ip->ip_dst, &dst6.sin6_addr.s6_addr[12],                  memcpy(&dst6.sin6_addr.s6_addr[12], &ip->ip_dst,
                         sizeof(ip->ip_dst));                          sizeof(ip->ip_dst));
                 dst6.sin6_port = uh->uh_dport;                  dst6.sin6_port = uh->uh_dport;
   
Line 575  udp6_input(struct mbuf **mp, int *offp, 
Line 580  udp6_input(struct mbuf **mp, int *offp, 
         /*          /*
          * Construct source and dst sockaddrs.           * Construct source and dst sockaddrs.
          */           */
         bzero(&src, sizeof(src));          memset(&src, 0, 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;
         bzero(&dst, sizeof(dst));          memset(&dst, 0, 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 639  udp4_sendup(struct mbuf *m, int off /* o
Line 644  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 686  udp6_sendup(struct mbuf *m, int off /* o
Line 694  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
                           || in6p->in6p_socket->so_options & SO_TIMESTAMP)) {  #ifdef SO_OTIMESTAMP
                       || 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 825  udp4_realinput(struct sockaddr_in *src, 
Line 836  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 1000  udp_ctlinput(int cmd, const struct socka
Line 1017  udp_ctlinput(int cmd, const struct socka
 }  }
   
 int  int
 udp_ctloutput(int op, struct socket *so, int level, int optname,  udp_ctloutput(int op, struct socket *so, struct sockopt *sopt)
     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 1015  udp_ctloutput(int op, struct socket *so,
Line 1031  udp_ctloutput(int op, struct socket *so,
         switch (family) {          switch (family) {
 #ifdef INET  #ifdef INET
         case PF_INET:          case PF_INET:
                 if (level != IPPROTO_UDP) {                  if (sopt->sopt_level != IPPROTO_UDP) {
                         error = ip_ctloutput(op, so, level, optname, mp);                          error = ip_ctloutput(op, so, sopt);
                         goto end;                          goto end;
                 }                  }
                 break;                  break;
 #endif  #endif
 #ifdef INET6  #ifdef INET6
         case PF_INET6:          case PF_INET6:
                 if (level != IPPROTO_UDP) {                  if (sopt->sopt_level != IPPROTO_UDP) {
                         error = ip6_ctloutput(op, so, level, optname, mp);                          error = ip6_ctloutput(op, so, sopt);
                         goto end;                          goto end;
                 }                  }
                 break;                  break;
Line 1037  udp_ctloutput(int op, struct socket *so,
Line 1053  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 (optname) {                  switch (sopt->sopt_name) {
                 case UDP_ENCAP:                  case UDP_ENCAP:
                         if (m == NULL || m->m_len != sizeof(int)) {                          error = sockopt_getint(sopt, &optval);
                                 error = EINVAL;                          if (error)
                                 break;                                  break;
                         }  
   
                         switch(*mtod(m, int *)) {                          switch(optval) {
 #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 1073  udp_ctloutput(int op, struct socket *so,
Line 1087  udp_ctloutput(int op, struct socket *so,
                         error = ENOPROTOOPT;                          error = ENOPROTOOPT;
                         break;                          break;
                 }                  }
                 if (m != NULL) {  
                         m_free(m);  
                 }  
                 break;                  break;
   
         default:          default:

Legend:
Removed from v.1.168.2.1  
changed lines
  Added in v.1.174.2.2

CVSweb <webmaster@jp.NetBSD.org>