15d3586b8SPhilippe Mathieu-Daudé /* 25d3586b8SPhilippe Mathieu-Daudé * QEMU Guest Agent common/cross-platform common commands 35d3586b8SPhilippe Mathieu-Daudé * 45d3586b8SPhilippe Mathieu-Daudé * Copyright (c) 2020 Red Hat, Inc. 55d3586b8SPhilippe Mathieu-Daudé * 65d3586b8SPhilippe Mathieu-Daudé * This work is licensed under the terms of the GNU GPL, version 2 or later. 75d3586b8SPhilippe Mathieu-Daudé * See the COPYING file in the top-level directory. 85d3586b8SPhilippe Mathieu-Daudé */ 95d3586b8SPhilippe Mathieu-Daudé #ifndef QGA_COMMANDS_COMMON_H 105d3586b8SPhilippe Mathieu-Daudé #define QGA_COMMANDS_COMMON_H 115d3586b8SPhilippe Mathieu-Daudé 125d3586b8SPhilippe Mathieu-Daudé #include "qga-qapi-types.h" 13518b0d80SAlexander Ivanov #include "guest-agent-core.h" 14518b0d80SAlexander Ivanov #include "qemu/queue.h" 15518b0d80SAlexander Ivanov 16518b0d80SAlexander Ivanov #if defined(__linux__) 17518b0d80SAlexander Ivanov #include <linux/fs.h> 18518b0d80SAlexander Ivanov #endif /* __linux__ */ 19518b0d80SAlexander Ivanov 20bad0001eSAlexander Ivanov #ifdef __FreeBSD__ 21bad0001eSAlexander Ivanov #include <ufs/ffs/fs.h> 22bad0001eSAlexander Ivanov #endif /* __FreeBSD__ */ 23bad0001eSAlexander Ivanov 24518b0d80SAlexander Ivanov #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) 25518b0d80SAlexander Ivanov typedef struct FsMount { 26518b0d80SAlexander Ivanov char *dirname; 27518b0d80SAlexander Ivanov char *devtype; 28518b0d80SAlexander Ivanov unsigned int devmajor, devminor; 29bad0001eSAlexander Ivanov #if defined(__FreeBSD__) 30bad0001eSAlexander Ivanov dev_t dev; 31bad0001eSAlexander Ivanov fsid_t fsid; 32bad0001eSAlexander Ivanov #endif 33518b0d80SAlexander Ivanov QTAILQ_ENTRY(FsMount) next; 34518b0d80SAlexander Ivanov } FsMount; 35518b0d80SAlexander Ivanov 36518b0d80SAlexander Ivanov typedef QTAILQ_HEAD(FsMountList, FsMount) FsMountList; 37518b0d80SAlexander Ivanov 38518b0d80SAlexander Ivanov bool build_fs_mount_list(FsMountList *mounts, Error **errp); 39518b0d80SAlexander Ivanov void free_fs_mount_list(FsMountList *mounts); 40518b0d80SAlexander Ivanov #endif /* CONFIG_FSFREEZE || CONFIG_FSTRIM */ 41518b0d80SAlexander Ivanov 42518b0d80SAlexander Ivanov #if defined(CONFIG_FSFREEZE) 43518b0d80SAlexander Ivanov int64_t qmp_guest_fsfreeze_do_freeze_list(bool has_mountpoints, 44518b0d80SAlexander Ivanov strList *mountpoints, 45518b0d80SAlexander Ivanov FsMountList mounts, 46518b0d80SAlexander Ivanov Error **errp); 47518b0d80SAlexander Ivanov int qmp_guest_fsfreeze_do_thaw(Error **errp); 48518b0d80SAlexander Ivanov #endif /* CONFIG_FSFREEZE */ 495d3586b8SPhilippe Mathieu-Daudé 50*a1241094SAlexander Ivanov #ifdef HAVE_GETIFADDRS 51*a1241094SAlexander Ivanov #include <ifaddrs.h> 52*a1241094SAlexander Ivanov bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, 53*a1241094SAlexander Ivanov bool *obtained, Error **errp); 54*a1241094SAlexander Ivanov #endif 55*a1241094SAlexander Ivanov 565d3586b8SPhilippe Mathieu-Daudé typedef struct GuestFileHandle GuestFileHandle; 575d3586b8SPhilippe Mathieu-Daudé 585d3586b8SPhilippe Mathieu-Daudé GuestFileHandle *guest_file_handle_find(int64_t id, Error **errp); 595d3586b8SPhilippe Mathieu-Daudé 60ead83a13SPhilippe Mathieu-Daudé GuestFileRead *guest_file_read_unsafe(GuestFileHandle *gfh, 61ead83a13SPhilippe Mathieu-Daudé int64_t count, Error **errp); 62ead83a13SPhilippe Mathieu-Daudé 63548fb0daSMarc-André Lureau /** 64548fb0daSMarc-André Lureau * qga_get_host_name: 65548fb0daSMarc-André Lureau * @errp: Error object 66548fb0daSMarc-André Lureau * 67548fb0daSMarc-André Lureau * Operating system agnostic way of querying host name. 68548fb0daSMarc-André Lureau * Compared to g_get_host_name(), it doesn't cache the result. 69548fb0daSMarc-André Lureau * 70548fb0daSMarc-André Lureau * Returns allocated hostname (caller should free), NULL on failure. 71548fb0daSMarc-André Lureau */ 72548fb0daSMarc-André Lureau char *qga_get_host_name(Error **errp); 73548fb0daSMarc-André Lureau 745d3586b8SPhilippe Mathieu-Daudé #endif 75