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