Used as repagent patch v3
--- block/repagent/repagent.c | 4 ++-- block/repagent/repagent.h | 2 +- block/repagent/repagent_client.c | 35 ++++++++--------------------------- 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/block/repagent/repagent.c b/block/repagent/repagent.c index a5c0636..5dd26dd 100644 --- a/block/repagent/repagent.c +++ b/block/repagent/repagent.c @@ -214,7 +214,7 @@ static void repagent_report_volumes_to_hub(void) } } -bool repaget_start_protect(RepCmdStartProtect *pcmd, +bool repagent_start_protect(RepCmdStartProtect *pcmd, RepCmdDataStartProtect *pcmd_data) { printf("Start protect vol %s, ID %llu\n", pcmd_data->volume_name, @@ -262,7 +262,7 @@ bool repagent_remote_io(RepCmdRemoteIoReq *pcmd, uint8_t *pdata) RepagentVolume *vol = repagent_get_volume_by_id(pcmd->volume_id); int size_bytes = pcmd->size_sectors * 512; if (vol == NULL) { - printf("Vol read - Could not find vol id %llx\n", + printf("Remote IO - Could not find vol id %llx\n", (unsigned long long int) pcmd->volume_id); RepCmdRemoteIoRes *p_res_cmd = (RepCmdRemoteIoRes *) repcmd_new( REPHUB_CMD_REMOTE_IO_RES, 0, NULL); diff --git a/block/repagent/repagent.h b/block/repagent/repagent.h index 157a9b6..66c63d2 100644 --- a/block/repagent/repagent.h +++ b/block/repagent/repagent.h @@ -43,7 +43,7 @@ void repagent_handle_protected_write(BlockDriverState *bs, void repagent_register_drive(const char *drive_path, BlockDriverState *driver_ptr); void repagent_deregister_drive(BlockDriverState *driver_ptr); -bool repaget_start_protect(RepCmdStartProtect *pcmd, +bool repagent_start_protect(RepCmdStartProtect *pcmd, RepCmdDataStartProtect *pcmd_data); bool repagent_remote_io(struct RepCmdRemoteIoReq *pcmd, uint8_t *pdata); void repagent_client_connected(void); diff --git a/block/repagent/repagent_client.c b/block/repagent/repagent_client.c index 2e57ed0..bfd1778 100644 --- a/block/repagent/repagent_client.c +++ b/block/repagent/repagent_client.c @@ -27,15 +27,12 @@ #include "repagent_client.h" #include "repagent.h" #include "main-loop.h" +#include "qemu_socket.h" #include <string.h> #include <stdlib.h> #include <errno.h> #include <stdio.h> -#include <resolv.h> -#include <sys/socket.h> -#include <arpa/inet.h> -#include <netinet/in.h> #include <unistd.h> #define ZERO_MEM_OBJ(pObj) memset(pObj, 0, sizeof(*pObj)) @@ -70,38 +67,22 @@ void *repagent_listen(void *pParam) printf("Creating repagent listener thread...\n"); g_free(pServerParams); - struct sockaddr_in my_addr; - int err; int retries = 0; - g_client_state.hsock = socket(AF_INET, SOCK_STREAM, 0); + g_client_state.hsock = qemu_socket(AF_INET, SOCK_STREAM, 0); if (g_client_state.hsock == -1) { printf("Error initializing socket %d\n", errno); return (void *) -1; } - int param = 1; - - if ((setsockopt(g_client_state.hsock, SOL_SOCKET, SO_REUSEADDR, - (char *) ¶m, sizeof(int)) == -1) - || (setsockopt(g_client_state.hsock, SOL_SOCKET, SO_KEEPALIVE, - (char *) ¶m, sizeof(int)) == -1)) { - printf("Error setting options %d\n", errno); - return (void *) -1; - } - - my_addr.sin_family = AF_INET; - my_addr.sin_port = htons(host_port); - memset(&(my_addr.sin_zero), 0, 8); - - my_addr.sin_addr.s_addr = inet_addr(host_name); - + int opts_str_len = strlen(host_name) + 2 + 10; + char opts[opts_str_len]; + snprintf(opts, opts_str_len, "%s:%u", host_name, pServerParams->port); /* Reconnect loop */ while (!g_client_state.is_terminate_receive) { - - if (connect(g_client_state.hsock, (struct sockaddr *) &my_addr, - sizeof(my_addr)) == -1) { + g_client_state.hsock = inet_connect(opts, SOCK_STREAM); + if (g_client_state.hsock < 0) { err = errno; if (err != EINPROGRESS) { retries++; @@ -144,7 +125,7 @@ void repagent_process_cmd(RepCmd *pcmd, uint8_t *pdata, void *clientPtr) printf("Repagent got cmd %d\n", pcmd->hdr.cmdid); switch (pcmd->hdr.cmdid) { case REPHUB_CMD_START_PROTECT: { - is_free_data = repaget_start_protect((RepCmdStartProtect *) pcmd, + is_free_data = repagent_start_protect((RepCmdStartProtect *) pcmd, (RepCmdDataStartProtect *) pdata); } break; -- 1.7.6.5