Print this page
XXXX adding PID information to netstat output
@@ -28,10 +28,17 @@
#include <sys/tihdr.h>
#include <sys/policy.h>
#include <sys/tsol/tnet.h>
#include <sys/kstat.h>
+#include <sys/strsun.h>
+#include <sys/stropts.h>
+#include <sys/strsubr.h>
+#include <sys/socket.h>
+#include <sys/socketvar.h>
+#include <sys/uio.h>
+
#include <inet/common.h>
#include <inet/ip.h>
#include <inet/tcp.h>
#include <inet/tcp_impl.h>
#include <inet/tcp_stats.h>
@@ -95,14 +102,18 @@
mblk_t *mpdata;
mblk_t *mp_conn_ctl = NULL;
mblk_t *mp_conn_tail;
mblk_t *mp_attr_ctl = NULL;
mblk_t *mp_attr_tail;
+ mblk_t *mp_pidnode_ctl = NULL;
+ mblk_t *mp_pidnode_tail;
mblk_t *mp6_conn_ctl = NULL;
mblk_t *mp6_conn_tail;
mblk_t *mp6_attr_ctl = NULL;
mblk_t *mp6_attr_tail;
+ mblk_t *mp6_pidnode_ctl = NULL;
+ mblk_t *mp6_pidnode_tail;
struct opthdr *optp;
mib2_tcpConnEntry_t tce;
mib2_tcp6ConnEntry_t tce6;
mib2_transportMLPEntry_t mlp;
connf_t *connfp;
@@ -125,16 +136,20 @@
if (mpctl == NULL ||
(mpdata = mpctl->b_cont) == NULL ||
(mp_conn_ctl = copymsg(mpctl)) == NULL ||
(mp_attr_ctl = copymsg(mpctl)) == NULL ||
+ (mp_pidnode_ctl = copymsg(mpctl)) == NULL ||
(mp6_conn_ctl = copymsg(mpctl)) == NULL ||
- (mp6_attr_ctl = copymsg(mpctl)) == NULL) {
+ (mp6_attr_ctl = copymsg(mpctl)) == NULL ||
+ (mp6_pidnode_ctl = copymsg(mpctl)) == NULL) {
freemsg(mp_conn_ctl);
freemsg(mp_attr_ctl);
+ freemsg(mp_pidnode_ctl);
freemsg(mp6_conn_ctl);
freemsg(mp6_attr_ctl);
+ freemsg(mp6_pidnode_ctl);
freemsg(mpctl);
freemsg(mp2ctl);
return (NULL);
}
@@ -164,10 +179,11 @@
secpolicy_ip_config((Q_TO_CONN(q))->conn_cred, B_TRUE) == 0;
zoneid = Q_TO_CONN(q)->conn_zoneid;
v4_conn_idx = v6_conn_idx = 0;
mp_conn_tail = mp_attr_tail = mp6_conn_tail = mp6_attr_tail = NULL;
+ mp_pidnode_tail = mp6_pidnode_tail = NULL;
for (i = 0; i < CONN_G_HASH_SIZE; i++) {
ipst = tcps->tcps_netstack->netstack_ip;
connfp = &ipst->ips_ipcl_globalhash_fanout[i];
@@ -279,10 +295,16 @@
tce6.tcp6ConnCreationTime = connp->conn_open_time;
(void) snmp_append_data2(mp6_conn_ctl->b_cont,
&mp6_conn_tail, (char *)&tce6, tce6_size);
+ (void) snmp_append_data2(mp6_pidnode_ctl->b_cont,
+ &mp6_pidnode_tail, (char *)&tce6, tce6_size);
+
+ (void) snmp_append_mblk2(mp6_pidnode_ctl->b_cont,
+ &mp6_pidnode_tail, conn_get_pid_mblk(connp));
+
mlp.tme_connidx = v6_conn_idx++;
if (needattr)
(void) snmp_append_data2(mp6_attr_ctl->b_cont,
&mp6_attr_tail, (char *)&mlp, sizeof (mlp));
}
@@ -346,10 +368,16 @@
tce.tcpConnCreationTime = connp->conn_open_time;
(void) snmp_append_data2(mp_conn_ctl->b_cont,
&mp_conn_tail, (char *)&tce, tce_size);
+ (void) snmp_append_data2(mp_pidnode_ctl->b_cont,
+ &mp_pidnode_tail, (char *)&tce, tce_size);
+
+ (void) snmp_append_mblk2(mp_pidnode_ctl->b_cont,
+ &mp_pidnode_tail, conn_get_pid_mblk(connp));
+
mlp.tme_connidx = v4_conn_idx++;
if (needattr)
(void) snmp_append_data2(
mp_attr_ctl->b_cont,
&mp_attr_tail, (char *)&mlp,
@@ -415,10 +443,33 @@
optp->len = msgdsize(mp6_attr_ctl->b_cont);
if (optp->len == 0)
freemsg(mp6_attr_ctl);
else
qreply(q, mp6_attr_ctl);
+
+ /* table of EXPER_XPORT_PROC_INFO ipv4 */
+ optp = (struct opthdr *)&mp_pidnode_ctl->b_rptr[
+ sizeof (struct T_optmgmt_ack)];
+ optp->level = MIB2_TCP;
+ optp->name = EXPER_XPORT_PROC_INFO;
+ optp->len = msgdsize(mp_pidnode_ctl->b_cont);
+ if (optp->len == 0)
+ freemsg(mp_pidnode_ctl);
+ else
+ qreply(q, mp_pidnode_ctl);
+
+ /* table of EXPER_XPORT_PROC_INFO ipv6 */
+ optp = (struct opthdr *)&mp6_pidnode_ctl->b_rptr[
+ sizeof (struct T_optmgmt_ack)];
+ optp->level = MIB2_TCP6;
+ optp->name = EXPER_XPORT_PROC_INFO;
+ optp->len = msgdsize(mp6_pidnode_ctl->b_cont);
+ if (optp->len == 0)
+ freemsg(mp6_pidnode_ctl);
+ else
+ qreply(q, mp6_pidnode_ctl);
+
return (mp2ctl);
}
/* Return 0 if invalid set request, 1 otherwise, including non-tcp requests */
/* ARGSUSED */