Error: Received conflicting packet
rihad
rihad at mail.ru
Sun Oct 11 12:44:33 CEST 2009
Hi, all,
Sometimes when there are too many requests from a NAS, like right after
rebooting it and thus breaking current sessions, etc., freeradius 2.1.3
under FreeBSD begins loggin many many lines like this after the NAS
re-sends unanswered packets:
Error: Received conflicting packet from client 10.10.70.94 port 1646 -
ID: 220 due to unfinished request 511166. Giving up on old request.
I looked in src/main/event.c and found this code:
default:
gettimeofday(&when, NULL);
when.tv_sec -= 1;
/*
* If the cached request was received
* within the last second, then we
* discard the NEW request instead of the
* old one. This will happen ONLY when
* the client is severely broken, and is
* sending conflicting packets very
* quickly.
*/
if (timercmp(&when, &request->received, <)) {
radlog(L_ERR, "Discarding conflicting
packet from "
"client %s port %d - ID: %d due
to recent request %d.",
client->shortname,
packet->src_port, packet->id,
request->number);
return 0;
}
received_conflicting_request(request, client);
^^^
request = NULL;
break;
Our authorization/accounting happens through rlm_perl and is written in
Perl. Perhaps it's not fast enough to process many many requests in
under 1 second (when.tv_sec), but aborting the current packet instead of
the new duplicate one can hardly be justified.
Please look at the line marked with ^^^ - it's where the error is logged
and the current request is aborted, unless it was caught earlier by
"Discarding conflicting packet", in which case the _new_ duplicate
request is aborted, which is more correct.
I propose that when.tv_sec be configurable in radiusd.conf, and not
hardcoded like that.
More information about the Freeradius-Devel
mailing list