8514a484cd
What I did it Add new platform x86_64-ragile_ra-b6910-64c-r0 (Tomahawk 3) ASIC Vendor: Broadcom Switch ASIC: Tomahawk 3 Port Config: 64x100G -How I did it Provide device and platform related files. -How to verify it show platform fan show platform ssdhealth show platform psustatus show platform summary show platform syseeprom show platform temperature show interface status
271 lines
6.8 KiB
Python
Executable File
271 lines
6.8 KiB
Python
Executable File
#
|
|
# Sample pddf_psuutil file
|
|
#
|
|
# All the supported PSU SysFS aattributes are
|
|
#- psu_present
|
|
#- psu_model_name
|
|
#- psu_power_good
|
|
#- psu_mfr_id
|
|
#- psu_serial_num
|
|
#- psu_fan_dir
|
|
#- psu_v_out
|
|
#- psu_i_out
|
|
#- psu_p_out
|
|
#- psu_fan1_speed_rpm
|
|
#
|
|
|
|
import os.path
|
|
import sys
|
|
sys.path.append('/usr/share/sonic/platform/plugins')
|
|
import pddfparse
|
|
import json
|
|
|
|
try:
|
|
from sonic_psu.psu_base import PsuBase
|
|
except ImportError as e:
|
|
raise ImportError(str(e) + "- required module not found")
|
|
|
|
|
|
class PsuUtil(PsuBase):
|
|
"""PDDF generic PSU util class"""
|
|
|
|
def __init__(self):
|
|
PsuBase.__init__(self)
|
|
global pddf_obj
|
|
global plugin_data
|
|
with open(os.path.join(os.path.dirname(os.path.realpath(__file__)) + '/../pddf/pd-plugin.json')) as pd:
|
|
plugin_data = json.load(pd)
|
|
|
|
pddf_obj = pddfparse.PddfParse()
|
|
self.platform = pddf_obj.get_platform()
|
|
|
|
def get_num_psus(self):
|
|
return int(self.platform['num_psus'])
|
|
|
|
def get_psu_status(self, index):
|
|
if index is None:
|
|
return False
|
|
|
|
device = "PSU" + "%d" % index
|
|
output = pddf_obj.get_attr_name_output(device, "psu_power_good")
|
|
if not output:
|
|
return False
|
|
|
|
mode = output['mode']
|
|
val = output['status']
|
|
|
|
val = val.rstrip()
|
|
vmap = plugin_data['PSU']['psu_power_good'][mode]['valmap']
|
|
|
|
if val in vmap:
|
|
return vmap[val]
|
|
else:
|
|
return False
|
|
|
|
def get_psu_presence(self, index):
|
|
if index is None:
|
|
return False
|
|
|
|
status = 0
|
|
device = "PSU" + "%d" % index
|
|
output = pddf_obj.get_attr_name_output(device, "psu_present")
|
|
if not output:
|
|
return False
|
|
|
|
mode = output['mode']
|
|
status = output['status']
|
|
|
|
vmap = plugin_data['PSU']['psu_present'][mode]['valmap']
|
|
|
|
if status.rstrip('\n') in vmap:
|
|
return vmap[status.rstrip('\n')]
|
|
else:
|
|
return False
|
|
|
|
def get_powergood_status(self, idx):
|
|
if idx is None:
|
|
return False
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return False
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
output = pddf_obj.get_attr_name_output(device, "psu_power_good")
|
|
if not output:
|
|
return False
|
|
|
|
mode = output['mode']
|
|
status = output['status']
|
|
|
|
vmap = plugin_data['PSU']['psu_power_good'][mode]['valmap']
|
|
|
|
if status.rstrip('\n') in vmap:
|
|
return vmap[status.rstrip('\n')]
|
|
else:
|
|
return False
|
|
|
|
def get_model(self, idx):
|
|
if idx is None:
|
|
return None
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return None
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
output = pddf_obj.get_attr_name_output(device, "psu_model_name")
|
|
if not output:
|
|
return None
|
|
|
|
model = output['status']
|
|
|
|
# strip_non_ascii
|
|
stripped = (c for c in model if 0 < ord(c) < 127)
|
|
model = ''.join(stripped)
|
|
|
|
return model.rstrip('\n')
|
|
|
|
def get_mfr_id(self, idx):
|
|
if idx is None:
|
|
return None
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return None
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
output = pddf_obj.get_attr_name_output(device, "psu_mfr_id")
|
|
if not output:
|
|
return None
|
|
|
|
mfr = output['status']
|
|
|
|
return mfr.rstrip('\n')
|
|
|
|
def get_serial(self, idx):
|
|
if idx is None:
|
|
return None
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return None
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
output = pddf_obj.get_attr_name_output(device, "psu_serial_num")
|
|
if not output:
|
|
return None
|
|
|
|
serial = output['status']
|
|
|
|
return serial.rstrip('\n')
|
|
|
|
def get_direction(self, idx):
|
|
if idx is None:
|
|
return None
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return None
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
output = pddf_obj.get_attr_name_output(device, "psu_fan_dir")
|
|
if not output:
|
|
return None
|
|
|
|
mode = output['mode']
|
|
direction = output['status'].rstrip('\n')
|
|
|
|
vmap = plugin_data['PSU']['psu_fan_dir'][mode]['valmap']
|
|
if direction in vmap:
|
|
airflow_dir_real = vmap[direction]
|
|
else:
|
|
airflow_dir_real = direction
|
|
|
|
return airflow_dir_real
|
|
|
|
def get_output_voltage(self, idx):
|
|
if idx is None:
|
|
return 0.0
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return 0.0
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
output = pddf_obj.get_attr_name_output(device, "psu_v_out")
|
|
if not output:
|
|
return 0.0
|
|
|
|
v_out = output['status']
|
|
|
|
# value returned by the psu driver is in mV
|
|
return float(v_out)/1000
|
|
|
|
def get_output_current(self, idx):
|
|
if idx is None:
|
|
return 0.0
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return 0.0
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
output = pddf_obj.get_attr_name_output(device, "psu_i_out")
|
|
if not output:
|
|
return 0.0
|
|
|
|
i_out = output['status']
|
|
|
|
# current in mA
|
|
return float(i_out)/1000
|
|
|
|
def get_output_power(self, idx):
|
|
if idx is None:
|
|
return 0.0
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return 0.0
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
output = pddf_obj.get_attr_name_output(device, "psu_p_out")
|
|
if not output:
|
|
return 0.0
|
|
|
|
p_out = output['status']
|
|
|
|
# power is returned in micro watts
|
|
return float(p_out)/1000000
|
|
|
|
def get_fan_rpm(self, idx, fan_idx):
|
|
if idx is None or fan_idx is None:
|
|
return 0
|
|
|
|
if idx < 1 or idx > self.platform['num_psus']:
|
|
print("Invalid index %d\n" % idx)
|
|
return 0
|
|
|
|
device = "PSU"+"%d" % (idx)
|
|
num_fans = pddf_obj.get_num_psu_fans(device)
|
|
|
|
if fan_idx < 1 or fan_idx > num_fans:
|
|
print("Invalid PSU-fan index %d\n" % fan_idx)
|
|
return 0
|
|
|
|
output = pddf_obj.get_attr_name_output(device, "psu_fan"+str(fan_idx)+"_speed_rpm")
|
|
if not output:
|
|
return 0
|
|
|
|
#mode = output['mode']
|
|
output['status'] = output['status'].rstrip()
|
|
if output['status'].isalpha():
|
|
return 0
|
|
else:
|
|
speed = int(output['status'])
|
|
|
|
return speed
|
|
|
|
def dump_sysfs(self):
|
|
return pddf_obj.cli_dump_dsysfs('psu')
|