@@ -241,40 +241,57 @@ static void sff8472_parse_eeprom(const __u8 *id, struct sff_diags *sd)
void sff8472_show_all(const __u8 *id)
{
+ char *rx_power_type_string = NULL;
struct sff_diags sd = {0};
- char *rx_power_string = NULL;
int i;
sff8472_parse_eeprom(id, &sd);
- if (!sd.supports_dom) {
- printf("\t%-41s : No\n", "Optical diagnostics support");
+ module_print_any_bool("Optical diagnostics support",
+ "optical_diagnostics_support",
+ sd.supports_dom, YESNO(sd.supports_dom));
+
+ if (!sd.supports_dom)
return;
- }
- printf("\t%-41s : Yes\n", "Optical diagnostics support");
- PRINT_BIAS("Laser bias current", sd.bias_cur[MCURR]);
- PRINT_xX_PWR("Laser output power", sd.tx_power[MCURR]);
+ PRINT_BIAS_ALL("Laser bias current", "laser_bias_current",
+ sd.bias_cur[MCURR]);
+ PRINT_xX_PWR_ALL("Laser output power", "laser_output_power",
+ sd.tx_power[MCURR]);
if (!sd.rx_power_type)
- rx_power_string = "Receiver signal OMA";
+ rx_power_type_string = "Receiver signal OMA";
else
- rx_power_string = "Receiver signal average optical power";
+ rx_power_type_string = "Receiver signal average optical power";
- PRINT_xX_PWR(rx_power_string, sd.rx_power[MCURR]);
+ open_json_object("rx_power");
+ PRINT_xX_PWR_ALL(rx_power_type_string, "value", sd.rx_power[MCURR]);
+ if (is_json_context()) {
+ print_string(PRINT_JSON, "units", "%s", "mW");
+ module_print_any_string("type", rx_power_type_string);
+ }
+ close_json_object();
module_show_dom_mod_lvl_monitors(&sd);
- printf("\t%-41s : %s\n", "Alarm/warning flags implemented",
- (sd.supports_alarms ? "Yes" : "No"));
+ module_print_any_bool("Alarm/warning flags implemented",
+ "alarm/warning_flags_implemented",
+ sd.supports_alarms, YESNO(sd.supports_alarms));
+
if (sd.supports_alarms) {
for (i = 0; sff8472_aw_flags[i].str; ++i) {
- printf("\t%-41s : %s\n", sff8472_aw_flags[i].str,
- id[SFF_A2_BASE + sff8472_aw_flags[i].offset]
- & sff8472_aw_flags[i].value ? "On" : "Off");
+ bool value;
+
+ value = id[SFF_A2_BASE + sff8472_aw_flags[i].offset] &
+ sff8472_aw_flags[i].value;
+ module_print_any_bool(sff8472_aw_flags[i].str, NULL,
+ value, ONOFF(value));
}
- sff_show_thresholds(sd);
+ if (is_json_context())
+ sff_show_thresholds_json(sd);
+ else
+ sff_show_thresholds(sd);
}
}
Add JSON output handling for 'ethtool -m' / --module-info, following the guideline below: 1. Fields with description, will have a separate description field. 2. Fields with units, will have a separate unit field. 3. ASCII fields will be presented as strings. 4. On/Off is rendered as true/false. 5. Yes/no is rendered as true/false. 6. Per-channel fields will be presented as array, when each element represents a channel. 7. Fields that hold version, will be split to major and minor sub fields. Signed-off-by: Danielle Ratson <danieller@nvidia.com> --- Notes: v2: * In rx_power JSON field, add a type field to let the user know what type is printed in "value". sfpdiag.c | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-)