From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:39165) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SFlgV-0006IB-KX for qemu-devel@nongnu.org; Thu, 05 Apr 2012 08:21:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SFlgM-0003RC-PC for qemu-devel@nongnu.org; Thu, 05 Apr 2012 08:21:01 -0400 Received: from mail-qa0-f46.google.com ([209.85.216.46]:52839) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SFlgM-0003M0-KY for qemu-devel@nongnu.org; Thu, 05 Apr 2012 08:20:54 -0400 Received: by mail-qa0-f46.google.com with SMTP id m19so1282064qat.12 for ; Thu, 05 Apr 2012 05:20:50 -0700 (PDT) From: Ori Mamluk References: 5ac49909cf2a18cff06481f5d2b54405@mail.gmail.com In-Reply-To: 5ac49909cf2a18cff06481f5d2b54405@mail.gmail.com MIME-Version: 1.0 Date: Thu, 5 Apr 2012 15:20:49 +0300 Message-ID: Content-Type: multipart/alternative; boundary=00248c7117950855ad04bced9208 Subject: [Qemu-devel] [RFC PATCH v3 9/9] repagent: Moved to use qemu-socket instead of platform dependent. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Roni Luxenberg , Stefan Hajnoczi , dlaor@redhat.com, Anthony Liguori , Oded Kedem , Yair Kuszpet , Paolo Bonzini --00248c7117950855ad04bced9208 Content-Type: text/plain; charset=ISO-8859-1 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 #include #include #include -#include -#include -#include -#include #include #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 --00248c7117950855ad04bced9208 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

Used as repagent patch v3

=

=A0

---

block/repagent/repagent.c=A0=A0=A0=A0=A0=A0=A0 |=A0=A0=A0 4 ++--

block/repagent/repagent.h=A0=A0=A0=A0=A0=A0=A0 |=A0= =A0=A0 2 +-

block/repagent/repagent_client.c |=A0= =A0 35 ++++++++---------------------------

3 file= s changed, 11 insertions(+), 30 deletions(-)

=A0

diff --git a/block/rep= agent/repagent.c b/block/repagent/repagent.c

inde= x a5c0636..5dd26dd 100644

--- a/block/repagent/re= pagent.c

+++ b/block/repagent/repagent.c

@@ -214,7 +214,7 @@ static void repagent_report_volumes_to_hub(void)<= /p>

=A0=A0=A0=A0 }

}

=A0

