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-all/attachments/20050917/b7c004ed/attachment.bin


More information about the cvs-all mailing list