[Libguestfs] [PATCH 1/2] Change network configuration to use macros.

Richard W.M. Jones rjones at redhat.com
Tue May 4 15:16:27 UTC 2010


-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://et.redhat.com/~rjones/libguestfs/
See what it can do: http://et.redhat.com/~rjones/libguestfs/recipes.html
-------------- next part --------------
>From 8a9f2ca65521d093ac14307aca4370d9497ac840 Mon Sep 17 00:00:00 2001
From: Richard Jones <rjones at redhat.com>
Date: Tue, 4 May 2010 15:06:09 +0100
Subject: [PATCH 1/2] Change network configuration to use macros.

Change the network configuration so everything is set using
some macros at the top of src/guestfs.c.

Also, rename the macros used in the daemon so they are not the
same.  It was a very long time since these sets of macros had to
match the ones defined in src/guestfs.c, despite what the comment
said.

Note that this commit should not change the semantics of the
program at all.
---
 daemon/guestfsd.c |   13 +++++++++----
 src/guestfs.c     |   30 +++++++++++++++++++++++++-----
 2 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c
index 06ad702..03a975a 100644
--- a/daemon/guestfsd.c
+++ b/daemon/guestfsd.c
@@ -55,9 +55,14 @@
 
 static char *read_cmdline (void);
 
-/* Also in guestfs.c */
-#define GUESTFWD_ADDR "10.0.2.4"
-#define GUESTFWD_PORT "6666"
+/* This is the default address we connect to for very old libraries
+ * which didn't specify the address and port number explicitly on the
+ * kernel command line.  It's now recommended to always specify the
+ * address and port number on the command line, so this will not be
+ * used any more.
+ */
+#define OLD_GUESTFWD_ADDR "10.0.2.4"
+#define OLD_GUESTFWD_PORT "6666"
 
 /* This is only a hint.  If not defined, ignore it. */
 #ifndef AI_ADDRCONFIG
@@ -285,7 +290,7 @@ main (int argc, char *argv[])
 
   /* Default vmchannel. */
   if (vmchannel == NULL) {
-    vmchannel = strdup ("tcp:" GUESTFWD_ADDR ":" GUESTFWD_PORT);
+    vmchannel = strdup ("tcp:" OLD_GUESTFWD_ADDR ":" OLD_GUESTFWD_PORT);
     if (!vmchannel) {
       perror ("strdup");
       exit (EXIT_FAILURE);
diff --git a/src/guestfs.c b/src/guestfs.c
index fe08cb5..d68f12b 100644
--- a/src/guestfs.c
+++ b/src/guestfs.c
@@ -110,7 +110,26 @@ static int qemu_supports (guestfs_h *g, const char *option);
 #define xdr_uint32_t xdr_u_int32_t
 #endif
 
-/* Also in guestfsd.c */
+/* Network configuration of the appliance.  Note these addresses are
+ * only meaningful within the context of the running appliance.  QEMU
+ * translates network connections to these magic addresses into
+ * userspace calls on the host (eg. connect(2)).  qemu-doc has a nice
+ * diagram which is also useful to refer to.
+ *
+ * NETWORK: The network.
+ *
+ * ROUTER: The address of the "host", ie. this library.
+ *
+ * [Note: If you change NETWORK and ROUTER then you also have to
+ * change the network configuration in appliance/init].
+ *
+ * GUESTFWD_ADDR, GUESTFWD_PORT: The guestfwd feature of qemu
+ * magically connects this pseudo-address to the guestfwd channel.  In
+ * typical Linux configurations of libguestfs, guestfwd is not
+ * actually used any more.
+ */
+#define NETWORK "10.0.2.0/8"
+#define ROUTER "10.0.2.2"
 #define GUESTFWD_ADDR "10.0.2.4"
 #define GUESTFWD_PORT "6666"
 
@@ -1189,10 +1208,11 @@ guestfs__launch (guestfs_h *g)
      */
     if (null_vmchannel_sock) {
       add_cmdline (g, "-net");
-      add_cmdline (g, "user,vlan=0,net=10.0.2.0/8");
+      add_cmdline (g, "user,vlan=0,net=" NETWORK);
 
       snprintf (buf, sizeof buf,
-                "guestfs_vmchannel=tcp:10.0.2.2:%d", null_vmchannel_sock);
+                "guestfs_vmchannel=tcp:" ROUTER ":%d",
+                null_vmchannel_sock);
       vmchannel = strdup (buf);
     }
 
@@ -1215,7 +1235,7 @@ guestfs__launch (guestfs_h *g)
       add_cmdline (g, buf);
 
       snprintf (buf, sizeof buf,
-                "user,vlan=0,net=10.0.2.0/8,"
+                "user,vlan=0,net=" NETWORK ","
                 "guestfwd=tcp:" GUESTFWD_ADDR ":" GUESTFWD_PORT
                 "-chardev:guestfsvmc");
 
@@ -1235,7 +1255,7 @@ guestfs__launch (guestfs_h *g)
       add_cmdline (g, "-net");
       add_cmdline (g, buf);
       add_cmdline (g, "-net");
-      add_cmdline (g, "user,vlan=0,net=10.0.2.0/8");
+      add_cmdline (g, "user,vlan=0,net=" NETWORK);
 
       vmchannel = "guestfs_vmchannel=tcp:" GUESTFWD_ADDR ":" GUESTFWD_PORT;
     }
-- 
1.6.6.1



More information about the Libguestfs mailing list