Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Nov 2003 20:38:36 +0700
From:      Eugene Grosbein <eugen@kuzbass.ru>
To:        Luigi Rizzo <rizzo@icir.org>
Cc:        net@freebsd.org
Subject:   Re: ipfw: pullup failed
Message-ID:  <3FC35B5C.AC3C578F@kuzbass.ru>
References:  <3F6546C1.41B7143@kuzbass.ru> <3F654BBB.9240465B@kuzbass.ru> <20030915012443.A49336@xorpc.icir.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Luigi Rizzo wrote:

> > > > My router that uses ipfw2 for WF2Q+ sometimes writes in log:
> > > > 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.
> 
>  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);
> }

I've upgraded my router to 4.9-STABLE and applied your patch.
Well, it produces something interesting. It produces kernel panic
because m once became NULL in this printf :-)

Eugene Grosbein



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3FC35B5C.AC3C578F>