<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.linux.network.bridge">
    <title>gmane.linux.network.bridge</title>
    <link>http://blog.gmane.org/gmane.linux.network.bridge</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6211"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6203"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6197"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6180"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6179"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6177"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6175"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6173"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6172"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6159"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6157"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6156"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6150"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6149"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6148"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6143"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6124"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6123"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6122"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.network.bridge/6118"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6211">
    <title>[PATCHv4 net-next 0/2] Add two new flags to bridge.</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6211</link>
    <description>&lt;pre&gt;The following series adds 2 new flags to bridge.  One flag allows
the user to control whether mac learning is performed on the interface
or not.  By default mac learning is on.
The other flag allows the user to control whether unicast traffic
is flooded (send without an fdb) to a given unicast port.  Default is
on.

Changes since v4:
 - Implemented Stephen's suggestions.

Changes since v2:
 - removed unused "unlock" tag.

Changes since v1:
 - Integrated suggestion from MST to not impact RTM_NEWNEIGH and to
   skip lookups when learning is disabled.

Vlad Yasevich (2):
  bridge: Add flag to control mac learning.
  bridge: Add a flag to control unicast packet flood.

 include/uapi/linux/if_link.h |    2 ++
 net/bridge/br_device.c       |    8 ++++----
 net/bridge/br_fdb.c          |   17 ++++++++++++++---
 net/bridge/br_forward.c      |   14 +++++++++-----
 net/bridge/br_if.c           |    2 +-
 net/bridge/br_input.c        |    9 ++++++---
 net/bridge/br_netlink.c      |   10 +++++++++-
 net/bridge/br_private.h      |    7 +++++--
 net/bridge/br_sysfs_if.c     |    4 ++++
 9 files changed, 54 insertions(+), 19 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Vlad Yasevich</dc:creator>
    <dc:date>2013-04-30T18:18:45</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6203">
    <title>[PATCHv2 net-next 0/2] Add two new flags to bridge.</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6203</link>
    <description>&lt;pre&gt;The following series adds 2 new flags to bridge.  One flag allows
the user to control whether mac learning is performed on the interface
or not.  By default mac learning is on.
The other flag allows the user to control whether unicast traffic
is flooded (send without an fdb) to a given unicast port.  Default is
on.

Changes since v1:
 - Integrated suggestion from MST to not impact RTM_NEWNEIGH and to
   skip lookups when learning is disabled.

Vlad Yasevich (2):
  bridge: Add flag to control mac learning.
  bridge: Add a flag to control unicast packet flood.

 include/uapi/linux/if_link.h |    2 ++
 net/bridge/br_device.c       |    8 ++++----
 net/bridge/br_fdb.c          |   17 ++++++++++++++---
 net/bridge/br_forward.c      |   14 +++++++++-----
 net/bridge/br_if.c           |    2 +-
 net/bridge/br_input.c        |    9 ++++++---
 net/bridge/br_netlink.c      |   10 +++++++++-
 net/bridge/br_private.h      |    7 +++++--
 net/bridge/br_sysfs_if.c     |    4 ++++
 9 files changed, 54 insertions(+), 19 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Vlad Yasevich</dc:creator>
    <dc:date>2013-04-29T17:35:43</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6197">
    <title>[PATCH net-next 0/2] Add some new flags to bridges.</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6197</link>
    <description>&lt;pre&gt;The follows series adds 2 new flags to bridge.  One flag allows
the user to control whether mac learning is performed on the interface
or not.  By default mac learning is on.
The other flag allows the user to control whether unicast traffic
is flooded (send without an fdb) to a given unicast port.  Default is
on.

Vlad Yasevich (2):
  bridge: Add flag to control mac learning.
  bridge: Add a flag to control unicast packet flood.

 include/uapi/linux/if_link.h |    2 ++
 net/bridge/br_device.c       |    8 ++++----
 net/bridge/br_fdb.c          |    4 ++++
 net/bridge/br_forward.c      |   14 +++++++++-----
 net/bridge/br_if.c           |    2 +-
 net/bridge/br_input.c        |    9 ++++++---
 net/bridge/br_netlink.c      |   10 +++++++++-
 net/bridge/br_private.h      |    7 +++++--
 net/bridge/br_sysfs_if.c     |    4 ++++
 9 files changed, 44 insertions(+), 16 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Vlad Yasevich</dc:creator>
    <dc:date>2013-04-29T15:58:20</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6180">
    <title>[PATCH v2 net-next 0/6] Allow bridge to function innon-promisc mode</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6180</link>
    <description>&lt;pre&gt;This series is an almost complete rework of the prior attempt
to make the bridge function in non-promisc mode.  In this series
the "promiscuity" of an interface is dynamically determined and
the interface may transition from/to promiscuous mode based on
bridge configuration.

The series keeps an idea of an "uplink" port.  That is still user
designated.
The series also adds a concept of "dynamic" bridge port.  This is
the default state of the port and means that the user has not
specified any static FDBs for that port.
Once a user has added a static FDB entry to port and also specified
an "uplink" flag for that FDB, the mac address from that FDB is
added to the bridge hw address list and synched down to uplinks.
"Uplinks" are always considered dynamic ports even if a static entry
has been added for them.
Promiscuity is determined by the number of dynamic ports.  If there
are no dynamic ports (i.e all ports have static FDBs set), then we
know all the neighbors and can switch promisc off on all of the ports.
If we have only 1 dynamic port and its an uplink, we can synch all
static hw addresses to this port and mark it non-promisc.
If we have more then 1 dynamic port, then all ports have to be
promiscuouse.
This is the algorith that Michael Tsirkin proposed earlier.

Changes since v1:
 - Dynamic promisc mode selection.  Almost complete re-write.

Vlad Yasevich (6):
  bridge: Allow an ability to designate an uplink port
  bridge: make flags sysfs interface a little bit more extensible
  bridge: Implement IFF_UNICAST_FLT.
  bridge: Allow user to program hw addresses to uplink devices.
  bridge: Automatically set promisc on uplink ports.
  bridge: Store bridge mac to uplinks

 include/uapi/linux/if_link.h   |    1 +
 include/uapi/linux/neighbour.h |    6 +-
 net/bridge/br_device.c         |   69 ++++++++++++++++++++++++--
 net/bridge/br_fdb.c            |  108 +++++++++++++++++++++++++++++++---------
 net/bridge/br_if.c             |   50 +++++++++++++++---
 net/bridge/br_netlink.c        |    5 ++
 net/bridge/br_private.h        |   12 ++++-
 net/bridge/br_stp_if.c         |    2 +-
 net/bridge/br_sysfs_if.c       |   60 ++++++++++++++++++----
 net/core/dev.c                 |    1 +
 net/core/rtnetlink.c           |    4 +-
 11 files changed, 265 insertions(+), 53 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Vlad Yasevich</dc:creator>
    <dc:date>2013-04-19T20:52:44</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6179">
    <title>Configuration-messages from root switch hello-timer notforwarded</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6179</link>
    <description>&lt;pre&gt;Hi everyone,

