1 #pragma once
2 
3 #include <ipmid/api-types.hpp>
4 #include <stdplus/zstring_view.hpp>
5 
6 #include <cstdint>
7 
8 namespace ipmi
9 {
10 namespace transport
11 {
12 
13 using stdplus::operator""_zsv;
14 
15 // D-Bus Network Daemon definitions
16 constexpr auto PATH_ROOT = "/xyz/openbmc_project/network"_zsv;
17 constexpr auto INTF_ETHERNET = "xyz.openbmc_project.Network.EthernetInterface";
18 constexpr auto INTF_IP = "xyz.openbmc_project.Network.IP";
19 constexpr auto INTF_IP_CREATE = "xyz.openbmc_project.Network.IP.Create";
20 constexpr auto INTF_MAC = "xyz.openbmc_project.Network.MACAddress";
21 constexpr auto INTF_NEIGHBOR = "xyz.openbmc_project.Network.Neighbor";
22 constexpr auto INTF_NEIGHBOR_CREATE_STATIC =
23     "xyz.openbmc_project.Network.Neighbor.CreateStatic";
24 constexpr auto INTF_VLAN = "xyz.openbmc_project.Network.VLAN";
25 constexpr auto INTF_VLAN_CREATE = "xyz.openbmc_project.Network.VLAN.Create";
26 
27 /** @brief IPMI LAN Parameters */
28 enum class LanParam : uint8_t
29 {
30     SetStatus = 0,
31     AuthSupport = 1,
32     AuthEnables = 2,
33     IP = 3,
34     IPSrc = 4,
35     MAC = 5,
36     SubnetMask = 6,
37     Gateway1 = 12,
38     Gateway1MAC = 13,
39     VLANId = 20,
40     CiphersuiteSupport = 22,
41     CiphersuiteEntries = 23,
42     cipherSuitePrivilegeLevels = 24,
43     IPFamilySupport = 50,
44     IPFamilyEnables = 51,
45     IPv6Status = 55,
46     IPv6StaticAddresses = 56,
47     IPv6DynamicAddresses = 59,
48     IPv6RouterControl = 64,
49     IPv6StaticRouter1IP = 65,
50     IPv6StaticRouter1MAC = 66,
51     IPv6StaticRouter1PrefixLength = 67,
52     IPv6StaticRouter1PrefixValue = 68,
53 };
54 
55 /** @brief IPMI IP Origin Types */
56 enum class IPSrc : uint8_t
57 {
58     Unspecified = 0,
59     Static = 1,
60     DHCP = 2,
61     BIOS = 3,
62     BMC = 4,
63 };
64 
65 /** @brief IPMI Set Status */
66 enum class SetStatus : uint8_t
67 {
68     Complete = 0,
69     InProgress = 1,
70     Commit = 2,
71 };
72 
73 /** @brief IPMI Family Suport Bits */
74 namespace IPFamilySupportFlag
75 {
76 constexpr uint8_t IPv6Only = 0;
77 constexpr uint8_t DualStack = 1;
78 constexpr uint8_t IPv6Alerts = 2;
79 } // namespace IPFamilySupportFlag
80 
81 /** @brief IPMI IPFamily Enables Flag */
82 enum class IPFamilyEnables : uint8_t
83 {
84     IPv4Only = 0,
85     IPv6Only = 1,
86     DualStack = 2,
87 };
88 
89 /** @brief IPMI IPv6 Dyanmic Status Bits */
90 namespace IPv6StatusFlag
91 {
92 constexpr uint8_t DHCP = 0;
93 constexpr uint8_t SLAAC = 1;
94 }; // namespace IPv6StatusFlag
95 
96 /** @brief IPMI IPv6 Source */
97 enum class IPv6Source : uint8_t
98 {
99     Static = 0,
100     SLAAC = 1,
101     DHCP = 2,
102 };
103 
104 /** @brief IPMI IPv6 Address Status */
105 enum class IPv6AddressStatus : uint8_t
106 {
107     Active = 0,
108     Disabled = 1,
109 };
110 
111 namespace IPv6RouterControlFlag
112 {
113 constexpr uint8_t Static = 0;
114 constexpr uint8_t Dynamic = 1;
115 }; // namespace IPv6RouterControlFlag
116 
117 // LAN Handler specific response codes
118 constexpr Cc ccParamNotSupported = 0x80;
119 constexpr Cc ccParamSetLocked = 0x81;
120 constexpr Cc ccParamReadOnly = 0x82;
121 
122 // VLANs are a 12-bit value
123 constexpr uint16_t VLAN_VALUE_MASK = 0x0fff;
124 constexpr uint16_t VLAN_ENABLE_FLAG = 0x8000;
125 
126 // Arbitrary v6 Address Limits to prevent too much output in ipmitool
127 constexpr uint8_t MAX_IPV6_STATIC_ADDRESSES = 15;
128 constexpr uint8_t MAX_IPV6_DYNAMIC_ADDRESSES = 15;
129 
130 // Prefix length limits of phosphor-networkd
131 constexpr uint8_t MIN_IPV4_PREFIX_LENGTH = 1;
132 constexpr uint8_t MAX_IPV4_PREFIX_LENGTH = 32;
133 constexpr uint8_t MIN_IPV6_PREFIX_LENGTH = 1;
134 constexpr uint8_t MAX_IPV6_PREFIX_LENGTH = 128;
135 
136 /** @enum SolConfParam
137  *
138  *  using for Set/Get SOL configuration parameters command.
139  */
140 enum class SolConfParam : uint8_t
141 {
142     Progress,       //!< Set In Progress.
143     Enable,         //!< SOL Enable.
144     Authentication, //!< SOL Authentication.
145     Accumulate,     //!< Character Accumulate Interval & Send Threshold.
146     Retry,          //!< SOL Retry.
147     NonVbitrate,    //!< SOL non-volatile bit rate.
148     Vbitrate,       //!< SOL volatile bit rate.
149     Channel,        //!< SOL payload channel.
150     Port,           //!< SOL payload port.
151 };
152 
153 constexpr uint8_t ipmiCCParamNotSupported = 0x80;
154 constexpr uint8_t ipmiCCWriteReadParameter = 0x82;
155 
156 } // namespace transport
157 } // namespace ipmi
158