From: Wang Chen <wangchen@cn.fujitsu.com>
To: Patrick McHardy <kaber@trash.net>
Cc: Jeff Garzik <jgarzik@pobox.com>,
Alan Cox <alan@lxorguk.ukuu.org.uk>,
"David S. Miller" <davem@davemloft.net>,
NETDEV <netdev@vger.kernel.org>
Subject: Re: [PATCH] net-driver: Drivers don't set IFF_* flag [Was: [PATCH 3/3] netdevice: order of synchronization of IFF_PROMISC and IFF_ALLMULTI]
Date: Mon, 23 Jun 2008 21:33:41 +0800 [thread overview]
Message-ID: <485FA635.4090903@cn.fujitsu.com> (raw)
In-Reply-To: <485F8332.6010203@trash.net>
Patrick McHardy said the following on 2008-6-23 19:04:
> Wang Chen wrote:
>> Jeff Garzik said the following on 2008-6-18 10:52:
>>> Drivers should not be setting IFF_* flags in set_multicast_list().
>>>
>>> The normal logic is that a driver interprets the request implied in
>>> set_multicast_list ("promisc, all-multi, or select multi?"), and then
>>> programs the hardware based on that.
>>>
>>> On some hardware, IFF_ALLMULTI requires that the hardware receive all
>>> packets (promisc). Even for that case, the driver should -not- be
>>> setting the IFF_PROMISC flag. It should be aware of its own hardware
>>> programming state through some other method.
>>>
>>
>> Subject: [PATCH] net-driver: Drivers don't set IFF_* flag
>>
>> Some hardware set promisc when they are requested to set IFF_ALLMULTI
>> flag.
>> It's ok, but if drivers set IFF_PROMISC flag when they set promisc,
>> it will broken upper layer handle for promisc and allmulti.
>> In addition, drivers can use their own hardware programming to make it.
>> So do not allow drivers to set IFF_* flags.
>>
>> This is a general driver fix, so I didn't split it to pieces and send
>> to specific driver maintainers.
>
> Did you check that these drivers don't use the PROMISC flag they
> set themselves somewhere? As Jeff said, they might use it to be
> aware of their hardware programming state.
>
Yes. I checked.
The flag is set but not be used anywhere else.
All of the drivers set their own state and at the same time
set IFF_PROMIDC flag.
I think that by setting IFF_PROMISC the drivers want to inform
upper layer that they set hardware to promisc although they are
requested to set ALLMULTI.
But the driver's redundant action is unneeded.
Because, if the hardwares have to set promisc mode when they
required to receive all multicast packets, it's ok, upper layer
don't need to be informed.
Only if allmulti and promiscuity all be zero, the promisc mode will be off.
>> diff --git a/drivers/net/tulip/de4x5.c b/drivers/net/tulip/de4x5.c
>> index bc30c6e..df22589 100644
>> --- a/drivers/net/tulip/de4x5.c
>> +++ b/drivers/net/tulip/de4x5.c
>> @@ -5520,6 +5520,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq
>> *rq, int cmd)
>> omr |= OMR_PR;
>> outl(omr, DE4X5_OMR);
>> dev->flags |= IFF_PROMISC;
>> + dev->promiscuity++;
>> break;
>>
>> case DE4X5_CLR_PROM: /* Clear Promiscuous Mode */
>> @@ -5528,6 +5529,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq
>> *rq, int cmd)
>> omr &= ~OMR_PR;
>> outl(omr, DE4X5_OMR);
>> dev->flags &= ~IFF_PROMISC;
>> + dev->promiscuity = 0;
>> break;
>
> Shouldn't this be using dev_set_promiscuity().
>
No.
1. dev_set_promiscuity do
a. set/unset IFF_PROMISC
b. promiscuity++/--
c. audit
d. dev_set_rx_mode (upload unicast and multicast list to device)
Here, in ioctl, a & b is enough.
2. dev->flags unset IFF_PROMISC and dev->promiscuity = 0 can not be
replaced by dev_set_promiscuity(). Because, we don't decrease
promiscuity here, but set promiscuity zero for unset IFF_PROMISC.
next prev parent reply other threads:[~2008-06-23 13:38 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-16 9:17 [PATCH 3/3] netdevice: order of synchronization of IFF_PROMISC and IFF_ALLMULTI Wang Chen
2008-06-16 9:27 ` Patrick McHardy
2008-06-16 9:39 ` Wang Chen
2008-06-16 10:03 ` Patrick McHardy
2008-06-17 1:42 ` Wang Chen
2008-06-17 13:06 ` Patrick McHardy
2008-06-18 2:27 ` Wang Chen
2008-06-18 2:52 ` Jeff Garzik
2008-06-18 3:22 ` Wang Chen
2008-06-20 15:07 ` [PATCH] net-driver: Drivers don't set IFF_* flag [Was: [PATCH 3/3] netdevice: order of synchronization of IFF_PROMISC and IFF_ALLMULTI] Wang Chen
2008-06-23 11:04 ` Patrick McHardy
2008-06-23 13:33 ` Wang Chen [this message]
2008-06-23 13:47 ` Patrick McHardy
2008-06-23 14:44 ` Wang Chen
2008-06-23 14:52 ` Patrick McHardy
2008-06-24 1:02 ` Wang Chen
2008-06-24 5:10 ` Grant Grundler
2008-06-24 5:39 ` Wang Chen
2008-06-27 1:14 ` v2 [PATCH 2/2] de4x5: Remove developer debug feature about set/clear promisc Wang Chen
2008-06-28 17:52 ` Grant Grundler
2008-06-30 3:24 ` v3 " Wang Chen
2008-07-02 4:22 ` Grant Grundler
2008-06-27 1:14 ` v2 [PATCH 1/2] net-driver: Drivers don't set IFF_* flag Wang Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=485FA635.4090903@cn.fujitsu.com \
--to=wangchen@cn.fujitsu.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=davem@davemloft.net \
--cc=jgarzik@pobox.com \
--cc=kaber@trash.net \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).