Revision: 457 http://vde.svn.sourceforge.net/vde/?rev=457&view=rev Author: rd235 Date: 2011-01-10 14:41:35 +0000 (Mon, 10 Jan 2011)
Log Message: ----------- Basic support for libvirt (uml, qemu/kvm) Modified Paths: -------------- trunk/vde-2/src/vde_switch/plugins/iplog.c Added Paths: ----------- trunk/vde-2/libvirt/ trunk/vde-2/libvirt/README trunk/vde-2/libvirt/libvirt-0.8.7.vde.patch Added: trunk/vde-2/libvirt/README =================================================================== --- trunk/vde-2/libvirt/README (rev 0) +++ trunk/vde-2/libvirt/README 2011-01-10 14:41:35 UTC (rev 457) @@ -0,0 +1,22 @@ +This patch defines and manages the syntax: + +<domain ....> + <device> + <interface type='vde'> + ... + <switch path='/tmp/vde.ctl'/> + </interface> + </device> +</domain> + +the switch tag can be omitted: vde uses the default switch. +qemu/kvm support: tested. +user-mode linux support is included but not tested yet. +libvirt vde support for virtualbox has not been coded yet. + +INSTALL: +download libvirt-0.8.7 +..../libvirt-0.8.7$ patch -p 1 < libvirt-0.8.7.vde.patch +..../libvirt-0.8.7$ configure +..../libvirt-0.8.7$ make +..../libvirt-0.8.7$ sudo make install Added: trunk/vde-2/libvirt/libvirt-0.8.7.vde.patch =================================================================== --- trunk/vde-2/libvirt/libvirt-0.8.7.vde.patch (rev 0) +++ trunk/vde-2/libvirt/libvirt-0.8.7.vde.patch 2011-01-10 14:41:35 UTC (rev 457) @@ -0,0 +1,140 @@ +--- a/src/lxc/lxc_driver.c 2011-01-10 11:49:49.000000000 +0100 ++++ b/src/lxc/lxc_driver.c 2011-01-10 11:50:03.000000000 +0100 +@@ -1083,6 +1083,7 @@ + case VIR_DOMAIN_NET_TYPE_INTERNAL: + case VIR_DOMAIN_NET_TYPE_DIRECT: + case VIR_DOMAIN_NET_TYPE_LAST: ++ case VIR_DOMAIN_NET_TYPE_VDE: + break; + } + +--- a/src/uml/uml_conf.c 2011-01-10 12:03:54.000000000 +0100 ++++ b/src/uml/uml_conf.c 2011-01-10 13:26:08.000000000 +0100 +@@ -269,6 +269,14 @@ + virBufferVSprintf(&buf, "tuntap,%s", def->ifname); + break; + ++ case VIR_DOMAIN_NET_TYPE_VDE: ++ /* ethNNN=vde,vde_switch,macaddr,port,group,mode,description */ ++ if (def->data.vde.vdeswitch) { ++ virBufferVSprintf(&buf, "vde,%s", def->data.vde.vdeswitch); ++ } else ++ virBufferAddLit(&buf, "vde"); ++ break; ++ + case VIR_DOMAIN_NET_TYPE_INTERNAL: + umlReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("internal networking type not supported")); +--- a/src/conf/domain_conf.h 2011-01-10 11:41:07.000000000 +0100 ++++ b/src/conf/domain_conf.h 2011-01-10 13:21:08.000000000 +0100 +@@ -288,6 +288,7 @@ + VIR_DOMAIN_NET_TYPE_BRIDGE, + VIR_DOMAIN_NET_TYPE_INTERNAL, + VIR_DOMAIN_NET_TYPE_DIRECT, ++ VIR_DOMAIN_NET_TYPE_VDE, + + VIR_DOMAIN_NET_TYPE_LAST, + }; +@@ -336,6 +337,9 @@ + int mode; + virVirtualPortProfileParams virtPortProfile; + } direct; ++ struct { ++ char *vdeswitch; ++ } vde; + } data; + char *ifname; + virDomainDeviceInfo info; +--- a/src/conf/domain_conf.c 2011-01-10 11:42:04.000000000 +0100 ++++ b/src/conf/domain_conf.c 2011-01-10 14:49:46.000000000 +0100 +@@ -182,7 +182,8 @@ + "network", + "bridge", + "internal", +- "direct") ++ "direct", ++ "vde") + + VIR_ENUM_IMPL(virDomainChrChannelTarget, + VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST, +@@ -598,6 +599,10 @@ + VIR_FREE(def->data.direct.linkdev); + break; + ++ case VIR_DOMAIN_NET_TYPE_VDE: ++ VIR_FREE(def->data.vde.vdeswitch); ++ break; ++ + case VIR_DOMAIN_NET_TYPE_USER: + case VIR_DOMAIN_NET_TYPE_LAST: + break; +@@ -2293,6 +2298,7 @@ + char *internal = NULL; + char *devaddr = NULL; + char *mode = NULL; ++ char *vdeswitch = NULL; + virNWFilterHashTablePtr filterparams = NULL; + virVirtualPortProfileParams virtPort; + bool virtPortParsed = false; +@@ -2379,7 +2385,11 @@ + xmlStrEqual(cur->name, BAD_CAST "state")) { + /* Legacy back-compat. Don't add any more attributes here */ + devaddr = virXMLPropString(cur, "devaddr"); +- } ++ } else if ((vdeswitch == NULL) && ++ def->type == VIR_DOMAIN_NET_TYPE_VDE && ++ xmlStrEqual(cur->name, BAD_CAST "switch")) { ++ vdeswitch = virXMLPropString(cur, "path"); ++ } + } + cur = cur->next; + } +@@ -2529,6 +2539,11 @@ + + break; + ++ case VIR_DOMAIN_NET_TYPE_VDE: ++ def->data.vde.vdeswitch = vdeswitch; ++ vdeswitch = NULL; ++ break; ++ + case VIR_DOMAIN_NET_TYPE_USER: + case VIR_DOMAIN_NET_TYPE_LAST: + break; +@@ -6263,6 +6278,12 @@ + " "); + break; + ++ case VIR_DOMAIN_NET_TYPE_VDE: ++ if (def->data.vde.vdeswitch) ++ virBufferEscapeString(buf, " <switch path='%s'/>\n", ++ def->data.vde.vdeswitch); ++ break; ++ + case VIR_DOMAIN_NET_TYPE_USER: + case VIR_DOMAIN_NET_TYPE_LAST: + break; +--- a/src/qemu/qemu_command.c 2011-01-10 13:11:17.000000000 +0100 ++++ b/src/qemu/qemu_command.c 2011-01-10 13:26:28.000000000 +0100 +@@ -1602,12 +1602,21 @@ + case VIR_DOMAIN_NET_TYPE_BRIDGE: + case VIR_DOMAIN_NET_TYPE_INTERNAL: + case VIR_DOMAIN_NET_TYPE_DIRECT: ++ case VIR_DOMAIN_NET_TYPE_VDE: + case VIR_DOMAIN_NET_TYPE_LAST: + break; + } + type_sep = ','; + break; + ++ case VIR_DOMAIN_NET_TYPE_VDE: ++ virBufferAddLit(&buf, "vde"); ++ if (net->data.vde.vdeswitch) ++ virBufferVSprintf(&buf, "%csock=%s", ++ type_sep, ++ net->data.vde.vdeswitch); ++ break; ++ + case VIR_DOMAIN_NET_TYPE_USER: + default: + virBufferAddLit(&buf, "user"); Modified: trunk/vde-2/src/vde_switch/plugins/iplog.c =================================================================== --- trunk/vde-2/src/vde_switch/plugins/iplog.c 2010-12-05 09:06:18 UTC (rev 456) +++ trunk/vde-2/src/vde_switch/plugins/iplog.c 2011-01-10 14:41:35 UTC (rev 457) @@ -183,12 +183,14 @@ } now=qtime(); e->last_seen = now; - if(e->port != port) { + if(e->port != port || e->vlan != vlan) { e->port=port; + e->vlan = vlan; char hostname[100]; char msg[256]; char lf[]="\n"; - struct iovec iov[]={{msg,0},{lf,1}}; + char stime[26]; + struct iovec iov[]={{stime+4,16},{msg,0},{lf,1}}; if ((len==4 && ip42string((uint32_t *)addr,hostname,sizeof(hostname))==0) || (len==16 && ip62string((uint32_t *)addr,hostname,sizeof(hostname))==0)) { @@ -198,11 +200,13 @@ username="(none)"; else username=pwd->pw_name; - iov[0].iov_len=snprintf(msg,sizeof(msg),"ipv%d %s port=%d user=%s", - (len==4)?4:6, hostname, port, username); - if (logfilefd >= 0) - writev(logfilefd,iov,2); - else if (logfilefd != -1) + iov[1].iov_len=snprintf(msg,sizeof(msg),"ipv%d %s port=%d vlan=%d user=%s", + (len==4)?4:6, hostname, port, vlan, username); + if (logfilefd >= 0) { + time_t ntime=time(&ntime); + ctime_r(&ntime,stime); + writev(logfilefd,iov,3); + } else if (logfilefd != -1) syslog(LOG_INFO, msg); DBGOUT(D_LOGIP_NEWIP,"%s",msg); } @@ -254,14 +258,6 @@ ip_for_all_hash(ip_gc, &t); } -/* delete all ip address on a specific port (when the port is closed) */ -static void port_gc(struct ip_hash_entry *e, void *arg) -{ - int *port=arg; - if(*port == e->port) - delete_hash_entry(e); -} - /* upcall from vde: new incomping packet */ #define UINT32(X) (((uint32_t *)&(X))) static int iplog_pktin(struct dbgcl *event,void *arg,va_list v) @@ -321,6 +317,14 @@ return 0; } +/* delete all ip address on a specific port (when the port is closed) */ +static void port_gc(struct ip_hash_entry *e, void *arg) +{ + int *port=arg; + if(*port == e->port) + delete_hash_entry(e); +} + /* upcall from vde: a port has been closed */ static int iplog_port_minus(struct dbgcl *event,void *arg,va_list v) { @@ -329,7 +333,7 @@ return 0; } -/*user interface: chowinfo */ +/*user interface: showinfo */ static int ipshowinfo(FILE *fd) { printoutc(fd,"iplog: ip/port/user loggin plugin"); @@ -473,7 +477,7 @@ out[i]=*(((uint32_t *)m)+i); } -/* cumpute the number of bits from a mask */ +/* compute the number of bits from a mask */ static int mask2n(int len, void *addr) { char *m=addr; @@ -700,7 +704,7 @@ struct sockaddr_in6 *ip6addr=(struct sockaddr_in6 *) ai->ai_addr; iplog_ipsearch_item(16, ip6addr->sin6_addr.s6_addr , fd); } else - return rv=EINVAL; + rv=EINVAL; freeaddrinfo(ai); return rv; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Gaining the trust of online customers is vital for the success of any company that requires sensitive data to be transmitted over the Web. Learn how to best implement a security strategy that keeps consumers' information secure and instills the confidence they need to proceed with transactions. http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ vde-users mailing list vde-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/vde-users