* [Bridge] [PATCH net-next 0/2] net: DSA fixes for bridge and ip-autoconf
@ 2015-01-14 17:52 Florian Fainelli
2015-01-14 17:52 ` [Bridge] [PATCH net-next 1/2] net: ipv4: handle DSA enabled master network devices Florian Fainelli
2015-01-14 17:52 ` [Bridge] [PATCH net-next 2/2] net: bridge: reject DSA-enabled master netdevices as bridge members Florian Fainelli
0 siblings, 2 replies; 4+ messages in thread
From: Florian Fainelli @ 2015-01-14 17:52 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, bridge, kaber, davem, buytenh
Hi David,
These two patches address some real world use cases of the DSA master and slave
network devices.
You have already seen patch 1 previously and you rejected it since my
explanations were not good enough to provide a justification as to why it is
useful, hopefully this time my explanation is better.
Patch 2 solves a different, yet very real problem as well at the bridge layer
when using DSA network devices.
Thanks!
Florian Fainelli (2):
net: ipv4: handle DSA enabled master network devices
net: bridge: reject DSA-enabled master netdevices as bridge members
net/bridge/br_if.c | 10 ++++++++--
net/ipv4/ipconfig.c | 10 +++++++---
2 files changed, 15 insertions(+), 5 deletions(-)
--
2.1.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bridge] [PATCH net-next 1/2] net: ipv4: handle DSA enabled master network devices
2015-01-14 17:52 [Bridge] [PATCH net-next 0/2] net: DSA fixes for bridge and ip-autoconf Florian Fainelli
@ 2015-01-14 17:52 ` Florian Fainelli
2015-01-15 23:19 ` David Miller
2015-01-14 17:52 ` [Bridge] [PATCH net-next 2/2] net: bridge: reject DSA-enabled master netdevices as bridge members Florian Fainelli
1 sibling, 1 reply; 4+ messages in thread
From: Florian Fainelli @ 2015-01-14 17:52 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, bridge, kaber, davem, buytenh
The logic to configure a network interface for kernel IP
auto-configuration is very simplistic, and does not handle the case
where a device is stacked onto another such as with DSA. This causes the
kernel not to open and configure the master network device in a DSA
switch tree, and therefore slave network devices using this master
network devices as conduit device cannot be open.
This restriction comes from a check in net/dsa/slave.c, which is
basically checking the master netdev flags for IFF_UP and returns
-ENETDOWN if it is not the case.
Automatically bringing-up DSA master network devices allows DSA slave
network devices to be used as valid interfaces for e.g: NFS root booting
by allowing kernel IP autoconfiguration to succeed on these interfaces.
On the reverse path, make sure we do not attempt to close a DSA-enabled
device as this would implicitely prevent the slave DSA network device
from operating.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
net/ipv4/ipconfig.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 7fa18bc7e47f..d10073d2be0f 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -209,9 +209,9 @@ static int __init ic_open_devs(void)
last = &ic_first_dev;
rtnl_lock();
- /* bring loopback device up first */
+ /* bring loopback an DSA master network devices up first */
for_each_netdev(&init_net, dev) {
- if (!(dev->flags & IFF_LOOPBACK))
+ if (!(dev->flags & IFF_LOOPBACK) && !netdev_uses_dsa(dev))
continue;
if (dev_change_flags(dev, dev->flags | IFF_UP) < 0)
pr_err("IP-Config: Failed to open %s\n", dev->name);
@@ -228,6 +228,7 @@ static int __init ic_open_devs(void)
if (!(dev->flags & IFF_NOARP))
able |= IC_RARP;
able &= ic_proto_enabled;
+
if (ic_proto_enabled && !able)
continue;
oflags = dev->flags;
@@ -306,7 +307,10 @@ static void __init ic_close_devs(void)
while ((d = next)) {
next = d->next;
dev = d->dev;
- if (dev != ic_dev) {
+ /* Only bring down unused devices and not DSA enabled master
+ * devices
+ */
+ if (dev != ic_dev && !netdev_uses_dsa(dev)) {
DBG(("IP-Config: Downing %s\n", dev->name));
dev_change_flags(dev, d->flags);
}
--
2.1.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Bridge] [PATCH net-next 2/2] net: bridge: reject DSA-enabled master netdevices as bridge members
2015-01-14 17:52 [Bridge] [PATCH net-next 0/2] net: DSA fixes for bridge and ip-autoconf Florian Fainelli
2015-01-14 17:52 ` [Bridge] [PATCH net-next 1/2] net: ipv4: handle DSA enabled master network devices Florian Fainelli
@ 2015-01-14 17:52 ` Florian Fainelli
1 sibling, 0 replies; 4+ messages in thread
From: Florian Fainelli @ 2015-01-14 17:52 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, bridge, kaber, davem, buytenh
DSA-enabled master network devices with a switch tagging protocol should
strip the protocol specific format before handing the frame over to
higher layer.
When adding such a DSA master network device as a bridge member, we go
through the following code path when receiving a frame:
__netif_receive_skb_core
-> first ptype check against ptype_all is not returning any
handler for this skb
-> check and invoke rx_handler:
-> deliver frame to the bridge layer: br_handle_frame
DSA registers a ptype handler with the fake ETH_XDSA ethertype, which is
called *after* the bridge-layer rx_handler has run. br_handle_frame()
tries to parse the frame it received from the DSA master network device,
and will not be able to match any of its conditions and jumps straight
at the end of the end of br_handle_frame() and returns
RX_HANDLER_CONSUMED there.
Since we returned RX_HANDLER_CONSUMED, __netif_receive_skb_core() stops
RX processing for this frame and returns NET_RX_SUCCESS, so we never get
a chance to call our switch tag packet processing logic and deliver
frames to the DSA slave network devices, and so we do not get any
functional bridge members at all.
Instead of cluttering the bridge receive path with DSA-specific checks,
and rely on assumptions about how __netif_receive_skb_core() is
processing frames, we simply deny adding the DSA master network device
(conduit interface) as a bridge member, leaving only the slave DSA
network devices to be bridge members, since those will work correctly in
all circumstances.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
net/bridge/br_if.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index 81e49fb73169..b087d278c679 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -436,10 +436,16 @@ int br_add_if(struct net_bridge *br, struct net_device *dev)
int err = 0;
bool changed_addr;
- /* Don't allow bridging non-ethernet like devices */
+ /* Don't allow bridging non-ethernet like devices, or DSA-enabled
+ * master network devices since the bridge layer rx_handler prevents
+ * the DSA fake ethertype handler to be invoked, so we do not strip off
+ * the DSA switch tag protocol header and the bridge layer just return
+ * RX_HANDLER_CONSUMED, stopping RX processing for these frames.
+ */
if ((dev->flags & IFF_LOOPBACK) ||
dev->type != ARPHRD_ETHER || dev->addr_len != ETH_ALEN ||
- !is_valid_ether_addr(dev->dev_addr))
+ !is_valid_ether_addr(dev->dev_addr) ||
+ netdev_uses_dsa(dev))
return -EINVAL;
/* No bridging of bridges */
--
2.1.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Bridge] [PATCH net-next 1/2] net: ipv4: handle DSA enabled master network devices
2015-01-14 17:52 ` [Bridge] [PATCH net-next 1/2] net: ipv4: handle DSA enabled master network devices Florian Fainelli
@ 2015-01-15 23:19 ` David Miller
0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2015-01-15 23:19 UTC (permalink / raw)
To: f.fainelli; +Cc: netdev, bridge, kaber, buytenh
From: Florian Fainelli <f.fainelli@gmail.com>
Date: Wed, 14 Jan 2015 09:52:11 -0800
> - /* bring loopback device up first */
> + /* bring loopback an DSA master network devices up first */
Typo: "an" should be "and"
> - if (dev != ic_dev) {
> + /* Only bring down unused devices and not DSA enabled master
> + * devices
> + */
> + if (dev != ic_dev && !netdev_uses_dsa(dev)) {
You don't have to add a comment which just reads the code, I'm
a programmer so I am able to do that all on my own :-)
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-01-15 23:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-14 17:52 [Bridge] [PATCH net-next 0/2] net: DSA fixes for bridge and ip-autoconf Florian Fainelli
2015-01-14 17:52 ` [Bridge] [PATCH net-next 1/2] net: ipv4: handle DSA enabled master network devices Florian Fainelli
2015-01-15 23:19 ` David Miller
2015-01-14 17:52 ` [Bridge] [PATCH net-next 2/2] net: bridge: reject DSA-enabled master netdevices as bridge members Florian Fainelli
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).