Revision: 579
http://sourceforge.net/p/vde/svn/579
Author: rd235
Date: 2014-03-08 12:08:39 +0000 (Sat, 08 Mar 2014)
Log Message:
-----------
vxvde bugfix (IPv4 self broadcasts) and optimizations
Modified Paths:
--------------
branches/rd235/vde-2/src/lib/libvdeplug/libvdeplug_vxvde.c
branches/rd235/vde-2/src/vde_plug.c
Modified: branches/rd235/vde-2/src/lib/libvdeplug/libvdeplug_vxvde.c
===================================================================
--- branches/rd235/vde-2/src/lib/libvdeplug/libvdeplug_vxvde.c 2014-02-10
21:41:41 UTC (rev 578)
+++ branches/rd235/vde-2/src/lib/libvdeplug/libvdeplug_vxvde.c 2014-03-08
12:08:39 UTC (rev 579)
@@ -196,7 +196,6 @@
return retval;
}
-
#ifdef DEBUGADDR
static inline void printaddr(char *msg, void *sockaddr)
{
@@ -255,7 +254,6 @@
for (rp = result; rp != NULL; rp = rp->ai_next) {
switch (rp->ai_family) {
case AF_INET6: {
- // currently unsupported
struct sockaddr_in6 *addr=(struct sockaddr_in6 *)(rp->ai_addr);
struct ipv6_mreq mc_req;
struct sockaddr_in6 bindaddr;
@@ -309,8 +307,8 @@
&bindaddrlen) < 0)
goto error;
uniport=bindaddr.sin6_port;
-
break;
}
+
break;
case AF_INET: {
struct sockaddr_in *addr=(struct sockaddr_in *)(rp->ai_addr);
struct ip_mreqn mc_req;
@@ -370,6 +368,7 @@
uniport=bindaddr.sin_port;
//fprintf(stderr,"local port %d\n",ntohs(bindaddr.sin_port));
}
+
break;
default:
uniport=0;
}
Modified: branches/rd235/vde-2/src/vde_plug.c
===================================================================
--- branches/rd235/vde-2/src/vde_plug.c 2014-02-10 21:41:41 UTC (rev 578)
+++ branches/rd235/vde-2/src/vde_plug.c 2014-03-08 12:08:39 UTC (rev 579)
@@ -42,6 +42,7 @@
#define BUFSIZE 4096
#define ETH_ALEN 6
+#define ETH_HDRLEN (ETH_ALEN+ETH_ALEN+2)
VDECONN *conn;
VDECONN *conn2;
@@ -300,15 +301,19 @@
break;
if (pollv[0].revents & POLLIN) {
nx=vde_recv(conn, bufin, BUFSIZE,0);
- if (nx==0)
+ if (__builtin_expect((nx >= ETH_HDRLEN),1)) {
+ vde_send(conn2, bufin, nx, 0);
+ /*fprintf(stderr,"0->1 %d ",nx);*/
+ } else if (nx<0)
break;
- vde_send(conn2, bufin, nx, 0);
}
if (pollv[1].revents & POLLIN) {
nx=vde_recv(conn2,bufin,BUFSIZE,0);
- if (nx<0)
+ if (__builtin_expect((nx >= ETH_HDRLEN),1)) {
+ vde_send(conn, bufin, nx, 0);
+ /*fprintf(stderr,"1->0 %d ",nx);*/
+ } else if (nx<0)
break;
- vde_send(conn, bufin, nx, 0);
}
}
return(0);
@@ -465,8 +470,8 @@
for(;;) {
poll(pollv,3,-1);
- if ((pollv[0].revents | pollv[1].revents | pollv[2].revents) &
POLLHUP ||
- pollv[2].revents & POLLIN)
+ if (__builtin_expect(((pollv[0].revents | pollv[1].revents |
pollv[2].revents) & POLLHUP ||
+ pollv[2].revents & POLLIN),0))
break;
if (pollv[0].revents & POLLIN) {
nx=read(STDIN_FILENO,bufin,sizeof(bufin));
@@ -475,17 +480,16 @@
/*fprintf(stderr,"%s: RECV %d %x %x
\n",myname,nx,bufin[0],bufin[1]);*/
if (nx==0)
break;
- vdestream_recv(vdestream, bufin, nx);
+ vdestream_recv(vdestream, bufin, nx);
}
if (pollv[1].revents & POLLIN) {
nx=vde_recv(conn,bufin,BUFSIZE-2,0);
- if (nx<0)
- perror("vde_plug: recvfrom ");
- else
+ if (__builtin_expect((nx >= ETH_HDRLEN),1))
{
vdestream_send(vdestream, bufin, nx);
/*fprintf(stderr,"%s: SENT %d %x %x
\n",myname,nx,bufin[0],bufin[1]);*/
- }
+ } else if (nx<0)
+ perror("vde_plug: recvfrom ");
}
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works.
Faster operations. Version large binaries. Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
vde-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vde-users