aboutsummaryrefslogtreecommitdiffstats
path: root/src/dumm
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2008-07-04 06:58:04 +0000
committerMartin Willi <martin@strongswan.org>2008-07-04 06:58:04 +0000
commit4302d4f0120cebe54c90ae7ecf55a90f641eb105 (patch)
tree5caea5a8a49351118c99700c9b7bfe000a9592e4 /src/dumm
parent60721cee7354bfac985fe9403da25af6a5a3a924 (diff)
downloadstrongswan-4302d4f0120cebe54c90ae7ecf55a90f641eb105.tar.bz2
strongswan-4302d4f0120cebe54c90ae7ecf55a90f641eb105.tar.xz
some stability improvements
Diffstat (limited to 'src/dumm')
-rw-r--r--src/dumm/cowfs.c4
-rw-r--r--src/dumm/guest.c1
-rw-r--r--src/dumm/iface.c8
-rw-r--r--src/dumm/mconsole.c23
4 files changed, 21 insertions, 15 deletions
diff --git a/src/dumm/cowfs.c b/src/dumm/cowfs.c
index 4c16c7c5d..f7984635a 100644
--- a/src/dumm/cowfs.c
+++ b/src/dumm/cowfs.c
@@ -858,13 +858,15 @@ cowfs_t *cowfs_create(char *master, char *host, char *mount)
{
DBG1("failed to open master filesystem '%s'", master);
free(this);
+ return NULL;
}
this->host_fd = open(host, O_RDONLY | O_DIRECTORY);
- if (this->master_fd < 0)
+ if (this->host_fd < 0)
{
DBG1("failed to open host filesystem '%s'", host);
close(this->master_fd);
free(this);
+ return NULL;
}
this->over_fd = -1;
diff --git a/src/dumm/guest.c b/src/dumm/guest.c
index 4b2652688..d43f46d99 100644
--- a/src/dumm/guest.c
+++ b/src/dumm/guest.c
@@ -424,6 +424,7 @@ static void destroy(private_guest_t *this)
{
close(this->dir);
}
+ this->ifaces->destroy(this->ifaces);
free(this->dirname);
free(this->name);
free(this);
diff --git a/src/dumm/iface.c b/src/dumm/iface.c
index b78c10bec..b1fc641d0 100644
--- a/src/dumm/iface.c
+++ b/src/dumm/iface.c
@@ -205,10 +205,6 @@ iface_t *iface_create(char *guest, char *guestif, mconsole_t *mconsole)
free(this);
return NULL;
}
- if (!iface_control(this->hostif, TRUE))
- {
- DBG1("bringing iface '%s' up failed: %m", this->hostif);
- }
if (!this->mconsole->add_iface(this->mconsole, this->guestif, this->hostif))
{
DBG1("creating interface '%s' in guest failed", this->guestif);
@@ -218,6 +214,10 @@ iface_t *iface_create(char *guest, char *guestif, mconsole_t *mconsole)
free(this);
return NULL;
}
+ if (!iface_control(this->hostif, TRUE))
+ {
+ DBG1("bringing iface '%s' up failed: %m", this->hostif);
+ }
return &this->public;
}
diff --git a/src/dumm/mconsole.c b/src/dumm/mconsole.c
index d9864f676..78c97fb6b 100644
--- a/src/dumm/mconsole.c
+++ b/src/dumm/mconsole.c
@@ -156,21 +156,25 @@ static int request(private_mconsole_t *this, char *command,
*/
static bool add_iface(private_mconsole_t *this, char *guest, char *host)
{
- char buf[128];
- int len;
+ char in[128], out[128];
+ int len, tries = 0;
- len = snprintf(buf, sizeof(buf), "config %s=tuntap,%s", guest, host);
- if (len < 0 || len >= sizeof(buf))
+ len = snprintf(in, sizeof(in), "config %s=tuntap,%s", guest, host);
+ if (len < 0 || len >= sizeof(in))
{
return FALSE;
}
- len = sizeof(buf);
- if (request(this, buf, buf, &len) != 0)
+ while (tries++ < 10)
{
- DBG1("adding interface failed: %.*s", len, buf);
- return FALSE;
+ len = sizeof(in);
+ if (request(this, in, out, &len) == 0)
+ {
+ return TRUE;
+ }
+ usleep(10000 * tries);
}
- return TRUE;
+ DBG1("adding interface failed: %.*s", len, out);
+ return FALSE;
}
/**
@@ -188,7 +192,6 @@ static bool del_iface(private_mconsole_t *this, char *guest)
}
if (request(this, buf, buf, &len) != 0)
{
- DBG1("removing interface failed: %.*s", len, buf);
return FALSE;
}
return TRUE;