bce4aa1412
Why I did it Ragile adapter ra-b6510-32c ra-b6510-48v8c ra-b6910-64c ra-b6920-4s to kernel 5.x Signed-off-by: “pettershao” pettershao@ragilenetworks.com
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')
|