Leon Me=DFner wrote at 12:22 +0100 on Nov 6, 2008:
> Hi,
> =
> On Wed, Nov 05, 2008 at 06:46:52PM -0500, Jean-Louis Martineau wrote:
> > Ian Turner wrote:
> >> I don't know if 2.5.1 is old enough to qualify for this issue, but =
it used =
> >> to be the case that the entire set of disklists for a client had to=
fit in =
> >> a single packet. What that meant is that if you had more than a few=
dozen =
> >> disks on one client (depending on disklist options), you would run =
into =
> >> this issue.
> =
> On this backupset i have 28 dle's.
> =
> >> =
> >> The solution is to upgrade, but a workaround is to create a second =
IP =
> >> address and DNS name on the same physical client, and move some of =
the =
> >> disklist entries to the latter.
> =
> I'm running the latest Amanda from the Ports. Perhaps i should ask the=
> maintainer about updating to 2.6.x. I don't know why the port uses thi=
s
> old version. The maintainer seems to be quite active.
> =
> > Or change to the 'bsdtcp' auth.
> =
> =
> Thanks for your solutions, changing net.inet.udp.maxdgram to 65535
> helped also (FreeBSD's default is 9k ;).
I've been applying the following patch to bump up the max datagram
size since amanda 2.4.1 (minor differences per version mostly due to
changes in dbprintf) when I started seeing packet size limit problems
even with a modest number of DLEs (it was a particular DLE that had a
lot of files that first caused the problem).
It works on all OS's, not just BSDs. At one point I submitted it on
-hackers, but it never got committed. The maxdgram sysctl is global
to the system. This patch gives you a little finer control.
Against 2.5.1p1 - 2.5.x ...
--- common-src/dgram.c.orig Wed Sep 20 06:48:54 2006
+++ common-src/dgram.c Wed Sep 27 13:43:07 2006
@@ -57,6 +57,7 @@ dgram_bind(
socklen_t len;
struct sockaddr_in name;
int save_errno;
+ int sndbufsize =3D MAX_DGRAM;
=
*portp =3D (in_port_t)0;
if((s =3D socket(AF_INET, SOCK_DGRAM, 0)) =3D=3D -1) {
@@ -75,6 +76,10 @@ dgram_bind(
errno =3D EMFILE; /* out of range */
return -1;
}
+ if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (void *) &sndbufsize,
+ sizeof(sndbufsize)) < 0)
+ dbprintf(("%s: dgram_bind: could not set udp send buffer to %d\n",
+ debug_prefix(NULL), sndbufsize));
=
memset(&name, 0, SIZEOF(name));
name.sin_family =3D (sa_family_t)AF_INET;
Against 2.6.x ...
--- common-src/dgram.c.orig Fri May 30 11:44:36 2008
+++ common-src/dgram.c Fri Aug 22 13:19:56 2008
@@ -250,6 +250,7 @@
socklen_t_equiv addrlen;
ssize_t nfound;
int save_errno;
+ int sndbufsize =3D MAX_DGRAM;
=
sock =3D dgram->socket;
=
@@ -286,6 +287,10 @@
errno =3D save_errno;
return nfound;
}
+ if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (void *) &sndbufsize,
+ sizeof(sndbufsize)) < 0)
+ dbprintf("%s: dgram_bind: could not set udp send buffer to %d\n",
+ strerror(save_errno), sndbufsize);
=
addrlen =3D (socklen_t_equiv)sizeof(sockaddr_union);
size =3D recvfrom(sock, dgram->data, (size_t)MAX_DGRAM, 0,
|