I'm trying to set up a simple ring-netwerk using a managed switch as root
(an HP ProCurve 2512) and some mini-ITX boards with 2 network-interfaces.

Initial setup is working fine but when I add a node B to a deeper level (so
[switch] → [node A] → *[node B]* → [node C] → [switch]) I get the following
error-messages on node about 20 seconds after initialization complets (when
the message age timer expires)

br0: port 1(eth0) neighbor 8000.00:0d:b9:1c:66:20 lost


which causes a reconfiguration of the network, and if there's any loops
causes blocking and relearning of the tree, with lots of traffic being
generated.

net_ratelimit: 35664 callbacks suppressed


When I look at one of the upstream-nodes (A or C) they do receive hello
messages within the message window (on their designated port) but do not
seem to forward them to their other interfaces.

The bridges are created with the following commands:

brctl addbr br0

brctl stp on

brctl addif br0 eth0

brctl addif br0 eth1

ifconfig br0 up


eth0 and eth1 have no further configuration and are declared manual
interfaces in /etc/network/interfaces. I'm running Voyage Linux
(kernel-version is 2.6.35).

Your help is very much appreciated, as I would like to use this setup as a
redundancy tool for an event next tuesday.

Thanks,
Pieter De Baets
&lt;/pre&gt;</description>
    <dc:creator>Pieter De Baets</dc:creator>
    <dc:date>2013-04-19T17:55:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6177">
    <title>[PATCH] bridge: Add missing include for in6_addr</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6177</link>
    <description>&lt;pre&gt;ee07c6e7a6f8a25c18f0a6b18152fbd7499245f6 ("bridge: export multicast database
via netlink") added "struct br_mdb_entry" which includes an element using the
type "struct in6_addr". The file linux/if_bridge.h is part of the uapi and not
defining this type in this file or its includes causes build failures in
userspace applications.

Signed-off-by: Sven Eckelmann &amp;lt;sven&amp;lt; at &amp;gt;open-mesh.com&amp;gt;
---
 include/uapi/linux/if_bridge.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/uapi/linux/if_bridge.h b/include/uapi/linux/if_bridge.h
index 2d70d79..8e3f287 100644
--- a/include/uapi/linux/if_bridge.h
+++ b/include/uapi/linux/if_bridge.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -14,6 +14,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define _UAPI_LINUX_IF_BRIDGE_H
 
 #include &amp;lt;linux/types.h&amp;gt;
+#include &amp;lt;linux/in6.h&amp;gt;
 
 #define SYSFS_BRIDGE_ATTR"bridge"
 #define SYSFS_BRIDGE_FDB"brforward"
&lt;/pre&gt;</description>
    <dc:creator>Sven Eckelmann</dc:creator>
    <dc:date>2013-04-18T09:17:38</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6175">
    <title>[PATCH] Notify userspace about bridge learning MAC on newport</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6175</link>
    <description>&lt;pre&gt;Hi,

currently, the userspace is informed about the port the MAC is learned 
on a bridge and about the bridge removing the MAC from its forwarding 
table, but not when the MAC is learned on a different port. This is 
inconsistent and makes it difficult for applications to keep track of 
all MACs learned by a bridge on a subset of its ports.

Please find attached a patch that fixes this by sending an RTM_NEWNEIGH 
message when the forwarding destination port changes.

Regards,
  M. BraunNotify userspace about bridge learning MAC on new port

Currently, the userspace is informed about the port the MAC is learned on a
bridge and about the bridge removing the MAC from its forwarding table, but not
when the MAC is learned on a different port.
This is inconsistent and makes it difficult for applications to keep track
of all MACs learned by a bridge on a subset of its ports.

Signed-off-by: Michael Braun &amp;lt;michael-dev&amp;lt; at &amp;gt;fami-braun.de&amp;gt;

--- a/net/bridge/br_fdb.c2013-04-15 11:21:51.638963668 +0200
+++ b/net/bridge/br_fdb.c2013-04-15 11:23:55.941166319 +0200
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -408,6 +408,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int fdb_insert(struct net_bridge
 {
 struct hlist_head *head = &amp;amp;br-&amp;gt;hash[br_mac_hash(addr, vid)];
 struct net_bridge_fdb_entry *fdb;
+struct net_bridge_port *origsrc;
 
 if (!is_valid_ether_addr(addr))
 return -EINVAL;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -471,8 +472,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void br_fdb_update(struct net_bridge *br
 source-&amp;gt;dev-&amp;gt;name);
 } else {
 /* fastpath: update of existing entry */
+origsrc = fdb-&amp;gt;dst;
 fdb-&amp;gt;dst = source;
 fdb-&amp;gt;updated = jiffies;
+/* notify applications of modified slave device */
+if (origsrc != source)
+fdb_notify(br, fdb, RTM_NEWNEIGH);
 }
 } else {
 spin_lock(&amp;amp;br-&amp;gt;hash_lock);
&lt;/pre&gt;</description>
    <dc:creator>michael-dev</dc:creator>
    <dc:date>2013-04-15T10:29:10</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6173">
    <title>bridging and VLANs</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6173</link>
    <description>&lt;pre&gt;I'm trying to understand the current and future state of bridging VLANs. I see there's been patch activity on this list, so I'm hoping someone here will be kind enough to explain.

I currently bridge VLANs, using commands like 

$ brctl addbr neta
$ brctl addif neta eth0.100
...

This works for me, mostly. Should it? Is this interface going to change?

Thanks,
Ben Scarlet


&lt;/pre&gt;</description>
    <dc:creator>Benjamin Scarlet</dc:creator>
    <dc:date>2013-04-15T12:15:23</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6172">
    <title>[PATCH net] bridge: make user modified path cost sticky</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6172</link>
    <description>&lt;pre&gt;Keep a STP port path cost value if it was set by a user.
Don't replace it with the link-speed based path cost
whenever the link goes down and comes back up.

Reported-by: Roopa Prabhu &amp;lt;roopa&amp;lt; at &amp;gt;cumulusnetworks.com&amp;gt;
Signed-off-by: Stephen Hemminger &amp;lt;stephen&amp;lt; at &amp;gt;networkplumber.org&amp;gt;

---
 net/bridge/br_if.c      |    3 ++-
 net/bridge/br_private.h |    1 +
 net/bridge/br_stp_if.c  |    1 +
 3 files changed, 4 insertions(+), 1 deletion(-)

--- a/net/bridge/br_private.h2013-03-14 14:22:58.155958025 -0700
+++ b/net/bridge/br_private.h2013-04-13 09:16:41.712531648 -0700
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -156,6 +156,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct net_bridge_port
 #define BR_BPDU_GUARD           0x00000002
 #define BR_ROOT_BLOCK0x00000004
 #define BR_MULTICAST_FAST_LEAVE0x00000008
+#define BR_ADMIN_COST0x00000010
 
 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 u32multicast_startup_queries_sent;
--- a/net/bridge/br_stp_if.c2013-03-07 18:12:53.885287247 -0800
+++ b/net/bridge/br_stp_if.c2013-04-13 09:19:58.437979528 -0700
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -288,6 +288,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int br_stp_set_path_cost(struct net_brid
     path_cost &amp;gt; BR_MAX_PATH_COST)
 return -ERANGE;
 
+p-&amp;gt;flags |= BR_ADMIN_COST;
 p-&amp;gt;path_cost = path_cost;
 br_configuration_update(p-&amp;gt;br);
 br_port_state_selection(p-&amp;gt;br);
--- a/net/bridge/br_if.c2013-04-09 16:10:57.553418004 -0700
+++ b/net/bridge/br_if.c2013-04-13 09:24:07.274751368 -0700
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -67,7 +67,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void br_port_carrier_check(struct net_br
 struct net_device *dev = p-&amp;gt;dev;
 struct net_bridge *br = p-&amp;gt;br;
 
-if (netif_running(dev) &amp;amp;&amp;amp; netif_oper_up(dev))
+if (!(p-&amp;gt;flags &amp;amp; BR_ADMIN_COST) &amp;amp;&amp;amp;
+    netif_running(dev) &amp;amp;&amp;amp; netif_oper_up(dev))
 p-&amp;gt;path_cost = port_cost(dev);
 
 if (!netif_running(br-&amp;gt;dev))

&lt;/pre&gt;</description>
    <dc:creator>Stephen Hemminger</dc:creator>
    <dc:date>2013-04-14T00:06:07</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6159">
    <title>[PATCH 0/3] bridge: implement restricted forwarding policy</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6159</link>
    <description>&lt;pre&gt;Hello,

with this patchset I would like to introduce a new feature to be added to the
bridge module that is later going to be one of the building block of a
distributed technique implemented using batman-adv.

The scenario where we want to play is a Layer2 mesh network handled by
the batman-adv module. For who may not know how it works, batman-adv creates a
sort of "extended broadcast domain" shared among nodes that are not directly
connected to each other.
This mechanism provides every node the view of the batman-adv network
as it was a very big Ethernet switch.


The goal we want to achieve by adding this feature consists in selecting a
subset of the interfaces available on all the hosts participating to the mesh
network and to prevent packets from being forwarded from one of them to another.

Looking again at the "very big switch" abstraction this would allow a mesh
network administrator to define a sort of "not forwarding policy network wide"
between some of the big switch's port.

This patchset is introducing the small piece needed by every hosts in the
network to handle the policy locally. In particular, I'm adding a new flag for
the net_device-&amp;gt;flags member (IFF_BRIDGE_RESTRICTED) and a new attribute to the
sk_buff structure (bridge_restricted), then the bridge code is modified to
obey the following rule:

* do not forward any skb with the bridge_restricted attribute set to interfaces
  marked with the IFF_BRIDGE_RESTRICTED flag.


Later, a change to batman-adv will follow which will make it spit out skbs with
the bridge_restricted member set depending on its distributed logic.


I am not entirely sure if I chose the very best place for those flags. If not,
please advise :)

Thanks a lot.


Cheers,


Antonio Quartulli (3):
  if.h: add IFF_BRIDGE_RESTRICTED flag
  sk_buff: add bridge_restricted flag
  bridge: implement restricted port forwarding policy

 include/linux/skbuff.h  |  3 ++-
 include/uapi/linux/if.h |  1 +
 net/bridge/br_forward.c | 18 +++++++++++++++++-
 net/bridge/br_input.c   |  6 ++++++
 net/core/dev.c          |  2 +-
 5 files changed, 27 insertions(+), 3 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Antonio Quartulli</dc:creator>
    <dc:date>2013-04-08T17:41:00</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6157">
    <title>network namespace + bridge visibility</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6157</link>
    <description>&lt;pre&gt;==========================
mmarkk&amp;lt; at &amp;gt;imac:~# brctl addbr qwe
mmarkk&amp;lt; at &amp;gt;imac:~# unshare -n /bin/bash
root&amp;lt; at &amp;gt;imac:~# ip link
14: lo: &amp;lt;LOOPBACK&amp;gt; mtu 16436 qdisc noop state DOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
root&amp;lt; at &amp;gt;imac:~# brctl show
bridge name bridge id STP enabled interfaces
qwe 8000.000000000000 no
root&amp;lt; at &amp;gt;imac:~# brctl delbr qwe
bridge qwe doesn't exist; can't delete it
=============================

So, network device is not available, but present in list of bridges. This
is the bug, as I think.

Reproducible in linux kernels 3.8.2 and 3.2.0

&lt;/pre&gt;</description>
    <dc:creator>Марк Коренберг</dc:creator>
    <dc:date>2013-03-28T18:17:16</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6156">
    <title>[PATCH net-next] bridge: remove unused variable ifm</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6156</link>
    <description>&lt;pre&gt;Signed-off-by: Hong Zhiguo &amp;lt;honkiko&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 net/bridge/br_netlink.c |   12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index b96e02e..8e3abf5 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -352,17 +352,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int br_setport(struct net_bridge_port *p, struct nlattr *tb[])
 /* Change state and parameters on port. */
 int br_setlink(struct net_device *dev, struct nlmsghdr *nlh)
 {
-struct ifinfomsg *ifm;
 struct nlattr *protinfo;
 struct nlattr *afspec;
 struct net_bridge_port *p;
 struct nlattr *tb[IFLA_BRPORT_MAX + 1];
 int err = 0;
 
-ifm = nlmsg_data(nlh);
-
-protinfo = nlmsg_find_attr(nlh, sizeof(*ifm), IFLA_PROTINFO);
-afspec = nlmsg_find_attr(nlh, sizeof(*ifm), IFLA_AF_SPEC);
+protinfo = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_PROTINFO);
+afspec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
 if (!protinfo &amp;amp;&amp;amp; !afspec)
 return 0;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -411,14 +408,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; out:
 /* Delete port information */
 int br_dellink(struct net_device *dev, struct nlmsghdr *nlh)
 {
-struct ifinfomsg *ifm;
 struct nlattr *afspec;
 struct net_bridge_port *p;
 int err;
 
-ifm = nlmsg_data(nlh);
-
-afspec = nlmsg_find_attr(nlh, sizeof(*ifm), IFLA_AF_SPEC);
+afspec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
 if (!afspec)
 return 0;
 
&lt;/pre&gt;</description>
    <dc:creator>Hong Zhiguo</dc:creator>
    <dc:date>2013-03-28T16:21:22</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6150">
    <title>[PATCH] bridge: fix crash when set mac address of brinterface</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6150</link>
    <description>&lt;pre&gt;When I tried to set mac address of a bridge interface to a mac
address which already learned on this bridge, I got system hang.

The cause is straight forward: function br_fdb_change_mac_address
calls fdb_insert with NULL source nbp. Then an fdb lookup is
performed. If an fdb entry is found and it's local, it's OK. But
if it's not local, source is dereferenced for printk without NULL
check.

Signed-off-by: Hong Zhiguo &amp;lt;honkiko&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 net/bridge/br_fdb.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 10b47d4..c581f12 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -421,7 +421,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
 return 0;
 br_warn(br, "adding interface %s with same address "
        "as a received packet\n",
-       source-&amp;gt;dev-&amp;gt;name);
+       source ? source-&amp;gt;dev-&amp;gt;name : br-&amp;gt;dev-&amp;gt;name);
 fdb_delete(br, fdb);
 }
 
&lt;/pre&gt;</description>
    <dc:creator>Hong Zhiguo</dc:creator>
    <dc:date>2013-03-23T12:27:50</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6149">
    <title>[PATCH net-next] bridge: avoid br_ifinfo_notify whennothing changed</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6149</link>
    <description>&lt;pre&gt;When neither IFF_BRIDGE_PORT or IFF_BRIDGE_PORT is set,
and afspec == NULL but  protinfo != NULL, we run into
"if (err == 0) br_ifinfo_notify(RTM_NEWLINK, p);" with
random value in ret.

Signed-off-by: Hong Zhiguo &amp;lt;honkiko&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 net/bridge/br_netlink.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 84c3b7d..b96e02e 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -357,7 +357,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int br_setlink(struct net_device *dev, struct nlmsghdr *nlh)
 struct nlattr *afspec;
 struct net_bridge_port *p;
 struct nlattr *tb[IFLA_BRPORT_MAX + 1];
-int err;
+int err = 0;
 
 ifm = nlmsg_data(nlh);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -370,7 +370,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int br_setlink(struct net_device *dev, struct nlmsghdr *nlh)
 /* We want to accept dev as bridge itself if the AF_SPEC
  * is set to see if someone is setting vlan info on the brigde
  */
-if (!p &amp;amp;&amp;amp; ((dev-&amp;gt;priv_flags &amp;amp; IFF_EBRIDGE) &amp;amp;&amp;amp; !afspec))
+if (!p &amp;amp;&amp;amp; !afspec)
 return -EINVAL;
 
 if (p &amp;amp;&amp;amp; protinfo) {
&lt;/pre&gt;</description>
    <dc:creator>Hong Zhiguo</dc:creator>
    <dc:date>2013-03-23T05:14:13</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6148">
    <title>[PATCH 2/2] bridge: Use IPv6 link-local address for multicast listener queries</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6148</link>
    <description>&lt;pre&gt;Hello,

I am using 2.6.39.4 kernel for MLD snooping, in net/bridge/br_multicast.c
file,

we observed the check for tranoisent flag in the group address.

 That mean with out this flag set the group address will be droped.

 My doubt is why MLD is restricted with T (transient) flag, we can't use
with out T flag multicast group address.

 Looking forward for you replay, Thank you in advance.


Regards,

Satya
&lt;/pre&gt;</description>
    <dc:creator>Satya Narayana</dc:creator>
    <dc:date>2013-03-20T16:26:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6143">
    <title>[PATCH v2] net: add ETH_P_802_3_MIN</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6143</link>
    <description>&lt;pre&gt;Add a new constant ETH_P_802_3_MIN, the minimum ethernet type for
an 802.3 frame. Frames with a lower value in the ethernet type field
are Ethernet II.

Also update all the users of this value that David Miller and
I could find to use the new constant.

Also correct a bug in util.c. The comparison with ETH_P_802_3_MIN
should be &amp;gt;= not &amp;gt;.

As suggested by Jesse Gross.

Compile tested only.

Cc: David Miller &amp;lt;davem&amp;lt; at &amp;gt;davemloft.net&amp;gt;
Cc: Jesse Gross &amp;lt;jesse&amp;lt; at &amp;gt;nicira.com&amp;gt;
Cc: Karsten Keil &amp;lt;isdn&amp;lt; at &amp;gt;linux-pingi.de&amp;gt;
Cc: John W. Linville &amp;lt;linville&amp;lt; at &amp;gt;tuxdriver.com&amp;gt;
Cc: Johannes Berg &amp;lt;johannes&amp;lt; at &amp;gt;sipsolutions.net&amp;gt;
Cc: Bart De Schuymer &amp;lt;bart.de.schuymer&amp;lt; at &amp;gt;pandora.be&amp;gt;
Cc: Stephen Hemminger &amp;lt;stephen&amp;lt; at &amp;gt;networkplumber.org&amp;gt;
Cc: Patrick McHardy &amp;lt;kaber&amp;lt; at &amp;gt;trash.net&amp;gt;
Cc: Marcel Holtmann &amp;lt;marcel&amp;lt; at &amp;gt;holtmann.org&amp;gt;
Cc: Gustavo Padovan &amp;lt;gustavo&amp;lt; at &amp;gt;padovan.org&amp;gt;
Cc: Johan Hedberg &amp;lt;johan.hedberg&amp;lt; at &amp;gt;gmail.com&amp;gt;
Cc: linux-bluetooth&amp;lt; at &amp;gt;vger.kernel.org
Cc: netfilter-devel&amp;lt; at &amp;gt;vger.kernel.org
Cc: bridge&amp;lt; at &amp;gt;lists.linux-foundation.org
Cc: linux-wireless&amp;lt; at &amp;gt;vger.kernel.org
Cc: linux1394-devel&amp;lt; at &amp;gt;lists.sourceforge.net
Cc: linux-media&amp;lt; at &amp;gt;vger.kernel.org
Cc: netdev&amp;lt; at &amp;gt;vger.kernel.org
Cc: dev&amp;lt; at &amp;gt;openvswitch.org
Acked-by: Mauro Carvalho Chehab &amp;lt;mchehab&amp;lt; at &amp;gt;redhat.com&amp;gt;
Acked-by: Stefan Richter &amp;lt;stefanr&amp;lt; at &amp;gt;s5r6.in-berlin.de&amp;gt;
Signed-off-by: Simon Horman &amp;lt;horms&amp;lt; at &amp;gt;verge.net.au&amp;gt;

---

v2
* Make updates to the following files as suggested by David Miller
  - drivers/media/dvb-core/dvb_net.c
  - drivers/net/wireless/ray_cs.c
  - net/bridge/netfilter/ebtables.c
  - include/linux/if_vlan.h
  - net/bluetooth/bnep/netdev.c
  - net/openvswitch/flow.c
  - net/mac80211/tx.c
  - net/wireless/util.c
---
 drivers/firewire/net.c           |    2 +-
 drivers/isdn/i4l/isdn_net.c      |    2 +-
 drivers/media/dvb-core/dvb_net.c |   10 +++++-----
 drivers/net/ethernet/sun/niu.c   |    2 +-
 drivers/net/plip/plip.c          |    2 +-
 drivers/net/wireless/ray_cs.c    |    2 +-
 include/linux/if_vlan.h          |    2 +-
 include/uapi/linux/if_ether.h    |    3 +++
 net/atm/lec.h                    |    2 +-
 net/bluetooth/bnep/netdev.c      |    2 +-
 net/bridge/netfilter/ebtables.c  |    2 +-
 net/ethernet/eth.c               |    2 +-
 net/mac80211/tx.c                |    2 +-
 net/openvswitch/datapath.c       |    2 +-
 net/openvswitch/flow.c           |    6 +++---
 net/wireless/util.c              |    2 +-
 16 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
index 5679633..4d56536 100644
--- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -547,7 +547,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int fwnet_finish_incoming_packet(struct net_device *net,
 if (memcmp(eth-&amp;gt;h_dest, net-&amp;gt;dev_addr, net-&amp;gt;addr_len))
 skb-&amp;gt;pkt_type = PACKET_OTHERHOST;
 }
-if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= 1536) {
+if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= ETH_P_802_3_MIN) {
 protocol = eth-&amp;gt;h_proto;
 } else {
 rawp = (u16 *)skb-&amp;gt;data;
diff --git a/drivers/isdn/i4l/isdn_net.c b/drivers/isdn/i4l/isdn_net.c
index babc621..88d657d 100644
--- a/drivers/isdn/i4l/isdn_net.c
+++ b/drivers/isdn/i4l/isdn_net.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1385,7 +1385,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; isdn_net_type_trans(struct sk_buff *skb, struct net_device *dev)
 if (memcmp(eth-&amp;gt;h_dest, dev-&amp;gt;dev_addr, ETH_ALEN))
 skb-&amp;gt;pkt_type = PACKET_OTHERHOST;
 }
-if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= 1536)
+if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= ETH_P_802_3_MIN)
 return eth-&amp;gt;h_proto;
 
 rawp = skb-&amp;gt;data;
