626 net_ipv6addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
627 }
628 mdb_printf(" %5i", ns_to_stackid((uintptr_t)connp->conn_netstack));
629 mdb_printf(" %4i\n", connp->conn_zoneid);
630 if (opts & NETSTAT_VERBOSE)
631 netstat_tcp_verbose_pr(tcp);
632
633 return (WALK_NEXT);
634 }
635
636 /*ARGSUSED*/
637 static int
638 netstat_udp_cb(uintptr_t kaddr, const void *walk_data, void *cb_data)
639 {
640 netstat_cb_data_t *ncb = cb_data;
641 uint_t opts = ncb->opts;
642 int af = ncb->af;
643 udp_t udp;
644 conn_t *connp = &ncb->conn;
645 char *state;
646
647 if (mdb_vread(connp, sizeof (conn_t), kaddr) == -1) {
648 mdb_warn("failed to read conn_t at %p", kaddr);
649 return (WALK_ERR);
650 }
651
652 if (mdb_vread(&udp, sizeof (udp_t),
653 (uintptr_t)connp->conn_udp) == -1) {
654 mdb_warn("failed to read conn_udp at %p",
655 (uintptr_t)connp->conn_udp);
656 return (WALK_ERR);
657 }
658
659 connp->conn_udp = &udp;
660 udp.udp_connp = connp;
661
662 if (!((opts & NETSTAT_ALL) || net_udp_active(&udp)) ||
663 (af == AF_INET && !net_udp_ipv4(&udp)) ||
664 (af == AF_INET6 && !net_udp_ipv6(&udp))) {
665 return (WALK_NEXT);
666 }
667
668 if (udp.udp_state == TS_UNBND)
669 state = "UNBOUND";
670 else if (udp.udp_state == TS_IDLE)
671 state = "IDLE";
672 else if (udp.udp_state == TS_DATA_XFER)
673 state = "CONNECTED";
674 else
675 state = "UNKNOWN";
676
677 mdb_printf("%0?p %10s ", (uintptr_t)connp->conn_udp, state);
678 if (af == AF_INET) {
679 net_ipv4addrport_pr(&connp->conn_laddr_v6, connp->conn_lport);
680 mdb_printf(" ");
681 net_ipv4addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
682 } else if (af == AF_INET6) {
683 net_ipv6addrport_pr(&connp->conn_laddr_v6, connp->conn_lport);
684 mdb_printf(" ");
685 net_ipv6addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
686 }
687 mdb_printf(" %5i", ns_to_stackid((uintptr_t)connp->conn_netstack));
688 mdb_printf(" %4i\n", connp->conn_zoneid);
689
690 return (WALK_NEXT);
691 }
692
693 /*ARGSUSED*/
694 static int
695 netstat_icmp_cb(uintptr_t kaddr, const void *walk_data, void *cb_data)
696 {
697 netstat_cb_data_t *ncb = cb_data;
|
626 net_ipv6addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
627 }
628 mdb_printf(" %5i", ns_to_stackid((uintptr_t)connp->conn_netstack));
629 mdb_printf(" %4i\n", connp->conn_zoneid);
630 if (opts & NETSTAT_VERBOSE)
631 netstat_tcp_verbose_pr(tcp);
632
633 return (WALK_NEXT);
634 }
635
636 /*ARGSUSED*/
637 static int
638 netstat_udp_cb(uintptr_t kaddr, const void *walk_data, void *cb_data)
639 {
640 netstat_cb_data_t *ncb = cb_data;
641 uint_t opts = ncb->opts;
642 int af = ncb->af;
643 udp_t udp;
644 conn_t *connp = &ncb->conn;
645 char *state;
646 uintptr_t udp_kaddr;
647
648 if (mdb_vread(connp, sizeof (conn_t), kaddr) == -1) {
649 mdb_warn("failed to read conn_t at %p", kaddr);
650 return (WALK_ERR);
651 }
652
653 udp_kaddr = (uintptr_t)connp->conn_udp;
654 if (mdb_vread(&udp, sizeof (udp_t), udp_kaddr) == -1) {
655 mdb_warn("failed to read conn_udp at %p", udp_kaddr);
656 return (WALK_ERR);
657 }
658
659 /* Need to do these reassignments for the net_udp_*() routines below. */
660 connp->conn_udp = &udp;
661 udp.udp_connp = connp;
662
663 if (!((opts & NETSTAT_ALL) || net_udp_active(&udp)) ||
664 (af == AF_INET && !net_udp_ipv4(&udp)) ||
665 (af == AF_INET6 && !net_udp_ipv6(&udp))) {
666 return (WALK_NEXT);
667 }
668
669 if (udp.udp_state == TS_UNBND)
670 state = "UNBOUND";
671 else if (udp.udp_state == TS_IDLE)
672 state = "IDLE";
673 else if (udp.udp_state == TS_DATA_XFER)
674 state = "CONNECTED";
675 else
676 state = "UNKNOWN";
677
678 mdb_printf("%0?p %10s ", udp_kaddr, state);
679 if (af == AF_INET) {
680 net_ipv4addrport_pr(&connp->conn_laddr_v6, connp->conn_lport);
681 mdb_printf(" ");
682 net_ipv4addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
683 } else if (af == AF_INET6) {
684 net_ipv6addrport_pr(&connp->conn_laddr_v6, connp->conn_lport);
685 mdb_printf(" ");
686 net_ipv6addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
687 }
688 mdb_printf(" %5i", ns_to_stackid((uintptr_t)connp->conn_netstack));
689 mdb_printf(" %4i\n", connp->conn_zoneid);
690
691 return (WALK_NEXT);
692 }
693
694 /*ARGSUSED*/
695 static int
696 netstat_icmp_cb(uintptr_t kaddr, const void *walk_data, void *cb_data)
697 {
698 netstat_cb_data_t *ncb = cb_data;
|