Ok, I managed to fix my VDE issues and get this to work on eth0. Working sources
for vde-inject and vde_pcap_inject attached.
It will cause duplicate packets to occur, but otherwise appears stable.
You need libpcap installed. (According to my pcap.h, I have pcap 2.4 installed.)
Compile vde_pcap_inject with this command:
gcc -o vde_pcap_inject vde_pcap_inject.c -lpcap
Extract the bz2ball, cd into vde-inject and type 'make'. This will build the
module, which you can load via 'insmod vdeinject.ko'
Then load up the VDE network as so (running as root):
vde_switch -hub -daemon
chmod 666 /tmp/vde.ctl
./vde_pcap_inject eth0 /tmp/vde.ctl
This step will connect the VDE to eth0, creating a vmware like bridge.
You can now just run qemu apps with vdeq/vdeqemu normally, and they'll appear
to be running on your LAN.
--
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.
/* Copyright (C) 2005-2006 Jim Brown
* Copyright (C) 2005 Henrik Nordstrom
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
*
* The VDE connection setup (open_vde) is loosely based on a similar
* functions in vdeq.c by Renzo Davoli
*/
#include <sys/socket.h>
#include <netpacket/packet.h>
#include <net/ethernet.h> /* the L2 protocols */
#include <sys/ioctl.h>
#include <fcntl.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <sys/un.h>
#include <errno.h>
#include <signal.h>
#include <linux/if_tun.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
#include <pcap.h>
#define SWITCH_MAGIC 0xfeedface
#define BUFSIZE 2048
#define ETH_ALEN 6
#define PCAP_READ_TIMEOUT 1
enum request_type {
REQ_NEW_CONTROL
};
struct request_v3 {
uint32_t magic;
uint32_t version;
enum request_type type;
struct sockaddr_un sock;
};
static int
open_vde(char *name, int intno, int group)
{
int pid = getpid();
struct request_v3 req;
int fdctl;
int fddata;
struct sockaddr_un sock;
if ((fdctl = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
perror("socket");
exit(1);
}
sock.sun_family = AF_UNIX;
snprintf(sock.sun_path, sizeof(sock.sun_path), "%s", name);
if (connect(fdctl, (struct sockaddr *) &sock, sizeof(sock))) {
perror("connect");
exit(1);
}
memset(&req, 0, sizeof(req));
req.magic = SWITCH_MAGIC;
req.version = 3;
// req.type = REQ_NEW_CONTROL + ((group > 0) ? ((geteuid() << 8) + group)
<< 8 : 0);
// req.type = REQ_NEW_CONTROL + (port << 8);
req.type = REQ_NEW_CONTROL + (10 << 8);
req.sock.sun_family = AF_UNIX;
sprintf(&req.sock.sun_path[1], "%5d-%2d", pid, intno);
if ((fddata = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(1);
}
if (bind(fddata, (struct sockaddr *) &req.sock, sizeof(req.sock)) < 0) {
perror("bind");
exit(1);
}
if (send(fdctl, &req, sizeof(req), 0) < 0) {
perror("send");
exit(1);
}
if (recv(fdctl, &sock, sizeof(struct sockaddr_un), 0) < 0) {
perror("recv");
exit(1);
}
if (connect(fddata, (struct sockaddr *) &sock, sizeof(struct sockaddr_un))
< 0) {
perror("connect");
exit(1);
}
/* note: fdctl is intentionally leaked. Closed on exit by the OS. */
return fddata;
}
void
set_nonblocking(int fd)
{
int fl = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, (fl | O_NONBLOCK));
}
void
pcap_relay(u_char *args, const struct pcap_pkthdr *header, const u_char *
packet)
{
int * vde_socket = (int *)args;
send(*vde_socket, packet, header->len, 0);
}
static void
wrap_dispatch(fd_set * rfd, pcap_t * handle, int vde_socket)
{
int n;
if (FD_ISSET(pcap_get_selectable_fd(handle), rfd)) {
n = pcap_dispatch(handle, -1, pcap_relay, (u_char *)&vde_socket);
}
}
int pcap_sendpacket(pcap_t * handle, const u_char * packet, int len, const char
* dev)
{
struct sockaddr_ll sa1;
struct ifreq ifr;
strncpy (ifr.ifr_name, dev, sizeof(ifr.ifr_name) - 1);
ifr.ifr_name[sizeof(ifr.ifr_name)-1] = '\0';
if (ioctl(pcap_fileno(handle), SIOCGIFINDEX, &ifr) == -1)
return -1;
memset(&sa1, 0, sizeof (sa1));
sa1.sll_family = AF_PACKET;
sa1.sll_ifindex = ifr.ifr_ifindex;
sa1.sll_protocol = htons(ETH_P_ALL);
if (sendto(pcap_fileno(handle), packet, len, 0, (struct sockaddr *)&sa1,
sizeof(sa1)) == len)
{
return 0;
}
else
{
return -1;
}
}
int vde_inject_fd = -1;
static void
relay(fd_set * rfd, int vde_socket, pcap_t * handle, const char * dev)
{
int n;
char packet[65536];
union {
struct sockaddr_ll ll;
struct sockaddr_un un;
} sa;
socklen_t sa_len = sizeof(sa);
if (FD_ISSET(vde_socket, rfd)) {
n = recvfrom(vde_socket, packet, sizeof(packet), 0, (struct sockaddr
*)&sa, &sa_len);
if (n > 0)
{
pcap_sendpacket(handle, packet, n, dev);
vde_inject_fd = open("/proc/vdeinject", O_WRONLY);
if (vde_inject_fd != -1)
{
write(vde_inject_fd, packet, n);
close(vde_inject_fd);
}
}
else if (n == 0)
exit(1);
else if (errno != EINTR) {
perror("recv:");
exit(1);
}
}
}
pcap_t * a;
void handle_cl(int signal)
{
printf("Caught signal %d, cleaning up ...\n", signal);
pcap_close(a);
exit(0);
}
int
main(int argc, char **argv)
{
int vde_socket;
pcap_t * handle;
char errbuf[PCAP_ERRBUF_SIZE];
const u_char * packet;
fd_set rfd;
int fds;
if (argc != 3) {
printf("Usage: %s interface vde_socket\n", argv[0]);
exit(1);
}
handle = pcap_open_live(argv[1], BUFSIZ, 1, PCAP_READ_TIMEOUT, errbuf);
if (handle == NULL)
{
printf("%s\n", errbuf);
exit(1);
}
vde_socket = open_vde(argv[2], 0, 0);
set_nonblocking(vde_socket);
a = handle;
signal(SIGINT, handle_cl);
fds = pcap_get_selectable_fd(handle);
if (vde_socket > fds)
fds = vde_socket;
fds += 1;
FD_ZERO(&rfd);
int i;
for (;;) {
int n;
FD_SET(pcap_get_selectable_fd(handle), &rfd);
FD_SET(vde_socket, &rfd);
n = select(fds, &rfd, NULL, NULL, NULL);
if (n > 0) {
wrap_dispatch(&rfd, handle, vde_socket);
relay(&rfd, vde_socket, handle, argv[1]);
} else if (n < 0 && errno != EINTR) {
perror("select:");
}
}
}
BZh91AY&[EMAIL PROTECTED]/d??V????]??b?&eW
??j??? ??Tb(B9
S?
UAQ(??E@( QB(SL?RRD?RR)PP
BH%#?i
"?u???1??&?Bf?i???CQ?
4?&?b'??G??jm5=M???M24?4?I?LLM??4???10&
???Ch???M?$?$?Q???z?SC?F?Ph 4 ?
[EMAIL PROTECTED]
[EMAIL PROTECTED]&B`?Jl?O???????d
4?
[EMAIL PROTECTED]@[EMAIL PROTECTED]@#!? "[EMAIL
PROTECTED]@ A??HX??.?6???5E`?,??? l???g ???
?M"??????lH??I,?G???1?|???)
?(?+????;???"t?????????y????:?????tDXf`???????)?b?sn$?nN?b?????%:????
?*{???<[EMAIL PROTECTED];???]??b???????H??Q [EMAIL
PROTECTED];??c???xQ????nN??5{??;?????|?????????^?z?'L?x??,??????:'????K{??m??5I?@@????iB)??\?O???a ???g?\???j?/_??`?o???3????y??i??N?.R???:FK??=??????DXy?I???=B?????K??b?~!G*
??/ ?<????a??A?d???????????[([EMAIL
PROTECTED]>?>?B???????I??#??)[EMAIL
PROTECTED];?m8???q??6LV??i??????SY?73??
??R0g?d? ?jm#~??mYg??>?5?Ty??M6????D?*!?;?????"!????x?
?P'c??2d? I?1?%)d;x?Xdti?-?-FXBX???? `o?4`?A?[wG????;
8????'(n?n?"???tA?E'.YE?'??????m??>??{3 ?p?RF??O???
????|
?????????^???????$g???E0Ln)??s7??9????!b?m???TVGr??????,?h?p?`h(?5??_
E?F??ye??H?4?????e7s?&?"??j??A'????4??]4?BI???"b)6??B{????f????mJMN?g???????dZ+?Q??"?Y??42ix??c????Gx
?4?9? 0?!
?2O0?fGg?h0? ~7"""[EMAIL
PROTECTED]|d?7?>4<?C??;??n?W??4??<??xA?????
?"?.??U<?A=?D/?????Av???;?gG?XWn??6K?Z??!???"N
?"!?&?p=/z??~??H?B??^????? 4M???<?!??<[EMAIL PROTECTED] ?????|?6
?y?!??%???G????????[{E/?*?GTc???H'?
?p?J???????HE??????-?????0?']?le??k/[EMAIL
PROTECTED]@??~??R-??_c?RM????????S?W??<??yp?\7??R??
/N??/F??J????????"?*h??
??{?}&???Q??o?V5z??z?g)KL?]??XX???Z?????g??;???<p???>R1?Z?,????a?a,??4?XE???
???????I-L??\???9>?-???&g?*??}T?"?$???x;[EMAIL
PROTECTED](YCM?6c???d5??8?
?C?S????|[EMAIL
PROTECTED]'A0??'r?MaO?zsi?g?4? is$??????`w??e?\a???&????? ? [EMAIL
PROTECTED]@??d???H)fQ???k?S??$??^???????Z?fE?`????p?K ?T???]??lY6K
??,?E?}?u?????$ M??q\?o??yII 3??)????y/w?|??w|?P??>$?<
>???][??j'3?1x5dXD9O??_??{{?[?2B|???[?o????n????.L??????/????]>ei3?18??8???4???s??m???????m??s????E?.?HU???=???72????)?????-???>8?=P??|>y?2_`???wC??;Dt????z4zw????????$???!9??T?????X?h?????"???m??YogF{0??K?C?Yn?P
rde?Ocr????x?"???
7g\?????~????f?`???}???lN0H??Q#H?DA#??VH,F(,U?"0DH?(?,H???Fc?
????FADdF
[EMAIL PROTECTED]YEc ?dRm?m???C??f*????y??????`?.=???????R"[EMAIL
PROTECTED]<k>?#??:?)??{?!Uk?S???4??Mj?i????=?aq
??zt?????\M?X?+g?#a`?????h?u?Y??B?TIG?.1,??c?U6m??????4?Dw?????6???o??
k?tH?4M?:,)[EMAIL PROTECTED]?U?Uo?G?
??????|?X???Y???s\m?|????zj??i5?t?Uh?YF?`???-9???;?68??S??
?n???!?????v???tF?Q?XM?L???p???)?x$]???e{7?;????Na??n?V?r?lb???u???o*(?9??=??>t?h?^??
?|D?OIk???? qs???/wwR??z???Q?4???ae??B??R????%??k?m5xJ??};?#??`???&
????ma? ?$&!$e;??R??d?????? ?F??7VB??U???H
j?
ER\??]6???uLF:[EMAIL PROTECTED]
??????-??
%G}S~cM???
4?6????^??[??5??fPZ?5??,!?e???r{??D????.?k
????rc????I?l:<oK?dl??*?B??h?C?QIF???7??`0jB1T
*?2?^??V???+?????h????4f?:nd?da1>????r??s4vev??EU?
??)????:?A4????6q?u?Q?
i???t???????MTg???Eb?<8qq????jp?UXcu???y???^`??h??'J???*K??K??70Hh?(fDdA??TpF(
Ma??m?:x ?hC:?
??:?*??c??D????-???ah??d?)???p?Ys???Y??V???G?l?%f?M(
?7UT?)?"iP??????????_????p&!E?
R?&??X? 1??????cr2?ky????????`4??:?D???5?C??V??k?0?n????fq?(??v?;\
??w????M???,???????
J?
_+J?c7?
?m???kJ??]?A??%?f?y?]???~,?{qZIz4*??07.???-)?m??8ET}?.?~{?;???.3?X{BM????l?
qQ?w?:Ly???Z??06??.f?y?W?"ak??)"Zp??????;??H?{U????????????e?88l^???x??'G?,[EMAIL
PROTECTED]<???,,j???]j?to]???K`?c=7)???????????"
z?????????? ??L???????U~k?BBr?!? ?Pg?d
????????e?9??^?>c???-2?q%s?'.?>bmw
K?????b?h?D~??DRN????|?/b????????$$.??1??k?P??8???t???C5D??X???cX?l
(L?????????L?/?a?m$e\7,F?~3??,Y???>g3?Bb???Y???$2??/?n>???i~[8??Hgn1?f??????kr????zhS,UcOT???Jkj??i<m}?y??z^%?|6???????S,?__c8?"/_m?x???????8=M?.??7?g??
x\'?{:[?ND?G?<?W_?W??g????a???B?80L?J???M??f?!\?a'?t0y
;|?H?].o?([EMAIL PROTECTED],??pJ?YX?????;a?B??"?Y???iD?2|1???;21?E??UU
H?b_??????O?4??Vo?\%*R??)? ????E????m?)?z???c?_?0>O???????P?I&m? ?qR?
?U??x?P?&j"iGa????(?9$G)QJ????#?.o33211<?Z?i?\???J?S???ex2,n:?F????S!??o????kZfS??a?SB??gw??t#?:??nk?|
???]I'q??R0,r&?*??<?(S??7T?c[??????X?*p?hAs#??y?48???????/?P?w?k>?
???Y???3?7???????fs*2?:??>O*p?g??a???F?A?i?[??o?r$?
gF_?\??U??{???Pllcm??8H??&?[?E??????K????????r?*?F??YL{8?<? ?!0A??E?N?|?0?"
a?Z?$$-$??????????G??K?U\eJE?H
8(F|ab?K=$???]~????0??c?b?j????3v?"?,?
B????c??Zb3? ?0?y" M?D6?h?0D?o????l?i???0?5?j3?"??nd^ 1?I2
cp???nd?K?e9?????R?D??8?SEd?H3d(1?>
\M.Iq?<0?0?(???D??O$???n??????Q?T?%?_?X??\?A+,?!??BR`????_ww??/??!
??????xU$i ?I??Z?[EMAIL PROTECTED]
iT?n?%??l?"OH??D?H??D6??l4QfYw??U"???4??D) ??L=?l??? ?P?C0YQ?
?!?|1]u? q??????1-??>??f???Gce?g?ys??0?U?? ?u??Hg/
??""???4??`?????p0]?n?hV??
??KZ??E4/X(ee??l?zh??o?a?*?m?5?t??S???w???[??#v?????????1;?`??hY????+??`Cy?
??6????<J?(??;????m?B?#/??w|???33 ?
?F?t8??Y???!bnH?IU??<}?S??0?!??s?????v>yg??]-?u?k????F????(z$
!~??,i??=l??I?_hM?^j?M????jM?J6?#F????+%17j?T~6?L50J?Hc?p???I%
R?lG?b?=w??????9|y?z?p??h?f?xO?>??Cm?W?s=EW??9??????????(?"?uR?p?i???????Kf????;h/@o?>{J???<???? :[EMAIL
PROTECTED]'?5B?E?,5R???
??86?
oPq?D,??a??P?.^!?Z????k6?R???R??F????G??4???+?
&0g?O?c,/?A?????z?}???xzc??+?t?k?z?
?????}???W???yBc?(5.?/?S???Q8^??????To????????S??=?bv?<??"z?<?Rrfg`?tK+???????Y?C=??+??<?D??E1???-f?*;?hQ`O???m???x??Jl?Y}????
.?``?o?A?X ?4w3?&A?.?c?????2?g)?'l$1?1&???^??j?=?
???^?o??B?
???NeNH??S>[EMAIL PROTECTED]/?A?\Oh?????G????}?K?(?z??h??CqaC [EMAIL
PROTECTED]+???L=?????|?4???c ?\2*aL??J?bqe?? 0?Fi*
?Qe?????|O4,1A??_xx&;4s???o?????6
H?,|?_'U?_??"???]?c???a?]??]$'?4S??,oh?z2?l%?]???????S!????G.q???Q??}?h?????1,7)?JD???g??3?V.3DQ"???`???+?L?,<??!?xR??,???c;?{???c?fA??>7??V??^?D?jH?2????a?n?>??/?????Xf185?q`??|:)%I???u??M?3S?????
E?0???fP-ls?H?G???9?3?N'[EMAIL PROTECTED]???????l?NL?
?K??I5?a?????????P???\D ????)?A?S/H0???!+??l????f?"W???O?K,???,J-????)??**??:yP?pz ????P??$8J????`4?g????H??+?PG?>!1?=g<4p??????knNX;[EMAIL
PROTECTED]>[EMAIL PROTECTED] C
0L?u?lh????;?;[EMAIL PROTECTED]??s(3Q?r???
"K=?!k ?X??I7?1?8?|5'?(L?B??-???i>?V??q#?8??#(??z?????8?&[EMAIL
PROTECTED];????D?s_??!?/m?q%?R??x????Ap?????
ZX&??
?+3/23?.??3B???Bx??-???BB???,?H?M6??????e???g&?cHmv?RDv9??%?X? v?j? jjq?L?`?i!?l?6???x??)?Z?M???????fpT?}$n4?RoG0)
??????S??Ew????????k9$???1????6y????A????????????????fA?`6???
??IH?E??=lS?
?M??P1j??F??J
?????_?)2??hu??0'R?2??? [EMAIL PROTECTED]<?8H???????
?$?Q94Y*?nP?&?`???????AncR?g?Jb(U!!AZ ??????H?C??m?E??2a-??h???
2`j??
? ??C?????.?*??
?KQAj??y'0sr??;?6K??(???????
?2????M1??$? ?????mP???o????0??txH]c??1?9?P
iK&???%??w?R?H???(_#E\3/=T??vbo?1i0?s??j??2??(?~?:?????q?`??(2$4j?
??????Z??????mh?7?a??8??G????7T
?????4???D????Y?BB;??5??C??p]?j?:j???????
????U?? f???r???'? D??????v?E?f
?63?B?5?K>???HHX??:{$???Ag??h???8???O|?????a??e?n?{?zN>???_?!?4??T??)G??k?R????!?_2#??:j????$?>?q3<#1??
?D??-l?&8???C??A?k???:x???j?e+??aQ??g??w-?`6x????????????|/ie0????}?
??/S??~eNx??CB Yl3??D??/?`??V??_e?????8???w???aj????u??
d???aMf ??V?/??T
?g)tLF?E?j?ln\?Ui??d????;d???U'kh9?n??Qz?????Z?????IQ?2%rE?Eu-dQN????X-#?"D?L"4?QDCm??a9t?*LF2{?????eE!wek)|DG?l=t??2??????a??
g5???lc?,?????.?%9.A$;[EMAIL PROTECTED]
???????R?E
?\#???W1?#a??$?"NF?X`K??,;?p?????'??P?7??HF?HI#?
?7?a?????L????7???COaq????d%g??f;$
#??`??M?????((??Ae?n?O???lM?2h%??BoS????+???T?
U>u?L??0eq\??????r?V`?[?SEq?,K%?*????^???yP???b;??XP?M?H???(^???s
iB?J??7??u????#???K?kK0? I:7???"?l3n}
?l??M2????9?V!KmP=5c?8?o?M???;7D????_'?X
"W???2 [EMAIL
PROTECTED]|?y??e?X??D-8????,?iF<\E?v???L??TB?$j&T[K???B????
???6-nPIJ5B?Q%?Lj+??2?. ?1W? (\T?L?????s?O??~?? W|[EMAIL
PROTECTED]<9g??p????1?#Qz???f7??,?\`y???Yc?l??(LE6??}?
C?\{??A???5??;W??!$O??ae??{?_ Al???;?ix'?%????*??P??
??X?16?~SRf??o?????|%?????1?0???'f?d??4?T*??,4?LQ?pf??l?PZ?S????E~?q?K$`[??`Y2?^,????????&+S
y?'"x?I ?P?M?)?p?< [EMAIL PROTECTED]
[EMAIL PROTECTED]????^?+.M??0??????`{??????F'??=?mb?(?I??`?fd
???Bo{?2CH?d?_r0 c?r???V?>-?&P-R`????b??V?D
u7N=m?t?E?2g??????$?D??
?,?+??F6?-?HHMG????M?d?A?M??5!?b??$K']???'?H?I"???i?ddbj a?RpQ?)I
?-???#5d???m!?NI)???,8???
??RN?f????????wl3?Hnd?&???l????\?L???`b???#??G???????PB^# ?
?:z'?? ?a???3??????a?}??6WhllQ`?(q7
sHh??n^?L??????{?P??4?1F?.??oX?p?9??M*5?????G???}???/? R?h??R
?Iq??\
%BJ???g?V??N??? [EMAIL
PROTECTED]"??8?:&2???N?t]??X"wm!?G???????f|??dx?"F
B^#I"???>????6o??]>??g???<:V?s{7?E;[?;??.mL?m???(??Vz?>&??????I?
`???????u??{????TJ??U????(?U"??Db?Ub??0E??H?7?tvC?Ja????+?B??!??c$??a????K"hr???s?)[EMAIL
PROTECTED];?`???*VL??&[EMAIL PROTECTED]?C?SV??!?pL???&3?Ac???l?=?'p ?
A"! ? "??v??31,?V(? ?R??\EN+ ??
f(=?7?P&T??Z`?mb^h?o:J3dG?J{???MN?_A26?c?V
b??q|=??n?a?lO"???R6$]??
xo?2????3;j?:?(k????sC??J?w??.???d?l%v12??1?j?4?A:I?us?r"=
??D??o??+?c[u?`?(o?{A??a+??G?D[?J< *?2???B|?X0
?X?"?)?Aa?D???gf????q???b+*]fBb1????t??oRP?&???8?Y,????P?'cp??? H?T
?LT?? ???????/XSC"???gM???p?3?3?E0??7va7???w& ?1?
?w??K
a?0?E??4&??I2?$bc<?&???C?{T?"??`7??*?_'2[EMAIL PROTECTED]
[EMAIL PROTECTED](?d??B?9?(??HdA?N?Z ?IT?QbL,[EMAIL PROTECTED]G??? E?R??
P?F?62???;JP???c?P, b(]o??????i?(?q?18?L??f]lXe?Ap$]~??~?]???????E??fM?+I?Yt??1?m1??%?????SLFI?.,p?\??a?R?*??I?
j2t???"%D
eU??O?/????????0 ?gG<c?9??p!
?HM+=?D&?,??J?m1?l?B??T??]q?Fg`?F7?k/w??h?
?x???_5??e???h?$??B?aA??QdX ?'Ab?<???M?Bk??Tq(??C???8?f?W?e
j????K2?????X?r??N9??
??V??$9 H?6????6Q?V#20*????H?C4`?????O>mf?i?`CQ??,[EMAIL PROTECTED]
?/
]?????=?;??u?G?"????&T????vN???oF?0??0?hn%o?Ue{???1????}E??o?;?????X?b?D:(D?9'[?
7?
???@
? G?3h?[4???B1
??1??D!ME>???yo??B???k?,%???
o?e
?PDrP?[??q??Q???
bK?Ch27?K??K???>*9??L?}?u?.?H[?-?G=??e??-???G?wgj>[EMAIL
PROTECTED]&?zd???e&?
?z??lQbc
wyv??
?)?I???C?~?5K??^? ,????A?????o?????b???"SFKHl?}G6?r????<8?E????#$??X???"(??v?,Z??t"?=xt???h?_J0UD?-??h????D???7k??|[EMAIL
PROTECTED]
P?}?b?T'??q+?? ?r???Cg?&-`?8?-?-?03?lE)q*"?_SR??2F b"?N?T
??O???X?b??I7???,?#,???2??v?#?h0$?A
{?A?W?????????N?e?!????5??Xs?D?&????Q?lv4'??X;?L(-??B8?K?#G??????
07?R??6S??1?? ?&?*b[`(???Q??b??P?Q??????Q?H?$?2?b???/[EMAIL
PROTECTED]&?:??l%p?P?W??F6;%?????$?"r[EMAIL PROTECTED] ??dY*?#
??9??VX^?w??sa???
k??R?b??C? ??a?9??rC?( ?/)?A?[?C?
j7?#q??0c?h?_MeS?V??3 ?E]WP$9 ??B??{??A??
???H?f??5az9?P??!q?`XlBP?1?U?'@4?wC???""U?*??"[EMAIL PROTECTED]'/????
-??,]n9#?b?q?*?H????bKBL?J?????d.???'?????;???E?([EMAIL
PROTECTED];???m??~??\d`?_???M
?'R?Ih6R??Pc{L?g?k4c??YL7??;7zc269?3vv?e,r??Y<5??ci???????????]C-F
Paa?!?S???V?%???qT?T?J?
3?+1?vet5?00????,hK??3Z!{?Y?P??[??
?NL????P?E?d?F?g?V????Ct???[S??:?v??<A??8rJ???4p;%??*nS?m?????&???!?bq???M3Z3bi?,??{??
M? ?h,?b??5????%2??&X?s?$`?]7?I??
Q?-P|S&*\!n1!??z??????F?P?X?O?S?$??n??4C4$??i6??g??X?
????????MQb??G? A??scm???[h????id??"?A#? G#
?v???p?f1,??-??iA????-?s?rB?.?o?+?X607??\?T?:?Dq?#
??it???????;?"??h????'x?x? ?p?Fw?I???6????C???U?
?%?L;?P??!B-Q/Bi$=? (?+&
?^ZJ;?AuJ??A??(T??"???d????"*%??hW?(4?<?r;?T?????I/?????+?T8???E?Y2????`??Y1??f??'?P??0?vT???????q?q??????IZ{K0???A?????P??1Qpaa???????5N??A??8???.?N?J?h??LF??)?F?X???mQM$.?(i;[EMAIL
PROTECTED],?,;[EMAIL PROTECTED]@Y??7??o
,[,???K8S?1#?\?ib??;??;4???w?f!?C?fh9P?aTV???#!?ax;??q?????[V?WS
?????h??L?2r?b&[EMAIL PROTECTED]@{?Q??55 ?T?,???bM??c?Yg???????Y?j?%?
1?#S??-?r
N??Z
S??N?GTt"?i????6?d%P?.Fa? "?'[EMAIL PROTECTED] !?????Wk???
???c?????#;Oq??"M?????.??5?*??????C??
/?|???l?G?L?[`??~?M??1#y??2???L??????M??a,jJ?8P\?????v???+?x?>??$??l?!iH
+$??_??1~A[+i7P|[8s????4
??>?K?i}????A?????2??v?$z5?4??D?#?(??=?y??4?$U?(??HX?\???.
?=MJ#',??2????????g??)????-~>7? ???Q0??#?
???????Mb??4`6?P????e???4?D ????<!?
-????$1???6 Br;???K??#gs;[EMAIL
PROTECTED]&???-:?L]?L?}a???[??!(?T2?T<??z?5???a?4?G3?o???^&;pC???-Z?0?]\??/??x\??(?
L?b?????>t?f?^?\????hm$y4?7;?In9%A?pA????$?3R?H???N??!?????8A???
~t?C???9?xC?F)?$`s????#???7c??Q$5!E;[EMAIL
PROTECTED]|([?`?h?I?????y$??,??qm???^
6????C?w??vG?p????jK?c?t?W?\?J????#?????i????QC|UcbaMyda'>a?E=???Y8???B?d?O????9??
|?$?C`V??:??%?0????{c???C?=????Y?=? ?)??q0&?BO????$??p??h$?p??h?rE8P?_???
_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel