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>