[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.21 and 1.25

version 1.21, 1995/06/12 06:48:56 version 1.25, 1995/11/21 01:07:46
Line 142  udp_input(m, iphlen)
Line 142  udp_input(m, iphlen)
          * Checksum extended UDP header and data.           * Checksum extended UDP header and data.
          */           */
         if (udpcksum && uh->uh_sum) {          if (udpcksum && uh->uh_sum) {
                 ((struct ipovly *)ip)->ih_next = 0;                  bzero(((struct ipovly *)ip)->ih_x1,
                 ((struct ipovly *)ip)->ih_prev = 0;                      sizeof ((struct ipovly *)ip)->ih_x1);
                 ((struct ipovly *)ip)->ih_x1 = 0;  
                 ((struct ipovly *)ip)->ih_len = uh->uh_ulen;                  ((struct ipovly *)ip)->ih_len = uh->uh_ulen;
                 if (uh->uh_sum = in_cksum(m, len + sizeof (struct ip))) {                  if (uh->uh_sum = in_cksum(m, len + sizeof (struct ip))) {
                         udpstat.udps_badsum++;                          udpstat.udps_badsum++;
Line 184  udp_input(m, iphlen)
Line 183  udp_input(m, iphlen)
                  * (Algorithm copied from raw_intr().)                   * (Algorithm copied from raw_intr().)
                  */                   */
                 last = NULL;                  last = NULL;
                 for (inp = udbtable.inpt_list.lh_first; inp != 0;                  for (inp = udbtable.inpt_queue.cqh_first;
                     inp = inp->inp_list.le_next) {                      inp != (struct inpcb *)&udbtable.inpt_queue;
                       inp = inp->inp_queue.cqe_next) {
                         if (inp->inp_lport != uh->uh_dport)                          if (inp->inp_lport != uh->uh_dport)
                                 continue;                                  continue;
                         if (inp->inp_laddr.s_addr != INADDR_ANY) {                          if (inp->inp_laddr.s_addr != INADDR_ANY) {
Line 376  udp_ctlinput(cmd, sa, ip)
Line 376  udp_ctlinput(cmd, sa, ip)
                 notify = in_rtchange, ip = 0;                  notify = in_rtchange, ip = 0;
         else if (cmd == PRC_HOSTDEAD)          else if (cmd == PRC_HOSTDEAD)
                 ip = 0;                  ip = 0;
         else if (errno = 0)          else if (errno == 0)
                 return;                  return;
         if (ip) {          if (ip) {
                 uh = (struct udphdr *)((caddr_t)ip + (ip->ip_hl << 2));                  uh = (struct udphdr *)((caddr_t)ip + (ip->ip_hl << 2));
Line 409  udp_output(inp, m, addr, control)
Line 409  udp_output(inp, m, addr, control)
                 /*                  /*
                  * Must block input while temporarily connected.                   * Must block input while temporarily connected.
                  */                   */
                 s = splnet();                  s = splsoftnet();
                 error = in_pcbconnect(inp, addr);                  error = in_pcbconnect(inp, addr);
                 if (error) {                  if (error) {
                         splx(s);                          splx(s);
Line 436  udp_output(inp, m, addr, control)
Line 436  udp_output(inp, m, addr, control)
          * and addresses and length put into network format.           * and addresses and length put into network format.
          */           */
         ui = mtod(m, struct udpiphdr *);          ui = mtod(m, struct udpiphdr *);
         ui->ui_next = ui->ui_prev = 0;          bzero(ui->ui_x1, sizeof ui->ui_x1);
         ui->ui_x1 = 0;  
         ui->ui_pr = IPPROTO_UDP;          ui->ui_pr = IPPROTO_UDP;
         ui->ui_len = htons((u_int16_t)len + sizeof (struct udphdr));          ui->ui_len = htons((u_int16_t)len + sizeof (struct udphdr));
         ui->ui_src = inp->inp_laddr;          ui->ui_src = inp->inp_laddr;
Line 507  udp_usrreq(so, req, m, addr, control)
Line 506  udp_usrreq(so, req, m, addr, control)
                         error = EINVAL;                          error = EINVAL;
                         break;                          break;
                 }                  }
                 s = splnet();                  s = splsoftnet();
                 error = in_pcballoc(so, &udbtable);                  error = in_pcballoc(so, &udbtable);
                 splx(s);                  splx(s);
                 if (error)                  if (error)
Line 523  udp_usrreq(so, req, m, addr, control)
Line 522  udp_usrreq(so, req, m, addr, control)
                 break;                  break;
   
         case PRU_BIND:          case PRU_BIND:
                 s = splnet();                  s = splsoftnet();
                 error = in_pcbbind(inp, addr);                  error = in_pcbbind(inp, addr);
                 splx(s);                  splx(s);
                 break;                  break;
Line 537  udp_usrreq(so, req, m, addr, control)
Line 536  udp_usrreq(so, req, m, addr, control)
                         error = EISCONN;                          error = EISCONN;
                         break;                          break;
                 }                  }
                 s = splnet();                  s = splsoftnet();
                 error = in_pcbconnect(inp, addr);                  error = in_pcbconnect(inp, addr);
                 splx(s);                  splx(s);
                 if (error == 0)                  if (error == 0)
Line 557  udp_usrreq(so, req, m, addr, control)
Line 556  udp_usrreq(so, req, m, addr, control)
                         error = ENOTCONN;                          error = ENOTCONN;
                         break;                          break;
                 }                  }
                 s = splnet();                  s = splsoftnet();
                 in_pcbdisconnect(inp);                  in_pcbdisconnect(inp);
                 inp->inp_laddr.s_addr = INADDR_ANY;                  inp->inp_laddr.s_addr = INADDR_ANY;
                 splx(s);                  splx(s);
Line 620  static void
Line 619  static void
 udp_detach(inp)  udp_detach(inp)
         struct inpcb *inp;          struct inpcb *inp;
 {  {
         int s = splnet();          int s = splsoftnet();
   
         if (inp == udp_last_inpcb)          if (inp == udp_last_inpcb)
                 udp_last_inpcb = 0;                  udp_last_inpcb = 0;

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.25

CVSweb <webmaster@jp.NetBSD.org>