Index: ggatec/Makefile =================================================================== RCS file: /zoo/cvsup/FreeBSD-CVS/src/sbin/ggate/ggatec/Makefile,v retrieving revision 1.6 diff -u -p -r1.6 Makefile --- ggatec/Makefile 10 Jul 2005 21:10:20 -0000 1.6 +++ ggatec/Makefile 1 Apr 2007 19:27:00 -0000 @@ -6,6 +6,7 @@ PROG= ggatec MAN= ggatec.8 SRCS= ggatec.c ggate.c +CFLAGS+= -DMAX_SEND_SIZE=32768 CFLAGS+= -DLIBGEOM CFLAGS+= -I${.CURDIR}/../shared Index: shared/ggate.c =================================================================== RCS file: /zoo/cvsup/FreeBSD-CVS/src/sbin/ggate/shared/ggate.c,v retrieving revision 1.8 diff -u -p -r1.8 ggate.c --- shared/ggate.c 18 Dec 2006 11:12:00 -0000 1.8 +++ shared/ggate.c 31 Mar 2007 11:29:22 -0000 @@ -222,6 +222,16 @@ g_gate_load_module(void) } } +/* + * When we send from ggatec packets larger than 32kB, performance drops + * significantly (eg. to 256kB/s over 1Gbit/s link). This is not a problem + * when data is send from ggated. I don't know why, so for now I limit + * size of packets send from ggatec to 32kB by defining MAX_SEND_SIZE + * in ggatec Makefile. + */ +#ifndef MAX_SEND_SIZE +#define MAX_SEND_SIZE MAXPHYS +#endif ssize_t g_gate_send(int s, const void *buf, size_t len, int flags) { @@ -229,7 +239,7 @@ g_gate_send(int s, const void *buf, size const unsigned char *p = buf; while (len > 0) { - done2 = send(s, p, len, flags); + done2 = send(s, p, MIN(len, MAX_SEND_SIZE), flags); if (done2 == 0) break; else if (done2 == -1) {