Skip to content
Snippets Groups Projects
Commit 1606704c authored by Ralf Spiwoks's avatar Ralf Spiwoks
Browse files

add lib/IPMCID & read_id.py script

parent 2d2f8b65
No related branches found
No related tags found
No related merge requests found
......@@ -14,113 +14,7 @@ from IPMCDevLib import IPMCDevMgt as IPMCDevMgt
import argparse
import json
import lib.IPMI as IPMI
# ---- MAC number <-> string ---------------------------------------------------
def mac_number_to_string(n):
tstr = f'{n:012x}'
rstr = ''
flg = False
# order from left to right
for c1,c2 in (tstr[i:i+2] for i in range(0,11,+2)):
if flg:
rstr += ':'
else :
flg = True
rstr += '{}{}'.format(c1,c2)
return rstr
def mac_string_to_number(s):
tlst = s.split(':')
rstr = ''
# order from left to right
for i in range(len(tlst)):
rstr += f'{tlst[i]}'
return int(rstr,16)
# ---- Serial number <-> string ------------------------------------------------
def serial_number_to_string(n):
tstr = f'{n:08d}'
rstr = tstr[0:4] + ' ' + tstr[4:8]
return rstr
def serial_string_to_number(s):
rstr = ''
for c in s:
if c == ' ':
continue
rstr += c
return int(rstr)
# ---- BATCH name write/read functions ---------------------------------------
def batch_name_write(ipmi,s):
def batch_name_to_oem(s):
r = []
# order from left to right
for c in s:
r.append(ord(c))
return r
return ipmi.ipmi_send(0x2e, 0x56, [0x60, 0x00, 0x00] + batch_name_to_oem(s))
def batch_name_read(ipmi):
def batch_oem_to_name(o):
rstr = ''
for c in o:
rstr += chr(c)
return rstr
r = ipmi.ipmi_send(0x2e, 0x57, [0x60, 0x00, 0x00])
return batch_oem_to_name(r[3:])
# ---- SERIAL number write/read functions --------------------------------------
def serial_number_write(ipmi,n):
def serial_number_to_oem(n):
tstr = f'{n:08d}'
r = []
# order from left to right
for i in range(0,len(tstr)):
r.append(ord(f'{tstr[i]}'))
if i == 3:
r.append(ord(' '))
return r
return ipmi.ipmi_send(0x2e, 0x54, [0x60, 0x00, 0x00] + serial_number_to_oem(n))
def serial_number_read(ipmi):
def serial_oem_to_number(o):
rstr = ''
# order from left to right
for i in range(0,len(o)):
if o[i] == ord(' '):
continue
rstr += chr(int(o[i]))
return int(rstr)
r = ipmi.ipmi_send(0x2e, 0x55, [0x60, 0x00, 0x00])
return serial_oem_to_number(r[3:])
# ---- MAC address number write/read functions ---------------------------------
def mac_number_write(ipmi,n):
def mac_number_to_oem(n):
tstr = f'{n:#0{14}x}'[2:]
r = []
# order from right to left
for c in (tstr[i:i+2] for i in range(10,-1,-2)):
r.append(int('{}'.format(c),16))
return r
return ipmi.ipmi_send(0x2e, 0x52, [0x60, 0x00, 0x00] + mac_number_to_oem(n))
def mac_number_read(ipmi):
def mac_oem_to_number(o):
rstr = ''
# order from right to left
for i in range(len(o)-1,0,-1):
rstr += f'{o[i]:0{2}x}'
r = int(rstr,16)
return r
r = ipmi.ipmi_send(0x2e, 0x4f, [0x60, 0x00, 0x00])
return mac_oem_to_number(r[2:])
import lib.IPMCID as IPMCID
# ---- helper for repeating function to times until success --------------------
......@@ -162,7 +56,6 @@ def config_test(**kwargs):
config_mac_address = False
else:
config_mac_address = True
mac_address = mac_string_to_number(kwargs.get('mac_address'))
if kwargs.get('debug_level') is None:
debug_level = 0
......@@ -179,32 +72,36 @@ def config_test(**kwargs):
def_lan_channel = 5
def_timeout = 5
print(f'[Info] BATCH name: \'{batch_name}\'')
print(f'[Info] SERIAL number: \'{serial_number_to_string(serial_number)}\'')
print(f'[Info] MAC address: \'{mac_number_to_string(mac_address)}\'')
ipmi = IPMI.IPMI(hostname=hostname, username='', password='')
ipmcid = IPMCID.IPMCID(ipmi)
nerr = 0
measurements = []
start = time.time()
if config_mac_address:
mac_address = ipmcid.mac_string_to_number(kwargs.get('mac_address'))
print(f'[Info] BATCH name: \'{batch_name}\'')
print(f'[Info] SERIAL number: \'{ipmcid.serial_number_to_string(serial_number)}\'')
print(f'[Info] MAC address: \'{ipmcid.mac_number_to_string(mac_address)}\'')
# write BATCH name (EEPROM)
if config_batch_name:
if debug_level >= 2:
print(f'[Info] BATCH (EEPROM) to be written: {batch_name}')
batch_name_write(ipmi, batch_name)
ipmcid.batch_name_write(batch_name)
# write SERIAL number (EEPROM)
if config_serial_number:
if debug_level >= 2:
print(f'[Info] SERIAL (EEPROM) to be written: {serial_number_to_string(serial_number)}')
serial_number_write(ipmi,serial_number)
print(f'[Info] SERIAL (EEPROM) to be written: {ipmcid.serial_number_to_string(serial_number)}')
ipmcid.serial_number_write(serial_number)
# write MAC address (EEPROM)
if config_mac_address:
if debug_level >= 2:
print(f'[Info] MAC (EEPROM) to be written: {mac_number_to_string(mac_address)}')
mac_number_write(ipmi,mac_address)
print(f'[Info] MAC (EEPROM) to be written: {ipmcid.mac_number_to_string(mac_address)}')
ipmcid.mac_number_write(mac_address)
# program user firmware for shipping or reset
if program_user:
......@@ -218,7 +115,7 @@ def config_test(**kwargs):
ipmi.ipmc_reset()
# read BATCH name (EEPROM)
s_out = attempt_function(def_timeout, batch_name_read, ipmi)
s_out = attempt_function(def_timeout, ipmcid.batch_name_read, )
if debug_level >= 1:
print(f'[Info] BATCH (EEPROM) read: {s_out}')
if config_batch_name and s_out != batch_name:
......@@ -226,17 +123,17 @@ def config_test(**kwargs):
nerr += 1
# read SERIAL number (EEPROM)
n_out = serial_number_read(ipmi)
n_out = ipmcid.serial_number_read()
if debug_level >= 1:
print(f'[Info] SERIAL (EEPROM) read: {serial_number_to_string(n_out)}')
print(f'[Info] SERIAL (EEPROM) read: {ipmcid.serial_number_to_string(n_out)}')
if config_serial_number and n_out != serial_number:
print(f'[Error] SERIAL number DIFFERENT!')
nerr += 1
# read MAC address (EEPROM)
n_out = mac_number_read(ipmi)
n_out = ipmcid.mac_number_read()
if debug_level >= 1:
print(f'[Info] MAC (EEPROM) read: {mac_number_to_string(n_out)}')
print(f'[Info] MAC (EEPROM) read: {ipmcid.mac_number_to_string(n_out)}')
if config_mac_address and n_out != mac_address:
print(f'[Error] MAC address (EEPROM) DIFFERENT!')
nerr += 1
......@@ -245,9 +142,9 @@ def config_test(**kwargs):
lan = ipmi.ipmi_lan_read(channel=def_lan_channel)
n_out = 0
if 'MAC Address' in lan:
n_out = mac_string_to_number(lan['MAC Address'])
n_out = ipmcid.mac_string_to_number(lan['MAC Address'])
if debug_level >= 1:
print(f'[Info] MAC (LAN) read: {mac_number_to_string(n_out)}')
print(f'[Info] MAC (LAN) read: {ipmcid.mac_number_to_string(n_out)}')
if config_mac_address and n_out != mac_address:
print(f'[Error] MAC address (LAN) DIFFERENT!')
nerr += 1
......@@ -270,7 +167,7 @@ def config_test(**kwargs):
measurements.append({ 'name': 'batch_name_fru', 'data': { 'batch_name': batch_name}, 'pass': 0 })
# write SERIAL number (FRU)
s = serial_number_to_string(serial_number)
s = ipmcid.serial_number_to_string(serial_number)
if config_serial_number:
if debug_level >= 2:
print(f'[Info] SERIAL (FRU) to be written: {s}')
......
......@@ -49,12 +49,12 @@ def cernipmc_test():
def cernipmc_test_seq(boardSplittedRef=[None, None], ha_address=0x41, hostname='192.168.1.34', enableProgramming=False, enableMACFlashing=False, **kwargs):
enablePowerTesting = False
enableAtcaTesting = False
enableAmcTesting = False
enableIoTesting = False
enableMgtI2cTesting = False
enableSensorI2cTesting = False
enablePowerTesting = True
enableAtcaTesting = True
enableAmcTesting = True
enableIoTesting = True
enableMgtI2cTesting = True
enableSensorI2cTesting = True
enableConfigTesting = True
#Test details
......
#!/usr/bin/python
import argparse
import subprocess
import sys
import time
def ipmitool(data):
cmd = [
'ipmitool',
'-H',
'192.168.1.34',
'-U',
'',
'-P',
'',
]
for d in data:
cmd.append('{}'.format(d))
print('cmd = {}'.format(cmd))
result = subprocess.run(cmd)
if result.returncode != 0:
raise Exception('IPMI command failed')
def ignore_exception(func, *args, **kwargs):
try:
func(*args, **kwargs)
except:
pass
def attempt_function(to, func, *args, **kwargs):
for i in range(to):
try:
rtnv = func(*args, **kwargs)
except:
if (i + 1) >= to:
raise
else:
pass
else:
return rtnv
if __name__ == "__main__":
prs = argparse.ArgumentParser()
prs.add_argument('serial_number', help="serial number (last three digits)")
prs.add_argument('mac_address', help="MAC address (last byte, hex value)")
prs.add_argument('-p','--program',action='store_true',required=False, help="program the IPMC firmware")
args = prs.parse_known_args()
# convert to numbers
num = int(args[0].serial_number,10)
hun = num // 100
ten = (num - hun*100) // 10
one = (num - hun*100 - ten*10)
mac = int(args[0].mac_address,16)
#print(f'hun = {hun}, ten = {ten}, one = {one}, mac = {mac}')
# new MAC address (hex)
attempt_function(5, ipmitool, ['lan', 'print', 5])
ipmitool(['raw', '0x2e', '0x52', '0x60', '0x00', '0x00', hex(mac), '0x43', '0x00', '0x36', '0xd3', '0x80'])
ipmitool(['mc', 'reset', 'warm'])
attempt_function(5, ipmitool, ['lan', 'print', 5])
# serial number: e.g. 2402 0257 (ascii)
ipmitool(['raw', '0x2e', '0x54', '0x60', '0x00', '0x00', '0x32', '0x34', '0x30', '0x32', '0x20', '0x30', hex(ord(str(hun))), hex(ord(str(ten))), hex(ord(str(one)))])
ipmitool(['raw', '0x2e', '0x55', '0x60', '0x00', '0x00'])
# batch number: 10184002A (ascii)
ipmitool(['raw', '0x2e', '0x56', '0x60', '0x00', '0x00', '0x31', '0x30', '0x31', '0x38', '0x34', '0x30', '0x30', '0x32', '0x41'])
ipmitool(['raw', '0x2e', '0x57', '0x60', '0x00', '0x00'])
# new firmware
if args[0].program:
ipmitool(['hpm', 'upgrade', '../ipmc-firmware/user-firmware/hpm1all.img', 'force'])
ipmitool(['hpm', 'activate'])
# new FRU part and serial number (ascii)
ipmitool(['fru'])
ignore_exception(ipmitool, ['fru', 'edit', '0', 'field', 'p', '2', '10184002A'])
ignore_exception(ipmitool, ['fru', 'edit', '0', 'field', 'p', '4', ('24020' + str(hun) + str(ten) + str(one))])
ipmitool(['fru'])
#!/usr/bin/env python3
# script for setting IPMC identifiers: MAC address, serial number, board number
import argparse
import json
import lib.IPMI as IPMI
def mac_number_to_string(n):
# tstr = f'{n:#0{14}x}'[2:]
tstr = f'{n:012x}'
rstr = ''
flg = False
# order from left to right
for c1,c2 in (tstr[i:i+2] for i in range(0,11,+2)):
if flg:
rstr += ':'
else :
flg = True
rstr += '{}{}'.format(c1,c2)
return rstr
def mac_string_to_number(s):
tlst = s.split(':')
rstr = ''
# order from left to right
for i in range(len(tlst)):
rstr += f'{tlst[i]}'
return int(rstr,16)
def serial_number_to_string(n):
tstr = f'{n:08d}'
rstr = tstr[0:4] + ' ' + tstr[4:8]
return rstr
def serial_string_to_number(s):
rstr = ''
for c in s:
if c == ' ':
continue
rstr += c
return int(rstr)
# ---- FRU write/read functions ----
def batch_string_fru_write(ipmi, s):
return ipmi.ipmi_fru_write(0, 'p', 2, s)
def batch_string_fru_read(ipmi):
return ipmi.ipmi_fru_read(0, 'p', 2, [])
def serial_string_fru_write(ipmi, s):
#print(s)
return ipmi.ipmi_fru_write(0, 'p', 4, s)
def serial_string_fru_read(ipmi):
return ipmi.ipmi_fru_read(0, 'p', 4, [])
# ---- BATCH string write/read functions ----
def batch_string_write(ipmi,s):
def batch_string_to_oem(s):
r = []
# order from left to right
for c in s:
r.append(ord(c))
return r
return ipmi.ipmi_send(0x2e, 0x56, [0x60, 0x00, 0x00] + batch_string_to_oem(s))
def batch_string_read(ipmi):
def batch_oem_to_string(o):
rstr = ''
for c in o:
rstr += chr(c)
return rstr
r = ipmi.ipmi_send(0x2e, 0x57, [0x60, 0x00, 0x00])
return batch_oem_to_string(r[3:])
# ---- SERIAL number write/read functions ----
def serial_number_write(ipmi,n):
def serial_number_to_oem(n):
tstr = f'{n:08d}'
r = []
# order from left to right
for i in range(0,len(tstr)):
r.append(ord(f'{tstr[i]}'))
if i == 3:
r.append(ord(' '))
return r
return ipmi.ipmi_send(0x2e, 0x54, [0x60, 0x00, 0x00] + serial_number_to_oem(n))
def serial_number_read(ipmi):
def serial_oem_to_number(o):
rstr = ''
# order from left to right
for i in range(0,len(o)):
if o[i] == ord(' '):
continue
rstr += chr(int(o[i]))
return int(rstr)
r = ipmi.ipmi_send(0x2e, 0x55, [0x60, 0x00, 0x00])
return serial_oem_to_number(r[3:])
# ---- MAC address number write/read functions ----
def mac_number_write(ipmi,n):
def mac_number_to_oem(n):
tstr = f'{n:#0{14}x}'[2:]
r = []
# order from right to left
for c in (tstr[i:i+2] for i in range(10,-1,-2)):
r.append(int('{}'.format(c),16))
return r
return ipmi.ipmi_send(0x2e, 0x52, [0x60, 0x00, 0x00] + mac_number_to_oem(n))
def mac_number_read(ipmi):
def mac_oem_to_number(o):
rstr = ''
# order from right to left
for i in range(len(o)-1,0,-1):
rstr += f'{o[i]:0{2}x}'
r = int(rstr,16)
return r
r = ipmi.ipmi_send(0x2e, 0x4f, [0x60, 0x00, 0x00])
return mac_oem_to_number(r[2:])
# ---- main ---------------------------------------
if __name__ == "__main__":
def_hostname = '192.168.1.34'
def_batch_name = 'P20200001'
def_serial_number = 1234
def_mac_address = 0x0a0a0a0a1234
def_output_filename = 'ipmc_identifiers.last'
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('-h', '--help', action='store_true', required=False)
parser.add_argument('-H','--hostname', action='store', required=False, default=def_hostname)
parser.add_argument('-U','--username', action='store', required=False, default='')
parser.add_argument('-P','--password', action='store', required=False, default='')
parser.add_argument('-b','--batch_name', action='store', required=False)
parser.add_argument('-s','--serial_number', action='store', type=int, required=False)
parser.add_argument('-m','--mac_address', action='store', required=False)
parser.add_argument('-o','--output_filename', action='store', required=False, default=def_output_filename)
parser.add_argument('-i','--input_filename', action='store', required=False, default='')
parser.add_argument('-I','--increment_input', action='store_true', required=False)
args = parser.parse_known_args()
if args[0].help:
print('Usage: ipmc_identifiers <options>')
print(f' -H, --hostname ipmitool hostname, default = \'{def_hostname}\'')
print(f' -U, --username ipmitool username, default = \'\'')
print(f' -P, --password ipmitool password, default = \'\'')
print(f' -b, --batch_name batch name, default = \'{def_batch_name}\'')
print(f' -s, --serial_number serial number, default = \'{serial_number_to_string(def_serial_number)}\'')
print(f' -m, --mac_address MAC address, default = \'{mac_number_to_string(def_mac_address)}\'')
print(f' -o, --output_filename output filename, default = \'{def_output_filename}\', to disable set to empty')
print(f' -i, --input_filename input filename, default = None, to enable set filename')
print(f' -I, --increment_input increment serial number and MAC address (only if read from input input file)')
print(f'')
print(f'Note: -b, -s, and -m have priority over -i (with/without -I)')
exit(0)
ipmi = IPMI.IPMI(hostname='192.168.1.34', username='', password='')
nerr = 0
batch_name = def_batch_name
serial_number = def_serial_number
mac_address = def_mac_address
output_filename = args[0].output_filename
input_filename = args[0].input_filename
if input_filename:
try:
print(f'[Info] reading identifiers from file \'{input_filename}\'')
with open(input_filename, 'r') as infile:
data =json.load(infile)
batch_name = data['batch_name']
serial_number = serial_string_to_number(data['serial_number'])
mac_address = mac_string_to_number(data['mac_address'])
if args[0].increment_input:
print(f'[Info] incrementing serial number and MAC address read identifiers from file \'{input_filename}\'')
serial_number += 1
mac_address += 1
except:
print(f'[Error] reading identifiers from file \'{input_filename}\'')
exit(-1)
if args[0].batch_name:
batch_name = args[0].batch_name
if args[0].serial_number:
serial_number = args[0].serial_number
if args[0].mac_address:
mac_address = mac_string_to_number(args[0].mac_address)
print(f'[Info] batch name: \'{batch_name}\'')
print(f'[Info] serial number: \'{serial_number_to_string(serial_number)}\'')
print(f'[Info] MAC address: \'{mac_number_to_string(mac_address)}\'')
# write BATCH (FRU) string
s = batch_name
print(f'[Info] BATCH (FRU) to be written: {s}')
batch_string_fru_write(ipmi, s)
# read BATCH (FRU) string
s_out = batch_string_fru_read(ipmi)
print(f'[Info] BATCH (FRU) string read: {s_out}')
if s_out != s:
print(f'[Error] BATCH (FRU) string DIFFERENT!')
nerr += 1
# write SERIAL (FRU) string
s = serial_number_to_string(serial_number)
print(f'[Info] SERIAL (FRU) to be written: {s}')
serial_string_fru_write(ipmi, s)
# read SERIAL (FRU) string
s_out = serial_string_fru_read(ipmi)
print(f'[Info] SERIAL (FRU) string read: {s_out}')
if s_out != s:
print(f'[Error] SERIAL (FRU) string DIFFERENT!')
nerr += 1
# write BATCH string
s = batch_name
print(f'[Info] BATCH string to be written: {s}')
batch_string_write(ipmi, s)
# read BATCH string
s_out = batch_string_read(ipmi)
print(f'[Info] BATCH string read: {s_out}')
if s_out != s:
print(f'[Error] BATCH string DIFFERENT!')
nerr += 1
# write SERIAL number
n = serial_number
print(f'[Info] SERIAL number to be written: {serial_number_to_string(n)}')
serial_number_write(ipmi,serial_number)
# read SERIAL number
n_out = serial_number_read(ipmi)
print(f'[Info] SERIAL number read: {serial_number_to_string(n_out)}')
if n_out != n:
print(f'[Error] SERIAL number DIFFERENT!')
nerr += 1
# write MAC address
n = mac_address
print(f'[Info] MAC address to be written: {mac_number_to_string(n)}')
mac_number_write(ipmi,mac_address)
# read MAC address
n_out = mac_number_read(ipmi)
print(f'[Info] MAC address read: {mac_number_to_string(n_out)}')
if n_out != n:
print(f'[Error] MAC address DIFFERENT!')
nerr += 1
if nerr != 0:
print(f'[Error] THERE WERE ERRORS!')
if output_filename:
with open(output_filename, 'w') as outfile:
json.dump({'batch_name':batch_name,
'serial_number':serial_number_to_string(serial_number),
'mac_address':mac_number_to_string(mac_address)},
outfile)
outfile.write('\n')
outfile.close()
print(f'[Info] written identifiers to file \'{output_filename}\'')
ipmi.close()
#!/usr/bin/env python3
class IPMCID:
def __init__(self, ipmi):
self.ipmi = ipmi
# ---- MAC number <-> string -----------------------------------------------
def mac_number_to_string(self, n):
tstr = f'{n:012x}'
rstr = ''
flg = False
# order from left to right
for c1,c2 in (tstr[i:i+2] for i in range(0,11,+2)):
if flg:
rstr += ':'
else :
flg = True
rstr += '{}{}'.format(c1,c2)
return rstr
def mac_string_to_number(self, s):
tlst = s.split(':')
rstr = ''
# order from left to right
for i in range(len(tlst)):
rstr += f'{tlst[i]}'
return int(rstr,16)
# ---- Serial number <-> string --------------------------------------------
def serial_number_to_string(self, n):
tstr = f'{n:08d}'
rstr = tstr[0:4] + ' ' + tstr[4:8]
return rstr
def serial_string_to_number(self, s):
rstr = ''
for c in s:
if c == ' ':
continue
rstr += c
return int(rstr)
# ---- BATCH name write/read functions -------------------------------------
def batch_name_write(self, s):
def batch_name_to_oem(s):
r = []
# order from left to right
for c in s:
r.append(ord(c))
return r
return self.ipmi.ipmi_send(0x2e, 0x56, [0x60, 0x00, 0x00] + batch_name_to_oem(s))
def batch_name_read(self):
def batch_oem_to_name(o):
rstr = ''
for c in o:
rstr += chr(c)
return rstr
r = self.ipmi.ipmi_send(0x2e, 0x57, [0x60, 0x00, 0x00])
return batch_oem_to_name(r[3:])
# ---- SERIAL number write/read functions ----------------------------------
def serial_number_write(self, n):
def serial_number_to_oem(n):
tstr = f'{n:08d}'
r = []
# order from left to right
for i in range(0,len(tstr)):
r.append(ord(f'{tstr[i]}'))
if i == 3:
r.append(ord(' '))
return r
return self.ipmi.ipmi_send(0x2e, 0x54, [0x60, 0x00, 0x00] + serial_number_to_oem(n))
def serial_number_read(self):
def serial_oem_to_number(o):
rstr = ''
# order from left to right
for i in range(0,len(o)):
if o[i] == ord(' '):
continue
rstr += chr(int(o[i]))
return int(rstr)
r = self.ipmi.ipmi_send(0x2e, 0x55, [0x60, 0x00, 0x00])
return serial_oem_to_number(r[3:])
# ---- MAC address number write/read functions -----------------------------
def mac_number_write(self, n):
def mac_number_to_oem(n):
tstr = f'{n:#0{14}x}'[2:]
r = []
# order from right to left
for c in (tstr[i:i+2] for i in range(10,-1,-2)):
r.append(int('{}'.format(c),16))
return r
return self.ipmi.ipmi_send(0x2e, 0x52, [0x60, 0x00, 0x00] + mac_number_to_oem(n))
def mac_number_read(self):
def mac_oem_to_number(o):
rstr = ''
# order from right to left
for i in range(len(o)-1,0,-1):
rstr += f'{o[i]:0{2}x}'
r = int(rstr,16)
return r
r = self.ipmi.ipmi_send(0x2e, 0x4f, [0x60, 0x00, 0x00])
return mac_oem_to_number(r[2:])
#!/usr/bin/env python3
# script for reading IPMC identifiers: MAC address, serial number, board number
import argparse
import lib.IPMI as IPMI
import lib.IPMCID as IPMCID
# ---- read configuration ------------------------------------------------------
def read_config(**kwargs):
if kwargs.get('hostname') is None:
raise Exception('\"hostname\" not set')
else:
hostname = kwargs.get('hostname')
if kwargs.get('debug_level') is None:
debug_level = 0
else:
debug_level = kwargs.get('debug_level')
# default parameters - depending on firmware
def_lan_channel = 5
def_timeout = 5
ipmi = IPMI.IPMI(hostname=hostname, username='', password='')
ipmcid = IPMCID.IPMCID(ipmi)
# read BATCH name (EEPROM)
s_out = ipmcid.batch_name_read()
print(f'[Info] BATCH (EEPROM) read: {s_out}')
# read SERIAL number (EEPROM)
n_out = ipmcid.serial_number_read()
print(f'[Info] SERIAL (EEPROM) read: {ipmcid.serial_number_to_string(n_out)}')
# read MAC address (EEPROM)
n_out = ipmcid.mac_number_read()
print(f'[Info] MAC (EEPROM) read: {ipmcid.mac_number_to_string(n_out)}')
# read MAC address (LAN)
lan = ipmi.ipmi_lan_read(channel=def_lan_channel)
n_out = 0
if 'MAC Address' in lan:
n_out = ipmcid.mac_string_to_number(lan['MAC Address'])
print(f'[Info] MAC (LAN) read: {ipmcid.mac_number_to_string(n_out)}')
# read BATCH name (FRU)
bn_out = ipmi.ipmi_fru_read('p', 2)
print(f'[Info] BATCH (FRU) read: {bn_out}')
# read SERIAL number (FRU)
sn_out = ipmi.ipmi_fru_read('p', 4)
print(f'[Info] SERIAL (FRU) read: {sn_out}')
ipmi.close()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--ipmc_ip', action='store', required=False, default='192.168.1.34')
args = parser.parse_args()
kwargs = {}
if args.ipmc_ip:
kwargs['hostname'] = args.ipmc_ip
read_config(**kwargs)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment