| 1 | Index: ioemu/vl.c |
|---|
| 2 | =================================================================== |
|---|
| 3 | --- ioemu.orig/vl.c 2007-05-03 10:07:52.000000000 +0100 |
|---|
| 4 | +++ ioemu/vl.c 2007-05-03 10:07:52.000000000 +0100 |
|---|
| 5 | @@ -90,6 +90,7 @@ |
|---|
| 6 | |
|---|
| 7 | #include <xen/hvm/params.h> |
|---|
| 8 | #define DEFAULT_NETWORK_SCRIPT "/etc/xen/qemu-ifup" |
|---|
| 9 | +#define DEFAULT_BRIDGE "xenbr0" |
|---|
| 10 | |
|---|
| 11 | //#define DEBUG_UNUSED_IOPORT |
|---|
| 12 | //#define DEBUG_IOPORT |
|---|
| 13 | @@ -3091,11 +3092,11 @@ |
|---|
| 14 | #endif |
|---|
| 15 | |
|---|
| 16 | static int net_tap_init(VLANState *vlan, const char *ifname1, |
|---|
| 17 | - const char *setup_script) |
|---|
| 18 | + const char *setup_script, const char *bridge) |
|---|
| 19 | { |
|---|
| 20 | TAPState *s; |
|---|
| 21 | int pid, status, fd; |
|---|
| 22 | - char *args[3]; |
|---|
| 23 | + char *args[4]; |
|---|
| 24 | char **parg; |
|---|
| 25 | char ifname[128]; |
|---|
| 26 | |
|---|
| 27 | @@ -3114,9 +3115,18 @@ |
|---|
| 28 | pid = fork(); |
|---|
| 29 | if (pid >= 0) { |
|---|
| 30 | if (pid == 0) { |
|---|
| 31 | + int open_max = sysconf(_SC_OPEN_MAX), i; |
|---|
| 32 | + for (i = 0; i < open_max; i++) |
|---|
| 33 | + if (i != STDIN_FILENO && |
|---|
| 34 | + i != STDOUT_FILENO && |
|---|
| 35 | + i != STDERR_FILENO && |
|---|
| 36 | + i != fd) |
|---|
| 37 | + close(i); |
|---|
| 38 | + |
|---|
| 39 | parg = args; |
|---|
| 40 | *parg++ = (char *)setup_script; |
|---|
| 41 | *parg++ = ifname; |
|---|
| 42 | + *parg++ = (char *)bridge; |
|---|
| 43 | *parg++ = NULL; |
|---|
| 44 | execv(setup_script, args); |
|---|
| 45 | _exit(1); |
|---|
| 46 | @@ -3672,6 +3682,7 @@ |
|---|
| 47 | if (!strcmp(device, "tap")) { |
|---|
| 48 | char ifname[64]; |
|---|
| 49 | char setup_script[1024]; |
|---|
| 50 | + char bridge[16]; |
|---|
| 51 | int fd; |
|---|
| 52 | if (get_param_value(buf, sizeof(buf), "fd", p) > 0) { |
|---|
| 53 | fd = strtol(buf, NULL, 0); |
|---|
| 54 | @@ -3684,7 +3695,10 @@ |
|---|
| 55 | if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) { |
|---|
| 56 | pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT); |
|---|
| 57 | } |
|---|
| 58 | - ret = net_tap_init(vlan, ifname, setup_script); |
|---|
| 59 | + if (get_param_value(bridge, sizeof(bridge), "bridge", p) == 0) { |
|---|
| 60 | + pstrcpy(bridge, sizeof(bridge), DEFAULT_BRIDGE); |
|---|
| 61 | + } |
|---|
| 62 | + ret = net_tap_init(vlan, ifname, setup_script, bridge); |
|---|
| 63 | } |
|---|
| 64 | } else |
|---|
| 65 | #endif |
|---|
| 66 | @@ -5209,7 +5223,7 @@ |
|---|
| 67 | "-net tap[,vlan=n],ifname=name\n" |
|---|
| 68 | " connect the host TAP network interface to VLAN 'n'\n" |
|---|
| 69 | #else |
|---|
| 70 | - "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]\n" |
|---|
| 71 | + "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,bridge=br]\n" |
|---|
| 72 | " connect the host TAP network interface to VLAN 'n' and use\n" |
|---|
| 73 | " the network script 'file' (default=%s);\n" |
|---|
| 74 | " use 'fd=h' to connect to an already opened TAP interface\n" |
|---|