Was there an non-rsyslog relay in the relay chain? If not, it points to the rsyslog forwarding module doing the truncation (what recent v3+ i think should not do...)
rainer ----- Ursprüngliche Nachricht ----- Von: "[email protected]" <[email protected]> An: "rsyslog-users" <[email protected]> Gesendet: 08.09.09 19:55 Betreff: Re: [rsyslog] Help requested: UDP max message size? On Tue, 8 Sep 2009, Rainer Gerhards wrote: > oh my... Please disregard this question. I was working on a tcpdump file, and > the message length actually *is* 1024 bytes. I was confused by Wireshark's > (correct!) indication that the frame is 1066 octets in length. Of course, > this is correct, if you take the 42 octets of UDP header into account... > > I guess the dump file was created with a max of 1K... the dump file was set -s 0 (up to 64k packet size), but many/most syslog senders will limit their outbound data to 1k David Lang > Sometimes it is sooo easy ... and yet so hard to see ;) > > Sorry for the interruption, > Rainer > >> -----Original Message----- >> From: [email protected] [mailto:rsyslog- >> [email protected]] On Behalf Of Rainer Gerhards >> Sent: Tuesday, September 08, 2009 1:23 PM >> To: [email protected] >> Subject: [rsyslog] Help requested: UDP max message size? >> >> Hi all, >> >> I am really banging my head on a problem which sounds too easy. I have >> seen that my systems (and some others as well), seem to not provide >> more >> than 1024 bytes on a recvfrom() call. With wireshark, I see that the >> system itself, at the IP layer, receives more data. I am a bit puzzled, >> to phrase it lightly. I did not find any information on such a >> limitation. >> >> I have created a strip-down version of a receiver, even built it on top >> of the Linux man pages samples. Out of desperation, I even set the >> receivebuf size, which I think has no effect on datagram sockets. >> Still... I only get 1024 bytes. Code is after my sig. >> >> Does anybody have an idea what is going on OR a good place where to ask >> this question? >> >> Thanks, >> Rainer >> >> #include <sys/types.h> >> #include <stdio.h> >> #include <stdlib.h> >> #include <unistd.h> >> #include <string.h> >> #include <sys/socket.h> >> #include <netdb.h> >> >> #define BUF_SIZE 2048 >> >> int >> main(int argc, char *argv[]) >> { >> struct addrinfo hints; >> struct addrinfo *result, *rp; >> int sfd, s; >> struct sockaddr_storage peer_addr; >> socklen_t peer_addr_len; >> ssize_t nread; >> char buf[BUF_SIZE]; >> >> if (argc != 2) { >> fprintf(stderr, "Usage: %s port\n", argv[0]); >> exit(EXIT_FAILURE); >> } >> >> memset(&hints, 0, sizeof(struct addrinfo)); >> hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ >> hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ >> hints.ai_flags = AI_PASSIVE; /* For wildcard IP address >> */ >> hints.ai_protocol = 0; /* Any protocol */ >> hints.ai_canonname = NULL; >> hints.ai_addr = NULL; >> hints.ai_next = NULL; >> >> s = getaddrinfo(NULL, argv[1], &hints, &result); >> if (s != 0) { >> fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s)); >> exit(EXIT_FAILURE); >> } >> >> /* getaddrinfo() returns a list of address structures. >> Try each address until we successfully bind(2). >> If socket(2) (or bind(2)) fails, we (close the socket >> and) try the next address. */ >> >> for (rp = result; rp != NULL; rp = rp->ai_next) { >> sfd = socket(rp->ai_family, rp->ai_socktype, >> rp->ai_protocol); >> if (sfd == -1) >> continue; >> >> >> int result2; >> int bufSize = 2048; >> result2 = setsockopt(sfd, SOL_SOCKET, SO_RCVBUF, &bufSize, >> sizeof(bufSize)); >> printf("result of setsockopt: %d\n", result2); >> >> if (bind(sfd, rp->ai_addr, rp->ai_addrlen) == 0) >> break; /* Success */ >> >> close(sfd); >> } >> >> if (rp == NULL) { /* No address succeeded */ >> fprintf(stderr, "Could not bind\n"); >> exit(EXIT_FAILURE); >> } >> >> freeaddrinfo(result); /* No longer needed */ >> >> /* Read datagrams and echo them back to sender */ >> for (;;) { >> peer_addr_len = sizeof(struct sockaddr_storage); >> memset(buf, 0, BUF_SIZE); >> nread = recvfrom(sfd, buf, BUF_SIZE, 0, >> (struct sockaddr *) &peer_addr, &peer_addr_len); >> if(nread > 1024) >> printf("NREAD > 1024!"); >> if (nread == -1) >> continue; /* Ignore failed request */ >> >> char host[NI_MAXHOST], service[NI_MAXSERV]; >> >> s = getnameinfo((struct sockaddr *) &peer_addr, >> peer_addr_len, host, NI_MAXHOST, >> service, NI_MAXSERV, NI_NUMERICSERV); >> if (s == 0) >> printf("Received %ld bytes from %s:%s, msg:'%s'\n", >> (long) nread, host, service, buf); >> else >> fprintf(stderr, "getnameinfo: %s\n", >> gai_strerror(s)); >> } >> } >> >> >> _______________________________________________ >> rsyslog mailing list >> http://lists.adiscon.net/mailman/listinfo/rsyslog >> http://www.rsyslog.com > _______________________________________________ > rsyslog mailing list > http://lists.adiscon.net/mailman/listinfo/rsyslog > http://www.rsyslog.com > _______________________________________________ rsyslog mailing list http://lists.adiscon.net/mailman/listinfo/rsyslog http://www.rsyslog.com _______________________________________________ rsyslog mailing list http://lists.adiscon.net/mailman/listinfo/rsyslog http://www.rsyslog.com

