Print this page
XXXX adding PID information to netstat output

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/inet/sockmods/socksctp.c
          +++ new/usr/src/uts/common/inet/sockmods/socksctp.c
↓ open down ↓ 22 lines elided ↑ open up ↑
  23   23   * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  24   24   */
  25   25  
  26   26  #include <sys/types.h>
  27   27  #include <sys/t_lock.h>
  28   28  #include <sys/param.h>
  29   29  #include <sys/systm.h>
  30   30  #include <sys/buf.h>
  31   31  #include <sys/vfs.h>
  32   32  #include <sys/vnode.h>
       33 +#include <sys/fcntl.h>
  33   34  #include <sys/debug.h>
  34   35  #include <sys/errno.h>
  35   36  #include <sys/stropts.h>
  36   37  #include <sys/cmn_err.h>
  37   38  #include <sys/sysmacros.h>
  38   39  #include <sys/filio.h>
  39   40  #include <sys/policy.h>
  40   41  
  41   42  #include <sys/project.h>
  42   43  #include <sys/tihdr.h>
↓ open down ↓ 56 lines elided ↑ open up ↑
  99  100  static void sctp_assoc_connected(sock_upper_handle_t, sock_connid_t,
 100  101      struct cred *, pid_t);
 101  102  static int sctp_assoc_disconnected(sock_upper_handle_t, sock_connid_t, int);
 102  103  static void sctp_assoc_disconnecting(sock_upper_handle_t, sock_opctl_action_t,
 103  104      uintptr_t arg);
 104  105  static ssize_t sctp_assoc_recv(sock_upper_handle_t, mblk_t *, size_t, int,
 105  106      int *, boolean_t *);
 106  107  static void sctp_assoc_xmitted(sock_upper_handle_t, boolean_t);
 107  108  static void sctp_assoc_properties(sock_upper_handle_t,
 108  109      struct sock_proto_props *);
      110 +static conn_pid_node_list_hdr_t *
      111 +    sctp_get_sock_pid_list(sock_upper_handle_t);
 109  112  
 110  113  sonodeops_t sosctp_sonodeops = {
 111  114          sosctp_init,                    /* sop_init     */
 112  115          sosctp_accept,                  /* sop_accept   */
 113  116          sosctp_bind,                    /* sop_bind     */
 114  117          sosctp_listen,                  /* sop_listen   */
 115  118          sosctp_connect,                 /* sop_connect  */
 116  119          sosctp_recvmsg,                 /* sop_recvmsg  */
 117  120          sosctp_sendmsg,                 /* sop_sendmsg  */
 118  121          so_sendmblk_notsupp,            /* sop_sendmblk */
↓ open down ↓ 42 lines elided ↑ open up ↑
 161  164  sock_upcalls_t sosctp_assoc_upcalls = {
 162  165          sctp_assoc_newconn,
 163  166          sctp_assoc_connected,
 164  167          sctp_assoc_disconnected,
 165  168          sctp_assoc_disconnecting,
 166  169          sctp_assoc_recv,
 167  170          sctp_assoc_properties,
 168  171          sctp_assoc_xmitted,
 169  172          NULL,                   /* su_recv_space */
 170  173          NULL,                   /* su_signal_oob */
      174 +        NULL,                   /* su_set_error */
      175 +        NULL,                   /* su_closed */
      176 +        sctp_get_sock_pid_list
 171  177  };
 172  178  
 173  179  /* ARGSUSED */
 174  180  static int
 175  181  sosctp_init(struct sonode *so, struct sonode *pso, struct cred *cr, int flags)
 176  182  {
 177  183          struct sctp_sonode *ss;
 178  184          struct sctp_sonode *pss;
 179  185          sctp_sockbuf_limits_t sbl;
 180  186          int err;
↓ open down ↓ 1585 lines elided ↑ open up ↑
1766 1772                          goto peelerr;
1767 1773                  }
1768 1774  
1769 1775                  /*
1770 1776                   * fill in the entries that falloc reserved
1771 1777                   */
1772 1778                  nfp->f_vnode = nvp;
1773 1779                  mutex_exit(&nfp->f_tlock);
1774 1780                  setf(nfd, nfp);
1775 1781  
     1782 +                /* add curproc to the pid list associated with that file */
     1783 +                if (nfp->f_vnode != NULL)
     1784 +                        (void) VOP_IOCTL(nfp->f_vnode, F_FORKED,
     1785 +                            (intptr_t)curproc, FKIOCTL, kcred, NULL, NULL);
     1786 +
1776 1787                  mutex_enter(&so->so_lock);
1777 1788  
1778 1789                  sosctp_assoc_move(ss, SOTOSSO(nso), ssa);
1779 1790  
1780 1791                  mutex_exit(&nso->so_lock);
1781 1792  
1782 1793                  ssa->ssa_conn = NULL;
1783 1794                  sosctp_assoc_free(ss, ssa);
1784 1795  
1785 1796                  so_unlock_single(so, SOLOCKED);
↓ open down ↓ 436 lines elided ↑ open up ↑
2222 2233                          if (so->so_rcvlowat > lowat) {
2223 2234                                  /* Sanity check... */
2224 2235                                  if (lowat == 0)
2225 2236                                          so->so_rcvlowat = soppp->sopp_rxhiwat;
2226 2237                                  else
2227 2238                                          so->so_rcvlowat = lowat;
2228 2239                          }
2229 2240                  }
2230 2241          }
2231 2242          mutex_exit(&so->so_lock);
     2243 +}
     2244 +
     2245 +static conn_pid_node_list_hdr_t *
     2246 +sctp_get_sock_pid_list(sock_upper_handle_t handle)
     2247 +{
     2248 +        struct sctp_soassoc *ssa = (struct sctp_soassoc *)handle;
     2249 +        struct sonode *so;
     2250 +
     2251 +        if (ssa->ssa_type == SOSCTP_ASSOC)
     2252 +                so = &ssa->ssa_sonode->ss_so;
     2253 +        else
     2254 +                so = &((struct sctp_sonode *)handle)->ss_so;
     2255 +
     2256 +        return (so_get_sock_pid_list((sock_upper_handle_t)so));
2232 2257  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX