summaryrefslogtreecommitdiff
path: root/src/system.hpp
diff options
context:
space:
mode:
authorAgata Olender <agata.olender@intel.com>2020-01-13 17:57:37 +0300
committerOlender, Agata <agata.olender@intel.com>2020-02-06 12:07:57 +0300
commitbb43fd537ccb83e3188717ea77a58e3929a5445c (patch)
tree498fa5f08089f9adcbb1e89bf2ef4db4e355b6e2 /src/system.hpp
parentb9a4ef7fd96aeda3e311993810c68bbb6553f3c2 (diff)
downloadvirtual-media-bb43fd537ccb83e3188717ea77a58e3929a5445c.tar.xz
Integration with NBDKit for Legacy mode
This change introduces integration of virtual-media application with NBDKit. NBDKit is used here to connect to externally provided image on web and expose NBD device internally in BMC for NBD subsystem (already implemented in Proxy mode) to use. 'Mount' D-Bus call accepts 's imgUrl' and 'b rw'. Based on 's imgUrl' prefix (https:// or smb://) proper mount type is attempted. 'b rw' determines Read-Only mode for both USB Gadget and NBD stack. When 'Mount' is called, virtual-media parses arguments, determines mounting options and attempts to mount external share. For SMB protocol native CIFS Linux module is used: 1) mount(8) call is used to mound provided CIFS share 2) NBDKit loads file on mounted filesystem and exposes NBD Server on internal unix socket 3) Pre-existing code takes care of mouting gadget automatically (connecting socket to /dev/nbdX and then /dev/nbdX to USB Gadget) For HTTPS protocol provisioning is performed by NBDKit: 1) NBDKit connects to provided resource and exposes NBD Server on internal unix socket 2) Pre-existing code takes care of mouting gadget automatically (connecting socket to /dev/nbdX and then /dev/nbdX to USB Gadget) Tested: Manual and automated tests on WilsonCity platform: - mounting and unmounting images over CIFS and HTTPS (single, multiple at the same time etc) - positive and negative tests for D-Bus calls - ensuring proper information is exposed on D-Bus Change-Id: Ia2b6e8c13603521063f5c94cdfdb06f2e872e9e7 Signed-off-by: Adrian Ambrożewicz <adrian.ambrozewicz@linux.intel.com> Signed-off-by: Agata Olender <agata.olender@intel.com>
Diffstat (limited to 'src/system.hpp')
-rw-r--r--src/system.hpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/system.hpp b/src/system.hpp
index ae8a486..500630f 100644
--- a/src/system.hpp
+++ b/src/system.hpp
@@ -349,9 +349,9 @@ class Process : public std::enable_shared_from_this<Process>
{
public:
Process(boost::asio::io_context& ioc, const std::string& name,
- const NBDDevice& dev) :
+ const std::string& app, const NBDDevice& dev) :
ioc(ioc),
- pipe(ioc), name(name), dev(dev)
+ pipe(ioc), name(name), app(app), dev(dev)
{
}
@@ -359,9 +359,9 @@ class Process : public std::enable_shared_from_this<Process>
bool spawn(const std::vector<std::string>& args, ExitCb&& onExit)
{
std::error_code ec;
- LogMsg(Logger::Info, "[Process]: Spawning nbd-client (", args, ")");
+ LogMsg(Logger::Info, "[Process]: Spawning ", app, " (", args, ")");
child = boost::process::child(
- "/usr/sbin/nbd-client", boost::process::args(args),
+ app, boost::process::args(args),
(boost::process::std_out & boost::process::std_err) > pipe, ec,
ioc);
@@ -459,11 +459,17 @@ class Process : public std::enable_shared_from_this<Process>
});
}
+ std::string application()
+ {
+ return app;
+ }
+
private:
boost::asio::io_context& ioc;
boost::process::child child;
boost::process::async_pipe pipe;
std::string name;
+ std::string app;
const NBDDevice& dev;
};
@@ -483,13 +489,13 @@ struct UsbGadget
public:
static int32_t configure(const std::string& name, const NBDDevice& nbd,
- StateChange change)
+ StateChange change, const bool rw = false)
{
- return configure(name, nbd.to_path(), change);
+ return configure(name, nbd.to_path(), change, rw);
}
static int32_t configure(const std::string& name, const fs::path& path,
- StateChange change)
+ StateChange change, const bool rw = false)
{
LogMsg(Logger::Info, "[App]: Configure USB Gadget (name=", name,
", path=", path, ", State=", static_cast<uint32_t>(change), ")");
@@ -528,7 +534,7 @@ struct UsbGadget
fs::create_directory_symlink(funcMassStorageDir,
massStorageDir);
echoToFile(funcMassStorageDir / "lun.0/removable", "1");
- echoToFile(funcMassStorageDir / "lun.0/ro", "1");
+ echoToFile(funcMassStorageDir / "lun.0/ro", rw ? "0" : "1");
echoToFile(funcMassStorageDir / "lun.0/cdrom", "0");
echoToFile(funcMassStorageDir / "lun.0/file", path);