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";