All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Yasevich <vyasevich@gmail.com>
To: David Laight <David.Laight@ACULAB.COM>,
	'Toshiaki Makita' <makita.toshiaki@lab.ntt.co.jp>,
	"David S . Miller" <davem@davemloft.net>,
	Stephen Hemminger <stephen@networkplumber.org>
Cc: Vlad Yasevich <vyasevic@redhat.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"bridge@lists.linux-foundation.org"
	<bridge@lists.linux-foundation.org>
Subject: Re: [Bridge] [PATCH net-next] bridge: Fix incorrect judgment of promisc
Date: Thu, 05 Jun 2014 11:06:07 -0400	[thread overview]
Message-ID: <5390875F.9040804@gmail.com> (raw)
In-Reply-To: <063D6719AE5E284EB5DD2968C1650D6D17257D43@AcuExch.aculab.com>

On 06/05/2014 08:55 AM, David Laight wrote:
> From: Toshiaki Makita
>> (2014/06/05 20:03), David Laight wrote:
>>> From: Toshiaki Makita
>>>> br_manage_promisc() incorrectly expects br_auto_port() to return only 0
>>>> or 1, while it actually returns flags, i.e., a subset of BR_AUTO_MASK.
>>>>
>>>> Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
>>>> ---
>>>>  net/bridge/br_if.c | 2 +-
>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
>>>> index a08d2b8..6a07a40 100644
>>>> --- a/net/bridge/br_if.c
>>>> +++ b/net/bridge/br_if.c
>>>> @@ -153,7 +153,7 @@ void br_manage_promisc(struct net_bridge *br)
>>>>  			 * This lets us disable promiscuous mode and write
>>>>  			 * this config to hw.
>>>>  			 */
>>>> -			if (br->auto_cnt <= br_auto_port(p))
>>>> +			if (br->auto_cnt <= !!br_auto_port(p))
>>>>  				br_port_clear_promisc(p);
>>>>  			else
>>>>  				br_port_set_promisc(p);
>>>
>>> Why not the less confusing:
>>> 			if (br->auto_cnt || br_auto_port(p))
>>> and reverse the then/else lines?
>>
>> I'm respecting the original style, but I'm not particular about this style.
>> I'll make less confusing one, thanks :)
>>
>> (Your suggested condition is not exactly the same as current one, even
>> if reversing if/else. v2 will be different than it. Anyway, thanks.)
> 
> A quick truth table:
> 	auto_cnt	auto_port	set/clear
> 		0		0	clear
> 		0		1	clear
               Can't happen

> 		1		0	set
              Can't happen
> 		1		1	clear
> 		2+		0/1	clear
> 
> So you want:
> 	if (br->auto_cnt && !br_auto_port(p))
> 		br_port_set_promisc(p);
> 	else
> 		br_port_clear_promisc(p);

Some versions of the series that added this had
an explicit check for count.  Essentially, the
expanded condition is this:

  if (count == 0)
     clear
  else if (count == 1 && auto_port(p))
     clear
  else
     set

The suggestion was that we could use a boolean (0|1)
to check reduce the above to
  if (count <= auto_port(p))
     clear
  else
     set

Personally, I prefer the extended version since it
is much clearer and is easy to understand.

-vlad

> 
> Does seem like a strange condition.
> 
> 	David
> 
> 	
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


WARNING: multiple messages have this Message-ID (diff)
From: Vlad Yasevich <vyasevich@gmail.com>
To: David Laight <David.Laight@ACULAB.COM>,
	'Toshiaki Makita' <makita.toshiaki@lab.ntt.co.jp>,
	"David S . Miller" <davem@davemloft.net>,
	Stephen Hemminger <stephen@networkplumber.org>
Cc: Vlad Yasevich <vyasevic@redhat.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"bridge@lists.linux-foundation.org"
	<bridge@lists.linux-foundation.org>
