1 #pragma once
2 #include <nlohmann/json.hpp>
3 
4 namespace port
5 {
6 // clang-format off
7 
8 enum class PortType{
9     Invalid,
10     UpstreamPort,
11     DownstreamPort,
12     InterswitchPort,
13     ManagementPort,
14     BidirectionalPort,
15     UnconfiguredPort,
16 };
17 
18 enum class PortMedium{
19     Invalid,
20     Electrical,
21     Optical,
22 };
23 
24 enum class LinkState{
25     Invalid,
26     Enabled,
27     Disabled,
28 };
29 
30 enum class LinkStatus{
31     Invalid,
32     LinkUp,
33     Starting,
34     Training,
35     LinkDown,
36     NoLink,
37 };
38 
39 enum class LinkNetworkTechnology{
40     Invalid,
41     Ethernet,
42     InfiniBand,
43     FibreChannel,
44     GenZ,
45 };
46 
47 enum class PortConnectionType{
48     Invalid,
49     NotConnected,
50     NPort,
51     PointToPoint,
52     PrivateLoop,
53     PublicLoop,
54     Generic,
55     ExtenderFabric,
56     FPort,
57     EPort,
58     TEPort,
59     NPPort,
60     GPort,
61     NLPort,
62     FLPort,
63     EXPort,
64     UPort,
65     DPort,
66 };
67 
68 enum class SupportedEthernetCapabilities{
69     Invalid,
70     WakeOnLAN,
71     EEE,
72 };
73 
74 enum class FlowControl{
75     Invalid,
76     None,
77     TX,
78     RX,
79     TX_RX,
80 };
81 
82 enum class IEEE802IdSubtype{
83     Invalid,
84     ChassisComp,
85     IfAlias,
86     PortComp,
87     MacAddr,
88     NetworkAddr,
89     IfName,
90     AgentId,
91     LocalAssign,
92     NotTransmitted,
93 };
94 
95 enum class SFPType{
96     Invalid,
97     SFP,
98     SFPPlus,
99     SFP28,
100     cSFP,
101     SFPDD,
102     QSFP,
103     QSFPPlus,
104     QSFP14,
105     QSFP28,
106     QSFP56,
107     MiniSASHD,
108 };
109 
110 enum class MediumType{
111     Invalid,
112     Copper,
113     FiberOptic,
114 };
115 
116 enum class FiberConnectionType{
117     Invalid,
118     SingleMode,
119     MultiMode,
120 };
121 
122 NLOHMANN_JSON_SERIALIZE_ENUM(PortType, {
123     {PortType::Invalid, "Invalid"},
124     {PortType::UpstreamPort, "UpstreamPort"},
125     {PortType::DownstreamPort, "DownstreamPort"},
126     {PortType::InterswitchPort, "InterswitchPort"},
127     {PortType::ManagementPort, "ManagementPort"},
128     {PortType::BidirectionalPort, "BidirectionalPort"},
129     {PortType::UnconfiguredPort, "UnconfiguredPort"},
130 });
131 
132 NLOHMANN_JSON_SERIALIZE_ENUM(PortMedium, {
133     {PortMedium::Invalid, "Invalid"},
134     {PortMedium::Electrical, "Electrical"},
135     {PortMedium::Optical, "Optical"},
136 });
137 
138 NLOHMANN_JSON_SERIALIZE_ENUM(LinkState, {
139     {LinkState::Invalid, "Invalid"},
140     {LinkState::Enabled, "Enabled"},
141     {LinkState::Disabled, "Disabled"},
142 });
143 
144 NLOHMANN_JSON_SERIALIZE_ENUM(LinkStatus, {
145     {LinkStatus::Invalid, "Invalid"},
146     {LinkStatus::LinkUp, "LinkUp"},
147     {LinkStatus::Starting, "Starting"},
148     {LinkStatus::Training, "Training"},
149     {LinkStatus::LinkDown, "LinkDown"},
150     {LinkStatus::NoLink, "NoLink"},
151 });
152 
153 NLOHMANN_JSON_SERIALIZE_ENUM(LinkNetworkTechnology, {
154     {LinkNetworkTechnology::Invalid, "Invalid"},
155     {LinkNetworkTechnology::Ethernet, "Ethernet"},
156     {LinkNetworkTechnology::InfiniBand, "InfiniBand"},
157     {LinkNetworkTechnology::FibreChannel, "FibreChannel"},
158     {LinkNetworkTechnology::GenZ, "GenZ"},
159 });
160 
161 NLOHMANN_JSON_SERIALIZE_ENUM(PortConnectionType, {
162     {PortConnectionType::Invalid, "Invalid"},
163     {PortConnectionType::NotConnected, "NotConnected"},
164     {PortConnectionType::NPort, "NPort"},
165     {PortConnectionType::PointToPoint, "PointToPoint"},
166     {PortConnectionType::PrivateLoop, "PrivateLoop"},
167     {PortConnectionType::PublicLoop, "PublicLoop"},
168     {PortConnectionType::Generic, "Generic"},
169     {PortConnectionType::ExtenderFabric, "ExtenderFabric"},
170     {PortConnectionType::FPort, "FPort"},
171     {PortConnectionType::EPort, "EPort"},
172     {PortConnectionType::TEPort, "TEPort"},
173     {PortConnectionType::NPPort, "NPPort"},
174     {PortConnectionType::GPort, "GPort"},
175     {PortConnectionType::NLPort, "NLPort"},
176     {PortConnectionType::FLPort, "FLPort"},
177     {PortConnectionType::EXPort, "EXPort"},
178     {PortConnectionType::UPort, "UPort"},
179     {PortConnectionType::DPort, "DPort"},
180 });
181 
182 NLOHMANN_JSON_SERIALIZE_ENUM(SupportedEthernetCapabilities, {
183     {SupportedEthernetCapabilities::Invalid, "Invalid"},
184     {SupportedEthernetCapabilities::WakeOnLAN, "WakeOnLAN"},
185     {SupportedEthernetCapabilities::EEE, "EEE"},
186 });
187 
188 NLOHMANN_JSON_SERIALIZE_ENUM(FlowControl, {
189     {FlowControl::Invalid, "Invalid"},
190     {FlowControl::None, "None"},
191     {FlowControl::TX, "TX"},
192     {FlowControl::RX, "RX"},
193     {FlowControl::TX_RX, "TX_RX"},
194 });
195 
196 NLOHMANN_JSON_SERIALIZE_ENUM(IEEE802IdSubtype, {
197     {IEEE802IdSubtype::Invalid, "Invalid"},
198     {IEEE802IdSubtype::ChassisComp, "ChassisComp"},
199     {IEEE802IdSubtype::IfAlias, "IfAlias"},
200     {IEEE802IdSubtype::PortComp, "PortComp"},
201     {IEEE802IdSubtype::MacAddr, "MacAddr"},
202     {IEEE802IdSubtype::NetworkAddr, "NetworkAddr"},
203     {IEEE802IdSubtype::IfName, "IfName"},
204     {IEEE802IdSubtype::AgentId, "AgentId"},
205     {IEEE802IdSubtype::LocalAssign, "LocalAssign"},
206     {IEEE802IdSubtype::NotTransmitted, "NotTransmitted"},
207 });
208 
209 NLOHMANN_JSON_SERIALIZE_ENUM(SFPType, {
210     {SFPType::Invalid, "Invalid"},
211     {SFPType::SFP, "SFP"},
212     {SFPType::SFPPlus, "SFPPlus"},
213     {SFPType::SFP28, "SFP28"},
214     {SFPType::cSFP, "cSFP"},
215     {SFPType::SFPDD, "SFPDD"},
216     {SFPType::QSFP, "QSFP"},
217     {SFPType::QSFPPlus, "QSFPPlus"},
218     {SFPType::QSFP14, "QSFP14"},
219     {SFPType::QSFP28, "QSFP28"},
220     {SFPType::QSFP56, "QSFP56"},
221     {SFPType::MiniSASHD, "MiniSASHD"},
222 });
223 
224 NLOHMANN_JSON_SERIALIZE_ENUM(MediumType, {
225     {MediumType::Invalid, "Invalid"},
226     {MediumType::Copper, "Copper"},
227     {MediumType::FiberOptic, "FiberOptic"},
228 });
229 
230 NLOHMANN_JSON_SERIALIZE_ENUM(FiberConnectionType, {
231     {FiberConnectionType::Invalid, "Invalid"},
232     {FiberConnectionType::SingleMode, "SingleMode"},
233     {FiberConnectionType::MultiMode, "MultiMode"},
234 });
235 
236 }
237 // clang-format on
238