Ejemplo n.º 1
0
/*
 * Print the core fields in an NCA nca_conn_t.  With the "-t" argument, skip
 * all nca_conn_t's that are in the TIME_WAIT state.  With the "-x" argument,
 * show the xmit data.
 */
static int
nca_conn(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
	unsigned int	i;
	nca_conn_t 		conn;
	unsigned int	show_timewait = TRUE;
	unsigned int	show_xmit = FALSE;

	if (!(flags & DCMD_ADDRSPEC))
		return (DCMD_USAGE);

	if (mdb_getopts(argc, argv, 'x', MDB_OPT_SETBITS, TRUE, &show_xmit,
	    't', MDB_OPT_CLRBITS, TRUE, &show_timewait, NULL) != argc)
		return (DCMD_USAGE);

	if (DCMD_HDRSPEC(flags)) {
		mdb_printf("%<u>%-*s %3s %8s %15s %15s %-*s %-10s%</u>\n",
		    NCA_ADDR_WIDTH, "ADDR", "REF", "CREATE", "LOCAL_ADDR",
		    "REMOTE_ADDR", NCA_ADDR_WIDTH,  "NODE", "STATE");
	}

	if (mdb_vread(&conn, sizeof (nca_conn_t), addr) == -1) {
		mdb_warn("cannot read nca_conn_t at %p", addr);
		return (DCMD_ERR);
	}

	if (!show_timewait && conn.tcp_state == TCPS_TIME_WAIT)
		return (DCMD_OK);

	mdb_printf("%0*p %3d %8lx %15I %15I %0*p %s\n", NCA_ADDR_WIDTH, addr,
	    conn.ref, conn.create, conn.laddr, conn.faddr, NCA_ADDR_WIDTH,
	    conn.req_np, state2name(conn.tcp_state));

	if (show_xmit) {
		mdb_inc_indent(4);

		for (i = 0; i < TCP_XMIT_MAX_IX; i++) {
			mdb_printf("xmit[%d]\n", i);
			mdb_printf("\tref pointer\t\t%p\n", conn.xmit[i].np);
			mdb_printf("\tdata pointer\t\t%p\n", conn.xmit[i].dp);
			mdb_printf("\tcksum array\t\t%p\n", conn.xmit[i].cp);
			mdb_printf("\tremaining xmit data\t%d\n",
			    conn.xmit[i].sz);
			mdb_printf("\tref to node_t\t\t%p\n",
			    conn.xmit[i].refed);
			mdb_printf("\tremaining segment data\t%d\n",
			    conn.xmit[i].dsz);
			mdb_printf("\tvirtual pointer\t\t%p\n",
			    conn.xmit[i].dvp);
		}

		mdb_dec_indent(4);
	}

	return (DCMD_OK);
}
Ejemplo n.º 2
0
/*
 * sppp_dlinforeq()
 *
 * MT-Perimeters:
 *    shared inner, shared outer.
 *
 * Description:
 *    Perform DL_INFO_REQ request, called by sppp_mproto.
 */
static int
sppp_dlinforeq(queue_t *q, mblk_t *mp, spppstr_t *sps)
{
	dl_info_ack_t	*dlip;
	uint32_t	size;
	uint32_t	addr_size;
	sppa_t		*ppa;

	ASSERT(q != NULL && q->q_ptr != NULL);
	ASSERT(mp != NULL && mp->b_rptr != NULL);
	ASSERT(sps != NULL);
	ppa = sps->sps_ppa;

	/* Exchange current msg for a DL_INFO_ACK. */
	addr_size = SPPP_ADDRL;
	size = sizeof (dl_info_ack_t) + addr_size;
	if ((mp = mexchange(q, mp, size, M_PCPROTO, DL_INFO_ACK)) == NULL) {
		DBGERROR((CE_CONT, "DLPI info: mexchange failed\n"));
		/* mexchange already sent up an merror ENOSR */
		return (0);
	}
	/* Fill in DL_INFO_ACK fields and reply */
	dlip = (dl_info_ack_t *)mp->b_rptr;
	*dlip = sppp_infoack;
	dlip->dl_current_state = sps->sps_dlstate;
	dlip->dl_max_sdu = ppa != NULL ? ppa->ppa_mtu : PPP_MAXMTU;
#ifdef DBG_DLPI
	{
		const char *cp = state2name(dlip->dl_current_state);
		if (cp != NULL)
			cmn_err(CE_CONT, "info returns state %s, max sdu %d\n",
			    cp, dlip->dl_max_sdu);
		else
			cmn_err(CE_CONT, "info returns state %d, max sdu %d\n",
			    dlip->dl_current_state, dlip->dl_max_sdu);
	}
#endif
	qreply(q, mp);
	return (0);
}
Ejemplo n.º 3
0
/*
 * Print the core TCP-related fields in an NCA nca_conn_t.  With the "-t"
 * argument, skips all nca_conn_t's that are in the TIME_WAIT state.
 */
static int
nca_tcpconn(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
	nca_conn_t		conn;
	unsigned int	show_timewait = TRUE;

	if (!(flags & DCMD_ADDRSPEC))
		return (DCMD_USAGE);

	if (mdb_getopts(argc, argv, 't', MDB_OPT_CLRBITS, TRUE, &show_timewait,
	    NULL) != argc)
		return (DCMD_USAGE);

	if (DCMD_HDRSPEC(flags)) {
		mdb_printf("%<u>%-*s %21s %5s %8s %5s %8s %5s %-9s%</u>\n",
		    NCA_ADDR_WIDTH, "ADDR", "REMOTE_ADDR", "SWIND", "SUNASEQ",
		    "SNSEQ", "RACKSEQ", "RNSEQ", "STATE");
	}

	if (mdb_vread(&conn, sizeof (nca_conn_t), addr) == -1) {
		mdb_warn("cannot read nca_conn_t at %p", addr);
		return (DCMD_ERR);
	}

	if (!show_timewait && conn.tcp_state == TCPS_TIME_WAIT)
		return (DCMD_OK);

	mdb_nhconvert(&conn.conn_fport, &conn.conn_fport, sizeof (in_port_t));

	mdb_printf("%0*p %15I:%05hu %5u %08x %+5d %08x %+5d %-9s\n",
	    NCA_ADDR_WIDTH, addr, conn.faddr, conn.conn_fport, conn.tcp_swnd,
	    conn.tcp_suna, conn.tcp_snxt - conn.tcp_suna, conn.tcp_rack,
	    conn.tcp_rnxt - conn.tcp_rack, state2name(conn.tcp_state));

	return (DCMD_OK);
}