Subject: Re: [PATCH net-next] bridge: Fix incorrect judgment of promisc
Date: Thu, 05 Jun 2014 11:06:07 -0400	[thread overview]
Message-ID: <5390875F.9040804@gmail.com> (raw)
In-Reply-To: <063D6719AE5E284EB5DD2968C1650D6D17257D43@AcuExch.aculab.com>

On 06/05/2014 08:55 AM, David Laight wrote:
> From: Toshiaki Makita
>> (2014/06/05 20:03), David Laight wrote:
>>> From: Toshiaki Makita
>>>> br_manage_promisc() incorrectly expects br_auto_port() to return only 0
>>>> or 1, while it actually returns flags, i.e., a subset of BR_AUTO_MASK.
>>>>
>>>> Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
>>>> ---
>>>>  net/bridge/br_if.c | 2 +-
>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
>>>> index a08d2b8..6a07a40 100644
>>>> --- a/net/bridge/br_if.c
>>>> +++ b/net/bridge/br_if.c
>>>> @@ -153,7 +153,7 @@ void br_manage_promisc(struct net_bridge *br)
>>>>  			 * This lets us disable promiscuous mode and write
>>>>  			 * this config to hw.
>>>>  			 */
>>>> -			if (br->auto_cnt <= br_auto_port(p))
>>>> +			if (br->auto_cnt <= !!br_auto_port(p))
>>>>  				br_port_clear_promisc(p);
>>>>  			else
>>>>  				br_port_set_promisc(p);
>>>
>>> Why not the less confusing:
>>> 			if (br->auto_cnt || br_auto_port(p))
>>> and reverse the then/else lines?
>>
>> I'm respecting the original style, but I'm not particular about this style.
>> I'll make less confusing one, thanks :)
>>
>> (Your suggested condition is not exactly the same as current one, even
>> if reversing if/else. v2 will be different than it. Anyway, thanks.)
> 
> A quick truth table:
> 	auto_cnt	auto_port	set/clear
> 		0		0	clear
> 		0		1	clear
               Can't happen

> 		1		0	set
              Can't happen
> 		1		1	clear
> 		2+		0/1	clear
> 
> So you want:
> 	if (br->auto_cnt && !br_auto_port(p))
> 		br_port_set_promisc(p);
> 	else
> 		br_port_clear_promisc(p);

Some versions of the series that added this had
an explicit check for count.  Essentially, the
expanded condition is this:

  if (count == 0)
     clear
  else if (count == 1 && auto_port(p))
     clear
  else
     set

The suggestion was that we could use a boolean (0|1)
to check reduce the above to
  if (count <= auto_port(p))
     clear
  else
     set

Personally, I prefer the extended version since it
is much clearer and is easy to understand.

-vlad

> 
> Does seem like a strange condition.
> 
> 	David
> 
> 	
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

  parent reply	other threads:[~2014-06-05 15:06 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-05 10:57 [Bridge] [PATCH net-next] bridge: Fix incorrect judgment of promisc Toshiaki Makita
2014-06-05 10:57 ` Toshiaki Makita
2014-06-05 11:03 ` [Bridge] " David Laight
2014-06-05 11:03   ` David Laight
2014-06-05 11:21   ` [Bridge] " Toshiaki Makita
2014-06-05 11:21     ` Toshiaki Makita
2014-06-05 12:55     ` [Bridge] " David Laight
2014-06-05 12:55       ` David Laight
2014-06-05 13:05       ` [Bridge] " Toshiaki Makita
2014-06-05 13:05         ` Toshiaki Makita
2014-06-05 13:47         ` [Bridge] " David Laight
2014-06-05 13:47           ` David Laight
2014-06-05 15:06       ` Vlad Yasevich [this message]
2014-06-05 15:06         ` Vlad Yasevich

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=5390875F.9040804@gmail.com \
    --to=vyasevich@gmail.com \
    --cc=David.Laight@ACULAB.COM \
    --cc=bridge@lists.linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=makita.toshiaki@lab.ntt.co.jp \
    --cc=netdev@vger.kernel.org \
    --cc=stephen@networkplumber.org \
    --cc=vyasevic@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.