2
0
mirror of https://github.com/xcat2/confluent.git synced 2026-09-21 08:33:23 +00:00

Fix IPMI coroutine result handling

This commit is contained in:
Markus Hilger
2026-07-13 00:59:17 +02:00
parent 38746b19d5
commit 0165fc9935
3 changed files with 19 additions and 20 deletions
+6 -6
View File
@@ -329,8 +329,8 @@ class Command(object):
await self.oem_init()
if hasattr(self._oem, 'set_power'):
return self._oem.set_power(powerstate,
bridge_request=bridge_request)
return await self._oem.set_power(powerstate,
bridge_request=bridge_request)
if hasattr(self._oem, 'process_power_state'):
powerstate = self._oem.process_power_state(
@@ -675,7 +675,7 @@ class Command(object):
await self.init_sdr()
for fruid in self._sdr.fru:
if self._sdr.fru[fruid].fru_name == component:
return self._oem.process_fru(fru.FRU(
return await self._oem.process_fru(fru.FRU(
ipmicmd=self, fruid=fruid,
sdr=self._sdr.fru[fruid]).info, component)
return await self._oem.get_inventory_of_component(component)
@@ -854,9 +854,9 @@ class Command(object):
else:
raise Exception("Unrecognized data format " + repr(fetchdata))
def get_extended_bmc_configuration(self):
self.oem_init()
return self._oem.get_extended_bmc_configuration()
async def get_extended_bmc_configuration(self):
await self.oem_init()
return await self._oem.get_extended_bmc_configuration()
async def get_bmc_configuration(self):
await self.oem_init()
+2 -2
View File
@@ -133,7 +133,7 @@ class Console(object):
response['code'])
return
if 'error' in response:
self._print_error(response['error'])
await self._print_error(response['error'])
return
self.activated = True
# data[0:3] is reserved except for the test mode, which we don't use
@@ -381,7 +381,7 @@ class Console(object):
await self.send_payload(ackpayload, retry=False)
except exc.IpmiException:
# if the session is broken, then close the SOL session
self.close()
await self.close()
if self.myseq != 0 and ackseq == self.myseq: # the bmc has something
# to say about last xmit
self.awaitingack = False
+11 -12
View File
@@ -1023,11 +1023,11 @@ class Session(object):
# tried ipmi 2.0 against a 1.5 which should work, but some bmcs
# thought 'reserved' meant 'must be zero'
self.ipmi15only = 1
return self._get_channel_auth_cap()
return await self._get_channel_auth_cap()
mysuffix = " while trying to get channel authentication capabalities"
errstr = get_ipmi_error(response, suffix=mysuffix)
if errstr:
self.onlogon({'error': errstr})
await self.onlogon({'error': errstr})
return
data = response['data']
self.currentchannel = data[0]
@@ -1035,7 +1035,7 @@ class Session(object):
self.ipmiversion = 2.0
if self.ipmiversion == 1.5:
if not (data[1] & 0b100):
self.onlogon(
await self.onlogon(
{'error':
"MD5 required but not enabled/available on target BMC"})
return
@@ -1047,12 +1047,11 @@ class Session(object):
errstr = get_ipmi_error(response,
suffix=" while getting session challenge")
if errstr:
self.onlogon({'error': errstr})
return
return self.onlogon({'error': errstr})
data = response['data']
self.sessionid = struct.unpack("<I", bytes(data[0:4]))[0]
self.authtype = 2
self._activate_session(data[4:])
return self._activate_session(data[4:])
# NOTE(jbjohnso):
# This sends the activate session payload. We pick '1' as the requested
@@ -1067,7 +1066,7 @@ class Session(object):
async def _activated_session(self, response):
errstr = get_ipmi_error(response)
if errstr:
self.onlogon({'error': errstr})
await self.onlogon({'error': errstr})
return
data = response['data']
self.sessionid = struct.unpack("<I", bytes(data[1:5]))[0]
@@ -1085,8 +1084,8 @@ class Session(object):
# some implementations will let us get this far,
# but suddenly get skiddish. Try again in such a case
self.privlevel = 3
response = self.raw_command(netfn=0x6, command=0x3b,
data=[self.privlevel])
response = await self.raw_command(netfn=0x6, command=0x3b,
data=[self.privlevel])
if response['code']:
self.logged = 0
self.onlogpayload = None
@@ -1097,7 +1096,7 @@ class Session(object):
self.privlevel, self.userid)
errstr = get_ipmi_error(response, suffix=mysuffix)
if errstr:
self.onlogon({'error': errstr})
await self.onlogon({'error': errstr})
return
self.logging = False
self.logoutexpiry = None
@@ -1548,7 +1547,7 @@ class Session(object):
errstr = constants.rmcp_codes[data[1]]
else:
errstr = "Unrecognized RMCP code %d" % data[1]
self.onlogon({'error': errstr})
await self.onlogon({'error': errstr})
return -9
self.allowedpriv = data[2]
# NOTE(jbjohnso): At this point, the BMC has no idea about what user
@@ -1692,7 +1691,7 @@ class Session(object):
aclen = len(expectedauthcode)
authcode = struct.pack("%dB" % aclen, *data[8:aclen + 8])
if authcode != expectedauthcode:
self.onlogon({'error': "Invalid RAKP4 integrity code (wrong Kg?)"})
await self.onlogon({'error': "Invalid RAKP4 integrity code (wrong Kg?)"})
return
self.sessionid = self.pendingsessionid
self.integrityalgo = self.attemptedhash