Merge branch 'dev' of https://git.robbyzambito.me/robby/guestfs-inspect into dev
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
FROM debian
|
FROM debian
|
||||||
|
|
||||||
RUN apt update && apt upgrade -y && apt install -y libczmq-dev libguestfs-dev gcc valgrind gdb make
|
RUN apt update && apt upgrade -y
|
||||||
|
RUN apt install -y libczmq-dev libguestfs-dev gcc valgrind gdb make pkg-config
|
||||||
|
|||||||
7
Makefile
7
Makefile
@@ -1,2 +1,7 @@
|
|||||||
build:
|
daemon:
|
||||||
gcc guestfs-inspectd.c -o guestfs-inspectd `pkg-config libguestfs libczmq --cflags --libs`
|
gcc guestfs-inspectd.c -o guestfs-inspectd `pkg-config libguestfs libczmq --cflags --libs`
|
||||||
|
|
||||||
|
client:
|
||||||
|
gcc guestfs-inspect.c -o guestfs-inspect `pkg-config libguestfs libczmq --cflags --libs`
|
||||||
|
|
||||||
|
build: daemon client
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <czmq.h>
|
||||||
|
#include <guestfs.h>
|
||||||
|
|
||||||
|
#include "libguestfs-inspect.h"
|
||||||
|
|
||||||
|
#define STREQ(a, b) (strcmp((a), (b)) == 0)
|
||||||
|
|
||||||
|
void print_help(char *);
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
if (argc == 1) {
|
||||||
|
print_help(argv[0]);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *ep = endpoint();
|
||||||
|
zsock_t *daemon = zsock_new_req(ep);
|
||||||
|
free(ep);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_help(char *name) {
|
||||||
|
printf("Usage: %s [name] [command] <arguments>\n", name);
|
||||||
|
printf("Commands:\n");
|
||||||
|
printf(" ls <path>\n");
|
||||||
|
printf(" cat <path>\n");
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,19 +11,9 @@
|
|||||||
|
|
||||||
static void *worker_task(zsock_t*, char*);
|
static void *worker_task(zsock_t*, char*);
|
||||||
|
|
||||||
char *endpoint(void);
|
|
||||||
|
|
||||||
static int compare_key_len(const void*, const void*);
|
static int compare_key_len(const void*, const void*);
|
||||||
static int count_mountpoints(char *const *argv);
|
static int count_mountpoints(char *const *argv);
|
||||||
|
|
||||||
char *endpoint() {
|
|
||||||
// TODO: This should be based on GUESTFS_INSPECT_ENDPOINT, or XDG_RUNTIME_DIR if the former is not set, and default to a sensible path if neither are set.
|
|
||||||
const char* ep = "ipc:///tmp/guestfs-inspect.sock";
|
|
||||||
char *res = malloc(strlen(ep) + 1);
|
|
||||||
strcpy(res, ep);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int compare_key_len(const void *p1, const void *p2) {
|
static int compare_key_len(const void *p1, const void *p2) {
|
||||||
const char *key1 = *(char* const*) p1;
|
const char *key1 = *(char* const*) p1;
|
||||||
const char *key2 = *(char* const*) p2;
|
const char *key2 = *(char* const*) p2;
|
||||||
@@ -105,8 +95,8 @@ static void *worker_task(zsock_t *pipe, char *disk_path) {
|
|||||||
// ZeroMQ Opens here
|
// ZeroMQ Opens here
|
||||||
zsock_signal(pipe, 0);
|
zsock_signal(pipe, 0);
|
||||||
while (true) {
|
while (true) {
|
||||||
zmsg_t *message = zmsg_recv(pipe);
|
zmsg_t *msg = zmsg_recv(pipe);
|
||||||
if (!message) {
|
if (!msg) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Process message
|
// Process message
|
||||||
@@ -115,7 +105,7 @@ static void *worker_task(zsock_t *pipe, char *disk_path) {
|
|||||||
|
|
||||||
// Sending reply
|
// Sending reply
|
||||||
zmsg_send(&msg, pipe);
|
zmsg_send(&msg, pipe);
|
||||||
zmsg_destory(&msg);
|
zmsg_destroy(&msg);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -154,13 +144,18 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
// Find the worker with the given name.
|
// Find the worker with the given name.
|
||||||
zactor_t *worker = NULL;
|
zactor_t *worker = NULL;
|
||||||
|
struct guestfs_inpsect_command *cmd = (struct guestfs_inpsect_command *) zmsg_last(msg);
|
||||||
for (int i = 0; i < worker_count; i++) {
|
for (int i = 0; i < worker_count; i++) {
|
||||||
|
if (STREQ(cmd->name, worker_map[i].name)) {
|
||||||
|
worker = worker_map[i].name;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (worker) {
|
if (worker) {
|
||||||
zmsg_send(&msg, zactor_sock(worker));
|
zmsg_send(&msg, zactor_sock(worker));
|
||||||
} else {
|
} else {
|
||||||
// The name specified does not exist.
|
// The name specified does not exist.
|
||||||
|
printf("There is no drive with the name %s\n.", cmd->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|||||||
@@ -21,3 +21,11 @@ struct guestfs_inpsect_command {
|
|||||||
char name[];
|
char name[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static char *endpoint() {
|
||||||
|
// TODO: This should be based on GUESTFS_INSPECT_ENDPOINT, or XDG_RUNTIME_DIR if the former is not set, and default to a sensible path if neither are set.
|
||||||
|
const char* ep = "ipc:///tmp/guestfs-inspect.sock";
|
||||||
|
char *res = malloc(strlen(ep) + 1);
|
||||||
|
strcpy(res, ep);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user