blob: 432bd68d38bc3053a6b475e0e8162105534c2bdd [file] [log] [blame]
Ratan Guptab8e99552017-07-27 07:07:48 +05301#pragma once
2
Ratan Gupta533d03b2017-07-30 10:39:22 +05303#include "types.hpp"
Ratan Guptab8e99552017-07-27 07:07:48 +05304#include <string>
Adriana Kobylak5d6481f2015-10-29 21:44:55 -05005// IPMI commands for Transport net functions.
6enum ipmi_netfn_storage_cmds
7{
8 // Get capability bits
9 IPMI_CMD_SET_LAN = 0x01,
10 IPMI_CMD_GET_LAN = 0x02,
11};
12
13// Command specific completion codes
14enum ipmi_transport_return_codes
15{
16 IPMI_CC_PARM_NOT_SUPPORTED = 0x80,
17};
18
Adriana Kobylake08fbc62016-02-09 16:17:23 -060019// Parameters
20static const int LAN_PARM_INPROGRESS = 0;
21static const int LAN_PARM_AUTHSUPPORT = 1;
22static const int LAN_PARM_AUTHENABLES = 2;
23static const int LAN_PARM_IP = 3;
Ratan Guptacc6cdbf2017-09-01 23:06:25 +053024static const int LAN_PARM_IPSRC = 4;
Adriana Kobylake08fbc62016-02-09 16:17:23 -060025static const int LAN_PARM_MAC = 5;
26static const int LAN_PARM_SUBNET = 6;
27static const int LAN_PARM_GATEWAY = 12;
Ratan Gupta533d03b2017-07-30 10:39:22 +053028static const int LAN_PARM_VLAN = 20;
Tom Josepha30c8d32018-03-22 02:15:03 +053029static const int CIPHER_SUITE_COUNT = 22;
30static const int CIPHER_SUITE_ENTRIES = 23;
Adriana Kobylake08fbc62016-02-09 16:17:23 -060031
Patrick Venture585a1e92017-11-17 07:36:15 -080032constexpr uint8_t SET_COMPLETE = 0;
33constexpr uint8_t SET_IN_PROGRESS = 1;
34constexpr uint8_t SET_COMMIT_WRITE = 2; //Optional
35constexpr uint8_t SET_IN_PROGRESS_RESERVED = 3; //Reserved
36
Patrick Venturec7c1c3c2017-11-15 14:29:18 -080037const int CHANNEL_MASK = 0x0f;
38const int NUM_CHANNELS = 0x0f;
39
Ratan Guptab8e99552017-07-27 07:07:48 +053040struct ChannelConfig_t
41{
42 std::string ipaddr;
Ratan Guptacc6cdbf2017-09-01 23:06:25 +053043 ipmi::network::IPOrigin ipsrc = ipmi::network::IPOrigin::UNSPECIFIED;
Ratan Guptab8e99552017-07-27 07:07:48 +053044 std::string netmask;
45 std::string gateway;
46 std::string macAddress;
Ratan Gupta533d03b2017-07-30 10:39:22 +053047 // IPMI stores the vlan info in 16 bits,32 bits is to aligned
48 // with phosphor-dbus interfaces.
49 // vlan id is in 12 bits and the 16th bit is for enable mask.
50 uint32_t vlanID = ipmi::network::VLAN_ID_MASK;
Patrick Venture585a1e92017-11-17 07:36:15 -080051 uint8_t lan_set_in_progress = SET_COMPLETE;
Ratan Gupta7a7f0122018-03-07 12:31:05 +053052 bool flush = false;
Ratan Gupta533d03b2017-07-30 10:39:22 +053053
Ratan Guptab8e99552017-07-27 07:07:48 +053054 void clear()
55 {
56 ipaddr.clear();
57 netmask.clear();
58 gateway.clear();
59 macAddress.clear();
Ratan Gupta533d03b2017-07-30 10:39:22 +053060 vlanID = ipmi::network::VLAN_ID_MASK;
Ratan Guptacc6cdbf2017-09-01 23:06:25 +053061 ipsrc = ipmi::network::IPOrigin::UNSPECIFIED;
Patrick Venture585a1e92017-11-17 07:36:15 -080062 lan_set_in_progress = SET_COMPLETE;
Ratan Gupta7a7f0122018-03-07 12:31:05 +053063 flush = false;
Ratan Guptab8e99552017-07-27 07:07:48 +053064 }
Nan Li3d0df912016-10-18 19:51:41 +080065};
Patrick Venturec7c1c3c2017-11-15 14:29:18 -080066
67// Given a channel, get the corresponding configuration,
68// or allocate it first.
69//
70// @param[in] channel the channel
71// @return the ChannelConfig_t pointer.
72struct ChannelConfig_t* getChannelConfig(int channel);
Ratan Gupta7a7f0122018-03-07 12:31:05 +053073
74/** @brief Iterate over all the channelconfig and if
75 * user has given the data for a channel then
76 * apply the network changes for that channel.
77 */
78void commitNetworkChanges();
79
80/* @brief Apply the network changes which is there in the
81 * network cache for a given channel which gets filled
82 * through setLan command. If some of the network
83 * parameter was not given by the setLan then this function
84 * gets the value of that parameter which is already
85 * configured on the system.
86 * @param[in] channel: channel number.
87 */
88void applyChanges(int channel);