Print this page
XXXX adding PID information to netstat output

@@ -526,10 +526,13 @@
 {
         mblk_t                  *mpdata, *mp_ret;
         mblk_t                  *mp_conn_ctl = NULL;
         mblk_t                  *mp_conn_data;
         mblk_t                  *mp_conn_tail = NULL;
+        mblk_t                  *mp_pidnode_ctl = NULL;
+        mblk_t                  *mp_pidnode_data;
+        mblk_t                  *mp_pidnode_tail = NULL;
         mblk_t                  *mp_local_ctl = NULL;
         mblk_t                  *mp_local_data;
         mblk_t                  *mp_local_tail = NULL;
         mblk_t                  *mp_rem_ctl = NULL;
         mblk_t                  *mp_rem_data;

@@ -551,34 +554,41 @@
         conn_t                  *connp;
         boolean_t               needattr;
         int                     idx;
         mib2_sctp_t             sctp_mib;
 
+
+        conn_pid_node_list_hdr_t        *cph;
+
         /*
          * Make copies of the original message.
          * mpctl will hold SCTP counters,
          * mp_conn_ctl will hold list of connections.
          */
         mp_ret = copymsg(mpctl);
         mp_conn_ctl = copymsg(mpctl);
+        mp_pidnode_ctl = copymsg(mpctl);
         mp_local_ctl = copymsg(mpctl);
         mp_rem_ctl = copymsg(mpctl);
         mp_attr_ctl = copymsg(mpctl);
 
         mpdata = mpctl->b_cont;
 
-        if (mp_conn_ctl == NULL || mp_local_ctl == NULL ||
-            mp_rem_ctl == NULL || mp_attr_ctl == NULL || mpdata == NULL) {
+        if (mp_conn_ctl == NULL || mp_pidnode_ctl == NULL ||
+            mp_local_ctl == NULL || mp_rem_ctl == NULL || mp_attr_ctl == NULL ||
+            mpdata == NULL) {
                 freemsg(mp_attr_ctl);
                 freemsg(mp_rem_ctl);
                 freemsg(mp_local_ctl);
+                freemsg(mp_pidnode_ctl);
                 freemsg(mp_conn_ctl);
                 freemsg(mp_ret);
                 freemsg(mpctl);
                 return (NULL);
         }
         mp_conn_data = mp_conn_ctl->b_cont;
+        mp_pidnode_data = mp_pidnode_ctl->b_cont;
         mp_local_data = mp_local_ctl->b_cont;
         mp_rem_data = mp_rem_ctl->b_cont;
         mp_attr_data = mp_attr_ctl->b_cont;
 
         bzero(&sctp_mib, sizeof (sctp_mib));

@@ -801,10 +811,21 @@
                 sce.sctpConnEntryInfo.ce_swnd = sctp->sctp_frwnd;
                 sce.sctpConnEntryInfo.ce_rwnd = sctp->sctp_rwnd;
                 sce.sctpConnEntryInfo.ce_mss = sctp->sctp_mss;
                 (void) snmp_append_data2(mp_conn_data, &mp_conn_tail,
                     (char *)&sce, sizeof (sce));
+                /* my data */
+                (void) snmp_append_data2(mp_pidnode_data, &mp_pidnode_tail,
+                    (char *)&sce, sizeof (sce));
+
+                cph = conn_get_pid_list(connp);
+
+                (void) snmp_append_data2(mp_pidnode_data, &mp_pidnode_tail,
+                    (char *)cph, cph->cph_tot_size);
+
+                kmem_free(cph, cph->cph_tot_size);
+                /* end of my data */
                 mlp.tme_connidx = idx++;
                 if (needattr)
                         (void) snmp_append_data2(mp_attr_ctl->b_cont,
                             &mp_attr_tail, (char *)&mlp, sizeof (mlp));
 next_sctp:

@@ -831,10 +852,18 @@
         optp->level = MIB2_SCTP;
         optp->name = MIB2_SCTP_CONN;
         optp->len = msgdsize(mp_conn_data);
         qreply(q, mp_conn_ctl);
 
+        /* table of EXPER_XPORT_PROC_INFO */
+        optp = (struct opthdr *)&mp_pidnode_ctl->b_rptr[
+            sizeof (struct T_optmgmt_ack)];
+        optp->level = MIB2_SCTP;
+        optp->name = EXPER_XPORT_PROC_INFO;
+        optp->len = msgdsize(mp_pidnode_data);
+        qreply(q, mp_pidnode_ctl);
+
         /* assoc local address table */
         optp = (struct opthdr *)&mp_local_ctl->b_rptr[
             sizeof (struct T_optmgmt_ack)];
         optp->level = MIB2_SCTP;
         optp->name = MIB2_SCTP_CONN_LOCAL;