[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.146.2.1 and 1.146.2.2

version 1.146.2.1, 2006/02/05 03:09:11 version 1.146.2.2, 2006/02/07 04:51:49
Line 713  udp4_realinput(struct sockaddr_in *src, 
Line 713  udp4_realinput(struct sockaddr_in *src, 
         u_int16_t *sport, *dport;          u_int16_t *sport, *dport;
         int rcvcnt;          int rcvcnt;
         struct in_addr *src4, *dst4;          struct in_addr *src4, *dst4;
         struct inpcb_hdr *inph;  
         struct inpcb *inp;          struct inpcb *inp;
         struct mbuf *m = *mp;          struct mbuf *m = *mp;
   
Line 753  udp4_realinput(struct sockaddr_in *src, 
Line 752  udp4_realinput(struct sockaddr_in *src, 
                 /*                  /*
                  * Locate pcb(s) for datagram.                   * Locate pcb(s) for datagram.
                  */                   */
                 CIRCLEQ_FOREACH(inph, &udbtable.inpt_queue, inph_queue) {                  CIRCLEQ_FOREACH(inp, &udbtable.inpt_queue, inp_queue) {
                         inp = (struct inpcb *)inph;  
                         if (inp->inp_af != AF_INET)                          if (inp->inp_af != AF_INET)
                                 continue;                                  continue;
   
Line 844  udp6_realinput(int af, struct sockaddr_i
Line 842  udp6_realinput(int af, struct sockaddr_i
         int rcvcnt;          int rcvcnt;
         struct in6_addr src6, *dst6;          struct in6_addr src6, *dst6;
         const struct in_addr *dst4;          const struct in_addr *dst4;
         struct inpcb_hdr *inph;          struct inpcb *inp;
         struct in6pcb *in6p;  
   
         rcvcnt = 0;          rcvcnt = 0;
         off += sizeof(struct udphdr);   /* now, offset of payload */          off += sizeof(struct udphdr);   /* now, offset of payload */
Line 891  udp6_realinput(int af, struct sockaddr_i
Line 888  udp6_realinput(int af, struct sockaddr_i
                 /*                  /*
                  * Locate pcb(s) for datagram.                   * Locate pcb(s) for datagram.
                  */                   */
                 CIRCLEQ_FOREACH(inph, &udbtable.inpt_queue, inph_queue) {                  CIRCLEQ_FOREACH(inp, &udbtable.inpt_queue, inp_queue) {
                         in6p = (struct in6pcb *)inph;                          if (inp->inp_af != AF_INET6)
                         if (in6p->in6p_af != AF_INET6)  
                                 continue;                                  continue;
   
                         if (in6p->in6p_lport != dport)                          if (inp->inp_lport != dport)
                                 continue;                                  continue;
                         if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_laddr)) {                          if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)) {
                                 if (!IN6_ARE_ADDR_EQUAL(&in6p->in6p_laddr,                                  if (!IN6_ARE_ADDR_EQUAL(&inp->in6p_laddr,
                                     dst6))                                      dst6))
                                         continue;                                          continue;
                         } else {                          } else {
                                 if (IN6_IS_ADDR_V4MAPPED(dst6) &&                                  if (IN6_IS_ADDR_V4MAPPED(dst6) &&
                                     (in6p->in6p_flags & IN6P_IPV6_V6ONLY))                                      (inp->inp_flags & IN6P_IPV6_V6ONLY))
                                         continue;                                          continue;
                         }                          }
                         if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr)) {                          if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr)) {
                                 if (!IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr,                                  if (!IN6_ARE_ADDR_EQUAL(&inp->in6p_faddr,
                                     &src6) || in6p->in6p_fport != sport)                                      &src6) || inp->inp_fport != sport)
                                         continue;                                          continue;
                         } else {                          } else {
                                 if (IN6_IS_ADDR_V4MAPPED(&src6) &&                                  if (IN6_IS_ADDR_V4MAPPED(&src6) &&
                                     (in6p->in6p_flags & IN6P_IPV6_V6ONLY))                                      (inp->inp_flags & IN6P_IPV6_V6ONLY))
                                         continue;                                          continue;
                         }                          }
   
                         udp6_sendup(m, off, (struct sockaddr *)src,                          udp6_sendup(m, off, (struct sockaddr *)src,
                                 in6p->in6p_socket);                                  inp->inp_socket);
                         rcvcnt++;                          rcvcnt++;
   
                         /*                          /*
Line 929  udp6_realinput(int af, struct sockaddr_i
Line 925  udp6_realinput(int af, struct sockaddr_i
                          * port.  It assumes that an application will never                           * port.  It assumes that an application will never
                          * clear these options after setting them.                           * clear these options after setting them.
                          */                           */
                         if ((in6p->in6p_socket->so_options &                          if ((inp->inp_socket->so_options &
                             (SO_REUSEPORT|SO_REUSEADDR)) == 0)                              (SO_REUSEPORT|SO_REUSEADDR)) == 0)
                                 break;                                  break;
                 }                  }
Line 937  udp6_realinput(int af, struct sockaddr_i
Line 933  udp6_realinput(int af, struct sockaddr_i
                 /*                  /*
                  * Locate pcb for datagram.                   * Locate pcb for datagram.
                  */                   */
                 in6p = in6_pcblookup_connect(&udbtable, &src6, sport, dst6,                  inp = in6_pcblookup_connect(&udbtable, &src6, sport, dst6,
                     dport, 0);                      dport, 0);
                 if (in6p == 0) {                  if (inp == 0) {
                         ++udpstat.udps_pcbhashmiss;                          ++udpstat.udps_pcbhashmiss;
                         in6p = in6_pcblookup_bind(&udbtable, dst6, dport, 0);                          inp = in6_pcblookup_bind(&udbtable, dst6, dport, 0);
                         if (in6p == 0)                          if (inp == 0)
                                 return rcvcnt;                                  return rcvcnt;
                 }                  }
   
                 udp6_sendup(m, off, (struct sockaddr *)src, in6p->in6p_socket);                  udp6_sendup(m, off, (struct sockaddr *)src, inp->inp_socket);
                 rcvcnt++;                  rcvcnt++;
         }          }
   

Legend:
Removed from v.1.146.2.1  
changed lines
  Added in v.1.146.2.2

CVSweb <webmaster@jp.NetBSD.org>