Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Oct 2008 08:12:28 -0700
From:      Jeremy Chadwick <koitsu@FreeBSD.org>
To:        Eduardo Meyer <dudu.meyer@gmail.com>
Cc:        stable@freebsd.org, pluknet <pluknet@gmail.com>
Subject:   Re: Check if interface supports Device Polling
Message-ID:  <20081022151228.GA60664@icarus.home.lan>
In-Reply-To: <d3ea75b30810220709i489525fbgf6a83eca1ff594c9@mail.gmail.com>
References:  <d3ea75b30810211154kae89e00j57798a34bda78299@mail.gmail.com> <a31046fc0810211429o145395efxbcf80904f1fb90ec@mail.gmail.com> <d3ea75b30810220709i489525fbgf6a83eca1ff594c9@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 22, 2008 at 12:09:31PM -0200, Eduardo Meyer wrote:
> On Tue, Oct 21, 2008 at 7:29 PM, pluknet <pluknet@gmail.com> wrote:
> > 2008/10/21 Eduardo Meyer <dudu.meyer@gmail.com>:
> >> Is there another way to check if a certain interface supports polling,
> >> other than reading polling(4)? I would like to have a script to check
> >> it, issuing something like
> >>
> >> ifconfig -v -m <nic>
> >>
> >> How can I list all NIC capabilities? Would polling be listed if the
> >> driver supports?
> >>
> >
> > I don't know if ifconfig supports listing NIC capabilities, but you can
> > always add this. Something like:
> >
> > --- ifconfig.c.orig     2008-10-22 00:50:03.000000000 +0400
> > +++ ifconfig.c  2008-10-22 01:28:21.000000000 +0400
> > @@ -708,6 +708,19 @@
> >  }
> >
> >  void
> > +getifcaps(const char *vname, int value, int s, const struct afswtch *afp)
> > +{
> > +       int flags;
> > +
> > +       if (ioctl(s, SIOCGIFCAP, (caddr_t)&ifr) < 0) {
> > +               Perror("ioctl (SIOCGIFCAP)");
> > +               exit(1);
> > +       }
> > +       flags = ifr.ifr_reqcap;
> > +       printf("Capabilities: %x\n", flags);
> > +}
> > +
> > +void
> >  setifcap(const char *vname, int value, int s, const struct afswtch *afp)
> >  {
> >        int flags;
> > @@ -1009,6 +1022,7 @@
> >        DEF_CMD("-monitor",     -IFF_MONITOR,   setifflags),
> >        DEF_CMD("staticarp",    IFF_STATICARP,  setifflags),
> >        DEF_CMD("-staticarp",   -IFF_STATICARP, setifflags),
> > +       DEF_CMD("caps",         0,              getifcaps),
> >        DEF_CMD("rxcsum",       IFCAP_RXCSUM,   setifcap),
> >        DEF_CMD("-rxcsum",      -IFCAP_RXCSUM,  setifcap),
> >        DEF_CMD("txcsum",       IFCAP_TXCSUM,   setifcap),
> > $ diff -u ifconfig.h.orig ifconfig.h
> > --- ifconfig.h.orig     2008-04-27 20:12:43.000000000 +0400
> > +++ ifconfig.h  2008-10-22 00:56:14.000000000 +0400
> > @@ -134,6 +134,7 @@
> >  extern int verbose;
> >
> >  void   setifcap(const char *, int value, int s, const struct afswtch *);
> > +void   getifcaps(const char *, int value, int s, const struct afswtch *);
> >
> >  void   Perror(const char *cmd);
> >  void   printb(const char *s, unsigned value, const char *bits);
> > --
> > wbr,
> > pluknet
> >
> 
> I have applied your patch, but all I get is:
> 
> # ifconfig -v rl0 caps
> Capabilities: 48

The above patch is completely unnecessary.  The -m flag in ifconfig 
will do what you want.

However, the existing ifconfig code does not print POLLING as a
capability, which is where the bug truly lies.

I'll provide a patch that extends the capability list properly, and will
allow you to determine a full capability list.

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |




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