diff --git a/drivers/media/dvb-core/dvb_net.c b/drivers/media/dvb-core/dvb_net.c
index 44225b1..83a23af 100644
--- a/drivers/media/dvb-core/dvb_net.c
+++ b/drivers/media/dvb-core/dvb_net.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -185,7 +185,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static __be16 dvb_net_eth_type_trans(struct sk_buff *skb,
 skb-&amp;gt;pkt_type=PACKET_MULTICAST;
 }
 
-if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= 1536)
+if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= ETH_P_802_3_MIN)
 return eth-&amp;gt;h_proto;
 
 rawp = skb-&amp;gt;data;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -228,9 +228,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int ule_test_sndu( struct dvb_net_priv *p )
 static int ule_bridged_sndu( struct dvb_net_priv *p )
 {
 struct ethhdr *hdr = (struct ethhdr*) p-&amp;gt;ule_next_hdr;
-if(ntohs(hdr-&amp;gt;h_proto) &amp;lt; 1536) {
+if(ntohs(hdr-&amp;gt;h_proto) &amp;lt; ETH_P_802_3_MIN) {
 int framelen = p-&amp;gt;ule_sndu_len - ((p-&amp;gt;ule_next_hdr+sizeof(struct ethhdr)) - p-&amp;gt;ule_skb-&amp;gt;data);
-/* A frame Type &amp;lt; 1536 for a bridged frame, introduces a LLC Length field. */
+/* A frame Type &amp;lt; ETH_P_802_3_MIN for a bridged frame, introduces a LLC Length field. */
 if(framelen != ntohs(hdr-&amp;gt;h_proto)) {
 return -1;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -320,7 +320,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int handle_ule_extensions( struct dvb_net_priv *p )
 (int) p-&amp;gt;ule_sndu_type, l, total_ext_len);
 #endif
 
-} while (p-&amp;gt;ule_sndu_type &amp;lt; 1536);
+} while (p-&amp;gt;ule_sndu_type &amp;lt; ETH_P_802_3_MIN);
 
 return total_ext_len;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -712,7 +712,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
 }
 
 /* Handle ULE Extension Headers. */
