diff options
Diffstat (limited to 'usr/src/cmd/dlstat/dlstat.c')
| -rw-r--r-- | usr/src/cmd/dlstat/dlstat.c | 69 | 
1 files changed, 42 insertions, 27 deletions
| diff --git a/usr/src/cmd/dlstat/dlstat.c b/usr/src/cmd/dlstat/dlstat.c index 63e844a895..8c1749475b 100644 --- a/usr/src/cmd/dlstat/dlstat.c +++ b/usr/src/cmd/dlstat/dlstat.c @@ -66,7 +66,7 @@ typedef struct link_chain_s {  	struct link_chain_s	*lc_next;  } link_chain_t; -typedef void *	(*stats2str_t)(const char *, void *, +typedef void *	(*stats2str_t)(const char *, const char *, void *,  		    char, boolean_t);  typedef struct show_state { @@ -143,6 +143,7 @@ typedef struct total_fields_buf_s {  	char t_rbytes[MAXSTATLEN];  	char t_opackets[MAXSTATLEN];  	char t_obytes[MAXSTATLEN]; +	char t_zone[ZONENAME_MAX];  } total_fields_buf_t;  static ofmt_field_t total_s_fields[] = { @@ -156,6 +157,8 @@ static ofmt_field_t total_s_fields[] = {      offsetof(total_fields_buf_t, t_opackets),	print_default_cb},  { "OBYTES",	8,      offsetof(total_fields_buf_t, t_obytes),	print_default_cb}, +{ "ZONE",	20, +    offsetof(total_fields_buf_t, t_zone),	print_default_cb},  { NULL,		0,	0,		NULL}};  /* @@ -959,8 +962,8 @@ cleanup_removed_links(show_state_t *state)  }  void * -print_total_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_total_stats(const char *linkname, const char *zonename, void *statentry, +    char unit, boolean_t parsable)  {  	total_stat_entry_t	*sentry = statentry;  	total_stat_t		*link_stats = &sentry->tse_stats; @@ -972,6 +975,7 @@ print_total_stats(const char *linkname, void *statentry, char unit,  	(void) snprintf(buf->t_linkname, sizeof (buf->t_linkname), "%s",  	    linkname); +	(void) snprintf(buf->t_zone, sizeof (buf->t_zone), "%s", zonename);  	map_to_units(buf->t_ipackets, sizeof (buf->t_ipackets),  	    link_stats->ts_ipackets, unit, parsable); @@ -990,8 +994,8 @@ done:  }  void * -print_rx_generic_ring_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_rx_generic_ring_stats(const char *linkname, const char *zonename, +    void *statentry, char unit, boolean_t parsable)  {  	ring_stat_entry_t	*sentry = statentry;  	ring_stat_t		*link_stats = &sentry->re_stats; @@ -1024,8 +1028,8 @@ done:  }  void * -print_tx_generic_ring_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_tx_generic_ring_stats(const char *linkname, const char *zonename, +    void *statentry, char unit, boolean_t parsable)  {  	ring_stat_entry_t	*sentry = statentry;  	ring_stat_t		*link_stats = &sentry->re_stats; @@ -1058,8 +1062,8 @@ done:  }  void * -print_rx_ring_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_rx_ring_stats(const char *linkname, const char *zonename, void *statentry, +    char unit, boolean_t parsable)  {  	ring_stat_entry_t	*sentry = statentry;  	ring_stat_t		*link_stats = &sentry->re_stats; @@ -1092,8 +1096,8 @@ done:  }  void * -print_tx_ring_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_tx_ring_stats(const char *linkname, const char *zonename, void *statentry, +    char unit, boolean_t parsable)  {  	ring_stat_entry_t	*sentry = statentry;  	ring_stat_t		*link_stats = &sentry->re_stats; @@ -1126,8 +1130,8 @@ done:  }  void * -print_rx_generic_lane_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_rx_generic_lane_stats(const char *linkname, const char *zonename, +    void *statentry, char unit, boolean_t parsable)  {  	rx_lane_stat_entry_t	*sentry = statentry;  	rx_lane_stat_t		*link_stats = &sentry->rle_stats; @@ -1174,8 +1178,8 @@ done:  }  void * -print_tx_generic_lane_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_tx_generic_lane_stats(const char *linkname, const char *zonename, +    void *statentry, char unit, boolean_t parsable)  {  	tx_lane_stat_entry_t	*sentry = statentry;  	tx_lane_stat_t		*link_stats = &sentry->tle_stats; @@ -1219,8 +1223,8 @@ done:  }  void * -print_rx_lane_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_rx_lane_stats(const char *linkname, const char *zonename, void *statentry, +    char unit, boolean_t parsable)  {  	rx_lane_stat_entry_t	*sentry = statentry;  	rx_lane_stat_t		*link_stats = &sentry->rle_stats; @@ -1285,8 +1289,8 @@ done:  }  void * -print_tx_lane_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_tx_lane_stats(const char *linkname, const char *zonename, void *statentry, +    char unit, boolean_t parsable)  {  	tx_lane_stat_entry_t	*sentry = statentry;  	tx_lane_stat_t		*link_stats = &sentry->tle_stats; @@ -1340,8 +1344,8 @@ done:  }  void * -print_fanout_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_fanout_stats(const char *linkname, const char *zonename, void *statentry, +    char unit, boolean_t parsable)  {  	fanout_stat_entry_t		*sentry = statentry;  	fanout_stat_t			*link_stats = &sentry->fe_stats; @@ -1394,8 +1398,8 @@ done:  }  void * -print_aggr_port_stats(const char *linkname, void *statentry, char unit, -    boolean_t parsable) +print_aggr_port_stats(const char *linkname, const char *zonename, +    void *statentry, char unit, boolean_t parsable)  {  	aggr_port_stat_entry_t	*sentry = statentry;  	aggr_port_stat_t	*link_stats = &sentry->ape_stats; @@ -1472,7 +1476,8 @@ done:  void  walk_dlstat_stats(show_state_t *state, const char *linkname, -    dladm_stat_type_t stattype, dladm_stat_chain_t *diff_stat) +    const char *zonename, dladm_stat_type_t stattype, +    dladm_stat_chain_t *diff_stat)  {  	dladm_stat_chain_t  *curr; @@ -1482,7 +1487,8 @@ walk_dlstat_stats(show_state_t *state, const char *linkname,  		/* Format the raw numbers for printing */  		fields_buf = state->ls_stats2str[stattype](linkname, -		    curr->dc_statentry, state->ls_unit, state->ls_parsable); +		    zonename, curr->dc_statentry, state->ls_unit, +		    state->ls_parsable);  		/* Print the stats */  		if (fields_buf != NULL)  			ofmt_print(state->ls_ofmt, fields_buf); @@ -1497,12 +1503,20 @@ show_queried_stats(dladm_handle_t dh, datalink_id_t linkid, void *arg)  	int 			i;  	dladm_stat_chain_t	*diff_stat;  	char			linkname[DLPI_LINKNAME_MAX]; +	char			zonename[DLADM_PROP_VAL_MAX + 1]; +	char			*valptr[1]; +	uint_t			valcnt = 1;  	if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, linkname,  	    DLPI_LINKNAME_MAX) != DLADM_STATUS_OK) {  		goto done;  	} +	valptr[0] = zonename; +	if (dladm_get_linkprop(handle, linkid, DLADM_PROP_VAL_CURRENT, "zone", +	    (char **)valptr, &valcnt) != 0) +		zonename[0] = '\0'; +  	for (i = 0; i < DLADM_STAT_NUM_STATS; i++) {  		if (state->ls_stattype[i]) {  			/* @@ -1510,7 +1524,8 @@ show_queried_stats(dladm_handle_t dh, datalink_id_t linkid, void *arg)  			 * Stats are returned as chain of raw numbers  			 */  			diff_stat = query_link_stats(handle, linkid, arg, i); -			walk_dlstat_stats(state, linkname, i, diff_stat); +			walk_dlstat_stats(state, linkname, zonename, i, +			    diff_stat);  			dladm_link_stat_free(diff_stat);  		}  	} @@ -1630,7 +1645,7 @@ do_show(int argc, char *argv[], const char *use)  	char			*o_fields_str = NULL;  	char			*total_stat_fields = -	    "link,ipkts,rbytes,opkts,obytes"; +	    "link,ipkts,rbytes,opkts,obytes,zone";  	char			*rx_total_stat_fields =  	    "link,ipkts,rbytes,intrs,polls,ch<10,ch10-50,ch>50";  	char			*tx_total_stat_fields = | 
