Print this page
XXXX adding PID information to netstat output

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/sockfs/sockcommon_sops.c
          +++ new/usr/src/uts/common/fs/sockfs/sockcommon_sops.c
↓ open down ↓ 29 lines elided ↑ open up ↑
  30   30  #include <sys/types.h>
  31   31  #include <sys/param.h>
  32   32  #include <sys/systm.h>
  33   33  #include <sys/sysmacros.h>
  34   34  #include <sys/debug.h>
  35   35  #include <sys/cmn_err.h>
  36   36  
  37   37  #include <sys/stropts.h>
  38   38  #include <sys/socket.h>
  39   39  #include <sys/socketvar.h>
       40 +#include <sys/fcntl.h>
  40   41  
  41   42  #define _SUN_TPI_VERSION        2
  42   43  #include <sys/tihdr.h>
  43   44  #include <sys/sockio.h>
  44   45  #include <sys/kmem_impl.h>
  45   46  
  46   47  #include <sys/strsubr.h>
  47   48  #include <sys/strsun.h>
  48   49  #include <sys/ddi.h>
  49   50  #include <netinet/in.h>
↓ open down ↓ 300 lines elided ↑ open up ↑
 350  351  
 351  352                  /* finish the accept */
 352  353                  if ((so->so_filter_active > 0 &&
 353  354                      (error = sof_filter_accept(nso, cr)) > 0) ||
 354  355                      (error = (*so->so_downcalls->sd_accept)(so->so_proto_handle,
 355  356                      nso->so_proto_handle, (sock_upper_handle_t)nso, cr)) != 0) {
 356  357                          (void) socket_close(nso, 0, cr);
 357  358                          socket_destroy(nso);
 358  359                  } else {
 359  360                          *nsop = nso;
      361 +                        if (!(curproc->p_flag & SSYS))
      362 +                                sonode_insert_pid(nso, curproc->p_pidp->pid_id);
 360  363                  }
 361  364          }
 362  365  
 363  366          SO_UNBLOCK_FALLBACK(so);
 364  367          return (error);
 365  368  }
 366  369  
 367  370  int
 368  371  so_sendmsg(struct sonode *so, struct nmsghdr *msg, struct uio *uiop,
 369  372      struct cred *cr)
↓ open down ↓ 1163 lines elided ↑ open up ↑
1533 1536   * will drop the protocol's reference on the socket.
1534 1537   */
1535 1538  void
1536 1539  so_closed(sock_upper_handle_t sock_handle)
1537 1540  {
1538 1541          struct sonode *so = (struct sonode *)sock_handle;
1539 1542  
1540 1543          VN_RELE(SOTOV(so));
1541 1544  }
1542 1545  
     1546 +mblk_t *
     1547 +so_get_sock_pid_mblk(sock_upper_handle_t sock_handle)
     1548 +{
     1549 +        int sz, n = 0;
     1550 +        mblk_t *mblk;
     1551 +        pid_node_t *pn;
     1552 +        pid_t *pids;
     1553 +        conn_pid_info_t *cpi;
     1554 +        struct sonode *so = (struct sonode *)sock_handle;
     1555 +
     1556 +        mutex_enter(&so->so_pid_list_lock);
     1557 +
     1558 +        n = list_numnodes(&so->so_pid_list);
     1559 +        sz = sizeof (conn_pid_info_t);
     1560 +        sz += (n > 1) ? ((n - 1) * sizeof (pid_t)) : 0;
     1561 +        if ((mblk = allocb(sz, BPRI_HI)) == NULL) {
     1562 +                mutex_exit(&so->so_pid_list_lock);
     1563 +                return (NULL);
     1564 +        }
     1565 +        mblk->b_wptr += sz;
     1566 +        cpi = (conn_pid_info_t *)mblk->b_datap->db_base;
     1567 +
     1568 +        cpi->cpi_magic = CONN_PID_INFO_MGC;
     1569 +        cpi->cpi_contents = CONN_PID_INFO_SOC;
     1570 +        cpi->cpi_pids_cnt = n;
     1571 +        cpi->cpi_tot_size = sz;
     1572 +        cpi->cpi_pids[0] = 0;
     1573 +
     1574 +        if (cpi->cpi_pids_cnt > 0) {
     1575 +                pids = cpi->cpi_pids;
     1576 +                for (pn = list_head(&so->so_pid_list); pn != NULL;
     1577 +                    pids++, pn = list_next(&so->so_pid_list, pn))
     1578 +                        *pids = pn->pn_pid;
     1579 +        }
     1580 +        mutex_exit(&so->so_pid_list_lock);
     1581 +        return (mblk);
     1582 +}
     1583 +
1543 1584  void
1544 1585  so_zcopy_notify(sock_upper_handle_t sock_handle)
1545 1586  {
1546 1587          struct sonode *so = (struct sonode *)sock_handle;
1547 1588  
1548 1589          mutex_enter(&so->so_lock);
1549 1590          so->so_copyflag |= STZCNOTIFY;
1550 1591          cv_broadcast(&so->so_copy_cv);
1551 1592          mutex_exit(&so->so_lock);
1552 1593  }
↓ open down ↓ 380 lines elided ↑ open up ↑
1933 1974          so_newconn,
1934 1975          so_connected,
1935 1976          so_disconnected,
1936 1977          so_opctl,
1937 1978          so_queue_msg,
1938 1979          so_set_prop,
1939 1980          so_txq_full,
1940 1981          so_signal_oob,
1941 1982          so_zcopy_notify,
1942 1983          so_set_error,
1943      -        so_closed
     1984 +        so_closed,
     1985 +        so_get_sock_pid_mblk
1944 1986  };
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX