misc: life_mngr: Fix Linux and rtvm not restarting acrn in life_mngr
1. using sockets_req_system_shutdown_user_vm_handler and sockets_req_system_reboot_user_vm_handler wrapping function req_user_vm_shutdown_reboot 2. Modify the variable names SHUTDOWN_REQ to SYS_REBOOT_REQ 3. Add a handler for "ACK_REQ_SYS_REBOOT" Tracked-On: #8431 Signed-off-by: Gaofei Sun <gaofeix.sun@intel.com> Reviewed-by: Li Fei <fei1.li@intel.com>
This commit is contained in:
parent
d2fae30b23
commit
97f6984453
|
@ -174,7 +174,7 @@ int socket_req_user_vm_reboot_handler(void *arg, int fd)
|
||||||
return req_user_vm_shutdown_reboot(arg, fd, USER_VM_REBOOT, ACK_REQ_USER_VM_REBOOT);
|
return req_user_vm_shutdown_reboot(arg, fd, USER_VM_REBOOT, ACK_REQ_USER_VM_REBOOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
int socket_req_system_reboot_handler(void *arg, int fd)
|
int req_system_shutdown_reboot(void *arg, int fd, char *msg, char *ack_msg)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct channel_dev *c_dev = NULL;
|
struct channel_dev *c_dev = NULL;
|
||||||
|
@ -187,43 +187,27 @@ int socket_req_system_reboot_handler(void *arg, int fd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = send_socket_ack(arg, fd, ACK_REQ_SYS_REBOOT);
|
ret = send_socket_ack(arg, fd, ack_msg);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
LOG_WRITE("Failed to send ACK by socket\n");
|
LOG_WRITE("Failed to send ACK by socket\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
LOG_WRITE("Foward reboot req to service VM by UART\n");
|
LOG_PRINTF("Foward (%s) req to service VM by UART\n", msg);
|
||||||
start_uart_channel_dev_resend(c_dev, REQ_SYS_REBOOT, MIN_RESEND_TIME);
|
start_uart_channel_dev_resend(c_dev, msg, MIN_RESEND_TIME);
|
||||||
ret = send_message_by_uart(c_dev->uart_device, REQ_SYS_REBOOT, strlen(REQ_SYS_REBOOT));
|
ret = send_message_by_uart(c_dev->uart_device, msg, strlen(msg));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
LOG_WRITE("Failed to foward system reboot request to service VM by UART\n");
|
LOG_PRINTF("Failed to foward (%s) to service VM by UART\n", msg);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int socket_req_system_reboot_user_vm_handler(void *arg, int fd)
|
||||||
|
{
|
||||||
|
return req_system_shutdown_reboot(arg, fd, REQ_SYS_REBOOT, ACK_REQ_SYS_REBOOT);
|
||||||
|
}
|
||||||
|
|
||||||
int socket_req_system_shutdown_user_vm_handler(void *arg, int fd)
|
int socket_req_system_shutdown_user_vm_handler(void *arg, int fd)
|
||||||
{
|
{
|
||||||
int ret;
|
return req_system_shutdown_reboot(arg, fd, REQ_SYS_SHUTDOWN, ACK_REQ_SYS_SHUTDOWN);
|
||||||
struct channel_dev *c_dev = NULL;
|
|
||||||
|
|
||||||
usleep(LISTEN_INTERVAL + SECOND_TO_US);
|
|
||||||
c_dev = (struct channel_dev *)LIST_FIRST(&channel->tty_conn_head);
|
|
||||||
if (c_dev == NULL) {
|
|
||||||
(void) send_socket_ack(arg, fd, USER_VM_DISCONNECT);
|
|
||||||
LOG_WRITE("User VM is disconnect\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = send_socket_ack(arg, fd, ACK_REQ_SYS_SHUTDOWN);
|
|
||||||
if (ret < 0) {
|
|
||||||
LOG_WRITE("Failed to send ACK by socket\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
LOG_WRITE("Foward shutdown req to service VM by UART\n");
|
|
||||||
start_uart_channel_dev_resend(c_dev, REQ_SYS_SHUTDOWN, MIN_RESEND_TIME);
|
|
||||||
ret = send_message_by_uart(c_dev->uart_device, REQ_SYS_SHUTDOWN, strlen(REQ_SYS_SHUTDOWN));
|
|
||||||
if (ret < 0)
|
|
||||||
LOG_WRITE("Failed to foward system shutdown request to service VM by UART\n");
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int is_allowed_s5_channel_dev(struct life_mngr_config *conf, struct channel_dev *c_dev)
|
static int is_allowed_s5_channel_dev(struct life_mngr_config *conf, struct channel_dev *c_dev)
|
||||||
|
@ -418,7 +402,7 @@ int acked_sync_handler(void *arg, int fd)
|
||||||
* @param fd the file directory of the uart which receives message
|
* @param fd the file directory of the uart which receives message
|
||||||
* @return indicate this command is handled successful or not
|
* @return indicate this command is handled successful or not
|
||||||
*/
|
*/
|
||||||
int acked_req_shutdown_handler(void *arg, int fd)
|
int acked_req_shutdown_reboot_handler(void *arg, int fd)
|
||||||
{
|
{
|
||||||
struct channel_dev *c_dev = NULL;
|
struct channel_dev *c_dev = NULL;
|
||||||
struct uart_channel *c = (struct uart_channel *)arg;
|
struct uart_channel *c = (struct uart_channel *)arg;
|
||||||
|
|
|
@ -30,7 +30,10 @@ int socket_req_user_vm_shutdown_handler(void *arg, int fd);
|
||||||
*/
|
*/
|
||||||
int socket_req_user_vm_reboot_handler(void *arg, int fd);
|
int socket_req_user_vm_reboot_handler(void *arg, int fd);
|
||||||
|
|
||||||
int socket_req_system_reboot_handler(void *arg, int fd);
|
/**
|
||||||
|
* @brief The handler of request system reboot command on socket in user VM
|
||||||
|
*/
|
||||||
|
int socket_req_system_reboot_user_vm_handler(void *arg, int fd);
|
||||||
/**
|
/**
|
||||||
* @brief The handler of request system shutdown command on socket in user VM
|
* @brief The handler of request system shutdown command on socket in user VM
|
||||||
*/
|
*/
|
||||||
|
@ -109,7 +112,7 @@ int acked_sync_handler(void *arg, int fd);
|
||||||
* @param fd the file directory of the uart which receives message
|
* @param fd the file directory of the uart which receives message
|
||||||
* @return indicate this command is handled successful or not
|
* @return indicate this command is handled successful or not
|
||||||
*/
|
*/
|
||||||
int acked_req_shutdown_handler(void *arg, int fd);
|
int acked_req_shutdown_reboot_handler(void *arg, int fd);
|
||||||
/**
|
/**
|
||||||
* @brief The handler of poweroff command of lifecycle manager in user VM
|
* @brief The handler of poweroff command of lifecycle manager in user VM
|
||||||
*
|
*
|
||||||
|
|
|
@ -98,7 +98,7 @@ int init_socket_server_and_shutdown_commands(bool service_vm)
|
||||||
} else {
|
} else {
|
||||||
register_command_handler(socket_req_system_shutdown_user_vm_handler,
|
register_command_handler(socket_req_system_shutdown_user_vm_handler,
|
||||||
sock_server, REQ_SYS_SHUTDOWN);
|
sock_server, REQ_SYS_SHUTDOWN);
|
||||||
register_command_handler(socket_req_system_reboot_handler,
|
register_command_handler(socket_req_system_reboot_user_vm_handler,
|
||||||
sock_server, REQ_SYS_REBOOT);
|
sock_server, REQ_SYS_REBOOT);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -133,7 +133,8 @@ int init_uart_channel_devs_and_shutdown_commands(bool service_vm, char *uart_dev
|
||||||
register_command_handler(poweroff_cmd_handler, channel, POWEROFF_CMD);
|
register_command_handler(poweroff_cmd_handler, channel, POWEROFF_CMD);
|
||||||
register_command_handler(user_vm_shutdown_cmd_handler, channel, USER_VM_SHUTDOWN);
|
register_command_handler(user_vm_shutdown_cmd_handler, channel, USER_VM_SHUTDOWN);
|
||||||
register_command_handler(user_vm_reboot_cmd_handler, channel, USER_VM_REBOOT);
|
register_command_handler(user_vm_reboot_cmd_handler, channel, USER_VM_REBOOT);
|
||||||
register_command_handler(acked_req_shutdown_handler, channel, ACK_REQ_SYS_SHUTDOWN);
|
register_command_handler(acked_req_shutdown_reboot_handler, channel, ACK_REQ_SYS_SHUTDOWN);
|
||||||
|
register_command_handler(acked_req_shutdown_reboot_handler, channel, ACK_REQ_SYS_REBOOT);
|
||||||
register_command_handler(ack_timeout_default_handler, channel, ACK_TIMEOUT);
|
register_command_handler(ack_timeout_default_handler, channel, ACK_TIMEOUT);
|
||||||
|
|
||||||
c_dev = create_uart_channel_dev(channel, uart_dev_name, monitor_cmd_dispatch);
|
c_dev = create_uart_channel_dev(channel, uart_dev_name, monitor_cmd_dispatch);
|
||||||
|
|
|
@ -11,7 +11,7 @@ class SocketClient:
|
||||||
pass
|
pass
|
||||||
def connect_to_server(self):
|
def connect_to_server(self):
|
||||||
SOKET_ADDR = '/var/lib/life_mngr/monitor.sock'
|
SOKET_ADDR = '/var/lib/life_mngr/monitor.sock'
|
||||||
SHUTDOWN_REQ = 'req_sys_reboot'
|
SYS_REBOOT_REQ = 'req_sys_reboot'
|
||||||
BUF_LEN = 1024
|
BUF_LEN = 1024
|
||||||
|
|
||||||
# unix domain sockets
|
# unix domain sockets
|
||||||
|
@ -21,7 +21,7 @@ class SocketClient:
|
||||||
|
|
||||||
sock = socket.socket(socket_family, socket_type)
|
sock = socket.socket(socket_family, socket_type)
|
||||||
sock.connect(server_address)
|
sock.connect(server_address)
|
||||||
sock.sendall(SHUTDOWN_REQ.encode())
|
sock.sendall(SYS_REBOOT_REQ.encode())
|
||||||
data = sock.recv(BUF_LEN)
|
data = sock.recv(BUF_LEN)
|
||||||
print(f"Waiting for ACK message...: {data.decode()}")
|
print(f"Waiting for ACK message...: {data.decode()}")
|
||||||
sock.close()
|
sock.close()
|
||||||
|
|
Loading…
Reference in New Issue