1 #include "comm_module.hpp"
2 
3 #include "command/channel_auth.hpp"
4 #include "command/open_session.hpp"
5 #include "command/rakp12.hpp"
6 #include "command/rakp34.hpp"
7 #include "command/session_cmds.hpp"
8 #include "command_table.hpp"
9 #include "main.hpp"
10 #include "session.hpp"
11 
12 #include <algorithm>
13 #include <cstring>
14 #include <iomanip>
15 #include <iostream>
16 
17 namespace command
18 {
19 
20 void sessionSetupCommands()
21 {
22     static const command::CmdDetails commands[] = {
23         // Open Session Request/Response
24         {{(static_cast<uint32_t>(message::PayloadType::OPEN_SESSION_REQUEST)
25            << 16)},
26          &openSession,
27          session::Privilege::HIGHEST_MATCHING,
28          true},
29         // RAKP1 & RAKP2 Message
30         {{(static_cast<uint32_t>(message::PayloadType::RAKP1) << 16)},
31          &RAKP12,
32          session::Privilege::HIGHEST_MATCHING,
33          true},
34         // RAKP3 & RAKP4 Message
35         {{(static_cast<uint32_t>(message::PayloadType::RAKP3) << 16)},
36          &RAKP34,
37          session::Privilege::HIGHEST_MATCHING,
38          true},
39         // Get Channel Authentication Capabilities Command
40         {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
41           static_cast<uint16_t>(command::NetFns::APP) | 0x38},
42          &GetChannelCapabilities,
43          session::Privilege::HIGHEST_MATCHING,
44          true},
45         // Set Session Privilege Command
46         {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
47           static_cast<uint16_t>(command::NetFns::APP) | 0x3B},
48          &setSessionPrivilegeLevel,
49          session::Privilege::USER,
50          false},
51         // Close Session Command
52         {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
53           static_cast<uint16_t>(command::NetFns::APP) | 0x3C},
54          &closeSession,
55          session::Privilege::CALLBACK,
56          false},
57     };
58 
59     for (auto& iter : commands)
60     {
61         std::get<command::Table&>(singletonPool)
62             .registerCommand(iter.command,
63                              std::make_unique<command::NetIpmidEntry>(
64                                  iter.command, iter.functor, iter.privilege,
65                                  iter.sessionless));
66     }
67 }
68 
69 } // namespace command
70