aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeungjae Yoo <seungjaeyoo@google.com>2023-04-26 05:37:30 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-26 05:37:30 +0000
commit060e725a2d9f8c0a17d2878bfedf7df960d83d02 (patch)
treed0d734407895193dd20b8be0716ba85cc6a98a32
parentefbde0298eb493cd74437f302dacc89df8a7a188 (diff)
parent8c3a92a075dbd25bd7b9dbe2beb9386b422d6d76 (diff)
downloadwmediumd-060e725a2d9f8c0a17d2878bfedf7df960d83d02.tar.gz
Support LoadConfig and ReloadConfig into wmediumdservice am: 161328389a am: cd1e94b88c am: a4ada4f4d6 am: 8c3a92a075
Original change: https://android-review.googlesource.com/c/platform/external/wmediumd/+/2560910 Change-Id: Ic29b98af30e715cb238a953ab108c7014da46bea Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--wmediumd/api.h2
-rw-r--r--wmediumd/grpc.h2
-rw-r--r--wmediumd/wmediumd.c24
-rw-r--r--wmediumd_server/wmediumd.proto6
-rw-r--r--wmediumd_server/wmediumd_server.cc33
5 files changed, 62 insertions, 5 deletions
diff --git a/wmediumd/api.h b/wmediumd/api.h
index c887755..05b363b 100644
--- a/wmediumd/api.h
+++ b/wmediumd/api.h
@@ -134,7 +134,7 @@ struct wmediumd_set_snr {
};
#pragma pack(pop)
-struct wmediumd_reload_config {
+struct wmediumd_load_config {
/* path of wmediumd configuration file */
char config_path[0];
};
diff --git a/wmediumd/grpc.h b/wmediumd/grpc.h
index bd8c81a..0393495 100644
--- a/wmediumd/grpc.h
+++ b/wmediumd/grpc.h
@@ -25,6 +25,8 @@
#define MSG_TYPE_RESPONSE_SIZE (sizeof(struct wmediumd_grpc_response_message) - sizeof(long))
enum wmediumd_grpc_request_data_type {
+ REQUEST_LOAD_CONFIG,
+ REQUEST_RELOAD_CONFIG,
REQUEST_SET_CIVICLOC,
REQUEST_SET_LCI,
REQUEST_SET_POSITION,
diff --git a/wmediumd/wmediumd.c b/wmediumd/wmediumd.c
index d19506e..a3f6de1 100644
--- a/wmediumd/wmediumd.c
+++ b/wmediumd/wmediumd.c
@@ -1362,8 +1362,8 @@ static int process_set_snr_message(struct wmediumd *ctx, struct wmediumd_set_snr
return 0;
}
-static int process_reload_config_message(struct wmediumd *ctx,
- struct wmediumd_reload_config *reload_config) {
+static int process_load_config_message(struct wmediumd *ctx,
+ struct wmediumd_load_config *reload_config) {
char *config_path;
int result = 0;
@@ -1544,6 +1544,22 @@ static void wmediumd_grpc_service_handler(struct usfstl_loop_entry *entry) {
} else {
// TODO(273384914): Support more request types.
switch (request_message.data_type) {
+ case REQUEST_LOAD_CONFIG:
+ if (process_load_config_message(ctx, (struct wmediumd_load_config *)(request_message.data_payload)) < 0) {
+ w_logf(ctx, LOG_ERR, "%s: failed to execute load_config\n", __func__);
+ wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_INVALID);
+ break;
+ }
+ wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_ACK);
+ break;
+ case REQUEST_RELOAD_CONFIG:
+ if (process_reload_current_config_message(ctx) < 0) {
+ w_logf(ctx, LOG_ERR, "%s: failed to execute reload_config\n", __func__);
+ wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_INVALID);
+ break;
+ }
+ wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_ACK);
+ break;
case REQUEST_SET_CIVICLOC:
if (process_set_civicloc_message(ctx, (struct wmediumd_set_civicloc *)(request_message.data_payload), request_message.data_size) < 0) {
w_logf(ctx, LOG_ERR, "%s: failed to execute set_civicloc\n", __func__);
@@ -1692,8 +1708,8 @@ static void wmediumd_api_handler(struct usfstl_loop_entry *entry)
}
break;
case WMEDIUMD_MSG_RELOAD_CONFIG:
- if (process_reload_config_message(ctx,
- (struct wmediumd_reload_config *)data) < 0) {
+ if (process_load_config_message(ctx,
+ (struct wmediumd_load_config *)data) < 0) {
response = WMEDIUMD_MSG_INVALID;
}
break;
diff --git a/wmediumd_server/wmediumd.proto b/wmediumd_server/wmediumd.proto
index 0c21941..a4c1a1c 100644
--- a/wmediumd_server/wmediumd.proto
+++ b/wmediumd_server/wmediumd.proto
@@ -19,6 +19,8 @@ package wmediumdserver;
import "google/protobuf/empty.proto";
service WmediumdService {
+ rpc LoadConfig(LoadConfigRequest) returns (google.protobuf.Empty) {}
+ rpc ReloadConfig(google.protobuf.Empty) returns (google.protobuf.Empty) {}
rpc SetCivicloc(SetCiviclocRequest) returns (google.protobuf.Empty) {}
rpc SetLci(SetLciRequest) returns (google.protobuf.Empty) {}
rpc SetPosition(SetPositionRequest) returns (google.protobuf.Empty) {}
@@ -27,6 +29,10 @@ service WmediumdService {
rpc StopPcap(google.protobuf.Empty) returns (google.protobuf.Empty) {}
}
+message LoadConfigRequest {
+ string path = 1;
+}
+
message SetCiviclocRequest {
string mac_address = 1;
string civicloc = 2;
diff --git a/wmediumd_server/wmediumd_server.cc b/wmediumd_server/wmediumd_server.cc
index 6f38e1f..2a2e62c 100644
--- a/wmediumd_server/wmediumd_server.cc
+++ b/wmediumd_server/wmediumd_server.cc
@@ -41,6 +41,7 @@ using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using grpc::StatusCode;
+using wmediumdserver::LoadConfigRequest;
using wmediumdserver::SetCiviclocRequest;
using wmediumdserver::SetLciRequest;
using wmediumdserver::SetPositionRequest;
@@ -99,6 +100,38 @@ class WmediumdServiceImpl final : public WmediumdService::Service {
public:
WmediumdServiceImpl(int event_fd, int msq_id)
: event_fd_(event_fd), msq_id_(msq_id) {}
+
+ Status LoadConfig(ServerContext* context, const LoadConfigRequest* request,
+ Empty* reply) override {
+ // Construct request payload
+ ssize_t size =
+ sizeof(struct wmediumd_load_config) + (request->path().length() + 1);
+ struct wmediumd_load_config* request_data_payload =
+ (struct wmediumd_load_config*)malloc(size);
+ strcpy(request_data_payload->config_path, request->path().c_str());
+
+ struct wmediumd_grpc_response_message response_message;
+ SendAndReceiveGrpcMessage(REQUEST_LOAD_CONFIG, size, request_data_payload,
+ &response_message);
+ free(request_data_payload);
+ if (response_message.data_type != RESPONSE_ACK) {
+ return Status(StatusCode::FAILED_PRECONDITION,
+ "Failed to execute LoadConfig");
+ }
+ return Status::OK;
+ }
+
+ Status ReloadConfig(ServerContext* context, const Empty* request,
+ Empty* reply) override {
+ struct wmediumd_grpc_response_message response_message;
+ SendAndReceiveGrpcMessage(REQUEST_RELOAD_CONFIG, &response_message);
+ if (response_message.data_type != RESPONSE_ACK) {
+ return Status(StatusCode::FAILED_PRECONDITION,
+ "Failed to execute ReloadConfig");
+ }
+ return Status::OK;
+ }
+
Status SetCivicloc(ServerContext* context, const SetCiviclocRequest* request,
Empty* reply) override {
// Validate parameters