Print this page
OS-277 add ZONE column to dlstat output
*** 60,70 ****
boolean_t lc_visited;
dladm_stat_chain_t *lc_statchain[DLADM_STAT_NUM_STATS];
struct link_chain_s *lc_next;
} link_chain_t;
! typedef void * (*stats2str_t)(const char *, void *,
char, boolean_t);
typedef struct show_state {
link_chain_t *ls_linkchain;
boolean_t ls_stattype[DLADM_STAT_NUM_STATS];
--- 60,70 ----
boolean_t lc_visited;
dladm_stat_chain_t *lc_statchain[DLADM_STAT_NUM_STATS];
struct link_chain_s *lc_next;
} link_chain_t;
! typedef void * (*stats2str_t)(const char *, const char *, void *,
char, boolean_t);
typedef struct show_state {
link_chain_t *ls_linkchain;
boolean_t ls_stattype[DLADM_STAT_NUM_STATS];
*** 139,148 ****
--- 139,149 ----
char t_linkname[MAXLINKNAMELEN];
char t_ipackets[MAXSTATLEN];
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[] = {
{ "LINK", 15,
offsetof(total_fields_buf_t, t_linkname), print_default_cb},
*** 152,161 ****
--- 153,164 ----
offsetof(total_fields_buf_t, t_rbytes), print_default_cb},
{ "OPKTS", 8,
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}};
/*
* dlstat show-phys: both Rx and Tx stat fields
*/
*** 955,966 ****
free(tofree);
}
}
void *
! print_total_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
total_stat_entry_t *sentry = statentry;
total_stat_t *link_stats = &sentry->tse_stats;
total_fields_buf_t *buf;
--- 958,969 ----
free(tofree);
}
}
void *
! 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;
total_fields_buf_t *buf;
*** 968,977 ****
--- 971,981 ----
if (buf == NULL)
goto done;
(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);
map_to_units(buf->t_rbytes, sizeof (buf->t_rbytes),
*** 986,997 ****
done:
return (buf);
}
void *
! print_rx_generic_ring_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
ring_stat_entry_t *sentry = statentry;
ring_stat_t *link_stats = &sentry->re_stats;
ring_fields_buf_t *buf;
--- 990,1001 ----
done:
return (buf);
}
void *
! 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;
ring_fields_buf_t *buf;
*** 1020,1031 ****
done:
return (buf);
}
void *
! print_tx_generic_ring_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
ring_stat_entry_t *sentry = statentry;
ring_stat_t *link_stats = &sentry->re_stats;
ring_fields_buf_t *buf;
--- 1024,1035 ----
done:
return (buf);
}
void *
! 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;
ring_fields_buf_t *buf;
*** 1054,1065 ****
done:
return (buf);
}
void *
! print_rx_ring_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
ring_stat_entry_t *sentry = statentry;
ring_stat_t *link_stats = &sentry->re_stats;
rx_ring_fields_buf_t *buf;
--- 1058,1069 ----
done:
return (buf);
}
void *
! 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;
rx_ring_fields_buf_t *buf;
*** 1088,1099 ****
done:
return (buf);
}
void *
! print_tx_ring_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
ring_stat_entry_t *sentry = statentry;
ring_stat_t *link_stats = &sentry->re_stats;
tx_ring_fields_buf_t *buf;
--- 1092,1103 ----
done:
return (buf);
}
void *
! 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;
tx_ring_fields_buf_t *buf;
*** 1122,1133 ****
done:
return (buf);
}
void *
! print_rx_generic_lane_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
rx_lane_stat_entry_t *sentry = statentry;
rx_lane_stat_t *link_stats = &sentry->rle_stats;
lane_fields_buf_t *buf;
--- 1126,1137 ----
done:
return (buf);
}
void *
! 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;
lane_fields_buf_t *buf;
*** 1170,1181 ****
done:
return (buf);
}
void *
! print_tx_generic_lane_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
tx_lane_stat_entry_t *sentry = statentry;
tx_lane_stat_t *link_stats = &sentry->tle_stats;
lane_fields_buf_t *buf;
--- 1174,1185 ----
done:
return (buf);
}
void *
! 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;
lane_fields_buf_t *buf;
*** 1215,1226 ****
done:
return (buf);
}
void *
! print_rx_lane_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
rx_lane_stat_entry_t *sentry = statentry;
rx_lane_stat_t *link_stats = &sentry->rle_stats;
rx_lane_fields_buf_t *buf;
--- 1219,1230 ----
done:
return (buf);
}
void *
! 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;
rx_lane_fields_buf_t *buf;
*** 1281,1293 ****
done:
return (buf);
}
void *
! print_tx_lane_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
! {
tx_lane_stat_entry_t *sentry = statentry;
tx_lane_stat_t *link_stats = &sentry->tle_stats;
tx_lane_fields_buf_t *buf = NULL;
if (sentry->tle_id == L_DFNCT)
--- 1285,1296 ----
done:
return (buf);
}
void *
! 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;
tx_lane_fields_buf_t *buf = NULL;
if (sentry->tle_id == L_DFNCT)
*** 1336,1347 ****
done:
return (buf);
}
void *
! print_fanout_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
fanout_stat_entry_t *sentry = statentry;
fanout_stat_t *link_stats = &sentry->fe_stats;
rx_fanout_lane_fields_buf_t *buf;
--- 1339,1350 ----
done:
return (buf);
}
void *
! 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;
rx_fanout_lane_fields_buf_t *buf;
*** 1390,1401 ****
done:
return (buf);
}
void *
! print_aggr_port_stats(const char *linkname, void *statentry, char unit,
! boolean_t parsable)
{
aggr_port_stat_entry_t *sentry = statentry;
aggr_port_stat_t *link_stats = &sentry->ape_stats;
aggr_port_fields_buf_t *buf;
char portname[MAXLINKNAMELEN];
--- 1393,1404 ----
done:
return (buf);
}
void *
! 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;
aggr_port_fields_buf_t *buf;
char portname[MAXLINKNAMELEN];
*** 1468,1488 ****
return (diff_stat);
}
void
walk_dlstat_stats(show_state_t *state, const char *linkname,
! dladm_stat_type_t stattype, dladm_stat_chain_t *diff_stat)
{
dladm_stat_chain_t *curr;
/* Unpack invidual stat entry and call library consumer's callback */
for (curr = diff_stat; curr != NULL; curr = curr->dc_next) {
void *fields_buf;
/* Format the raw numbers for printing */
fields_buf = state->ls_stats2str[stattype](linkname,
! curr->dc_statentry, state->ls_unit, state->ls_parsable);
/* Print the stats */
if (fields_buf != NULL)
ofmt_print(state->ls_ofmt, fields_buf);
free(fields_buf);
}
--- 1471,1493 ----
return (diff_stat);
}
void
walk_dlstat_stats(show_state_t *state, const char *linkname,
! const char *zonename, dladm_stat_type_t stattype,
! dladm_stat_chain_t *diff_stat)
{
dladm_stat_chain_t *curr;
/* Unpack invidual stat entry and call library consumer's callback */
for (curr = diff_stat; curr != NULL; curr = curr->dc_next) {
void *fields_buf;
/* Format the raw numbers for printing */
fields_buf = state->ls_stats2str[stattype](linkname,
! zonename, curr->dc_statentry, state->ls_unit,
! state->ls_parsable);
/* Print the stats */
if (fields_buf != NULL)
ofmt_print(state->ls_ofmt, fields_buf);
free(fields_buf);
}
*** 1493,1516 ****
{
show_state_t *state = arg;
int i;
dladm_stat_chain_t *diff_stat;
char linkname[DLPI_LINKNAME_MAX];
if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, linkname,
DLPI_LINKNAME_MAX) != DLADM_STATUS_OK) {
goto done;
}
for (i = 0; i < DLADM_STAT_NUM_STATS; i++) {
if (state->ls_stattype[i]) {
/*
* Query library for stats
* 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);
dladm_link_stat_free(diff_stat);
}
}
done:
return (DLADM_WALK_CONTINUE);
--- 1498,1530 ----
{
show_state_t *state = 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]) {
/*
* Query library for stats
* Stats are returned as chain of raw numbers
*/
diff_stat = query_link_stats(handle, linkid, arg, i);
! walk_dlstat_stats(state, linkname, zonename, i,
! diff_stat);
dladm_link_stat_free(diff_stat);
}
}
done:
return (DLADM_WALK_CONTINUE);
*** 1626,1636 ****
dladm_status_t status;
char *fields_str = NULL;
char *o_fields_str = NULL;
char *total_stat_fields =
! "link,ipkts,rbytes,opkts,obytes";
char *rx_total_stat_fields =
"link,ipkts,rbytes,intrs,polls,ch<10,ch10-50,ch>50";
char *tx_total_stat_fields =
"link,opkts,obytes,blkcnt,ublkcnt";
--- 1640,1650 ----
dladm_status_t status;
char *fields_str = NULL;
char *o_fields_str = NULL;
char *total_stat_fields =
! "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 =
"link,opkts,obytes,blkcnt,ublkcnt";