selcommands.cpp (11b9c3b1bd22c6719868d3b5589640ab188a24f8) | selcommands.cpp (c1921c637bb124538638bb99510771da3e497df8) |
---|---|
1/* 2 * Copyright (c) 2018 Intel Corporation. 3 * Copyright (c) 2018-present Facebook. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * --- 311 unchanged lines hidden (view full) --- 320 int responseID = selObj.addEntry(ipmiRaw.c_str()); 321 if (responseID < 0) 322 { 323 return ipmi::responseUnspecifiedError(); 324 } 325 return ipmi::responseSuccess((uint16_t)responseID); 326} 327 | 1/* 2 * Copyright (c) 2018 Intel Corporation. 3 * Copyright (c) 2018-present Facebook. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * --- 311 unchanged lines hidden (view full) --- 320 int responseID = selObj.addEntry(ipmiRaw.c_str()); 321 if (responseID < 0) 322 { 323 return ipmi::responseUnspecifiedError(); 324 } 325 return ipmi::responseSuccess((uint16_t)responseID); 326} 327 |
328ipmi::RspType<uint8_t> ipmiStorageClearSEL(uint16_t reservationID, 329 const std::array<uint8_t, 3> &clr, 330 uint8_t eraseOperation) 331{ 332 if (!checkSELReservation(reservationID)) 333 { 334 return ipmi::responseInvalidReservationId(); 335 } 336 337 static constexpr std::array<uint8_t, 3> clrExpected = {'C', 'L', 'R'}; 338 if (clr != clrExpected) 339 { 340 return ipmi::responseInvalidFieldRequest(); 341 } 342 343 /* If there is no sel then return erase complete */ 344 if (selObj.getCount() == 0) 345 { 346 return ipmi::responseSuccess(fb_oem::ipmi::sel::eraseComplete); 347 } 348 349 /* Erasure status cannot be fetched, so always return erasure 350 * status as `erase completed`. 351 */ 352 if (eraseOperation == fb_oem::ipmi::sel::getEraseStatus) 353 { 354 return ipmi::responseSuccess(fb_oem::ipmi::sel::eraseComplete); 355 } 356 357 /* Check that initiate erase is correct */ 358 if (eraseOperation != fb_oem::ipmi::sel::initiateErase) 359 { 360 return ipmi::responseInvalidFieldRequest(); 361 } 362 363 /* Per the IPMI spec, need to cancel any reservation when the 364 * SEL is cleared 365 */ 366 cancelSELReservation(); 367 368 /* Clear the complete Sel Json object */ 369 if (selObj.clear() < 0) 370 { 371 return ipmi::responseUnspecifiedError(); 372 } 373 374 return ipmi::responseSuccess(fb_oem::ipmi::sel::eraseComplete); 375} 376 377ipmi::RspType<uint32_t> ipmiStorageGetSELTime() 378{ 379 struct timespec selTime = {}; 380 381 if (clock_gettime(CLOCK_REALTIME, &selTime) < 0) 382 { 383 return ipmi::responseUnspecifiedError(); 384 } 385 386 return ipmi::responseSuccess(selTime.tv_sec); 387} 388 389ipmi::RspType<> ipmiStorageSetSELTime(uint32_t selTime) 390{ 391 // Set SEL Time is not supported 392 return ipmi::responseInvalidCommand(); 393} 394 395ipmi::RspType<uint16_t> ipmiStorageGetSELTimeUtcOffset() 396{ 397 /* TODO: For now, the SEL time stamp is based on UTC time, 398 * so return 0x0000 as offset. Might need to change once 399 * supporting zones in SEL time stamps 400 */ 401 402 uint16_t utcOffset = 0x0000; 403 return ipmi::responseSuccess(utcOffset); 404} 405 |
|
328void registerSELFunctions() 329{ 330 // <Get SEL Info> 331 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 332 ipmi::storage::cmdGetSelInfo, ipmi::Privilege::User, 333 ipmiStorageGetSELInfo); 334 335 // <Get SEL Entry> 336 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 337 ipmi::storage::cmdGetSelEntry, ipmi::Privilege::User, 338 ipmiStorageGetSELEntry); 339 340 // <Add SEL Entry> 341 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 342 ipmi::storage::cmdAddSelEntry, 343 ipmi::Privilege::Operator, ipmiStorageAddSELEntry); 344 | 406void registerSELFunctions() 407{ 408 // <Get SEL Info> 409 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 410 ipmi::storage::cmdGetSelInfo, ipmi::Privilege::User, 411 ipmiStorageGetSELInfo); 412 413 // <Get SEL Entry> 414 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 415 ipmi::storage::cmdGetSelEntry, ipmi::Privilege::User, 416 ipmiStorageGetSELEntry); 417 418 // <Add SEL Entry> 419 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 420 ipmi::storage::cmdAddSelEntry, 421 ipmi::Privilege::Operator, ipmiStorageAddSELEntry); 422 |
423 // <Clear SEL> 424 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 425 ipmi::storage::cmdClearSel, ipmi::Privilege::Operator, 426 ipmiStorageClearSEL); 427 428 // <Get SEL Time> 429 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 430 ipmi::storage::cmdGetSelTime, ipmi::Privilege::User, 431 ipmiStorageGetSELTime); 432 433 // <Set SEL Time> 434 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 435 ipmi::storage::cmdSetSelTime, 436 ipmi::Privilege::Operator, ipmiStorageSetSELTime); 437 438 // <Get SEL Time UTC Offset> 439 ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage, 440 ipmi::storage::cmdGetSelTimeUtcOffset, 441 ipmi::Privilege::User, 442 ipmiStorageGetSELTimeUtcOffset); 443 |
|
345 return; 346} 347 348} // namespace storage 349} // namespace ipmi | 444 return; 445} 446 447} // namespace storage 448} // namespace ipmi |