1) Example code: old libc headers don't have SIOCBRADDIF, and old zlibs
don't have gzdirect() -- it's a sanity check anyway.
2) Some people don't build in their source directories, so .config
isn't there (thanks to Tony Breeds <[email protected]>).
3) Point out that guest and host kernel are usually the same.
4) Set the "no checksum" option on the tun device as a minor optimization.
Signed-off-by: Rusty Russell <[email protected]>
---
Documentation/lguest/Makefile | 9 ++++++++-
Documentation/lguest/lguest.c | 6 ++++--
Documentation/lguest/lguest.txt | 8 ++++++--
3 files changed, 18 insertions(+), 5 deletions(-)
===================================================================
--- a/Documentation/lguest/Makefile
+++ b/Documentation/lguest/Makefile
@@ -1,7 +1,14 @@
# This creates the demonstration utility "lguest" which runs a Linux guest.
+# For those people that have a separate object dir, look there for .config
+KBUILD_OUTPUT := ../..
+ifdef O
+ ifeq ("$(origin O)", "command line")
+ KBUILD_OUTPUT := $(O)
+ endif
+endif
# We rely on CONFIG_PAGE_OFFSET to know where to put lguest binary.
-include ../../.config
+include $(KBUILD_OUTPUT)/.config
LGUEST_GUEST_TOP := ($(CONFIG_PAGE_OFFSET) - 0x08000000)
CFLAGS:=-Wall -Wmissing-declarations -Wmissing-prototypes -O3 \
===================================================================
--- a/Documentation/lguest/lguest.c
+++ b/Documentation/lguest/lguest.c
@@ -40,6 +40,9 @@ typedef uint8_t u8;
#define PAGE_PRESENT 0x7 /* Present, RW, Execute */
#define NET_PEERNUM 1
#define BRIDGE_PFX "bridge:"
+#ifndef SIOCBRADDIF
+#define SIOCBRADDIF 0x89a2 /* add interface to bridge */
+#endif
static bool verbose;
#define verbose(args...) \
@@ -166,8 +169,6 @@ static unsigned long unpack_bzimage(int
void *img = (void *)0x100000;
f = gzdopen(fd, "rb");
- if (gzdirect(f))
- errx(1, "did not find correct gzip header");
while ((ret = gzread(f, img + len, 65536)) > 0)
len += ret;
if (ret < 0)
@@ -820,6 +821,7 @@ static void setup_tun_net(const char *ar
strcpy(ifr.ifr_name, "tap%d");
if (ioctl(netfd, TUNSETIFF, &ifr) != 0)
err(1, "configuring /dev/net/tun");
+ ioctl(netfd, TUNSETNOCSUM, 1);
/* You will be peer 1: we should create enough jitter to randomize */
dev = new_device(devices, LGUEST_DEVICE_T_NET, 1,
===================================================================
--- a/Documentation/lguest/lguest.txt
+++ b/Documentation/lguest/lguest.txt
@@ -23,7 +23,10 @@ Developer features:
Running Lguest:
-- You will need to configure your kernel with the following options:
+- Lguest runs the same kernel as guest and host. You can configure
+ them differently, but usually it's easiest not to.
+
+ You will need to configure your kernel with the following options:
CONFIG_HIGHMEM64G=n ("High Memory Support" "64GB")[1]
CONFIG_TUN=y/m ("Universal TUN/TAP device driver support")
@@ -35,7 +38,8 @@ Running Lguest:
CONFIG_HZ=100 ("Timer frequency")[2]
- A tool called "lguest" is available in this directory: type "make"
- to build it.
+ to build it. If you didn't build your kernel in-tree, use "make
+ O=<builddir>".
- Create or find a root disk image. There are several useful ones
around, such as the xm-test tiny root image at
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]