-if (priv-&amp;gt;ule_sndu_type &amp;lt; 1536) {
+if (priv-&amp;gt;ule_sndu_type &amp;lt; ETH_P_802_3_MIN) {
 /* There is an extension header.  Handle it accordingly. */
 int l = handle_ule_extensions(priv);
 if (l &amp;lt; 0) {
diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index e4c1c88..95cff98 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -6618,7 +6618,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static u64 niu_compute_tx_flags(struct sk_buff *skb, struct ethhdr *ehdr,
        (len &amp;lt;&amp;lt; TXHDR_LEN_SHIFT) |
        ((l3off / 2) &amp;lt;&amp;lt; TXHDR_L3START_SHIFT) |
        (ihl &amp;lt;&amp;lt; TXHDR_IHL_SHIFT) |
-       ((eth_proto_inner &amp;lt; 1536) ? TXHDR_LLC : 0) |
+       ((eth_proto_inner &amp;lt; ETH_P_802_3_MIN) ? TXHDR_LLC : 0) |
        ((eth_proto == ETH_P_8021Q) ? TXHDR_VLAN : 0) |
        (ipv6 ? TXHDR_IP_VER : 0) |
        csum_bits);
diff --git a/drivers/net/plip/plip.c b/drivers/net/plip/plip.c
index bed62d9..1f7bef9 100644
--- a/drivers/net/plip/plip.c
+++ b/drivers/net/plip/plip.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -560,7 +560,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static __be16 plip_type_trans(struct sk_buff *skb, struct net_device *dev)
  *so don't forget to remove it.
  */
 
-if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= 1536)
+if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= ETH_P_802_3_MIN)
 return eth-&amp;gt;h_proto;
 
 rawp = skb-&amp;gt;data;
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index 4775b5d..ebada81 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -953,7 +953,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx,
    unsigned char *data, int len)
 {
 __be16 proto = ((struct ethhdr *)data)-&amp;gt;h_proto;
-if (ntohs(proto) &amp;gt;= 1536) { /* DIX II ethernet frame */
+if (ntohs(proto) &amp;gt;= ETH_P_802_3_MIN) { /* DIX II ethernet frame */
 pr_debug("ray_cs translate_frame DIX II\n");
 /* Copy LLC header to card buffer */
 memcpy_toio(&amp;amp;ptx-&amp;gt;var, eth2_llc, sizeof(eth2_llc));
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
index 218a3b6..70962f3 100644
--- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -339,7 +339,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline void vlan_set_encap_proto(struct sk_buff *skb,
  */
 
 proto = vhdr-&amp;gt;h_vlan_encapsulated_proto;
-if (ntohs(proto) &amp;gt;= 1536) {
+if (ntohs(proto) &amp;gt;= ETH_P_802_3_MIN) {
 skb-&amp;gt;protocol = proto;
 return;
 }
diff --git a/include/uapi/linux/if_ether.h b/include/uapi/linux/if_ether.h
index 798032d..ade07f1 100644
--- a/include/uapi/linux/if_ether.h
+++ b/include/uapi/linux/if_ether.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -94,6 +94,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define ETH_P_EDSA0xDADA/* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
 #define ETH_P_AF_IUCV   0xFBFB/* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */
 
+#define ETH_P_802_3_MIN0x0600/* If the value in the ethernet type is less than this value
+ * then the frame is Ethernet II. Else it is 802.3 */
+
 /*
  *Non DIX types. Won't clash for 1500 types.
  */
diff --git a/net/atm/lec.h b/net/atm/lec.h
index a86aff9..4149db1 100644
--- a/net/atm/lec.h
+++ b/net/atm/lec.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -58,7 +58,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct lane2_ops {
  *    field in h_type field. Data follows immediately after header.
  * 2. LLC Data frames whose total length, including LLC field and data,
  *    but not padding required to meet the minimum data frame length,
- *    is less than 1536(0x0600) MUST be encoded by placing that length
+ *    is less than ETH_P_802_3_MIN MUST be encoded by placing that length
  *    in the h_type field. The LLC field follows header immediately.
  * 3. LLC data frames longer than this maximum MUST be encoded by placing
  *    the value 0 in the h_type field.
diff --git a/net/bluetooth/bnep/netdev.c b/net/bluetooth/bnep/netdev.c
index e58c8b3..4b488ec 100644
--- a/net/bluetooth/bnep/netdev.c
+++ b/net/bluetooth/bnep/netdev.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -136,7 +136,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static u16 bnep_net_eth_proto(struct sk_buff *skb)
 struct ethhdr *eh = (void *) skb-&amp;gt;data;
 u16 proto = ntohs(eh-&amp;gt;h_proto);
 
-if (proto &amp;gt;= 1536)
+if (proto &amp;gt;= ETH_P_802_3_MIN)
 return proto;
 
 if (get_unaligned((__be16 *) skb-&amp;gt;data) == htons(0xFFFF))
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
index 8d493c9..3d110c4 100644
--- a/net/bridge/netfilter/ebtables.c
+++ b/net/bridge/netfilter/ebtables.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -138,7 +138,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ebt_basic_match(const struct ebt_entry *e, const struct sk_buff *skb,
 ethproto = h-&amp;gt;h_proto;
 
 if (e-&amp;gt;bitmask &amp;amp; EBT_802_3) {
-if (FWINV2(ntohs(ethproto) &amp;gt;= 1536, EBT_IPROTO))
+if (FWINV2(ntohs(ethproto) &amp;gt;= ETH_P_802_3_MIN, EBT_IPROTO))
 return 1;
 } else if (!(e-&amp;gt;bitmask &amp;amp; EBT_NOPROTO) &amp;amp;&amp;amp;
    FWINV2(e-&amp;gt;ethproto != ethproto, EBT_IPROTO))
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c
index a36c85ea..5359560 100644
--- a/net/ethernet/eth.c
+++ b/net/ethernet/eth.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -195,7 +195,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
 if (netdev_uses_trailer_tags(dev))
 return htons(ETH_P_TRAILER);
 
-if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= 1536)
+if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= ETH_P_802_3_MIN)
 return eth-&amp;gt;h_proto;
 
 /*
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 8914d2d..4e8a861 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2085,7 +2085,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
 encaps_data = bridge_tunnel_header;
 encaps_len = sizeof(bridge_tunnel_header);
 skip_header_bytes -= 2;
-} else if (ethertype &amp;gt;= 0x600) {
+} else if (ethertype &amp;gt;= ETH_P_802_3_MIN) {
 encaps_data = rfc1042_header;
 encaps_len = sizeof(rfc1042_header);
 skip_header_bytes -= 2;
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index d61cd99..8759265 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -681,7 +681,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int ovs_packet_cmd_execute(struct sk_buff *skb, struct genl_info *info)
 /* Normally, setting the skb 'protocol' field would be handled by a
  * call to eth_type_trans(), but it assumes there's a sending
  * device, which we may not have. */
-if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= 1536)
+if (ntohs(eth-&amp;gt;h_proto) &amp;gt;= ETH_P_802_3_MIN)
 packet-&amp;gt;protocol = eth-&amp;gt;h_proto;
 else
 packet-&amp;gt;protocol = htons(ETH_P_802_2);
diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c
index fe0e421..3324868 100644
--- a/net/openvswitch/flow.c
+++ b/net/openvswitch/flow.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -466,7 +466,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static __be16 parse_ethertype(struct sk_buff *skb)
 proto = *(__be16 *) skb-&amp;gt;data;
 __skb_pull(skb, sizeof(__be16));
 
-if (ntohs(proto) &amp;gt;= 1536)
+if (ntohs(proto) &amp;gt;= ETH_P_802_3_MIN)
 return proto;
 
 if (skb-&amp;gt;len &amp;lt; sizeof(struct llc_snap_hdr))
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -483,7 +483,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static __be16 parse_ethertype(struct sk_buff *skb)
 
 __skb_pull(skb, sizeof(struct llc_snap_hdr));
 
-if (ntohs(llc-&amp;gt;ethertype) &amp;gt;= 1536)
+if (ntohs(llc-&amp;gt;ethertype) &amp;gt;= ETH_P_802_3_MIN)
 return llc-&amp;gt;ethertype;
 
 return htons(ETH_P_802_2);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1038,7 +1038,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int ovs_flow_from_nlattrs(struct sw_flow_key *swkey, int *key_lenp,
 
 if (attrs &amp;amp; (1 &amp;lt;&amp;lt; OVS_KEY_ATTR_ETHERTYPE)) {
 swkey-&amp;gt;eth.type = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]);
-if (ntohs(swkey-&amp;gt;eth.type) &amp;lt; 1536)
+if (ntohs(swkey-&amp;gt;eth.type) &amp;lt; ETH_P_802_3_MIN)
 return -EINVAL;
 attrs &amp;amp;= ~(1 &amp;lt;&amp;lt; OVS_KEY_ATTR_ETHERTYPE);
 } else {
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 37a56ee..6cbac99 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -511,7 +511,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr,
 encaps_data = bridge_tunnel_header;
 encaps_len = sizeof(bridge_tunnel_header);
 skip_header_bytes -= 2;
-} else if (ethertype &amp;gt; 0x600) {
+} else if (ethertype &amp;gt;= ETH_P_802_3_MIN) {
 encaps_data = rfc1042_header;
 encaps_len = sizeof(rfc1042_header);
 skip_header_bytes -= 2;
&lt;/pre&gt;</description>
    <dc:creator>Simon Horman</dc:creator>
    <dc:date>2013-03-28T04:38:25</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6124">
    <title>[PATCH] bridge: netfilter: use PTR_RET instead of IS_ERR +PTR_ERR</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6124</link>
    <description>&lt;pre&gt;This uses PTR_RET instead of IS_ERR and PTR_ERR in order to increase
readability.

Signed-off-by: Silviu-Mihai Popescu &amp;lt;silviupopescu1990&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 net/bridge/netfilter/ebtable_broute.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/net/bridge/netfilter/ebtable_broute.c b/net/bridge/netfilter/ebtable_broute.c
index 40d8258..70f656c 100644
--- a/net/bridge/netfilter/ebtable_broute.c
+++ b/net/bridge/netfilter/ebtable_broute.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -64,9 +64,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int ebt_broute(struct sk_buff *skb)
 static int __net_init broute_net_init(struct net *net)
 {
 net-&amp;gt;xt.broute_table = ebt_register_table(net, &amp;amp;broute_table);
-if (IS_ERR(net-&amp;gt;xt.broute_table))
-return PTR_ERR(net-&amp;gt;xt.broute_table);
-return 0;
+return PTR_RET(net-&amp;gt;xt.broute_table);
 }
 
 static void __net_exit broute_net_exit(struct net *net)
&lt;/pre&gt;</description>
    <dc:creator>Silviu-Mihai Popescu</dc:creator>
    <dc:date>2013-03-12T18:11:33</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6123">
    <title>[PATCH -next] bridge: using for_each_set_bit to simplifythe code</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6123</link>
    <description>&lt;pre&gt;From: Wei Yongjun &amp;lt;yongjun_wei&amp;lt; at &amp;gt;trendmicro.com.cn&amp;gt;

Using for_each_set_bit() to simplify the code.

Signed-off-by: Wei Yongjun &amp;lt;yongjun_wei&amp;lt; at &amp;gt;trendmicro.com.cn&amp;gt;
---
 net/bridge/br_netlink.c | 5 +----
 net/bridge/br_fdb.c     | 10 ++--------
 2 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 27aa3ee..2135afa 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -135,10 +135,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int br_fill_ifinfo(struct sk_buff *skb,
 goto nla_put_failure;
 
 pvid = br_get_pvid(pv);
-for (vid = find_first_bit(pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN);
-     vid &amp;lt; BR_VLAN_BITMAP_LEN;
-     vid = find_next_bit(pv-&amp;gt;vlan_bitmap,
- BR_VLAN_BITMAP_LEN, vid+1)) {
+for_each_set_bit(vid, pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN) {
 vinfo.vid = vid;
 vinfo.flags = 0;
 if (vid == pvid)

diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index b0812c9..4f68df1 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -724,13 +724,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int br_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
  * specify a VLAN.  To be nice, add/update entry for every
  * vlan on this port.
  */
-vid = find_first_bit(pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN);
-while (vid &amp;lt; BR_VLAN_BITMAP_LEN) {
+for_each_set_bit(vid, pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN) {
 err = __br_fdb_add(ndm, p, addr, nlh_flags, vid);
 if (err)
 goto out;
-vid = find_next_bit(pv-&amp;gt;vlan_bitmap,
-    BR_VLAN_BITMAP_LEN, vid+1);
 }
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -815,11 +812,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
  * vlan on this port.
  */
 err = -ENOENT;
-vid = find_first_bit(pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN);
-while (vid &amp;lt; BR_VLAN_BITMAP_LEN) {
+for_each_set_bit(vid, pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN) {
 err &amp;amp;= __br_fdb_delete(p, addr, vid);
-vid = find_next_bit(pv-&amp;gt;vlan_bitmap,
-    BR_VLAN_BITMAP_LEN, vid+1);
 }
 }
 out:


&lt;/pre&gt;</description>
    <dc:creator>Wei Yongjun</dc:creator>
    <dc:date>2013-03-11T15:45:23</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6122">
    <title>[PATCH -next] bridge: using for_each_set_bit_from tosimplify the code</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6122</link>
    <description>&lt;pre&gt;From: Wei Yongjun &amp;lt;yongjun_wei&amp;lt; at &amp;gt;trendmicro.com.cn&amp;gt;

Using for_each_set_bit_from() to simplify the code.

Signed-off-by: Wei Yongjun &amp;lt;yongjun_wei&amp;lt; at &amp;gt;trendmicro.com.cn&amp;gt;
---
 net/bridge/br_fdb.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index b0812c9..48fe761 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -161,9 +161,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr)
 if (!pv)
 return;
 
-for (vid = find_next_bit(pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN, vid);
-     vid &amp;lt; BR_VLAN_BITMAP_LEN;
-     vid = find_next_bit(pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN, vid+1)) {
+for_each_set_bit_from(vid, pv-&amp;gt;vlan_bitmap, BR_VLAN_BITMAP_LEN) {
 f = __br_fdb_get(br, br-&amp;gt;dev-&amp;gt;dev_addr, vid);
 if (f &amp;amp;&amp;amp; f-&amp;gt;is_local &amp;amp;&amp;amp; !f-&amp;gt;dst)
 fdb_delete(br, f);


&lt;/pre&gt;</description>
    <dc:creator>Wei Yongjun</dc:creator>
    <dc:date>2013-03-11T15:43:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6118">
    <title>Problem with multicast traffic when using network bridging</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6118</link>
    <description>&lt;pre&gt;After upgrading the kernel on the box that acts as a bridge between my 
wireless and wired networks I observed that access to my UPnP media 
servers became unreliable.

I tried a number of kernel versions to attempt to establish when things 
went wrong and got as far as

3.4 - works
3.5.7 - doesn't work
3.6.11 - doesn't work
3.7.1 - doesn't work
3.7.6 - doesn't work

I can test other versions if required but it doesn't always fail 
instantly and sometimes takes several hours before I notice it has 
failed so don't expect a quick response

All of the above are built with
CONFIG_BRIDGE_IGMP_SNOOPING=y

Knowing that I wasn't having problems with other traffic and the UPnP 
was the only protocol I use that relies on multicast I started looking 
at what changed in the file net/bridge/br_multicast.c and found the patch

bridge: Add multicast_querier toggle and disable queries by default
http://patchwork.ozlabs.org/patch/152295/

so tried

echo 1 &amp;gt;/sys/class/net/br0/bridge/multicast_querier

and after 48 hours of testing running kernel 3.7.6 it seems to be 
working reliably.

Whilst setting that value manually at boot time would be adequate to 
meet my needs it is reasonable to assume that vendors will build 
wireless access points using new kernels that would also exhibit this 
behaviour and users may not be able to get at the internals easily to 
change this configuration.

I therefore suspect that the assumption this patch makes that generating 
queries in the bridge is only an optimisation and isn't necessary isn't 
universally true.

Other details about my network configuration that may be relevant:
There are 2 UPnP media servers, one on the bridge machine and one on a 
machine on the wired network
There are 1 or 2 UPnP media control point / renderers, both on the 
wireless network
As I'm not using multicast on offsite links the IGMP proxy setting is 
disabled on my ADSL router (which is connected to the wired network)

Things I think are irrelevant but I'll mention just in case:
Bridge machine is a Marvell Kirkwood ARM5TE CPU
The wired network includes some homeplug connections

Have I done something unreasonable with my configuration or have I found 
a bug?

Thanks

Adam Baker

&lt;/pre&gt;</description>
    <dc:creator>Adam Baker</dc:creator>
    <dc:date>2013-02-23T18:18:56</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.network.bridge/6107">
    <title>[PATCH net-next 0/4] Allow bridge to function innon-promisc mode</title>
    <link>http://comments.gmane.org/gmane.linux.network.bridge/6107</link>
    <description>&lt;pre&gt;The series adds an ability for the bridge to function in non-promiscuous mode.
We do it in 3 steps.
First we add an interface to palce the switch into non-promisc mode.  In
this mode, all port of the switch turn promisc off and turn on IFF_ALLMULTI
to continue handling multicast traffic.
Second we add an ability to designate a bridge port as uplink.
Third we add IFF_UNICAST_FLT support to the bridge and sync all unicast
HW addresses to the uplink ports.

Default bridge operation continues to remain "promiscuous".  The new
functionality has to be enabled via sysfs (similar to other bridge extensions).

The uplink mode is implemented as a flag on a bridge port.  The api to
change that flag follows the existing api to enable/disable other existing
flags.

Changes since rfc v2:
* Sync/unsync address on uplink upon the uplink flag change.  This allows
for uplink replacements without loss of addresses.

Changes since rfc v1:
* Fixed submit log
* Simplifyied uplink logic.  Uplink is now a flag per port.  This removes the
  need for a separate list.
* Clean-up hw list once the port has been removed.

Vlad Yasevich (4):
  bridge: Add sysfs interface to control promisc mode
  bridge: Allow an ability to designate an uplink port
  bridge: Implement IFF_UNICAST_FLT
  bridge: sync device list when a new uplink is designated

 include/uapi/linux/if_link.h |    1 +
 net/bridge/br_device.c       |   52 +++++++++++++++++++++++++++++++++++++++++-
 net/bridge/br_fdb.c          |    6 +++++
 net/bridge/br_if.c           |   24 +++++++++++++++----
 net/bridge/br_netlink.c      |   13 ++++++++++
 net/bridge/br_private.h      |    3 ++
 net/bridge/br_sysfs_br.c     |   17 +++++++++++++
 net/bridge/br_sysfs_if.c     |   27 +++++++++++++++++++++
 8 files changed, 137 insertions(+), 6 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Vlad Yasevich</dc:creator>
    <dc:date>2013-03-13T01:45:22</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.linux.network.bridge">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.linux.network.bridge</link>
  </textinput>
</rdf:RDF>
