cvs commit: src/sys/dev/re if_re.c
Ruslan Ermilov
ru at FreeBSD.org
Sat Sep 17 03:16:05 PDT 2005
Hi,
On Fri, Sep 16, 2005 at 11:06:08PM +0000, Bill Paul wrote:
> If you insist on sticking to the "no twiddling IFF_UP from inside
> the driver" rule, then I think the problem can be avoided by simply not
> being lazy in foo_ioctl() and actually having explicit code in SIOCSIFFLAGS
> case that turns promisc mode on and off on an IFF_PROMISC transition,
> and is careful not to do it unless IFF_RUNNING is set. It also
> needs to handle IFF_UP separately from IFF_PROMISC. I think the
> correct logic would look something like:
>
> if (IFF_UP was toggled up)
> foo_init(sc);
> else if (IFF_UP was toggled down)
> foo_stop(sc);
>
> if (IFF_PROMISC was toggled up && ifp->if_flags & IFF_RUNNING)
> foo_set_promisc(sc);
> else if (IFF_PROMISC was toggled down && ifp->if_flags & IFF_RUNNING)
> foo_clear_promisc(sc);
>
How about prototyping the "lazy" SIOCSIFFLAGS handler as follows:
if (IFF_UP has toggled up)
foo_init(); /* foo_init takes care of IFF_PROMISC etc. */
else if (IFF_UP has toggled down)
foo_stop();
else if (IFF_DRV_RUNNING) {
if (something interesting has toggled)
foo_init();
}
Non-lazy handlers can specifially process IFF_PROMISC|IFF_ALLMULTI toggles.
For comparison, the current "lazy" handler is as follows:
if (IFF_UP)
foo_init();
else if (!IFF_UP & IFF_DRV_RUNNING)
foo_stop();
I.e., it doesn't remember the previous state.
Cheers,
--
Ruslan Ermilov
ru at FreeBSD.org
FreeBSD committer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/cvs-src/attachments/20050917/b7c004ed/attachment.bin
More information about the cvs-src
mailing list