summaryrefslogtreecommitdiffstats
path: root/comm_module.cpp
blob: acc90890f090ba2fc95e6ba22379dcdd263d533f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "comm_module.hpp"

#include "command/channel_auth.hpp"
#include "command/open_session.hpp"
#include "command/rakp12.hpp"
#include "command/rakp34.hpp"
#include "command/session_cmds.hpp"
#include "command_table.hpp"
#include "main.hpp"
#include "session.hpp"

#include <algorithm>
#include <cstring>
#include <iomanip>

namespace command
{

void sessionSetupCommands()
{
    static const command::CmdDetails commands[] = {
        // Open Session Request/Response
        {{(static_cast<uint32_t>(message::PayloadType::OPEN_SESSION_REQUEST)
           << 16)},
         &openSession,
         session::Privilege::HIGHEST_MATCHING,
         true},
        // RAKP1 & RAKP2 Message
        {{(static_cast<uint32_t>(message::PayloadType::RAKP1) << 16)},
         &RAKP12,
         session::Privilege::HIGHEST_MATCHING,
         true},
        // RAKP3 & RAKP4 Message
        {{(static_cast<uint32_t>(message::PayloadType::RAKP3) << 16)},
         &RAKP34,
         session::Privilege::HIGHEST_MATCHING,
         true},
        // Get Channel Authentication Capabilities Command
        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
          static_cast<uint16_t>(command::NetFns::APP) | 0x38},
         &GetChannelCapabilities,
         session::Privilege::HIGHEST_MATCHING,
         true},
        // Set Session Privilege Command
        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
          static_cast<uint16_t>(command::NetFns::APP) | 0x3B},
         &setSessionPrivilegeLevel,
         session::Privilege::USER,
         false},
        // Close Session Command
        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
          static_cast<uint16_t>(command::NetFns::APP) | 0x3C},
         &closeSession,
         session::Privilege::CALLBACK,
         false},
    };

    for (auto& iter : commands)
    {
        std::get<command::Table&>(singletonPool)
            .registerCommand(iter.command,
                             std::make_unique<command::NetIpmidEntry>(
                                 iter.command, iter.functor, iter.privilege,
                                 iter.sessionless));
    }
}

} // namespace command
OpenPOWER on IntegriCloud