Ratan Gupta | b8e9955 | 2017-07-27 07:07:48 +0530 | [diff] [blame] | 1 | #pragma once |
| 2 | |
Vernon Mauery | 3325024 | 2019-03-12 16:49:26 -0700 | [diff] [blame] | 3 | #include <ipmid/types.hpp> |
Ratan Gupta | b8e9955 | 2017-07-27 07:07:48 +0530 | [diff] [blame] | 4 | #include <string> |
Adriana Kobylak | 5d6481f | 2015-10-29 21:44:55 -0500 | [diff] [blame] | 5 | // IPMI commands for Transport net functions. |
| 6 | enum 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 |
| 14 | enum ipmi_transport_return_codes |
| 15 | { |
| 16 | IPMI_CC_PARM_NOT_SUPPORTED = 0x80, |
| 17 | }; |
| 18 | |
Adriana Kobylak | e08fbc6 | 2016-02-09 16:17:23 -0600 | [diff] [blame] | 19 | // Parameters |
William A. Kennington III | aab2023 | 2018-11-19 18:20:39 -0800 | [diff] [blame] | 20 | enum class LanParam : uint8_t |
William A. Kennington III | 7a3479e | 2018-11-19 17:41:20 -0800 | [diff] [blame] | 21 | { |
William A. Kennington III | aab2023 | 2018-11-19 18:20:39 -0800 | [diff] [blame] | 22 | INPROGRESS = 0, |
Patrick Venture | fc71115 | 2019-01-30 08:59:21 -0800 | [diff] [blame] | 23 | AUTHSUPPORT = 1, // Read-only |
William A. Kennington III | aab2023 | 2018-11-19 18:20:39 -0800 | [diff] [blame] | 24 | AUTHENABLES = 2, |
| 25 | IP = 3, |
| 26 | IPSRC = 4, |
| 27 | MAC = 5, |
| 28 | SUBNET = 6, |
Patrick Venture | fc71115 | 2019-01-30 08:59:21 -0800 | [diff] [blame] | 29 | IPHEADER_PARAMS = 7, |
| 30 | RMCP_PORT = 8, |
| 31 | RMCP_SECONDARY_PORT = 9, |
| 32 | BMC_GENERATED_ARP_CTRL = 10, |
| 33 | GRATUITOUS_ARP_INTERVAL = 11, |
William A. Kennington III | aab2023 | 2018-11-19 18:20:39 -0800 | [diff] [blame] | 34 | GATEWAY = 12, |
Patrick Venture | fc71115 | 2019-01-30 08:59:21 -0800 | [diff] [blame] | 35 | GATEWAY_MAC = 13, |
| 36 | GATEWAY_BACKUP = 14, |
| 37 | GATEWAY_BACKUP_MAC = 15, |
| 38 | COMMUNITY_STRING = 16, |
| 39 | LAN_ALERT_DESTINATION_COUNT = 17, // Read-only |
| 40 | LAN_ALERT_DESTINATION_TYPE = 18, // Type per destination |
| 41 | LAN_ALERT_DESTINATIONS = 19, |
William A. Kennington III | aab2023 | 2018-11-19 18:20:39 -0800 | [diff] [blame] | 42 | VLAN = 20, |
Patrick Venture | fc71115 | 2019-01-30 08:59:21 -0800 | [diff] [blame] | 43 | VLAN_PRIORITY = 21, |
| 44 | CIPHER_SUITE_COUNT = 22, // Read-only |
| 45 | CIPHER_SUITE_ENTRIES = 23, // Read-only |
| 46 | CIPHER_SUITE_PRIVILEGE_LEVELS = 24, |
| 47 | DESTINATION_ADDR_VLAN_TAGS = 25, |
| 48 | BAD_PASSWORD_THRESHOLD = 26, |
| 49 | IPV6_AND_IPV4_SUPPORTED = 50, // Read-only |
| 50 | IPV6_AND_IPV4_ENABLES = 51, |
| 51 | IPV6_HEADER_STATIC_TRAFFIC_CLASS = 52, |
| 52 | IPV6_HEADER_STATIC_HOP_LIMIT = 53, |
| 53 | IPV6_HEADER_FLOW_LABEL = 54, |
| 54 | IPV6_STATUS = 55, // Read-only |
| 55 | IPV6_STATIC_ADDRESSES = 56, |
| 56 | IPV6_DHCPV6_STATIC_DUID_STORAGE_LENGTH = 57, // Read-only |
| 57 | IPV6_DHCPV6_STATIC_DUIDS = 58, |
| 58 | IPV6_DYNAMIC_ADDRESSES = 59, // Read-only |
| 59 | IPV6_DHCPV6_DYNAMIC_DUID_STOR_LEN = 60, // Read-only |
| 60 | IPV6_DHCPV6_DYNAMIC_DUIDS = 61, |
| 61 | IPV6_DHCPV6_TIMING_CONF_SUPPORT = 62, // Read-only |
| 62 | IPV6_DHCPV6_TIMING_CONFIGURATION = 63, |
| 63 | IPV6_ROUTER_ADDRESS_CONF_CTRL = 64, |
| 64 | IPV6_STATIC_ROUTER_1_IP_ADDR = 65, |
| 65 | IPV6_STATIC_ROUTER_1_MAC_ADDR = 66, |
| 66 | IPV6_STATIC_ROUTER_1_PREFIX_LEN = 67, |
| 67 | IPV6_STATIC_ROUTER_1_PREFIX_VAL = 68, |
| 68 | IPV6_STATIC_ROUTER_2_IP_ADDR = 69, |
| 69 | IPV6_STATIC_ROUTER_2_MAC_ADDR = 70, |
| 70 | IPV6_STATIC_ROUTER_2_PREFIX_LEN = 71, |
| 71 | IPV6_STATIC_ROUTER_2_PREFIX_VAL = 72, |
| 72 | DYNAMIC_ROUTER_INFO_SET_COUNT = 73, // Read-only |
| 73 | IPV6_DYNAMIC_ROUTER_INFO_IP_ADDR = 74, // Read-only |
| 74 | IPV6_DYNAMIC_ROUTER_INFO_MAC = 75, // Read-only |
| 75 | IPV6_DYNAMIC_ROUTER_INFO_PREFIX_LEN = 76, // Read-only |
| 76 | IPV6_DYNAMIC_ROUTER_INFO_PREFIX_VAL = 77, // Read-only |
| 77 | IPV6_DYNAMIC_ROUTER_RECV_HOP_LIMIT = 78, |
| 78 | IPV6_NEIGHBOR_TIMING_CONF_SUPPORT = 79, // Read-only |
| 79 | IPV6_NEIGHBOR_TIMING_CONFIGURATION = 80, |
William A. Kennington III | 7a3479e | 2018-11-19 17:41:20 -0800 | [diff] [blame] | 80 | }; |
Adriana Kobylak | e08fbc6 | 2016-02-09 16:17:23 -0600 | [diff] [blame] | 81 | |
Suryakanth Sekar | 0a327e1 | 2019-08-08 14:30:19 +0530 | [diff] [blame] | 82 | // Data length of parameters |
| 83 | constexpr size_t lanParamVLANSize = 4; |
Patrick Venture | 585a1e9 | 2017-11-17 07:36:15 -0800 | [diff] [blame] | 84 | constexpr uint8_t SET_COMPLETE = 0; |
| 85 | constexpr uint8_t SET_IN_PROGRESS = 1; |
Patrick Venture | 0b02be9 | 2018-08-31 11:55:55 -0700 | [diff] [blame] | 86 | constexpr uint8_t SET_COMMIT_WRITE = 2; // Optional |
| 87 | constexpr uint8_t SET_IN_PROGRESS_RESERVED = 3; // Reserved |
Patrick Venture | 585a1e9 | 2017-11-17 07:36:15 -0800 | [diff] [blame] | 88 | |
Patrick Venture | c7c1c3c | 2017-11-15 14:29:18 -0800 | [diff] [blame] | 89 | const int CHANNEL_MASK = 0x0f; |
| 90 | const int NUM_CHANNELS = 0x0f; |
| 91 | |
Ratan Gupta | b8e9955 | 2017-07-27 07:07:48 +0530 | [diff] [blame] | 92 | struct ChannelConfig_t |
| 93 | { |
| 94 | std::string ipaddr; |
Ratan Gupta | cc6cdbf | 2017-09-01 23:06:25 +0530 | [diff] [blame] | 95 | ipmi::network::IPOrigin ipsrc = ipmi::network::IPOrigin::UNSPECIFIED; |
Ratan Gupta | b8e9955 | 2017-07-27 07:07:48 +0530 | [diff] [blame] | 96 | std::string netmask; |
| 97 | std::string gateway; |
| 98 | std::string macAddress; |
Ratan Gupta | 533d03b | 2017-07-30 10:39:22 +0530 | [diff] [blame] | 99 | // IPMI stores the vlan info in 16 bits,32 bits is to aligned |
| 100 | // with phosphor-dbus interfaces. |
| 101 | // vlan id is in 12 bits and the 16th bit is for enable mask. |
| 102 | uint32_t vlanID = ipmi::network::VLAN_ID_MASK; |
Patrick Venture | 585a1e9 | 2017-11-17 07:36:15 -0800 | [diff] [blame] | 103 | uint8_t lan_set_in_progress = SET_COMPLETE; |
Ratan Gupta | 7a7f012 | 2018-03-07 12:31:05 +0530 | [diff] [blame] | 104 | bool flush = false; |
Ratan Gupta | 533d03b | 2017-07-30 10:39:22 +0530 | [diff] [blame] | 105 | |
Ratan Gupta | b8e9955 | 2017-07-27 07:07:48 +0530 | [diff] [blame] | 106 | void clear() |
| 107 | { |
| 108 | ipaddr.clear(); |
| 109 | netmask.clear(); |
| 110 | gateway.clear(); |
| 111 | macAddress.clear(); |
Ratan Gupta | 533d03b | 2017-07-30 10:39:22 +0530 | [diff] [blame] | 112 | vlanID = ipmi::network::VLAN_ID_MASK; |
Ratan Gupta | cc6cdbf | 2017-09-01 23:06:25 +0530 | [diff] [blame] | 113 | ipsrc = ipmi::network::IPOrigin::UNSPECIFIED; |
Patrick Venture | 585a1e9 | 2017-11-17 07:36:15 -0800 | [diff] [blame] | 114 | lan_set_in_progress = SET_COMPLETE; |
Ratan Gupta | 7a7f012 | 2018-03-07 12:31:05 +0530 | [diff] [blame] | 115 | flush = false; |
Ratan Gupta | b8e9955 | 2017-07-27 07:07:48 +0530 | [diff] [blame] | 116 | } |
Nan Li | 3d0df91 | 2016-10-18 19:51:41 +0800 | [diff] [blame] | 117 | }; |
Patrick Venture | c7c1c3c | 2017-11-15 14:29:18 -0800 | [diff] [blame] | 118 | |
| 119 | // Given a channel, get the corresponding configuration, |
| 120 | // or allocate it first. |
| 121 | // |
| 122 | // @param[in] channel the channel |
| 123 | // @return the ChannelConfig_t pointer. |
| 124 | struct ChannelConfig_t* getChannelConfig(int channel); |
Ratan Gupta | 7a7f012 | 2018-03-07 12:31:05 +0530 | [diff] [blame] | 125 | |
| 126 | /** @brief Iterate over all the channelconfig and if |
| 127 | * user has given the data for a channel then |
| 128 | * apply the network changes for that channel. |
| 129 | */ |
| 130 | void commitNetworkChanges(); |
| 131 | |
| 132 | /* @brief Apply the network changes which is there in the |
| 133 | * network cache for a given channel which gets filled |
| 134 | * through setLan command. If some of the network |
| 135 | * parameter was not given by the setLan then this function |
| 136 | * gets the value of that parameter which is already |
| 137 | * configured on the system. |
| 138 | * @param[in] channel: channel number. |
| 139 | */ |
| 140 | void applyChanges(int channel); |
Suryakanth Sekar | 0a327e1 | 2019-08-08 14:30:19 +0530 | [diff] [blame] | 141 | constexpr uint16_t maxValidVLANIDValue = 4095; |