Print this page
7898 mdb's ::netstat doesn't print UDP conn_t pointer correctly
*** 641,663 ****
uint_t opts = ncb->opts;
int af = ncb->af;
udp_t udp;
conn_t *connp = &ncb->conn;
char *state;
if (mdb_vread(connp, sizeof (conn_t), kaddr) == -1) {
mdb_warn("failed to read conn_t at %p", kaddr);
return (WALK_ERR);
}
! if (mdb_vread(&udp, sizeof (udp_t),
! (uintptr_t)connp->conn_udp) == -1) {
! mdb_warn("failed to read conn_udp at %p",
! (uintptr_t)connp->conn_udp);
return (WALK_ERR);
}
connp->conn_udp = &udp;
udp.udp_connp = connp;
if (!((opts & NETSTAT_ALL) || net_udp_active(&udp)) ||
(af == AF_INET && !net_udp_ipv4(&udp)) ||
--- 641,664 ----
uint_t opts = ncb->opts;
int af = ncb->af;
udp_t udp;
conn_t *connp = &ncb->conn;
char *state;
+ uintptr_t udp_kaddr;
if (mdb_vread(connp, sizeof (conn_t), kaddr) == -1) {
mdb_warn("failed to read conn_t at %p", kaddr);
return (WALK_ERR);
}
! udp_kaddr = (uintptr_t)connp->conn_udp;
! if (mdb_vread(&udp, sizeof (udp_t), udp_kaddr) == -1) {
! mdb_warn("failed to read conn_udp at %p", udp_kaddr);
return (WALK_ERR);
}
+ /* Need to do these reassignments for the net_udp_*() routines below. */
connp->conn_udp = &udp;
udp.udp_connp = connp;
if (!((opts & NETSTAT_ALL) || net_udp_active(&udp)) ||
(af == AF_INET && !net_udp_ipv4(&udp)) ||
*** 672,682 ****
else if (udp.udp_state == TS_DATA_XFER)
state = "CONNECTED";
else
state = "UNKNOWN";
! mdb_printf("%0?p %10s ", (uintptr_t)connp->conn_udp, state);
if (af == AF_INET) {
net_ipv4addrport_pr(&connp->conn_laddr_v6, connp->conn_lport);
mdb_printf(" ");
net_ipv4addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
} else if (af == AF_INET6) {
--- 673,683 ----
else if (udp.udp_state == TS_DATA_XFER)
state = "CONNECTED";
else
state = "UNKNOWN";
! mdb_printf("%0?p %10s ", udp_kaddr, state);
if (af == AF_INET) {
net_ipv4addrport_pr(&connp->conn_laddr_v6, connp->conn_lport);
mdb_printf(" ");
net_ipv4addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
} else if (af == AF_INET6) {