summaryrefslogtreecommitdiff
path: root/meta-ibs/meta-cp2-5422/recipes-phosphor/virtual-media/virtual-media/0015-virtual-media.1-Fix-Use-usb-ctrl-cdrom-is-pre-config.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-ibs/meta-cp2-5422/recipes-phosphor/virtual-media/virtual-media/0015-virtual-media.1-Fix-Use-usb-ctrl-cdrom-is-pre-config.patch')
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-phosphor/virtual-media/virtual-media/0015-virtual-media.1-Fix-Use-usb-ctrl-cdrom-is-pre-config.patch159
1 files changed, 159 insertions, 0 deletions
diff --git a/meta-ibs/meta-cp2-5422/recipes-phosphor/virtual-media/virtual-media/0015-virtual-media.1-Fix-Use-usb-ctrl-cdrom-is-pre-config.patch b/meta-ibs/meta-cp2-5422/recipes-phosphor/virtual-media/virtual-media/0015-virtual-media.1-Fix-Use-usb-ctrl-cdrom-is-pre-config.patch
new file mode 100644
index 0000000000..ae2bc7d5dd
--- /dev/null
+++ b/meta-ibs/meta-cp2-5422/recipes-phosphor/virtual-media/virtual-media/0015-virtual-media.1-Fix-Use-usb-ctrl-cdrom-is-pre-config.patch
@@ -0,0 +1,159 @@
+From c7755195ee7107a72bf40ad3101079f94cf015ae Mon Sep 17 00:00:00 2001
+From: Alexandr Ilenko <AIlenko@IBS.RU>
+Date: Fri, 24 Jun 2022 17:15:54 +0300
+Subject: [PATCH 15/20] virtual-media.1: Fix: Use "usb-ctrl" ("cdrom" is
+ pre-configured).
+
+---
+ src/configuration.hpp | 18 ++++++++++++++++++
+ src/state/initial_state.hpp | 31 ++++++++++++++++++++++++++++++-
+ src/system.hpp | 3 ---
+ virtual-media.json | 12 ++++++++----
+ 4 files changed, 56 insertions(+), 8 deletions(-)
+
+diff --git a/src/configuration.hpp b/src/configuration.hpp
+index efdddf2..0a713a5 100644
+--- a/src/configuration.hpp
++++ b/src/configuration.hpp
+@@ -36,6 +36,7 @@ class Configuration
+ static constexpr int defaultTimeout = 30;
+
+ NBDDevice nbdDevice;
++ std::string interfaceType;
+ std::string unixSocket;
+ std::string endPointId;
+ std::optional<int> timeout;
+@@ -142,6 +143,23 @@ class Configuration
+ continue;
+ }
+ };
++ const auto interfaceTypeIter =
++ mountpoint.value().find("InterfaceType");
++ if (interfaceTypeIter != mountpoint.value().cend())
++ {
++ const std::string* value =
++ interfaceTypeIter->get_ptr<const std::string*>();
++ if (value)
++ {
++ mp.interfaceType = *value;
++ }
++ else
++ {
++ LogMsg(Logger::Error,
++ "InterfaceType required, not set");
++ continue;
++ }
++ }
+ const auto unixSocketIter =
+ mountpoint.value().find("UnixSocket");
+ if (unixSocketIter != mountpoint.value().cend())
+diff --git a/src/state/initial_state.hpp b/src/state/initial_state.hpp
+index e0d8a5d..7f25fc7 100644
+--- a/src/state/initial_state.hpp
++++ b/src/state/initial_state.hpp
+@@ -249,11 +249,40 @@ struct InitialState : public BasicStateT<InitialState>
+ iface->register_method(
+ "Mount", [&machine = machine](boost::asio::yield_context yield,
+ std::string imgUrl, bool rw,
+- uint8_t type,
++ // This new argument requires 3-repos to be updated:
++ // uint8_t type,
++ // Let`s use original way:
++ // cdrom-type is pre-configured hardly
+ optional_fd fd) {
+ LogMsg(Logger::Info, "[App]: Mount called on ",
+ getObjectPath(machine), machine.getName());
+
++ uint8_t type = UsbGadget::interfaceTypeUSB;
++ // TODO: extract id<=>string mapping to proper place
++ static const std::map<std::string, uint8_t> vmInterfaces {
++ {"usb" , UsbGadget::interfaceTypeUSB, },
++ {"hdd" , UsbGadget::interfaceTypeHDD, },
++ {"cdrom", UsbGadget::interfaceTypeCDROM, },
++ };
++ const auto& interfaceTypeStr = machine.getConfig().interfaceType;
++ auto interfaceIt = vmInterfaces.find(interfaceTypeStr);
++ if (interfaceIt == vmInterfaces.end())
++ {
++ LogMsg(Logger::Error,
++ "[App]: Spiecifed unknown interface type: ", interfaceTypeStr);
++ interfaceIt = vmInterfaces.begin();
++ LogMsg(Logger::Warning,
++ "[App]: Forcly apply interface type: ", interfaceIt->first);
++ }
++ type = interfaceIt->second;
++
++ if (type == UsbGadget::interfaceTypeCDROM && rw)
++ {
++ LogMsg(Logger::Warning,
++ "[App]: Forcly apply read-only for cdrom: ");
++ rw = false;
++ }
++
+ interfaces::MountPointStateMachine::Target target = {
+ imgUrl, rw,
+ static_cast<UsbGadget::InterfaceType>(type),
+diff --git a/src/system.hpp b/src/system.hpp
+index 5dfb4df..33e3363 100644
+--- a/src/system.hpp
++++ b/src/system.hpp
+@@ -549,9 +549,6 @@ struct UsbGadget : private FsHelper
+
+ if (change == StateChange::inserted)
+ {
+- const std::string roConfPath = "/sys/kernel/config/usb_gadget/" +
+- name + "/functions/mass_storage." +
+- name + "/lun.0/ro";
+ // /usr/bin/usb-ctrl insert <name> <file> [<type=usb|usb-ro|hdd|cdrom>]
+ try
+ {
+diff --git a/virtual-media.json b/virtual-media.json
+index 79615c9..6d035f1 100644
+--- a/virtual-media.json
++++ b/virtual-media.json
+@@ -1,34 +1,38 @@
+ {
+ "InactivityTimeout": 1800,
+ "MountPoints": {
+- "USB0": {
++ "ISO0": {
+ "EndpointId": "/nbd/0",
+ "Mode": 0,
+ "NBDDevice": "nbd0",
++ "InterfaceType": "cdrom",
+ "UnixSocket": "/run/virtual-media/nbd0.sock",
+ "Timeout": 30,
+ "BlockSize": 512
+ },
+- "USB1": {
++ "USB0": {
+ "EndpointId": "/nbd/1",
+ "Mode": 0,
+ "NBDDevice": "nbd1",
++ "InterfaceType": "usb",
+ "UnixSocket": "/run/virtual-media/nbd1.sock",
+ "Timeout": 30,
+ "BlockSize": 512
+ },
+- "USB2": {
++ "ISO1": {
+ "EndpointId": "",
+ "Mode": 1,
+ "NBDDevice": "nbd2",
++ "InterfaceType": "cdrom",
+ "UnixSocket": "/run/virtual-media/nbd2.sock",
+ "Timeout": 90,
+ "BlockSize": 512
+ },
+- "USB3": {
++ "USB1": {
+ "EndpointId": "",
+ "Mode": 1,
+ "NBDDevice": "nbd3",
++ "InterfaceType": "usb",
+ "UnixSocket": "/run/virtual-media/nbd3.sock",
+ "Timeout": 90,
+ "BlockSize": 512
+--
+2.35.1
+