mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-04-28 11:43:56 +00:00
misc: life_mngr: Fix Linux and rtvm not restarting acrn in life_mngr
Only Windows virtual machines can restart ACRN through life_mngr. Added Linux and rtvm to restart acrn in life_mngr. 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
aebc16e9e5
commit
d2fae30b23
@ -61,6 +61,7 @@ all-linux: life_mngr.service
|
|||||||
$(CC) -g $(LM_C_SRCS) -o $(OUT_DIR)/life_mngr -lpthread $(LIFEMNGR_CFLAGS) $(LIFEMNGR_LDFLAGS)
|
$(CC) -g $(LM_C_SRCS) -o $(OUT_DIR)/life_mngr -lpthread $(LIFEMNGR_CFLAGS) $(LIFEMNGR_LDFLAGS)
|
||||||
cp life_mngr.conf $(OUT_DIR)/life_mngr.conf
|
cp life_mngr.conf $(OUT_DIR)/life_mngr.conf
|
||||||
cp s5_trigger_linux.py $(OUT_DIR)/s5_trigger_linux.py
|
cp s5_trigger_linux.py $(OUT_DIR)/s5_trigger_linux.py
|
||||||
|
cp system_reboot_trigger_linux_rtvm.py $(OUT_DIR)/system_reboot_trigger_linux_rtvm.py
|
||||||
|
|
||||||
# only build for Windows if cross compiler is installed
|
# only build for Windows if cross compiler is installed
|
||||||
all-win:
|
all-win:
|
||||||
@ -81,6 +82,7 @@ ifneq ($(OUT_DIR),.)
|
|||||||
rm -f $(OUT_DIR)/life_mngr.service
|
rm -f $(OUT_DIR)/life_mngr.service
|
||||||
rm -f $(OUT_DIR)/life_mngr.conf
|
rm -f $(OUT_DIR)/life_mngr.conf
|
||||||
rm -f $(OUT_DIR)/s5_trigger_linux.py
|
rm -f $(OUT_DIR)/s5_trigger_linux.py
|
||||||
|
rm -f $(OUT_DIR)/system_reboot_trigger_linux_rtvm.py
|
||||||
rm -rf $(OUT_DIR)
|
rm -rf $(OUT_DIR)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
GEN_CMD_OBJ(USER_VM_REBOOT, USER_VM_REBOOT_ID),\
|
GEN_CMD_OBJ(USER_VM_REBOOT, USER_VM_REBOOT_ID),\
|
||||||
GEN_CMD_OBJ(ACK_USER_VM_REBOOT, ACK_USER_VM_REBOOT_ID),\
|
GEN_CMD_OBJ(ACK_USER_VM_REBOOT, ACK_USER_VM_REBOOT_ID),\
|
||||||
GEN_CMD_OBJ(REQ_SYS_REBOOT, REQ_SYS_REBOOT_ID), \
|
GEN_CMD_OBJ(REQ_SYS_REBOOT, REQ_SYS_REBOOT_ID), \
|
||||||
|
GEN_CMD_OBJ(ACK_REQ_SYS_REBOOT, ACK_REQ_SYS_REBOOT_ID), \
|
||||||
|
|
||||||
struct command dm_command_list[CMD_END] = {CMD_OBJS};
|
struct command dm_command_list[CMD_END] = {CMD_OBJS};
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ enum command_id {
|
|||||||
USER_VM_REBOOT_ID,
|
USER_VM_REBOOT_ID,
|
||||||
ACK_USER_VM_REBOOT_ID,
|
ACK_USER_VM_REBOOT_ID,
|
||||||
REQ_SYS_REBOOT_ID,
|
REQ_SYS_REBOOT_ID,
|
||||||
|
ACK_REQ_SYS_REBOOT_ID,
|
||||||
CMD_END,
|
CMD_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -173,6 +173,33 @@ 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 ret;
|
||||||
|
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_REBOOT);
|
||||||
|
if (ret < 0) {
|
||||||
|
LOG_WRITE("Failed to send ACK by socket\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
LOG_WRITE("Foward reboot req to service VM by UART\n");
|
||||||
|
start_uart_channel_dev_resend(c_dev, REQ_SYS_REBOOT, MIN_RESEND_TIME);
|
||||||
|
ret = send_message_by_uart(c_dev->uart_device, REQ_SYS_REBOOT, strlen(REQ_SYS_REBOOT));
|
||||||
|
if (ret < 0)
|
||||||
|
LOG_WRITE("Failed to foward system reboot request to service VM by UART\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
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;
|
int ret;
|
||||||
|
@ -29,6 +29,8 @@ int socket_req_user_vm_shutdown_handler(void *arg, int fd);
|
|||||||
* @brief The handler of request user reboot command on socket in service VM
|
* @brief The handler of request user reboot command on socket in service VM
|
||||||
*/
|
*/
|
||||||
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 shutdown command on socket in user VM
|
* @brief The handler of request system shutdown command on socket in user VM
|
||||||
*/
|
*/
|
||||||
|
@ -98,6 +98,8 @@ 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,
|
||||||
|
sock_server, REQ_SYS_REBOOT);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
31
misc/services/life_mngr/system_reboot_trigger_linux_rtvm.py
Normal file
31
misc/services/life_mngr/system_reboot_trigger_linux_rtvm.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
#
|
||||||
|
# Copyright (C) 2021 Intel Corporation.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
#
|
||||||
|
import socket
|
||||||
|
|
||||||
|
class SocketClient:
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
def connect_to_server(self):
|
||||||
|
SOKET_ADDR = '/var/lib/life_mngr/monitor.sock'
|
||||||
|
SHUTDOWN_REQ = 'req_sys_reboot'
|
||||||
|
BUF_LEN = 1024
|
||||||
|
|
||||||
|
# unix domain sockets
|
||||||
|
server_address = SOKET_ADDR
|
||||||
|
socket_family = socket.AF_UNIX
|
||||||
|
socket_type = socket.SOCK_STREAM
|
||||||
|
|
||||||
|
sock = socket.socket(socket_family, socket_type)
|
||||||
|
sock.connect(server_address)
|
||||||
|
sock.sendall(SHUTDOWN_REQ.encode())
|
||||||
|
data = sock.recv(BUF_LEN)
|
||||||
|
print(f"Waiting for ACK message...: {data.decode()}")
|
||||||
|
sock.close()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
socket_client_obj = SocketClient()
|
||||||
|
socket_client_obj.connect_to_server()
|
Loading…
Reference in New Issue
Block a user