Add LLDP configuration support
This commit implements EmitLLDP D-bus property to support configuration
of enable/disable LLDP of each ethernet interface.
Tested by:
Set EmitLLDP D-bus property on
xyz.openbmc_project.Network.EthernetInterface
Change-Id: I4ebedff9d3f914219f2f84c861fdee126584a94b
Signed-off-by: Ravi Teja <raviteja28031990@gmail.com>
diff --git a/src/util.cpp b/src/util.cpp
index edee79a..ac4d1b4 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -15,6 +15,7 @@
#include <xyz/openbmc_project/Common/error.hpp>
#include <cctype>
+#include <fstream>
#include <string>
#include <string_view>
@@ -26,6 +27,7 @@
using std::literals::string_view_literals::operator""sv;
using namespace phosphor::logging;
using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+static constexpr std::string_view lldpdConfigFilePath = "/etc/lldpd.conf";
namespace internal
{
@@ -226,5 +228,42 @@
.value_or(true);
}
+std::map<std::string, bool> parseLLDPConf()
+{
+ std::ifstream lldpdConfig(lldpdConfigFilePath.data());
+ std::map<std::string, bool> portStatus;
+
+ if (!lldpdConfig.is_open())
+ {
+ return portStatus;
+ }
+
+ std::string line;
+ while (std::getline(lldpdConfig, line))
+ {
+ std::string configurePortsStr = "configure ports ";
+ std::string lldpStatusStr = "lldp status ";
+ size_t portStart = line.find(configurePortsStr);
+ if (portStart != std::string::npos)
+ {
+ portStart += configurePortsStr.size();
+ size_t portEnd = line.find(' ', portStart);
+ if (portEnd == std::string::npos)
+ {
+ portEnd = line.length();
+ }
+ std::string portName = line.substr(portStart, portEnd - portStart);
+ size_t pos = line.find(lldpStatusStr);
+ if (pos != std::string::npos)
+ {
+ std::string statusStr = line.substr(pos + lldpStatusStr.size());
+ portStatus[portName] = (statusStr == "disabled") ? false : true;
+ }
+ }
+ }
+ lldpdConfig.close();
+ return portStatus;
+}
+
} // namespace network
} // namespace phosphor