* [KVM-AUTOTEST PATCH] kvm test: Adding remote migration support
@ 2009-06-17 0:46 Lucas Meneghel Rodrigues
2009-06-17 0:53 ` Lucas Meneghel Rodrigues
0 siblings, 1 reply; 4+ messages in thread
From: Lucas Meneghel Rodrigues @ 2009-06-17 0:46 UTC (permalink / raw)
To: autotest; +Cc: kvm, Lucas Meneghel Rodrigues, Yogananth Subramanian
Make the current migration test handle remote migration. In order to
use remote migration, the following four parameters should be added
to the existing migration test:
remote = dst
hostip = <localhost ip or name>
remoteip = <remote host ip or name>
remuser = root
rempassword = <password>
The field remote=dst indicates the VM "dst" should be created on remote
machine. For example:
- migrate: install setup
type = migration
vms += " dst"
migration_test_command = help
kill_vm_on_error = yes
remote = dst
hostip = 192.168.1.2
remoteip = 192.168.1.3
remuser = root
rempassword = 123456
variants:
Signed-off-by: Yogananth Subramanian <anantyog@in.ibm.com>
---
client/tests/kvm/kvm_tests.cfg.sample | 6 +++
client/tests/kvm/kvm_tests.py | 2 +-
client/tests/kvm/kvm_vm.py | 61 +++++++++++++++++++++++++--------
3 files changed, 53 insertions(+), 16 deletions(-)
diff --git a/client/tests/kvm/kvm_tests.cfg.sample b/client/tests/kvm/kvm_tests.cfg.sample
index 931f748..ca7f1d0 100644
--- a/client/tests/kvm/kvm_tests.cfg.sample
+++ b/client/tests/kvm/kvm_tests.cfg.sample
@@ -54,6 +54,12 @@ variants:
vms += " dst"
migration_test_command = help
kill_vm_on_error = yes
+ remote = dst
+ hostip = 192.168.1.2
+ remoteip = 192.168.1.3
+ remuser = root
+ rempassword = 123456
+ kill_vm_on_error = yes
variants:
- 1:
start_vm_for_migration_dst = yes
diff --git a/client/tests/kvm/kvm_tests.py b/client/tests/kvm/kvm_tests.py
index 4270cae..32b1ba4 100644
--- a/client/tests/kvm/kvm_tests.py
+++ b/client/tests/kvm/kvm_tests.py
@@ -113,7 +113,7 @@ def run_migration(test, params, env):
session.close()
# Define the migration command
- cmd = "migrate -d tcp:localhost:%d" % dest_vm.migration_port
+ cmd = "migrate -d tcp:%s:%d" % (dest_vm.hostip, dest_vm.migration_port)
logging.debug("Migration command: %s" % cmd)
# Migrate
diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py
index 5028161..c15d0a1 100644
--- a/client/tests/kvm/kvm_vm.py
+++ b/client/tests/kvm/kvm_vm.py
@@ -1,5 +1,5 @@
#!/usr/bin/python
-import time, socket, os, logging, fcntl
+import time, socket, os, logging, fcntl, re
import kvm_utils
"""
@@ -113,6 +113,7 @@ class VM:
self.qemu_path = qemu_path
self.image_dir = image_dir
self.iso_dir = iso_dir
+ self.remote = False
# Find available monitor filename
@@ -170,8 +171,6 @@ class VM:
file.close()
if not self.qemu_path in cmdline:
return False
- if not self.monitor_file_name in cmdline:
- return False
return True
@@ -234,8 +233,6 @@ class VM:
qemu_cmd += qemu_path
# Add the VM's name
qemu_cmd += " -name '%s'" % name
- # Add the monitor socket parameter
- qemu_cmd += " -monitor unix:%s,server,nowait" % self.monitor_file_name
for image_name in kvm_utils.get_sub_dict_names(params, "images"):
image_params = kvm_utils.get_sub_dict(params, image_name)
@@ -320,6 +317,18 @@ class VM:
qemu_path = self.qemu_path
image_dir = self.image_dir
iso_dir = self.iso_dir
+ # If VM is remote, set hostip to ip of the remote machine
+ # If VM is local set hostip to localhost or hostip param
+ if params.get("remote") == "yes":
+ self.remote = True
+ self.hostip = params.get("remoteip")
+ self.qemu_path = params.get("qemu_path",qemu_path)
+ qemu_path = self.qemu_path
+ self.image_dir = params.get("image_dir",image_dir)
+ image_dir = self.image_dir
+ else:
+ self.remote = False
+ self.hostip = params.get("hostip","localhost")
# Verify the md5sum of the ISO image
iso = params.get("cdrom")
@@ -377,9 +386,32 @@ class VM:
# Add -incoming option to the qemu command
qemu_command += " -incoming tcp:0:%d" % self.migration_port
- logging.debug("Running qemu command:\n%s", qemu_command)
- (status, pid, output) = kvm_utils.run_bg(qemu_command, None,
- logging.debug, "(qemu) ")
+ self.monitor_port = kvm_utils.find_free_port(5400, 6000)
+ qemu_command += (" -monitor tcp:0:%d,server,nowait" %
+ self.monitor_port)
+
+ # If the VM is remote, get the username and password of remote host
+ # and lanch qemu command on the remote machine.
+ if self.remote:
+ remuser = params.get("remuser")
+ rempassword = params.get("rempassword")
+ sub = kvm_utils.ssh(self.hostip, 22, remuser, rempassword,
+ self.params.get("ssh_prompt", "[\#\$]"))
+ qemu_command +=" &"
+ kvm_log.debug("Running qemu command:\n%s" % qemu_command)
+ sub.sendline(qemu_command)
+
+ (status,output) = sub.read_up_to_prompt()
+ if "Exit " in output:
+ status = int(re.findall("Exit\s(\d+)",output)[0])
+ else:
+ pid = int(re.findall(".*] (\d+)",output)[0])
+ status = 0
+ else:
+ kvm_log.debug("Running qemu command:\n%s" % qemu_command)
+ (status, pid, output) = kvm_utils.run_bg(qemu_command, None,
+ kvm_log.debug,
+ "(qemu) ")
if status:
logging.debug("qemu exited with status %d", status)
@@ -450,9 +482,8 @@ class VM:
# Connect to monitor
logging.debug("Sending monitor command: %s" % command)
try:
- s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- s.setblocking(False)
- s.connect(self.monitor_file_name)
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.connect((self.hostip, self.monitor_port))
except:
logging.debug("Could not connect to monitor socket")
return (1, "")
@@ -542,8 +573,9 @@ class VM:
Return True if the VM's monitor is responsive.
"""
# Check if the process exists
- if not kvm_utils.pid_exists(self.pid):
- return False
+ if not self.remote:
+ if not kvm_utils.pid_exists(self.pid):
+ return False
# Try sending a monitor command
(status, output) = self.send_monitor_cmd("help")
if status:
@@ -573,8 +605,7 @@ class VM:
If port redirection is used, return 'localhost' (the guest has no IP
address of its own). Otherwise return the guest's IP address.
"""
- # Currently redirection is always used, so return 'localhost'
- return "localhost"
+ return self.hostip
def get_port(self, port):
--
1.6.2.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [KVM-AUTOTEST PATCH] kvm test: Adding remote migration support
2009-06-17 0:46 [KVM-AUTOTEST PATCH] kvm test: Adding remote migration support Lucas Meneghel Rodrigues
@ 2009-06-17 0:53 ` Lucas Meneghel Rodrigues
2009-06-17 23:47 ` yogi
0 siblings, 1 reply; 4+ messages in thread
From: Lucas Meneghel Rodrigues @ 2009-06-17 0:53 UTC (permalink / raw)
To: autotest; +Cc: kvm, Yogananth Subramanian
On Tue, 2009-06-16 at 21:46 -0300, Lucas Meneghel Rodrigues wrote:
> Make the current migration test handle remote migration. In order to
> use remote migration, the following four parameters should be added
> to the existing migration test:
I went trough the discussion about this patch and I also agree we should
be implementing this test as a server side test. However I thought it
would be good having this patch rebased to the new kvm test code just in
case we need it in the future. This is part of the patch queue work.
> remote = dst
> hostip = <localhost ip or name>
> remoteip = <remote host ip or name>
> remuser = root
> rempassword = <password>
>
> The field remote=dst indicates the VM "dst" should be created on remote
> machine. For example:
>
> - migrate: install setup
> type = migration
> vms += " dst"
> migration_test_command = help
> kill_vm_on_error = yes
> remote = dst
> hostip = 192.168.1.2
> remoteip = 192.168.1.3
> remuser = root
> rempassword = 123456
> variants:
>
> Signed-off-by: Yogananth Subramanian <anantyog@in.ibm.com>
> ---
> client/tests/kvm/kvm_tests.cfg.sample | 6 +++
> client/tests/kvm/kvm_tests.py | 2 +-
> client/tests/kvm/kvm_vm.py | 61 +++++++++++++++++++++++++--------
> 3 files changed, 53 insertions(+), 16 deletions(-)
>
> diff --git a/client/tests/kvm/kvm_tests.cfg.sample b/client/tests/kvm/kvm_tests.cfg.sample
> index 931f748..ca7f1d0 100644
> --- a/client/tests/kvm/kvm_tests.cfg.sample
> +++ b/client/tests/kvm/kvm_tests.cfg.sample
> @@ -54,6 +54,12 @@ variants:
> vms += " dst"
> migration_test_command = help
> kill_vm_on_error = yes
> + remote = dst
> + hostip = 192.168.1.2
> + remoteip = 192.168.1.3
> + remuser = root
> + rempassword = 123456
> + kill_vm_on_error = yes
> variants:
> - 1:
> start_vm_for_migration_dst = yes
> diff --git a/client/tests/kvm/kvm_tests.py b/client/tests/kvm/kvm_tests.py
> index 4270cae..32b1ba4 100644
> --- a/client/tests/kvm/kvm_tests.py
> +++ b/client/tests/kvm/kvm_tests.py
> @@ -113,7 +113,7 @@ def run_migration(test, params, env):
> session.close()
>
> # Define the migration command
> - cmd = "migrate -d tcp:localhost:%d" % dest_vm.migration_port
> + cmd = "migrate -d tcp:%s:%d" % (dest_vm.hostip, dest_vm.migration_port)
> logging.debug("Migration command: %s" % cmd)
>
> # Migrate
> diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py
> index 5028161..c15d0a1 100644
> --- a/client/tests/kvm/kvm_vm.py
> +++ b/client/tests/kvm/kvm_vm.py
> @@ -1,5 +1,5 @@
> #!/usr/bin/python
> -import time, socket, os, logging, fcntl
> +import time, socket, os, logging, fcntl, re
> import kvm_utils
>
> """
> @@ -113,6 +113,7 @@ class VM:
> self.qemu_path = qemu_path
> self.image_dir = image_dir
> self.iso_dir = iso_dir
> + self.remote = False
>
>
> # Find available monitor filename
> @@ -170,8 +171,6 @@ class VM:
> file.close()
> if not self.qemu_path in cmdline:
> return False
> - if not self.monitor_file_name in cmdline:
> - return False
> return True
>
>
> @@ -234,8 +233,6 @@ class VM:
> qemu_cmd += qemu_path
> # Add the VM's name
> qemu_cmd += " -name '%s'" % name
> - # Add the monitor socket parameter
> - qemu_cmd += " -monitor unix:%s,server,nowait" % self.monitor_file_name
>
> for image_name in kvm_utils.get_sub_dict_names(params, "images"):
> image_params = kvm_utils.get_sub_dict(params, image_name)
> @@ -320,6 +317,18 @@ class VM:
> qemu_path = self.qemu_path
> image_dir = self.image_dir
> iso_dir = self.iso_dir
> + # If VM is remote, set hostip to ip of the remote machine
> + # If VM is local set hostip to localhost or hostip param
> + if params.get("remote") == "yes":
> + self.remote = True
> + self.hostip = params.get("remoteip")
> + self.qemu_path = params.get("qemu_path",qemu_path)
> + qemu_path = self.qemu_path
> + self.image_dir = params.get("image_dir",image_dir)
> + image_dir = self.image_dir
> + else:
> + self.remote = False
> + self.hostip = params.get("hostip","localhost")
>
> # Verify the md5sum of the ISO image
> iso = params.get("cdrom")
> @@ -377,9 +386,32 @@ class VM:
> # Add -incoming option to the qemu command
> qemu_command += " -incoming tcp:0:%d" % self.migration_port
>
> - logging.debug("Running qemu command:\n%s", qemu_command)
> - (status, pid, output) = kvm_utils.run_bg(qemu_command, None,
> - logging.debug, "(qemu) ")
> + self.monitor_port = kvm_utils.find_free_port(5400, 6000)
> + qemu_command += (" -monitor tcp:0:%d,server,nowait" %
> + self.monitor_port)
> +
> + # If the VM is remote, get the username and password of remote host
> + # and lanch qemu command on the remote machine.
> + if self.remote:
> + remuser = params.get("remuser")
> + rempassword = params.get("rempassword")
> + sub = kvm_utils.ssh(self.hostip, 22, remuser, rempassword,
> + self.params.get("ssh_prompt", "[\#\$]"))
> + qemu_command +=" &"
> + kvm_log.debug("Running qemu command:\n%s" % qemu_command)
> + sub.sendline(qemu_command)
> +
> + (status,output) = sub.read_up_to_prompt()
> + if "Exit " in output:
> + status = int(re.findall("Exit\s(\d+)",output)[0])
> + else:
> + pid = int(re.findall(".*] (\d+)",output)[0])
> + status = 0
> + else:
> + kvm_log.debug("Running qemu command:\n%s" % qemu_command)
> + (status, pid, output) = kvm_utils.run_bg(qemu_command, None,
> + kvm_log.debug,
> + "(qemu) ")
>
> if status:
> logging.debug("qemu exited with status %d", status)
> @@ -450,9 +482,8 @@ class VM:
> # Connect to monitor
> logging.debug("Sending monitor command: %s" % command)
> try:
> - s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
> - s.setblocking(False)
> - s.connect(self.monitor_file_name)
> + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> + s.connect((self.hostip, self.monitor_port))
> except:
> logging.debug("Could not connect to monitor socket")
> return (1, "")
> @@ -542,8 +573,9 @@ class VM:
> Return True if the VM's monitor is responsive.
> """
> # Check if the process exists
> - if not kvm_utils.pid_exists(self.pid):
> - return False
> + if not self.remote:
> + if not kvm_utils.pid_exists(self.pid):
> + return False
> # Try sending a monitor command
> (status, output) = self.send_monitor_cmd("help")
> if status:
> @@ -573,8 +605,7 @@ class VM:
> If port redirection is used, return 'localhost' (the guest has no IP
> address of its own). Otherwise return the guest's IP address.
> """
> - # Currently redirection is always used, so return 'localhost'
> - return "localhost"
> + return self.hostip
>
>
> def get_port(self, port):
--
Lucas Meneghel Rodrigues
Software Engineer (QE)
Red Hat - Emerging Technologies
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [KVM-AUTOTEST PATCH] kvm test: Adding remote migration support
2009-06-17 0:53 ` Lucas Meneghel Rodrigues
@ 2009-06-17 23:47 ` yogi
2009-06-18 14:01 ` Lucas Meneghel Rodrigues
0 siblings, 1 reply; 4+ messages in thread
From: yogi @ 2009-06-17 23:47 UTC (permalink / raw)
To: Lucas Meneghel Rodrigues; +Cc: autotest, kvm, Yogananth Subramanian
[-- Attachment #1: Type: text/plain, Size: 917 bytes --]
Hello Everyone
> I went trough the discussion about this patch and I also agree we should
> be implementing this test as a server side test. However I thought it
> would be good having this patch rebased to the new kvm test code just in
> case we need it in the future. This is part of the patch queue work.
>
I have rebased the patch to the new kvm test code.
The same set of parameters should be added to kvm_tests.cfg file,as the
previous patch
hostip = 192.168.1.2 #ur host machine ip
remoteip = 192.168.1.2 #can use same ip for local migration
remuser = root #remote machine user
rempassword = 123456 #passwd for remote user
remote_dst = yes #could be enabled for local migration too
qemu_path_dst = /tmp/kvm_autotest_root1/qemu
image_dir_dst = /tmp/kvm_autotest_root1/images
Thanks and Regards
Yogi
[-- Attachment #2: remotemigration.patch --]
[-- Type: text/x-patch, Size: 6137 bytes --]
kvm_tests.py | 2 -
kvm_vm.py | 60 +++++++++++++++++++++++++++++++++++++++++++----------------
2 files changed, 45 insertions(+), 17 deletions(-)
Signed-off-by: Yogananth Subramanian <anantyog@in.ibm.com>
---
diff -aurp kvm-autotest-old//client/tests/kvm/kvm_tests.py kvm-autotest-new//client/tests/kvm/kvm_tests.py
--- kvm-autotest-old//client/tests/kvm/kvm_tests.py 2009-06-17 18:18:31.000000000 +0000
+++ kvm-autotest-new//client/tests/kvm/kvm_tests.py 2009-06-17 18:24:11.000000000 +0000
@@ -113,7 +113,7 @@ def run_migration(test, params, env):
session.close()
# Define the migration command
- cmd = "migrate -d tcp:localhost:%d" % dest_vm.migration_port
+ cmd = "migrate -d tcp:%s:%d" % (dest_vm.hostip,dest_vm.migration_port)
logging.debug("Migration command: %s" % cmd)
# Migrate
diff -aurp kvm-autotest-old//client/tests/kvm/kvm_vm.py kvm-autotest-new//client/tests/kvm/kvm_vm.py
--- kvm-autotest-old//client/tests/kvm/kvm_vm.py 2009-06-17 18:18:31.000000000 +0000
+++ kvm-autotest-new//client/tests/kvm/kvm_vm.py 2009-06-17 18:46:19.000000000 +0000
@@ -1,6 +1,7 @@
#!/usr/bin/python
import time, socket, os, logging, fcntl
import kvm_utils
+import re
"""
Utility classes and functions to handle Virtual Machine creation using qemu.
@@ -114,6 +115,7 @@ class VM:
self.image_dir = image_dir
self.iso_dir = iso_dir
+ self.remote = False
# Find available monitor filename
while True:
@@ -170,8 +172,6 @@ class VM:
file.close()
if not self.qemu_path in cmdline:
return False
- if not self.monitor_file_name in cmdline:
- return False
return True
@@ -234,8 +234,6 @@ class VM:
qemu_cmd += qemu_path
# Add the VM's name
qemu_cmd += " -name '%s'" % name
- # Add the monitor socket parameter
- qemu_cmd += " -monitor unix:%s,server,nowait" % self.monitor_file_name
for image_name in kvm_utils.get_sub_dict_names(params, "images"):
image_params = kvm_utils.get_sub_dict(params, image_name)
@@ -321,6 +319,18 @@ class VM:
image_dir = self.image_dir
iso_dir = self.iso_dir
+ # If VM is remote, set hostip to ip of the remote machine
+ # If VM is local set hostip to localhost or hostip param
+ if params.get("remote") == "yes":
+ self.remote = True
+ self.hostip = params.get("remoteip")
+ self.qemu_path = params.get("qemu_path",qemu_path)
+ qemu_path = self.qemu_path
+ self.image_dir = params.get("image_dir",image_dir)
+ image_dir = self.image_dir
+ else:
+ self.remote = False
+ self.hostip = params.get("hostip","localhost")
# Verify the md5sum of the ISO image
iso = params.get("cdrom")
if iso:
@@ -376,10 +386,29 @@ class VM:
self.migration_port = kvm_utils.find_free_port(5200, 6000)
# Add -incoming option to the qemu command
qemu_command += " -incoming tcp:0:%d" % self.migration_port
-
- logging.debug("Running qemu command:\n%s", qemu_command)
- (status, pid, output) = kvm_utils.run_bg(qemu_command, None,
- logging.debug, "(qemu) ")
+
+ self.monitor_port = kvm_utils.find_free_port(5400, 6000)
+ qemu_command +=" -monitor tcp:0:%d,server,nowait" % self.monitor_port
+
+ # If the VM is remote, get the username and password of remote host and lanch qemu
+ # command on the remote machine.
+ if self.remote:
+ remuser = params.get("remuser")
+ rempassword = params.get("rempassword")
+ sub = kvm_utils.ssh(self.hostip,22,remuser,rempassword,".*[#$].*")
+ qemu_command +=" &"
+ logging.debug("Running qemu command:\n%s" % qemu_command)
+ sub.sendline(qemu_command)
+
+ (status,output) = sub.read_up_to_prompt()
+ if "Exit " in output:
+ status = int(re.findall("Exit\s(\d+)",output)[0])
+ else:
+ pid = int(re.findall(".*] (\d+)",output)[0])
+ status = 0
+ else:
+ logging.debug("Running qemu command:\n%s" % qemu_command)
+ (status, pid, output) = kvm_utils.run_bg(qemu_command, None, logging.debug, "(qemu) ")
if status:
logging.debug("qemu exited with status %d", status)
@@ -404,7 +433,7 @@ class VM:
lockfile.close()
- def send_monitor_cmd(self, command, block=True, timeout=20.0):
+ def send_monitor_cmd(self, command, block=True, timeout=30.0):
"""
Send command to the QEMU monitor.
@@ -450,9 +479,8 @@ class VM:
# Connect to monitor
logging.debug("Sending monitor command: %s" % command)
try:
- s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- s.setblocking(False)
- s.connect(self.monitor_file_name)
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.connect((self.hostip,self.monitor_port))
except:
logging.debug("Could not connect to monitor socket")
return (1, "")
@@ -542,8 +570,9 @@ class VM:
Return True if the VM's monitor is responsive.
"""
# Check if the process exists
- if not kvm_utils.pid_exists(self.pid):
- return False
+ if not self.remote:
+ if not kvm_utils.pid_exists(self.pid):
+ return False
# Try sending a monitor command
(status, output) = self.send_monitor_cmd("help")
if status:
@@ -574,8 +603,7 @@ class VM:
address of its own). Otherwise return the guest's IP address.
"""
# Currently redirection is always used, so return 'localhost'
- return "localhost"
-
+ return self.hostip
def get_port(self, port):
"""
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [KVM-AUTOTEST PATCH] kvm test: Adding remote migration support
2009-06-17 23:47 ` yogi
@ 2009-06-18 14:01 ` Lucas Meneghel Rodrigues
0 siblings, 0 replies; 4+ messages in thread
From: Lucas Meneghel Rodrigues @ 2009-06-18 14:01 UTC (permalink / raw)
To: yogi; +Cc: autotest, kvm, Yogananth Subramanian
On Thu, 2009-06-18 at 05:17 +0530, yogi wrote:
> Hello Everyone
>
>
> > I went trough the discussion about this patch and I also agree we should
> > be implementing this test as a server side test. However I thought it
> > would be good having this patch rebased to the new kvm test code just in
> > case we need it in the future. This is part of the patch queue work.
> >
>
> I have rebased the patch to the new kvm test code.
>
> The same set of parameters should be added to kvm_tests.cfg file,as the
> previous patch
>
> hostip = 192.168.1.2 #ur host machine ip
> remoteip = 192.168.1.2 #can use same ip for local migration
> remuser = root #remote machine user
> rempassword = 123456 #passwd for remote user
> remote_dst = yes #could be enabled for local migration too
> qemu_path_dst = /tmp/kvm_autotest_root1/qemu
> image_dir_dst = /tmp/kvm_autotest_root1/images
>
>
> Thanks and Regards
> Yogi
Thank you very much Yogi! As I have said, your patch was stored for
future reference.
--
Lucas Meneghel Rodrigues
Software Engineer (QE)
Red Hat - Emerging Technologies
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-06-18 14:02 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-17 0:46 [KVM-AUTOTEST PATCH] kvm test: Adding remote migration support Lucas Meneghel Rodrigues
2009-06-17 0:53 ` Lucas Meneghel Rodrigues
2009-06-17 23:47 ` yogi
2009-06-18 14:01 ` Lucas Meneghel Rodrigues
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox