[BACK]Return to uipc_usrreq.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / kern

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/kern/uipc_usrreq.c between version 1.133 and 1.133.2.1

version 1.133, 2010/11/19 06:44:43 version 1.133.2.1, 2011/06/06 09:09:40
Line 124  __KERNEL_RCSID(0, "$NetBSD$");
Line 124  __KERNEL_RCSID(0, "$NetBSD$");
  * Unix communications domain.   * Unix communications domain.
  *   *
  * TODO:   * TODO:
  *      SEQPACKET, RDM   *      RDM
  *      rethink name space problems   *      rethink name space problems
  *      need a proper out-of-band   *      need a proper out-of-band
  *   *
Line 487  uipc_usrreq(struct socket *so, int req, 
Line 487  uipc_usrreq(struct socket *so, int req, 
                         panic("uipc 1");                          panic("uipc 1");
                         /*NOTREACHED*/                          /*NOTREACHED*/
   
                   case SOCK_SEQPACKET: /* FALLTHROUGH */
                 case SOCK_STREAM:                  case SOCK_STREAM:
 #define rcv (&so->so_rcv)  #define rcv (&so->so_rcv)
 #define snd (&so2->so_snd)  #define snd (&so2->so_snd)
Line 567  uipc_usrreq(struct socket *so, int req, 
Line 568  uipc_usrreq(struct socket *so, int req, 
                         break;                          break;
                 }                  }
   
                   case SOCK_SEQPACKET: /* FALLTHROUGH */
                 case SOCK_STREAM:                  case SOCK_STREAM:
 #define rcv (&so2->so_rcv)  #define rcv (&so2->so_rcv)
 #define snd (&so->so_snd)  #define snd (&so->so_snd)
Line 579  uipc_usrreq(struct socket *so, int req, 
Line 581  uipc_usrreq(struct socket *so, int req, 
                         if (unp->unp_conn->unp_flags & UNP_WANTCRED) {                          if (unp->unp_conn->unp_flags & UNP_WANTCRED) {
                                 /*                                  /*
                                  * Credentials are passed only once on                                   * Credentials are passed only once on
                                  * SOCK_STREAM.                                   * SOCK_STREAM and SOCK_SEQPACKET.
                                  */                                   */
                                 unp->unp_conn->unp_flags &= ~UNP_WANTCRED;                                  unp->unp_conn->unp_flags &= ~UNP_WANTCRED;
                                 control = unp_addsockcred(l, control);                                  control = unp_addsockcred(l, control);
Line 592  uipc_usrreq(struct socket *so, int req, 
Line 594  uipc_usrreq(struct socket *so, int req, 
                         if (control) {                          if (control) {
                                 if (sbappendcontrol(rcv, m, control) != 0)                                  if (sbappendcontrol(rcv, m, control) != 0)
                                         control = NULL;                                          control = NULL;
                         } else                          } else {
                                 sbappend(rcv, m);                                  switch(so->so_type) {
                                   case SOCK_SEQPACKET:
                                           sbappendrecord(rcv, m);
                                           break;
                                   case SOCK_STREAM:
                                           sbappend(rcv, m);
                                           break;
                                   default:
                                           panic("uipc_usrreq");
                                           break;
                                   }
                           }
                         snd->sb_mbmax -=                          snd->sb_mbmax -=
                             rcv->sb_mbcnt - unp->unp_conn->unp_mbcnt;                              rcv->sb_mbcnt - unp->unp_conn->unp_mbcnt;
                         unp->unp_conn->unp_mbcnt = rcv->sb_mbcnt;                          unp->unp_conn->unp_mbcnt = rcv->sb_mbcnt;
Line 629  uipc_usrreq(struct socket *so, int req, 
Line 642  uipc_usrreq(struct socket *so, int req, 
   
         case PRU_SENSE:          case PRU_SENSE:
                 ((struct stat *) m)->st_blksize = so->so_snd.sb_hiwat;                  ((struct stat *) m)->st_blksize = so->so_snd.sb_hiwat;
                 if (so->so_type == SOCK_STREAM && unp->unp_conn != 0) {                  switch (so->so_type) {
                   case SOCK_SEQPACKET: /* FALLTHROUGH */
                   case SOCK_STREAM:
                           if (unp->unp_conn == 0)
                                   break;
   
                         so2 = unp->unp_conn->unp_socket;                          so2 = unp->unp_conn->unp_socket;
                         KASSERT(solocked2(so, so2));                          KASSERT(solocked2(so, so2));
                         ((struct stat *) m)->st_blksize += so2->so_rcv.sb_cc;                          ((struct stat *) m)->st_blksize += so2->so_rcv.sb_cc;
                           break;
                   default:
                           break;
                 }                  }
                 ((struct stat *) m)->st_dev = NODEV;                  ((struct stat *) m)->st_dev = NODEV;
                 if (unp->unp_ino == 0)                  if (unp->unp_ino == 0)
Line 767  unp_attach(struct socket *so)
Line 788  unp_attach(struct socket *so)
         int error;          int error;
   
         switch (so->so_type) {          switch (so->so_type) {
           case SOCK_SEQPACKET: /* FALLTHROUGH */
         case SOCK_STREAM:          case SOCK_STREAM:
                 if (so->so_lock == NULL) {                  if (so->so_lock == NULL) {
                         /*                          /*
Line 1093  unp_connect2(struct socket *so, struct s
Line 1115  unp_connect2(struct socket *so, struct s
                 soisconnected(so);                  soisconnected(so);
                 break;                  break;
   
           case SOCK_SEQPACKET: /* FALLTHROUGH */
         case SOCK_STREAM:          case SOCK_STREAM:
                 unp2->unp_conn = unp;                  unp2->unp_conn = unp;
                 if (req == PRU_CONNECT &&                  if (req == PRU_CONNECT &&
Line 1150  unp_disconnect(struct unpcb *unp)
Line 1173  unp_disconnect(struct unpcb *unp)
                 so->so_state &= ~SS_ISCONNECTED;                  so->so_state &= ~SS_ISCONNECTED;
                 break;                  break;
   
           case SOCK_SEQPACKET: /* FALLTHROUGH */
         case SOCK_STREAM:          case SOCK_STREAM:
                 KASSERT(solocked2(so, unp2->unp_socket));                  KASSERT(solocked2(so, unp2->unp_socket));
                 soisdisconnected(so);                  soisdisconnected(so);
Line 1171  unp_shutdown(struct unpcb *unp)
Line 1195  unp_shutdown(struct unpcb *unp)
 {  {
         struct socket *so;          struct socket *so;
   
         if (unp->unp_socket->so_type == SOCK_STREAM && unp->unp_conn &&          switch(unp->unp_socket->so_type) {
             (so = unp->unp_conn->unp_socket))          case SOCK_SEQPACKET: /* FALLTHROUGH */
                 socantrcvmore(so);          case SOCK_STREAM:
                   if (unp->unp_conn && (so = unp->unp_conn->unp_socket))
                           socantrcvmore(so);
                   break;
           default:
                   break;
           }
 }  }
   
 bool  bool

Legend:
Removed from v.1.133  
changed lines
  Added in v.1.133.2.1

CVSweb <webmaster@jp.NetBSD.org>