Skip to content

Commit

Permalink
Integrated Rebootbackend changes
Browse files Browse the repository at this point in the history
  • Loading branch information
rkavitha-hcl authored and KAVITHA RAMALINGAM committed Nov 25, 2024
1 parent 80a586a commit f6fcecd
Show file tree
Hide file tree
Showing 11 changed files with 1,034 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/sonic-framework/rebootbackend/gnoi_reboot.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?ignore
XML representation of dbus interface created by: sonic-host-services/host_modules/gnoi_reboot.py

XML generated on switch by executing:
dbus-send --system --type=method_call --print-reply --dest=org.SONiC.HostService.gnoi_reboot /org/SONiC/HostService/gnoi_reboot org.freedesktop.DBus.Introspectable.Introspect

C++ header file generated by:
sudo apt-get install libdbus-c++-dev
dbusxx-xml2cpp ./gnoi_reboot.xml --proxy=gnoi_reboot_dbus.h
?>

<node name="/org/SONiC/HostService/gnoi_reboot">
<interface name="org.freedesktop.DBus.Introspectable">
<method name="Introspect">
<arg direction="out" type="s" />
</method>
</interface>
<interface name="org.SONiC.HostService.gnoi_reboot">
<method name="issue_reboot">
<arg direction="in" type="as" name="options" />
<arg direction="out" type="i" />
<arg direction="out" type="s" />
</method>
<method name="get_reboot_status">
<arg direction="out" type="i" />
<arg direction="out" type="s" />
</method>
</interface>
</node>

72 changes: 72 additions & 0 deletions src/sonic-framework/rebootbackend/interfaces.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#include "interfaces.h"

#include <dbus-c++/dbus.h> // DBus

//#include "component_state_helper.h"
#include "reboot_interfaces.h"

constexpr char kRebootBusName[] = "org.SONiC.HostService.gnoi_reboot";
constexpr char kRebootPath[] = "/org/SONiC/HostService/gnoi_reboot";

constexpr char kContainerShutdownBusName[] = "org.SONiC.HostService.gnoi_container_shutdown";
constexpr char kContainerShutdownPath[] = "/org/SONiC/HostService/gnoi_container_shutdown";

// DBus::BusDispatcher dispatcher;
DBus::Connection& HostServiceDbus::getConnection(void) {
static DBus::Connection* ConnPtr = nullptr;
if (ConnPtr == nullptr) {
static DBus::BusDispatcher dispatcher;
DBus::default_dispatcher = &dispatcher;

static DBus::Connection conn = DBus::Connection::SystemBus();
ConnPtr = &conn;
}
return *ConnPtr;
}

DbusInterface::DbusResponse HostServiceDbus::Reboot(
const std::string& jsonRebootRequest) {
int32_t status;

GnoiDbusReboot reboot_client(getConnection(), kRebootBusName, kRebootPath);
std::string retString;
std::vector<std::string> options;
options.push_back(jsonRebootRequest);
try {
reboot_client.issue_reboot(options, status, retString);
} catch (DBus::Error& ex) {
return DbusResponse{
DbusStatus::DBUS_FAIL,
"HostServiceDbus::Reboot: failed to call reboot host service"};
}

// gnoi_reboot.py returns 0 for success, 1 for failure
if (status == 0) {
// Successful reboot response is an empty string.
return DbusResponse{DbusStatus::DBUS_SUCCESS, ""};
}
return DbusResponse{DbusStatus::DBUS_FAIL, retString};
}

DbusInterface::DbusResponse HostServiceDbus::RebootStatus(
const std::string& jsonStatusRequest) {

GnoiDbusReboot reboot_client(getConnection(), kRebootBusName, kRebootPath);
int32_t status;
std::string retString;
try {
reboot_client.get_reboot_status(status, retString);
} catch (DBus::Error& ex) {
return DbusResponse{
DbusStatus::DBUS_FAIL,
"HostServiceDbus::RebootStatus: failed to call reboot status "
"host service"};
}

// gnoi_reboot.py returns 0 for success, 1 for failure
if (status == 0) {
return DbusResponse{DbusStatus::DBUS_SUCCESS, retString};
}
return DbusResponse{DbusStatus::DBUS_FAIL, retString};
}

27 changes: 27 additions & 0 deletions src/sonic-framework/rebootbackend/interfaces.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once
#include <dbus-c++/dbus.h>

#include <string>

#include "gnoi_reboot_dbus.h" // auto generated gnoi_reboot_proxy
#include "reboot_interfaces.h"

class GnoiDbusReboot : public org::SONiC::HostService::gnoi_reboot_proxy,
public DBus::IntrospectableProxy,
public DBus::ObjectProxy {
public:
GnoiDbusReboot(DBus::Connection& connection, const char* dbus_bus_name_p,
const char* dbus_obj_name_p)
: DBus::ObjectProxy(connection, dbus_obj_name_p, dbus_bus_name_p) {}
};

class HostServiceDbus : public DbusInterface {
public:
DbusInterface::DbusResponse Reboot(
const std::string& json_reboot_request) override;
DbusInterface::DbusResponse RebootStatus(
const std::string& json_status_request) override;

private:
static DBus::Connection& getConnection(void);
};
7 changes: 7 additions & 0 deletions src/sonic-framework/rebootbackend/reboot_common.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "reboot_common.h"


namespace rebootbackend {


} // namespace rebootbackend
17 changes: 17 additions & 0 deletions src/sonic-framework/rebootbackend/reboot_common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include <time.h>

#include "status_code_util.h"

namespace rebootbackend {

//extern bool sigterm_requested;
bool sigterm_requested = false;

struct NotificationResponse {
swss::StatusCode status;
std::string json_string;
};

} // namespace rebootbackend
21 changes: 21 additions & 0 deletions src/sonic-framework/rebootbackend/reboot_interfaces.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#pragma once

#include <string>

class DbusInterface {
public:
enum class DbusStatus {
DBUS_SUCCESS,
DBUS_FAIL,
};

struct DbusResponse {
DbusStatus status;
std::string json_string;
};

virtual ~DbusInterface() = default;
virtual DbusResponse Reboot(const std::string& jsonRebootRequest) = 0;
virtual DbusResponse RebootStatus(const std::string& jsonStatusRequest) = 0;
};

Loading

0 comments on commit f6fcecd

Please sign in to comment.