Check if interface supports Device Polling
Jeremy Chadwick
koitsu at FreeBSD.org
Wed Oct 22 08:12:31 PDT 2008
On Wed, Oct 22, 2008 at 12:09:31PM -0200, Eduardo Meyer wrote:
> On Tue, Oct 21, 2008 at 7:29 PM, pluknet <pluknet at gmail.com> wrote:
> > 2008/10/21 Eduardo Meyer <dudu.meyer at 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 |
More information about the freebsd-stable
mailing list