-bool repaget_start_protect(RepCmdStartProtec= t *pcmd,

+bool repagent_start_protect(RepCmdStart= Protect *pcmd,

=A0=A0=A0=A0=A0=A0=A0=A0 RepCmdDat= aStartProtect *pcmd_data)

{

=A0=A0=A0=A0 printf(&quo= t;Start protect vol %s, ID %llu\n", pcmd_data->volume_name,

@@ -262,7 +262,7 @@ bool repagent_remote_io(RepCmdRemote= IoReq *pcmd, uint8_t *pdata)

=A0=A0=A0=A0 RepagentVolume *vol =3D repagent_get_vo= lume_by_id(pcmd->volume_id);

=A0=A0=A0=A0 int = size_bytes =3D pcmd->size_sectors * 512;

=A0= =A0=A0=A0 if (vol =3D=3D NULL) {

-=A0=A0=A0=A0=A0=A0=A0 printf("Vol read - Could= not find vol id %llx\n",

+=A0=A0=A0=A0=A0= =A0=A0 printf("Remote IO - Could not find vol id %llx\n",

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (unsign= ed long long int) pcmd->volume_id);

=A0=A0=A0=A0=A0=A0=A0=A0 RepCmdRemoteIoRes *p_res_cm= d =3D (RepCmdRemoteIoRes *) repcmd_new(

=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 REPHUB_CMD_REMOTE_IO_RES, 0, NULL);=

diff --git a/block/repagent/repagent.h b/block/r= epagent/repagent.h

index 157a9b6..66c63d2 100644

--- a/block/repagent/repagent.h

+++ b/block/r= epagent/repagent.h

@@ -43,7 +43,7 @@ void repagen= t_handle_protected_write(BlockDriverState *bs,

void repagent_register_drive(const char *drive_path,=

=A0=A0=A0=A0=A0=A0=A0=A0 BlockDriverState *drive= r_ptr);

void repagent_deregister_drive(BlockDrive= rState *driver_ptr);

-bool repaget_start_protect(RepCmdStartProtect *pcmd= ,

+bool repagent_start_protect(RepCmdStartProtect= *pcmd,

=A0=A0=A0=A0=A0=A0=A0=A0 RepCmdDataStartP= rotect *pcmd_data);

bool repagent_remote_io(struct RepCmdRemoteIoReq *pc= md, uint8_t *pdata);

void repagent_client_connect= ed(void);

diff --git a/block/repagent/repagent_cl= ient.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"

#i= nclude "main-loop.h"

+#include "qe= mu_socket.h"

=A0

=A0#include <string= .h>

#include <stdlib.h>

#include <errno.h>

#include <s= tdio.h>

-#include <resolv.h>

-#include <sys/socket.h>

-#include <arp= a/inet.h>

-#include <netinet/in.h>

#include <unistd.h>

=A0

=A0#define ZERO_MEM_OBJ(pObj) memset(pObj, 0, sizeof(*pObj))

@@ -70,38 +67,22 @@ void *repagent_listen(void *pParam)<= /p>

=A0=A0=A0=A0 printf("Creating repagent listener thread...\n");

=A0=A0=A0=A0 g_free(pServerParams);

=A0

-=A0=A0=A0 struct sockaddr_in my_a= ddr;

-

=A0=A0=A0=A0 int err;

=A0=A0=A0=A0 int retries =3D 0;

=A0

-=A0=A0=A0 g_client_state.hsock =3D socket(AF_INET, SOCK_STR= EAM, 0);

+=A0=A0=A0 g_client_state.hsock =3D qemu_socket(AF_INET, SOCK_STREAM, 0);

=A0=A0=A0=A0 if (g_client_state.hsock =3D=3D -1) {=

=A0=A0=A0=A0=A0=A0=A0=A0 printf("Error init= ializing socket %d\n", errno);

=A0=A0=A0=A0=A0=A0=A0=A0 return (void *) -1;

=A0=A0=A0=A0 }

=A0

-=A0=A0=A0 int param =3D 1;

-

<= p class=3D"MsoNormal">-=A0=A0=A0 if ((setsockopt(g_client_state.hsock, SOL_= SOCKET, SO_REUSEADDR,

-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (char *) &par= am, sizeof(int)) =3D=3D -1)

-=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 || (setsockopt(g_client_state.hsock, SOL_SOCKET, SO_KEEPALI= VE,

-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 (char *) &param, sizeof(int)) =3D=3D -1)) {

-=A0=A0=A0=A0=A0=A0=A0 printf("Error setting op= tions %d\n", errno);

-=A0=A0=A0=A0=A0=A0=A0 = return (void *) -1;

-=A0=A0=A0 }

-

-=A0=A0=A0 my_addr.sin_family =3D AF_= INET;

-=A0=A0=A0 my_addr.sin_port =3D htons(host_port);

-=A0=A0=A0 memset(&(my_addr.sin_zero), 0, 8);

-

-=A0=A0=A0 my_addr.sin= _addr.s_addr =3D inet_addr(host_name);

-

+=A0=A0=A0 int opts_str_= len =3D strlen(host_name) + 2 + 10;

+=A0=A0=A0 ch= ar opts[opts_str_len];

+=A0=A0=A0 snprintf(opts, = opts_str_len, "%s:%u", host_name, pServerParams->port);

=A0=A0=A0=A0/* Reconnect loop */

=A0=A0=A0=A0 while (!g_client_state.is_terminate_receive) {

-

-=A0=A0=A0=A0=A0=A0=A0 if (co= nnect(g_client_state.hsock, (struct sockaddr *) &my_addr,

-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 sizeo= f(my_addr)) =3D=3D -1) {

+=A0=A0=A0=A0=A0=A0=A0 g= _client_state.hsock =3D inet_connect(opts, SOCK_STREAM);

+=A0=A0=A0=A0=A0=A0=A0 if (g_client_state.hsock < 0) {

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 err =3D errno;<= /p>

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if (err !=3D= EINPROGRESS) {

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 retries++;

@@ -144,7 +125,7 @@ vo= id repagent_process_cmd(RepCmd *pcmd, uint8_t *pdata, void *clientPtr)

=A0=A0=A0=A0 printf("Repagent got cmd %d\n"= ;, pcmd->hdr.cmdid);

=A0=A0=A0=A0 switch (pcmd= ->hdr.cmdid) {

=A0=A0=A0=A0 case REPHUB_CMD_ST= ART_PROTECT: {

-=A0=A0=A0=A0=A0=A0=A0 is_free_data =3D repaget_start_protect((RepCmdStartP= rotect *) pcmd,

+=A0=A0=A0=A0=A0=A0=A0 is_free_da= ta =3D repagent_start_protect((RepCmdStartProtect *) pcmd,

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (RepCmdDataStart= Protect *) pdata);

=A0=A0=A0=A0 }

=A0=A0=A0= =A0=A0=A0=A0=A0 break;

--

1.7.6.5

=A0

--00248c7117950855ad04bced9208--