LINT: Add cpplint, clang-format and pre-commit support
Change-Id: I3cbb787ef27d90486b212dfb1a8c77c460acc2ac Signed-off-by: Galantsev, Dmitrii <dmitrii.galantsev@amd.com>
This commit is contained in:
Executable → Regular
+7
-6
@@ -23,19 +23,20 @@ THE SOFTWARE.
|
||||
#define SERVER_INCLUDE_RDC_RDC_ADMIN_SERVICE_H_
|
||||
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
#include "rdc/rdc_admin_service.h"
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
|
||||
namespace amd {
|
||||
namespace rdc {
|
||||
|
||||
class RDCAdminServiceImpl final : public ::rdc::RdcAdmin::Service {
|
||||
public:
|
||||
RDCAdminServiceImpl();
|
||||
~RDCAdminServiceImpl();
|
||||
::grpc::Status VerifyConnection(::grpc::ServerContext* context,
|
||||
const ::rdc::VerifyConnectionRequest* request,
|
||||
::rdc::VerifyConnectionResponse* reply) override;
|
||||
RDCAdminServiceImpl();
|
||||
~RDCAdminServiceImpl();
|
||||
::grpc::Status VerifyConnection(::grpc::ServerContext* context,
|
||||
const ::rdc::VerifyConnectionRequest* request,
|
||||
::rdc::VerifyConnectionResponse* reply) override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
Executable → Regular
+69
-76
@@ -30,108 +30,101 @@ namespace rdc {
|
||||
|
||||
class RdcAPIServiceImpl final : public ::rdc::RdcAPI::Service {
|
||||
public:
|
||||
RdcAPIServiceImpl();
|
||||
~RdcAPIServiceImpl();
|
||||
RdcAPIServiceImpl();
|
||||
~RdcAPIServiceImpl();
|
||||
|
||||
rdc_status_t Initialize(uint64_t rdcd_init_flags = 0);
|
||||
rdc_status_t Initialize(uint64_t rdcd_init_flags = 0);
|
||||
|
||||
::grpc::Status GetAllDevices(::grpc::ServerContext* context,
|
||||
const ::rdc::Empty* request,
|
||||
::rdc::GetAllDevicesResponse* reply) override;
|
||||
::grpc::Status GetAllDevices(::grpc::ServerContext* context, const ::rdc::Empty* request,
|
||||
::rdc::GetAllDevicesResponse* reply) override;
|
||||
|
||||
::grpc::Status GetDeviceAttributes(::grpc::ServerContext* context,
|
||||
const ::rdc::GetDeviceAttributesRequest* request,
|
||||
::rdc::GetDeviceAttributesResponse* reply) override;
|
||||
::grpc::Status GetDeviceAttributes(::grpc::ServerContext* context,
|
||||
const ::rdc::GetDeviceAttributesRequest* request,
|
||||
::rdc::GetDeviceAttributesResponse* reply) override;
|
||||
|
||||
::grpc::Status CreateGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::CreateGpuGroupRequest* request,
|
||||
::rdc::CreateGpuGroupResponse* reply) override;
|
||||
::grpc::Status CreateGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::CreateGpuGroupRequest* request,
|
||||
::rdc::CreateGpuGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status AddToGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::AddToGpuGroupRequest* request,
|
||||
::rdc::AddToGpuGroupResponse* reply) override;
|
||||
::grpc::Status AddToGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::AddToGpuGroupRequest* request,
|
||||
::rdc::AddToGpuGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status GetGpuGroupInfo(::grpc::ServerContext* context,
|
||||
const ::rdc::GetGpuGroupInfoRequest* request,
|
||||
::rdc::GetGpuGroupInfoResponse* reply) override;
|
||||
::grpc::Status GetGpuGroupInfo(::grpc::ServerContext* context,
|
||||
const ::rdc::GetGpuGroupInfoRequest* request,
|
||||
::rdc::GetGpuGroupInfoResponse* reply) override;
|
||||
|
||||
::grpc::Status GetGroupAllIds(::grpc::ServerContext* context,
|
||||
const ::rdc::Empty* request,
|
||||
::rdc::GetGroupAllIdsResponse* reply) override;
|
||||
::grpc::Status GetGroupAllIds(::grpc::ServerContext* context, const ::rdc::Empty* request,
|
||||
::rdc::GetGroupAllIdsResponse* reply) override;
|
||||
|
||||
::grpc::Status DestroyGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::DestroyGpuGroupRequest* request,
|
||||
::rdc::DestroyGpuGroupResponse* reply) override;
|
||||
::grpc::Status DestroyGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::DestroyGpuGroupRequest* request,
|
||||
::rdc::DestroyGpuGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status CreateFieldGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::CreateFieldGroupRequest* request,
|
||||
::rdc::CreateFieldGroupResponse* reply) override;
|
||||
::grpc::Status CreateFieldGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::CreateFieldGroupRequest* request,
|
||||
::rdc::CreateFieldGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status GetFieldGroupInfo(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFieldGroupInfoRequest* request,
|
||||
::rdc::GetFieldGroupInfoResponse* reply) override;
|
||||
::grpc::Status GetFieldGroupInfo(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFieldGroupInfoRequest* request,
|
||||
::rdc::GetFieldGroupInfoResponse* reply) override;
|
||||
|
||||
::grpc::Status GetFieldGroupAllIds(::grpc::ServerContext* context,
|
||||
const ::rdc::Empty* request,
|
||||
::rdc::GetFieldGroupAllIdsResponse* reply) override;
|
||||
::grpc::Status GetFieldGroupAllIds(::grpc::ServerContext* context, const ::rdc::Empty* request,
|
||||
::rdc::GetFieldGroupAllIdsResponse* reply) override;
|
||||
|
||||
::grpc::Status DestroyFieldGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::DestroyFieldGroupRequest* request,
|
||||
::rdc::DestroyFieldGroupResponse* reply) override;
|
||||
::grpc::Status DestroyFieldGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::DestroyFieldGroupRequest* request,
|
||||
::rdc::DestroyFieldGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status WatchFields(::grpc::ServerContext* context,
|
||||
const ::rdc::WatchFieldsRequest* request,
|
||||
::rdc::WatchFieldsResponse* reply) override;
|
||||
::grpc::Status WatchFields(::grpc::ServerContext* context,
|
||||
const ::rdc::WatchFieldsRequest* request,
|
||||
::rdc::WatchFieldsResponse* reply) override;
|
||||
|
||||
::grpc::Status GetLatestFieldValue(::grpc::ServerContext* context,
|
||||
const ::rdc::GetLatestFieldValueRequest* request,
|
||||
::rdc::GetLatestFieldValueResponse* reply) override;
|
||||
::grpc::Status GetLatestFieldValue(::grpc::ServerContext* context,
|
||||
const ::rdc::GetLatestFieldValueRequest* request,
|
||||
::rdc::GetLatestFieldValueResponse* reply) override;
|
||||
|
||||
::grpc::Status GetFieldSince(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFieldSinceRequest* request,
|
||||
::rdc::GetFieldSinceResponse* reply) override;
|
||||
::grpc::Status GetFieldSince(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFieldSinceRequest* request,
|
||||
::rdc::GetFieldSinceResponse* reply) override;
|
||||
|
||||
::grpc::Status UnWatchFields(::grpc::ServerContext* context,
|
||||
const ::rdc::UnWatchFieldsRequest* request,
|
||||
::rdc::UnWatchFieldsResponse* reply) override;
|
||||
::grpc::Status UnWatchFields(::grpc::ServerContext* context,
|
||||
const ::rdc::UnWatchFieldsRequest* request,
|
||||
::rdc::UnWatchFieldsResponse* reply) override;
|
||||
|
||||
::grpc::Status UpdateAllFields(::grpc::ServerContext* context,
|
||||
const ::rdc::UpdateAllFieldsRequest* request,
|
||||
::rdc::UpdateAllFieldsResponse* reply) override;
|
||||
::grpc::Status UpdateAllFields(::grpc::ServerContext* context,
|
||||
const ::rdc::UpdateAllFieldsRequest* request,
|
||||
::rdc::UpdateAllFieldsResponse* reply) override;
|
||||
|
||||
::grpc::Status StartJobStats(::grpc::ServerContext* context,
|
||||
const ::rdc::StartJobStatsRequest* request,
|
||||
::rdc::StartJobStatsResponse* reply) override;
|
||||
|
||||
::grpc::Status StartJobStats(::grpc::ServerContext* context,
|
||||
const ::rdc::StartJobStatsRequest* request,
|
||||
::rdc::StartJobStatsResponse* reply) override;
|
||||
::grpc::Status GetJobStats(::grpc::ServerContext* context,
|
||||
const ::rdc::GetJobStatsRequest* request,
|
||||
::rdc::GetJobStatsResponse* reply) override;
|
||||
|
||||
::grpc::Status GetJobStats(::grpc::ServerContext* context,
|
||||
const ::rdc::GetJobStatsRequest* request,
|
||||
::rdc::GetJobStatsResponse* reply) override;
|
||||
::grpc::Status StopJobStats(::grpc::ServerContext* context,
|
||||
const ::rdc::StopJobStatsRequest* request,
|
||||
::rdc::StopJobStatsResponse* reply) override;
|
||||
|
||||
::grpc::Status StopJobStats(::grpc::ServerContext* context,
|
||||
const ::rdc::StopJobStatsRequest* request,
|
||||
::rdc::StopJobStatsResponse* reply) override;
|
||||
::grpc::Status RemoveJob(::grpc::ServerContext* context, const ::rdc::RemoveJobRequest* request,
|
||||
::rdc::RemoveJobResponse* reply) override;
|
||||
|
||||
::grpc::Status RemoveJob(::grpc::ServerContext* context,
|
||||
const ::rdc::RemoveJobRequest* request,
|
||||
::rdc::RemoveJobResponse* reply) override;
|
||||
::grpc::Status RemoveAllJob(::grpc::ServerContext* context, const ::rdc::Empty* request,
|
||||
::rdc::RemoveAllJobResponse* reply) override;
|
||||
|
||||
::grpc::Status RemoveAllJob(::grpc::ServerContext* context,
|
||||
const ::rdc::Empty* request,
|
||||
::rdc::RemoveAllJobResponse* reply) override;
|
||||
::grpc::Status DiagnosticRun(::grpc::ServerContext* context,
|
||||
const ::rdc::DiagnosticRunRequest* request,
|
||||
::rdc::DiagnosticRunResponse* reply) override;
|
||||
|
||||
::grpc::Status DiagnosticRun(::grpc::ServerContext* context,
|
||||
const ::rdc::DiagnosticRunRequest* request,
|
||||
::rdc::DiagnosticRunResponse* reply) override;
|
||||
|
||||
::grpc::Status DiagnosticTestCaseRun(::grpc::ServerContext* context,
|
||||
const ::rdc::DiagnosticTestCaseRunRequest* request,
|
||||
::rdc::DiagnosticTestCaseRunResponse* reply) override;
|
||||
::grpc::Status DiagnosticTestCaseRun(::grpc::ServerContext* context,
|
||||
const ::rdc::DiagnosticTestCaseRunRequest* request,
|
||||
::rdc::DiagnosticTestCaseRunResponse* reply) override;
|
||||
|
||||
private:
|
||||
bool copy_gpu_usage_info(const rdc_gpu_usage_info_t& src,
|
||||
::rdc::GpuUsageInfo* target);
|
||||
rdc_handle_t rdc_handle_;
|
||||
bool copy_gpu_usage_info(const rdc_gpu_usage_info_t& src, ::rdc::GpuUsageInfo* target);
|
||||
rdc_handle_t rdc_handle_;
|
||||
};
|
||||
|
||||
} // namespace rdc
|
||||
|
||||
Executable → Regular
+19
-25
@@ -23,46 +23,40 @@ THE SOFTWARE.
|
||||
#define SERVER_INCLUDE_RDC_RDC_RSMI_SERVICE_H_
|
||||
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
|
||||
namespace amd {
|
||||
namespace rdc {
|
||||
|
||||
class RsmiServiceImpl final : public ::rdc::Rsmi::Service {
|
||||
public:
|
||||
RsmiServiceImpl();
|
||||
~RsmiServiceImpl();
|
||||
RsmiServiceImpl();
|
||||
~RsmiServiceImpl();
|
||||
|
||||
rsmi_status_t Initialize(uint64_t rsmi_init_flags = 0);
|
||||
rsmi_status_t Initialize(uint64_t rsmi_init_flags = 0);
|
||||
|
||||
::grpc::Status
|
||||
GetNumDevices(::grpc::ServerContext* context,
|
||||
const ::rdc::GetNumDevicesRequest* request,
|
||||
::rdc::GetNumDevicesResponse* reply) override;
|
||||
::grpc::Status GetNumDevices(::grpc::ServerContext* context,
|
||||
const ::rdc::GetNumDevicesRequest* request,
|
||||
::rdc::GetNumDevicesResponse* reply) override;
|
||||
|
||||
::grpc::Status
|
||||
GetTemperature(::grpc::ServerContext* context,
|
||||
const ::rdc::GetTemperatureRequest* request,
|
||||
::rdc::GetTemperatureResponse* response) override;
|
||||
::grpc::Status GetTemperature(::grpc::ServerContext* context,
|
||||
const ::rdc::GetTemperatureRequest* request,
|
||||
::rdc::GetTemperatureResponse* response) override;
|
||||
|
||||
::grpc::Status
|
||||
GetFanRpms(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanRpmsRequest* request,
|
||||
::rdc::GetFanRpmsResponse* response) override;
|
||||
::grpc::Status GetFanRpms(::grpc::ServerContext* context, const ::rdc::GetFanRpmsRequest* request,
|
||||
::rdc::GetFanRpmsResponse* response) override;
|
||||
|
||||
::grpc::Status
|
||||
GetFanSpeed(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedRequest* request,
|
||||
::rdc::GetFanSpeedResponse* response) override;
|
||||
::grpc::Status GetFanSpeed(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedRequest* request,
|
||||
::rdc::GetFanSpeedResponse* response) override;
|
||||
|
||||
::grpc::Status
|
||||
GetFanSpeedMax(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedMaxRequest* request,
|
||||
::rdc::GetFanSpeedMaxResponse* response) override;
|
||||
::grpc::Status GetFanSpeedMax(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedMaxRequest* request,
|
||||
::rdc::GetFanSpeedMaxResponse* response) override;
|
||||
|
||||
private:
|
||||
bool rsmi_initialized_;
|
||||
bool rsmi_initialized_;
|
||||
};
|
||||
|
||||
} // namespace rdc
|
||||
|
||||
Executable → Regular
+28
-29
@@ -24,12 +24,12 @@ THE SOFTWARE.
|
||||
|
||||
#include <grpcpp/grpcpp.h>
|
||||
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
#include "rdc/rdc_admin_service.h"
|
||||
#include "rdc/rdc_api_service.h"
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
|
||||
typedef struct {
|
||||
std::string listen_address;
|
||||
@@ -41,43 +41,42 @@ typedef struct {
|
||||
|
||||
class RDCServer {
|
||||
public:
|
||||
RDCServer();
|
||||
~RDCServer();
|
||||
RDCServer();
|
||||
~RDCServer();
|
||||
|
||||
void Initialize(RdcdCmdLineOpts *cl);
|
||||
void Initialize(RdcdCmdLineOpts* cl);
|
||||
|
||||
void Run(void);
|
||||
void ShutDown(void);
|
||||
void Run(void);
|
||||
void ShutDown(void);
|
||||
|
||||
bool start_rsmi_service(void) const {return start_rsmi_service_;}
|
||||
void set_start_rsmi_service(bool s) {start_rsmi_service_ = s;}
|
||||
bool start_rsmi_service(void) const { return start_rsmi_service_; }
|
||||
void set_start_rsmi_service(bool s) { start_rsmi_service_ = s; }
|
||||
|
||||
bool start_rdc_admin_service(void) const {return start_rdc_admin_service_;}
|
||||
void set_start_rdc_admin_service(bool s) {start_rdc_admin_service_ = s;}
|
||||
bool start_rdc_admin_service(void) const { return start_rdc_admin_service_; }
|
||||
void set_start_rdc_admin_service(bool s) { start_rdc_admin_service_ = s; }
|
||||
|
||||
bool start_api_service(void) const {return start_api_service_;}
|
||||
void set_start_api_service(bool s) {start_api_service_ = s;}
|
||||
bool start_api_service(void) const { return start_api_service_; }
|
||||
void set_start_api_service(bool s) { start_api_service_ = s; }
|
||||
|
||||
bool secure_creds(void) const {return secure_creds_;}
|
||||
void set_secure_creds(bool s) {secure_creds_ = s;}
|
||||
bool secure_creds(void) const { return secure_creds_; }
|
||||
void set_secure_creds(bool s) { secure_creds_ = s; }
|
||||
|
||||
private:
|
||||
void HandleSignal(int sig);
|
||||
std::string server_address_;
|
||||
std::unique_ptr<::grpc::Server> server_;
|
||||
bool secure_creds_;
|
||||
bool use_pinned_certs_;
|
||||
bool log_debug_;
|
||||
bool start_rsmi_service_;
|
||||
amd::rdc::RsmiServiceImpl *rsmi_service_;
|
||||
RdcdCmdLineOpts *cmd_line_;
|
||||
void HandleSignal(int sig);
|
||||
std::string server_address_;
|
||||
std::unique_ptr<::grpc::Server> server_;
|
||||
bool secure_creds_;
|
||||
bool use_pinned_certs_;
|
||||
bool log_debug_;
|
||||
bool start_rsmi_service_;
|
||||
amd::rdc::RsmiServiceImpl* rsmi_service_;
|
||||
RdcdCmdLineOpts* cmd_line_;
|
||||
|
||||
bool start_rdc_admin_service_;
|
||||
amd::rdc::RDCAdminServiceImpl *rdc_admin_service_;
|
||||
bool start_rdc_admin_service_;
|
||||
amd::rdc::RDCAdminServiceImpl* rdc_admin_service_;
|
||||
|
||||
bool start_api_service_;
|
||||
amd::rdc::RdcAPIServiceImpl *api_service_;
|
||||
bool start_api_service_;
|
||||
amd::rdc::RdcAPIServiceImpl* api_service_;
|
||||
};
|
||||
|
||||
#endif // SERVER_INCLUDE_RDC_RDC_SERVER_MAIN_H_
|
||||
|
||||
|
||||
Executable → Regular
+11
-13
@@ -20,31 +20,29 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
#include "rdc/rdc_admin_service.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <csignal>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rdc/rdc_admin_service.h"
|
||||
|
||||
namespace amd {
|
||||
namespace rdc {
|
||||
|
||||
RDCAdminServiceImpl::RDCAdminServiceImpl() {
|
||||
}
|
||||
RDCAdminServiceImpl::RDCAdminServiceImpl() {}
|
||||
|
||||
RDCAdminServiceImpl::~RDCAdminServiceImpl() {
|
||||
}
|
||||
::grpc::Status
|
||||
RDCAdminServiceImpl::VerifyConnection(::grpc::ServerContext* context,
|
||||
const ::rdc::VerifyConnectionRequest* request,
|
||||
::rdc::VerifyConnectionResponse* reply) {
|
||||
RDCAdminServiceImpl::~RDCAdminServiceImpl() {}
|
||||
::grpc::Status RDCAdminServiceImpl::VerifyConnection(::grpc::ServerContext* context,
|
||||
const ::rdc::VerifyConnectionRequest* request,
|
||||
::rdc::VerifyConnectionResponse* reply) {
|
||||
(void)context; // Quiet warning for now
|
||||
|
||||
reply->set_echo_magic_num(request->magic_num());
|
||||
|
||||
Executable → Regular
+482
-542
File diff suppressed because it is too large
Load Diff
Executable → Regular
+28
-38
@@ -20,23 +20,23 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <grpcpp/grpcpp.h>
|
||||
|
||||
#include <csignal>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <csignal>
|
||||
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
|
||||
namespace amd {
|
||||
namespace rdc {
|
||||
|
||||
RsmiServiceImpl::RsmiServiceImpl():rsmi_initialized_(false) {
|
||||
}
|
||||
RsmiServiceImpl::RsmiServiceImpl() : rsmi_initialized_(false) {}
|
||||
|
||||
RsmiServiceImpl::~RsmiServiceImpl() {
|
||||
if (rsmi_initialized_) {
|
||||
@@ -48,14 +48,12 @@ RsmiServiceImpl::~RsmiServiceImpl() {
|
||||
|
||||
// rsmi and rdc currently happen to have a 1-to-1 mapping, but
|
||||
// have this function in case that changes
|
||||
static rsmi_temperature_metric_t
|
||||
rdc_temp2rsmi_temp(::rdc::GetTemperatureRequest_TemperatureMetric
|
||||
rdc_temp) {
|
||||
static rsmi_temperature_metric_t rdc_temp2rsmi_temp(
|
||||
::rdc::GetTemperatureRequest_TemperatureMetric rdc_temp) {
|
||||
return static_cast<rsmi_temperature_metric_t>(rdc_temp);
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
RsmiServiceImpl::Initialize(uint64_t rsmi_init_flags) {
|
||||
rsmi_status_t RsmiServiceImpl::Initialize(uint64_t rsmi_init_flags) {
|
||||
rsmi_status_t rsmi_ret = rsmi_init(rsmi_init_flags);
|
||||
if (rsmi_ret != RSMI_STATUS_SUCCESS) {
|
||||
std::cout << "rsmi_init() returned error" << std::endl;
|
||||
@@ -65,10 +63,9 @@ RsmiServiceImpl::Initialize(uint64_t rsmi_init_flags) {
|
||||
return rsmi_ret;
|
||||
}
|
||||
|
||||
::grpc::Status
|
||||
RsmiServiceImpl::GetNumDevices(::grpc::ServerContext* context,
|
||||
const ::rdc::GetNumDevicesRequest* request,
|
||||
::rdc::GetNumDevicesResponse* reply) {
|
||||
::grpc::Status RsmiServiceImpl::GetNumDevices(::grpc::ServerContext* context,
|
||||
const ::rdc::GetNumDevicesRequest* request,
|
||||
::rdc::GetNumDevicesResponse* reply) {
|
||||
assert(reply != nullptr);
|
||||
uint32_t num_devices;
|
||||
|
||||
@@ -88,65 +85,58 @@ RsmiServiceImpl::GetNumDevices(::grpc::ServerContext* context,
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status
|
||||
RsmiServiceImpl::GetTemperature(::grpc::ServerContext* context,
|
||||
const ::rdc::GetTemperatureRequest* request,
|
||||
::rdc::GetTemperatureResponse* response) {
|
||||
::grpc::Status RsmiServiceImpl::GetTemperature(::grpc::ServerContext* context,
|
||||
const ::rdc::GetTemperatureRequest* request,
|
||||
::rdc::GetTemperatureResponse* response) {
|
||||
(void)context; // Quiet warning for now;
|
||||
assert(response != nullptr);
|
||||
|
||||
int64_t temperature;
|
||||
rsmi_status_t ret = rsmi_dev_temp_metric_get(request->dv_ind(),
|
||||
request->sensor_type(), rdc_temp2rsmi_temp(request->metric()),
|
||||
&temperature);
|
||||
rsmi_status_t ret = rsmi_dev_temp_metric_get(request->dv_ind(), request->sensor_type(),
|
||||
rdc_temp2rsmi_temp(request->metric()), &temperature);
|
||||
|
||||
response->set_temperature(temperature);
|
||||
response->set_ret_val(ret);
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status
|
||||
RsmiServiceImpl::GetFanRpms(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanRpmsRequest* request,
|
||||
::rdc::GetFanRpmsResponse* response) {
|
||||
::grpc::Status RsmiServiceImpl::GetFanRpms(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanRpmsRequest* request,
|
||||
::rdc::GetFanRpmsResponse* response) {
|
||||
(void)context; // Quiet warning for now;
|
||||
assert(response != nullptr);
|
||||
|
||||
int64_t rpms;
|
||||
rsmi_status_t ret = rsmi_dev_fan_rpms_get(request->dv_ind(),
|
||||
request->sensor_ind(), &rpms);
|
||||
rsmi_status_t ret = rsmi_dev_fan_rpms_get(request->dv_ind(), request->sensor_ind(), &rpms);
|
||||
|
||||
response->set_rpms(rpms);
|
||||
response->set_ret_val(ret);
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status
|
||||
RsmiServiceImpl::GetFanSpeed(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedRequest* request,
|
||||
::rdc::GetFanSpeedResponse* response) {
|
||||
::grpc::Status RsmiServiceImpl::GetFanSpeed(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedRequest* request,
|
||||
::rdc::GetFanSpeedResponse* response) {
|
||||
(void)context; // Quiet warning for now;
|
||||
assert(response != nullptr);
|
||||
|
||||
int64_t speed;
|
||||
rsmi_status_t ret = rsmi_dev_fan_speed_get(request->dv_ind(),
|
||||
request->sensor_ind(), &speed);
|
||||
rsmi_status_t ret = rsmi_dev_fan_speed_get(request->dv_ind(), request->sensor_ind(), &speed);
|
||||
|
||||
response->set_speed(speed);
|
||||
response->set_ret_val(ret);
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status
|
||||
RsmiServiceImpl::GetFanSpeedMax(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedMaxRequest* request,
|
||||
::rdc::GetFanSpeedMaxResponse* response) {
|
||||
::grpc::Status RsmiServiceImpl::GetFanSpeedMax(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedMaxRequest* request,
|
||||
::rdc::GetFanSpeedMaxResponse* response) {
|
||||
(void)context; // Quiet warning for now;
|
||||
assert(response != nullptr);
|
||||
|
||||
uint64_t max_speed;
|
||||
rsmi_status_t ret = rsmi_dev_fan_speed_max_get(request->dv_ind(),
|
||||
request->sensor_ind(), &max_speed);
|
||||
rsmi_status_t ret =
|
||||
rsmi_dev_fan_speed_max_get(request->dv_ind(), request->sensor_ind(), &max_speed);
|
||||
|
||||
response->set_max_speed(max_speed);
|
||||
response->set_ret_val(ret);
|
||||
|
||||
Executable → Regular
+112
-150
@@ -20,29 +20,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
#include "rdc/rdc_server_main.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <sys/resource.h>
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/capability.h>
|
||||
#include <getopt.h>
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <pthread.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/capability.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <csignal>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <csignal>
|
||||
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
#include "rdc/rdc_server_main.h"
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
#include "rdc/rdc_api_service.h"
|
||||
#include "common/rdc_capabilities.h"
|
||||
#include "common/rdc_utils.h"
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rdc/rdc_api_service.h"
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
|
||||
// TODO(cfreehil):
|
||||
// The following need to be made configurable (e.g., from YAML):
|
||||
@@ -56,43 +58,33 @@ THE SOFTWARE.
|
||||
|
||||
static bool sShutDownServer = false;
|
||||
static bool sRestartServer = false;
|
||||
static const char *kDaemonName = "rdcd";
|
||||
static const char *kRDCDHomeDir = "/";
|
||||
static const char *kDaemonLockFileRoot = "/var/run/rdcd.lock";
|
||||
static const char *kDaemonLockFile = "/tmp/rdcd.lock";
|
||||
static const char* kDaemonName = "rdcd";
|
||||
static const char* kRDCDHomeDir = "/";
|
||||
static const char* kDaemonLockFileRoot = "/var/run/rdcd.lock";
|
||||
static const char* kDaemonLockFile = "/tmp/rdcd.lock";
|
||||
|
||||
// Pinned certificates
|
||||
static const char * kDefaultRDCServerCertPinPath =
|
||||
"/etc/rdc/server/rdc_server.crt";
|
||||
static const char * kDefaultRDCServerKeyPinPath =
|
||||
"/etc/rdc/server/private/rdc_server.key";
|
||||
static const char * kDefaultRDCClientCertPinPath =
|
||||
"/etc/rdc/client/rdc_client.crt";
|
||||
static const char* kDefaultRDCServerCertPinPath = "/etc/rdc/server/rdc_server.crt";
|
||||
static const char* kDefaultRDCServerKeyPinPath = "/etc/rdc/server/private/rdc_server.key";
|
||||
static const char* kDefaultRDCClientCertPinPath = "/etc/rdc/client/rdc_client.crt";
|
||||
|
||||
// PKI certificates
|
||||
static const char * kDefaultRDCServerCertKeyPkiPath =
|
||||
"/etc/rdc/server/private/rdc_server_cert.key";
|
||||
static const char * kDefaultRDCServerCertPemPkiPath =
|
||||
"/etc/rdc/server/certs/rdc_server_cert.pem";
|
||||
static const char * kDefaultRDCClientCACertPemPkiPath =
|
||||
"/etc/rdc/client/certs/rdc_cacert.pem";
|
||||
static const char* kDefaultRDCServerCertKeyPkiPath = "/etc/rdc/server/private/rdc_server_cert.key";
|
||||
static const char* kDefaultRDCServerCertPemPkiPath = "/etc/rdc/server/certs/rdc_server_cert.pem";
|
||||
static const char* kDefaultRDCClientCACertPemPkiPath = "/etc/rdc/client/certs/rdc_cacert.pem";
|
||||
|
||||
static const char *kDefaultListenAddress = "0.0.0.0";
|
||||
static const char *kDefaultListenPort = "50051";
|
||||
static const char* kDefaultListenAddress = "0.0.0.0";
|
||||
static const char* kDefaultListenPort = "50051";
|
||||
static const uint32_t kRSMIUMask = 027;
|
||||
|
||||
RDCServer::RDCServer() :
|
||||
secure_creds_(false), rsmi_service_(nullptr), rdc_admin_service_(nullptr) {
|
||||
}
|
||||
|
||||
RDCServer::~RDCServer() {
|
||||
}
|
||||
RDCServer::RDCServer()
|
||||
: secure_creds_(false), rsmi_service_(nullptr), rdc_admin_service_(nullptr) {}
|
||||
|
||||
RDCServer::~RDCServer() {}
|
||||
|
||||
// TODO(cfreehil): resolve here command line options with
|
||||
// (future) config file options
|
||||
void
|
||||
RDCServer::Initialize(RdcdCmdLineOpts *cl) {
|
||||
void RDCServer::Initialize(RdcdCmdLineOpts* cl) {
|
||||
cmd_line_ = cl;
|
||||
server_address_ = cmd_line_->listen_address;
|
||||
server_address_ += ":";
|
||||
@@ -102,7 +94,7 @@ RDCServer::Initialize(RdcdCmdLineOpts *cl) {
|
||||
log_debug_ = cmd_line_->log_dbg;
|
||||
}
|
||||
|
||||
static int ConstructSSLOptsPin(grpc::SslServerCredentialsOptions *ssl_opts) {
|
||||
static int ConstructSSLOptsPin(grpc::SslServerCredentialsOptions* ssl_opts) {
|
||||
assert(ssl_opts != nullptr);
|
||||
if (ssl_opts == nullptr) {
|
||||
return -EINVAL;
|
||||
@@ -133,14 +125,13 @@ static int ConstructSSLOptsPin(grpc::SslServerCredentialsOptions *ssl_opts) {
|
||||
}
|
||||
|
||||
grpc::SslServerCredentialsOptions::PemKeyCertPair pkcp = {ser_key, ser_crt};
|
||||
ssl_opts->client_certificate_request =
|
||||
GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY;
|
||||
ssl_opts->client_certificate_request = GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY;
|
||||
ssl_opts->pem_root_certs = cli_crt;
|
||||
ssl_opts->pem_key_cert_pairs.push_back(pkcp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ConstructSSLOptsPKI(grpc::SslServerCredentialsOptions *ssl_opts) {
|
||||
static int ConstructSSLOptsPKI(grpc::SslServerCredentialsOptions* ssl_opts) {
|
||||
assert(ssl_opts != nullptr);
|
||||
if (ssl_opts == nullptr) {
|
||||
return -EINVAL;
|
||||
@@ -171,15 +162,13 @@ static int ConstructSSLOptsPKI(grpc::SslServerCredentialsOptions *ssl_opts) {
|
||||
}
|
||||
|
||||
grpc::SslServerCredentialsOptions::PemKeyCertPair pkcp = {ser_key, ser_crt};
|
||||
ssl_opts->client_certificate_request =
|
||||
GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY;
|
||||
ssl_opts->client_certificate_request = GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY;
|
||||
ssl_opts->pem_root_certs = cli_crt;
|
||||
ssl_opts->pem_key_cert_pairs.push_back(pkcp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
RDCServer::Run() {
|
||||
void RDCServer::Run() {
|
||||
::grpc::ServerBuilder builder;
|
||||
int ret;
|
||||
if (secure_creds_) {
|
||||
@@ -192,15 +181,12 @@ RDCServer::Run() {
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
std::cerr << "Failed to process OpenSSL keys and certificates. Errno: "
|
||||
<< -ret << std::endl;
|
||||
std::cerr << "Failed to process OpenSSL keys and certificates. Errno: " << -ret << std::endl;
|
||||
return;
|
||||
}
|
||||
builder.AddListeningPort(server_address_,
|
||||
grpc::SslServerCredentials(ssl_opts));
|
||||
builder.AddListeningPort(server_address_, grpc::SslServerCredentials(ssl_opts));
|
||||
} else {
|
||||
builder.AddListeningPort(server_address_,
|
||||
grpc::InsecureServerCredentials());
|
||||
builder.AddListeningPort(server_address_, grpc::InsecureServerCredentials());
|
||||
}
|
||||
|
||||
// Register services as the instances through which we'll communicate with
|
||||
@@ -240,14 +226,13 @@ RDCServer::Run() {
|
||||
server_ = builder.BuildAndStart();
|
||||
|
||||
std::cout << "Server listening on " << server_address_.c_str() << std::endl;
|
||||
std::cout << "Accepting " <<
|
||||
(secure_creds_ ? "Authenticated" : "Unauthenticated") <<
|
||||
" connections only." << std::endl;
|
||||
std::cout << "Accepting " << (secure_creds_ ? "Authenticated" : "Unauthenticated")
|
||||
<< " connections only." << std::endl;
|
||||
server_->Wait();
|
||||
}
|
||||
|
||||
static void HandleSignal(int sig) {
|
||||
std::cout << "Caught signal " << sig << std::endl;
|
||||
std::cout << "Caught signal " << sig << std::endl;
|
||||
|
||||
// For most signals, we will want to exit, so make that the default case
|
||||
// Handle the other signals specifically.
|
||||
@@ -259,9 +244,9 @@ static void HandleSignal(int sig) {
|
||||
|
||||
// Grpc doesn't seem to handle stopping and restarting well, so
|
||||
// user must manually do these steps
|
||||
// case SIGHUP:
|
||||
// sRestartServer = true;
|
||||
// break;
|
||||
// case SIGHUP:
|
||||
// sRestartServer = true;
|
||||
// break;
|
||||
|
||||
default:
|
||||
std::cerr << "Unexpected signal caught" << std::endl;
|
||||
@@ -274,8 +259,7 @@ static void InitializeSignalHandling(void) {
|
||||
signal(SIGTERM, HandleSignal);
|
||||
}
|
||||
|
||||
static int
|
||||
FileOwner(const char *fn, std::string *owner) {
|
||||
static int FileOwner(const char* fn, std::string* owner) {
|
||||
struct stat info;
|
||||
int ret;
|
||||
|
||||
@@ -289,7 +273,7 @@ FileOwner(const char *fn, std::string *owner) {
|
||||
return errno;
|
||||
}
|
||||
struct passwd pw;
|
||||
struct passwd *result;
|
||||
struct passwd* result;
|
||||
char buf[20];
|
||||
|
||||
ret = getpwuid_r(info.st_uid, &pw, buf, 20, &result);
|
||||
@@ -302,8 +286,7 @@ FileOwner(const char *fn, std::string *owner) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
RDCServer::ShutDown(void) {
|
||||
void RDCServer::ShutDown(void) {
|
||||
server_->Shutdown();
|
||||
|
||||
if (rsmi_service_) {
|
||||
@@ -322,19 +305,19 @@ RDCServer::ShutDown(void) {
|
||||
}
|
||||
}
|
||||
|
||||
static void * ProcessSignalLoop(void *server_ptr) {
|
||||
static void* ProcessSignalLoop(void* server_ptr) {
|
||||
assert(server_ptr != nullptr);
|
||||
RDCServer *server = reinterpret_cast<RDCServer *>(server_ptr);
|
||||
RDCServer* server = reinterpret_cast<RDCServer*>(server_ptr);
|
||||
|
||||
while (1) {
|
||||
if (sShutDownServer) {
|
||||
std::cout << "Shutting down RDC Server." << std::endl;
|
||||
std::cout << "Shutting down RDC Server." << std::endl;
|
||||
server->ShutDown();
|
||||
// We will need to add shutdown of any completion queues
|
||||
// here, when/if we add them
|
||||
break;
|
||||
} else if (sRestartServer) {
|
||||
std::cout << "Re-starting RDC Server." << std::endl;
|
||||
std::cout << "Re-starting RDC Server." << std::endl;
|
||||
// We will need to add shutdown of any completion queues
|
||||
// here, when/if we add them
|
||||
server->ShutDown();
|
||||
@@ -385,7 +368,7 @@ static bool FileIsLocked(std::string fn) {
|
||||
}
|
||||
|
||||
static void ExitIfAlreadyRunning(bool is_root) {
|
||||
const char *lock_fn;
|
||||
const char* lock_fn;
|
||||
int lock_fh;
|
||||
std::string lf_user(kDaemonLockFile);
|
||||
std::string lf_root(kDaemonLockFileRoot);
|
||||
@@ -395,8 +378,7 @@ static void ExitIfAlreadyRunning(bool is_root) {
|
||||
bool is_locked = FileIsLocked(lock_file);
|
||||
|
||||
if (is_locked) {
|
||||
std::cerr << "File " << lock_file <<
|
||||
" is locked. Is rdcd already running?" << std::endl;
|
||||
std::cerr << "File " << lock_file << " is locked. Is rdcd already running?" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
};
|
||||
@@ -411,7 +393,7 @@ static void ExitIfAlreadyRunning(bool is_root) {
|
||||
}
|
||||
// Temporarily adjust file-mask to create file with right permissions
|
||||
umask(023);
|
||||
lock_fh = open(lock_fn, O_RDWR|O_CREAT, 0644);
|
||||
lock_fh = open(lock_fn, O_RDWR | O_CREAT, 0644);
|
||||
|
||||
if (lock_fh < 0) {
|
||||
std::string user;
|
||||
@@ -420,9 +402,10 @@ static void ExitIfAlreadyRunning(bool is_root) {
|
||||
perror("Failed to determine owner of lock file.");
|
||||
exit(ret);
|
||||
}
|
||||
std::cerr << "Failed to open file lock:" << lock_fn << " owned by user: "
|
||||
<< user << ". If starting rdcd as a different user, delete this "
|
||||
"lock-file first." << std::endl;
|
||||
std::cerr << "Failed to open file lock:" << lock_fn << " owned by user: " << user
|
||||
<< ". If starting rdcd as a different user, delete this "
|
||||
"lock-file first."
|
||||
<< std::endl;
|
||||
// asserting below since this should have been prevented in main()
|
||||
assert(!"Unexpected user invoking rdcd");
|
||||
exit(1);
|
||||
@@ -439,8 +422,7 @@ static void ExitIfAlreadyRunning(bool is_root) {
|
||||
assert(static_cast<unsigned int>(fsz) == pid_str.size());
|
||||
}
|
||||
|
||||
static void
|
||||
MakeDaemon(bool is_root) {
|
||||
static void MakeDaemon(bool is_root) {
|
||||
int fd0;
|
||||
struct rlimit max_files;
|
||||
|
||||
@@ -474,13 +456,13 @@ MakeDaemon(bool is_root) {
|
||||
|
||||
// chdir to dir that will always be available
|
||||
if (chdir(kRDCDHomeDir) < 0) {
|
||||
std::cerr << "Failed to change directory to " <<kRDCDHomeDir << std::endl;
|
||||
std::cerr << "Failed to change directory to " << kRDCDHomeDir << std::endl;
|
||||
}
|
||||
|
||||
// Determine max. number of open files possible. We need to close all
|
||||
// open descriptors.
|
||||
if (getrlimit(RLIMIT_NOFILE, &max_files) < 0) {
|
||||
std::cerr << kDaemonName << ": can't get file limit" << std::endl;
|
||||
std::cerr << kDaemonName << ": can't get file limit" << std::endl;
|
||||
}
|
||||
|
||||
// Close files
|
||||
@@ -495,8 +477,8 @@ MakeDaemon(bool is_root) {
|
||||
// Direct stdin to /dev/null.
|
||||
fd0 = open("/dev/null", O_RDWR);
|
||||
if (fd0 != 0) {
|
||||
std::cerr << "unexpected fildes: " << fd0 << std::endl;
|
||||
exit(1);
|
||||
std::cerr << "unexpected fildes: " << fd0 << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ExitIfAlreadyRunning(is_root);
|
||||
@@ -508,38 +490,34 @@ MakeDaemon(bool is_root) {
|
||||
// * required_argument
|
||||
// * optional_argument
|
||||
// * no_argument
|
||||
static const struct option long_options[] = {
|
||||
{"address", required_argument, nullptr, 'a'},
|
||||
{"port", required_argument, nullptr, 'p'},
|
||||
// Any options with optionals args would go here; e.g.,
|
||||
// {"start_rdcd", optional_argument, nullptr, 'd'},
|
||||
{"unauth_comm", no_argument, nullptr, 'u'},
|
||||
{"pinned_cert", no_argument, nullptr, 'i'},
|
||||
{"debug", no_argument, nullptr, 'd'},
|
||||
{"help", no_argument, nullptr, 'h'},
|
||||
static const struct option long_options[] = {{"address", required_argument, nullptr, 'a'},
|
||||
{"port", required_argument, nullptr, 'p'},
|
||||
// Any options with optionals args would go here; e.g.,
|
||||
// {"start_rdcd", optional_argument, nullptr, 'd'},
|
||||
{"unauth_comm", no_argument, nullptr, 'u'},
|
||||
{"pinned_cert", no_argument, nullptr, 'i'},
|
||||
{"debug", no_argument, nullptr, 'd'},
|
||||
{"help", no_argument, nullptr, 'h'},
|
||||
|
||||
{nullptr, 0, nullptr, 0}
|
||||
};
|
||||
{nullptr, 0, nullptr, 0}};
|
||||
static const char* short_options = "a:p:uidh";
|
||||
|
||||
static void PrintHelp(void) {
|
||||
std::cout <<
|
||||
"Optional rdctst Arguments:\n"
|
||||
"--address, -a <IPv4 address> specify address on which to listen; "
|
||||
"default is 0.0.0.0\n"
|
||||
"--port, -p <port> specify port on which to listen; "
|
||||
"default is to listen on port 50051\n"
|
||||
"--unauth_comm, -u don't do authentication with communications"
|
||||
" with client. When this flag is not specified, by default, "
|
||||
"PKI authentication is used\n"
|
||||
"--pinned_cert, -i used \"pinned\" certificates instead of PKI "
|
||||
"authentication. This is for test purposes.\n"
|
||||
"--debug, -d output debug messages\n"
|
||||
"--help, -h print this message\n";
|
||||
std::cout << "Optional rdctst Arguments:\n"
|
||||
"--address, -a <IPv4 address> specify address on which to listen; "
|
||||
"default is 0.0.0.0\n"
|
||||
"--port, -p <port> specify port on which to listen; "
|
||||
"default is to listen on port 50051\n"
|
||||
"--unauth_comm, -u don't do authentication with communications"
|
||||
" with client. When this flag is not specified, by default, "
|
||||
"PKI authentication is used\n"
|
||||
"--pinned_cert, -i used \"pinned\" certificates instead of PKI "
|
||||
"authentication. This is for test purposes.\n"
|
||||
"--debug, -d output debug messages\n"
|
||||
"--help, -h print this message\n";
|
||||
}
|
||||
|
||||
uint32_t ProcessCmdline(RdcdCmdLineOpts* cmdl_opts,
|
||||
int arg_cnt, char** arg_list) {
|
||||
uint32_t ProcessCmdline(RdcdCmdLineOpts* cmdl_opts, int arg_cnt, char** arg_list) {
|
||||
int a;
|
||||
int ind = -1;
|
||||
|
||||
@@ -555,8 +533,7 @@ uint32_t ProcessCmdline(RdcdCmdLineOpts* cmdl_opts,
|
||||
switch (a) {
|
||||
case 'a':
|
||||
if (!amd::rdc::IsIP(optarg)) {
|
||||
std::cerr << "\"" << optarg <<
|
||||
"\" is not a valid IP address." << std::endl;
|
||||
std::cerr << "\"" << optarg << "\" is not a valid IP address." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
cmdl_opts->listen_address = optarg;
|
||||
@@ -564,8 +541,7 @@ uint32_t ProcessCmdline(RdcdCmdLineOpts* cmdl_opts,
|
||||
|
||||
case 'p':
|
||||
if (!amd::rdc::IsNumber(optarg)) {
|
||||
std::cerr << "\"" << optarg <<
|
||||
"\" is not a valid port number." << std::endl;
|
||||
std::cerr << "\"" << optarg << "\" is not a valid port number." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
cmdl_opts->listen_port = optarg;
|
||||
@@ -588,8 +564,7 @@ uint32_t ProcessCmdline(RdcdCmdLineOpts* cmdl_opts,
|
||||
exit(0);
|
||||
|
||||
default:
|
||||
std::cout << "Unknown command line option: \"" << a <<
|
||||
"\". Ignoring..." << std::endl;
|
||||
std::cout << "Unknown command line option: \"" << a << "\". Ignoring..." << std::endl;
|
||||
PrintHelp();
|
||||
return 0;
|
||||
}
|
||||
@@ -597,14 +572,13 @@ uint32_t ProcessCmdline(RdcdCmdLineOpts* cmdl_opts,
|
||||
|
||||
// Check for incompatibilities
|
||||
if (cmdl_opts->use_pinned_certs && cmdl_opts->no_authentication) {
|
||||
std::cerr << "--pinned_cert and --unauth_comm are incompatible options."
|
||||
<< std::endl;
|
||||
std::cerr << "--pinned_cert and --unauth_comm are incompatible options." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void init_cmd_line_opts(RdcdCmdLineOpts *opts) {
|
||||
static void init_cmd_line_opts(RdcdCmdLineOpts* opts) {
|
||||
assert(opts != nullptr);
|
||||
opts->listen_address = kDefaultListenAddress;
|
||||
opts->listen_port = kDefaultListenPort;
|
||||
@@ -631,22 +605,20 @@ int main(int argc, char** argv) {
|
||||
|
||||
// Can read the certificates and private key when authentication.
|
||||
if (!cmd_line_opts.no_authentication) {
|
||||
if (cmd_line_opts.use_pinned_certs &&
|
||||
(access(kDefaultRDCServerCertPinPath, R_OK) != 0 ||
|
||||
access(kDefaultRDCServerKeyPinPath, R_OK) != 0 ||
|
||||
access(kDefaultRDCClientCertPinPath, R_OK) != 0)) {
|
||||
std::cerr << "The user needs read access to the pinned "
|
||||
<< "certificates and private key." << std::endl;
|
||||
return 1;
|
||||
if (cmd_line_opts.use_pinned_certs && (access(kDefaultRDCServerCertPinPath, R_OK) != 0 ||
|
||||
access(kDefaultRDCServerKeyPinPath, R_OK) != 0 ||
|
||||
access(kDefaultRDCClientCertPinPath, R_OK) != 0)) {
|
||||
std::cerr << "The user needs read access to the pinned "
|
||||
<< "certificates and private key." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!cmd_line_opts.use_pinned_certs &&
|
||||
(access(kDefaultRDCServerCertKeyPkiPath, R_OK) != 0 ||
|
||||
access(kDefaultRDCServerCertPemPkiPath, R_OK) != 0 ||
|
||||
access(kDefaultRDCClientCACertPemPkiPath, R_OK) != 0)) {
|
||||
std::cerr << "The user needs read access to the PKI "
|
||||
<< "certificates and private key." << std::endl;
|
||||
return 1;
|
||||
if (!cmd_line_opts.use_pinned_certs && (access(kDefaultRDCServerCertKeyPkiPath, R_OK) != 0 ||
|
||||
access(kDefaultRDCServerCertPemPkiPath, R_OK) != 0 ||
|
||||
access(kDefaultRDCClientCACertPemPkiPath, R_OK) != 0)) {
|
||||
std::cerr << "The user needs read access to the PKI "
|
||||
<< "certificates and private key." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -656,23 +628,20 @@ int main(int argc, char** argv) {
|
||||
|
||||
bool cap_enabled;
|
||||
|
||||
err =
|
||||
::amd::rdc::GetCapability(CAP_DAC_OVERRIDE, CAP_EFFECTIVE, &cap_enabled);
|
||||
err = ::amd::rdc::GetCapability(CAP_DAC_OVERRIDE, CAP_EFFECTIVE, &cap_enabled);
|
||||
if (err) {
|
||||
std::cerr << "Failed to get capability" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (cap_enabled) {
|
||||
err =
|
||||
amd::rdc::GetCapability(CAP_DAC_OVERRIDE, CAP_PERMITTED, &cap_enabled);
|
||||
err = amd::rdc::GetCapability(CAP_DAC_OVERRIDE, CAP_PERMITTED, &cap_enabled);
|
||||
if (err) {
|
||||
std::cerr << "Failed to get capability" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
if (!cap_enabled) {
|
||||
std::cerr <<
|
||||
"CAP_DAC_OVERRIDE CAP_PERMITTED is not enabled" << std::endl;
|
||||
std::cerr << "CAP_DAC_OVERRIDE CAP_PERMITTED is not enabled" << std::endl;
|
||||
}
|
||||
} else {
|
||||
std::cerr << "CAP_DAC_OVERRIDE CAP_EFFECTIVE is not enabled." << std::endl;
|
||||
@@ -685,28 +654,23 @@ int main(int argc, char** argv) {
|
||||
// relax this restriction if some new feature requires it.
|
||||
err = amd::rdc::ModifyCapability(CAP_DAC_OVERRIDE, CAP_INHERITABLE, false);
|
||||
if (err) {
|
||||
std::cerr << "Failed to disable CAP_DAC_OVERRIDE, CAP_INHERITABLE" <<
|
||||
std::endl;
|
||||
std::cerr << "Failed to disable CAP_DAC_OVERRIDE, CAP_INHERITABLE" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// By default, disable CAP_DAC_OVERRIDE. Turn on, when needed.
|
||||
err = amd::rdc::ModifyCapability(CAP_DAC_OVERRIDE, CAP_EFFECTIVE, false);
|
||||
if (err) {
|
||||
std::cerr << "Failed to disable CAP_DAC_OVERRIDE, CAP_EFFECTIVE" <<
|
||||
std::endl;
|
||||
std::cerr << "Failed to disable CAP_DAC_OVERRIDE, CAP_EFFECTIVE" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Create a thread to handle signals to shutdown gracefully
|
||||
pthread_t sig_listen_thread;
|
||||
int thr_ret = pthread_create(&sig_listen_thread, NULL,
|
||||
ProcessSignalLoop, &rdc_server);
|
||||
int thr_ret = pthread_create(&sig_listen_thread, NULL, ProcessSignalLoop, &rdc_server);
|
||||
|
||||
if (thr_ret) {
|
||||
std::cerr <<
|
||||
"Failed to create ProcessSignalLoop. pthread_create() returned " <<
|
||||
thr_ret;
|
||||
std::cerr << "Failed to create ProcessSignalLoop. pthread_create() returned " << thr_ret;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -723,13 +687,11 @@ int main(int argc, char** argv) {
|
||||
|
||||
// don't fail if it doesn't succeed
|
||||
if (thr_ret != 0) {
|
||||
std::cerr <<
|
||||
"Failed to terminate ProcessSignalLoop. pthread_join() returned " <<
|
||||
thr_ret;
|
||||
std::cerr << "Failed to terminate ProcessSignalLoop. pthread_join() returned " << thr_ret;
|
||||
}
|
||||
|
||||
if (sShutDownServer) {
|
||||
std::cout << "RDC server successfully shut down." << std::endl;
|
||||
std::cout << "RDC server successfully shut down." << std::endl;
|
||||
return 0;
|
||||
} else {
|
||||
std::cerr << "RDC server failed to start." << std::endl;
|
||||
|
||||
Reference in New Issue
Block a user