ipfw: pullup failed
Luigi Rizzo
rizzo at icir.org
Mon Sep 15 01:24:45 PDT 2003
On Mon, Sep 15, 2003 at 01:18:51PM +0800, Eugene Grosbein wrote:
> Luigi Rizzo wrote:
>
> > > My router that uses ipfw2 for WF2Q+ sometimes writes in log:
> > >
> > > Sep 15 00:00:00 gw2 newsyslog[51667]: logfile turned over
> > > Sep 15 06:20:27 gw2 /kernel: ipfw: pullup failed
> > > Sep 15 07:00:42 gw2 /kernel: ipfw: pullup failed
> > > Sep 15 07:58:55 gw2 /kernel: ipfw: pullup failed
> > > Sep 15 08:23:13 gw2 /kernel: ipfw: pullup failed
> > > Sep 15 10:14:38 gw2 /kernel: ipfw: pullup failed
> > > Sep 15 11:50:53 gw2 /kernel: ipfw: pullup failed
> >
> > a possibility is that it has run out of mbufs. what does netstat -m say ?
>
> 669/1920/65536 mbufs in use (current/peak/max):
> 654 mbufs allocated to data
> 15 mbufs allocated to packet headers
> 472/712/16384 mbuf clusters in use (current/peak/max)
ok, another one is that the packet was too short for the desired
length (supposedly, as a result of a collision).
You could perhaps try the following patch and see if it tells you
something more interesting.
cheers
luigi
static int
ipfw_chk(struct ip_fw_args *args)
{
+ int desired_len = -1;
/*
* Local variables hold state during the processing of a packet.
*
* IMPORTANT NOTE: to speed up the processing of rules, there
...
#define PULLUP_TO(len) \
do { \
if ((m)->m_len < (len)) { \
args->m = m = m_pullup(m, (len)); \
- if (m == 0) \
+ if (m == 0) { \
+ desired_len = (len); \
goto pullup_failed; \
+ } \
ip = mtod(m, struct ip *); \
} \
} while (0)
...
pullup_failed:
if (fw_verbose)
- printf("pullup failed\n");
+ printf("pullup failed have %d want %d\n", m->m_len,desired_len);
return(IP_FW_PORT_DENY_FLAG);
}
> 1904 Kbytes allocated to network (3% of mb_map in use)
> 0 requests for memory denied
> 0 requests for memory delayed
> 0 calls to protocol drain routines
More information about the freebsd-net
mailing list