diff mbox series

[net-next,4/4] Revert "net: ipv4: handle DSA enabled master network devices"

Message ID 20210127010028.1619443-5-olteanv@gmail.com
State Superseded
Headers show
Series None | expand

Commit Message

Vladimir Oltean Jan. 27, 2021, 1 a.m. UTC
From: Vladimir Oltean <vladimir.oltean@nxp.com>

This reverts commit 728c02089a0e3eefb02e9927bfae50490f40e72e.

Since 2015 DSA has gained more integration with the network stack, we
can now have the same functionality without explicitly open-coding for
it:
- It now opens the DSA master netdevice automatically whenever a user
  netdevice is opened.
- The master and switch interfaces are coupled in an upper/lower
  hierarchy using the netdev adjacency lists.

In the nfsroot example below, the interface chosen by autoconfig was
swp3, and every interface except that and the DSA master, eth1, was
brought down afterwards:

[    8.714215] mscc_felix 0000:00:00.5 swp0 (uninitialized): PHY [0000:00:00.3:10] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)
[    8.978041] mscc_felix 0000:00:00.5 swp1 (uninitialized): PHY [0000:00:00.3:11] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)
[    9.246134] mscc_felix 0000:00:00.5 swp2 (uninitialized): PHY [0000:00:00.3:12] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)
[    9.486203] mscc_felix 0000:00:00.5 swp3 (uninitialized): PHY [0000:00:00.3:13] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)
[    9.512827] mscc_felix 0000:00:00.5: configuring for fixed/internal link mode
[    9.521047] mscc_felix 0000:00:00.5: Link is Up - 2.5Gbps/Full - flow control off
[    9.530382] device eth1 entered promiscuous mode
[    9.535452] DSA: tree 0 setup
[    9.539777] printk: console [netcon0] enabled
[    9.544504] netconsole: network logging started
[    9.555047] fsl_enetc 0000:00:00.2 eth1: configuring for fixed/internal link mode
[    9.562790] fsl_enetc 0000:00:00.2 eth1: Link is Up - 1Gbps/Full - flow control off
[    9.564661] 8021q: adding VLAN 0 to HW filter on device bond0
[    9.637681] fsl_enetc 0000:00:00.0 eth0: PHY [0000:00:00.0:02] driver [Qualcomm Atheros AR8031/AR8033] (irq=POLL)
[    9.655679] fsl_enetc 0000:00:00.0 eth0: configuring for inband/sgmii link mode
[    9.666611] mscc_felix 0000:00:00.5 swp0: configuring for inband/qsgmii link mode
[    9.676216] 8021q: adding VLAN 0 to HW filter on device swp0
[    9.682086] mscc_felix 0000:00:00.5 swp1: configuring for inband/qsgmii link mode
[    9.690700] 8021q: adding VLAN 0 to HW filter on device swp1
[    9.696538] mscc_felix 0000:00:00.5 swp2: configuring for inband/qsgmii link mode
[    9.705131] 8021q: adding VLAN 0 to HW filter on device swp2
[    9.710964] mscc_felix 0000:00:00.5 swp3: configuring for inband/qsgmii link mode
[    9.719548] 8021q: adding VLAN 0 to HW filter on device swp3
[    9.747811] Sending DHCP requests ..
[   12.742899] mscc_felix 0000:00:00.5 swp1: Link is Up - 1Gbps/Full - flow control rx/tx
[   12.743828] mscc_felix 0000:00:00.5 swp0: Link is Up - 1Gbps/Full - flow control off
[   12.747062] IPv6: ADDRCONF(NETDEV_CHANGE): swp1: link becomes ready
[   12.755216] fsl_enetc 0000:00:00.0 eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[   12.766603] IPv6: ADDRCONF(NETDEV_CHANGE): swp0: link becomes ready
[   12.783188] mscc_felix 0000:00:00.5 swp2: Link is Up - 1Gbps/Full - flow control rx/tx
[   12.785354] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   12.799535] IPv6: ADDRCONF(NETDEV_CHANGE): swp2: link becomes ready
[   13.803141] mscc_felix 0000:00:00.5 swp3: Link is Up - 1Gbps/Full - flow control rx/tx
[   13.811646] IPv6: ADDRCONF(NETDEV_CHANGE): swp3: link becomes ready
[   15.452018] ., OK
[   15.470336] IP-Config: Got DHCP answer from 10.0.0.1, my address is 10.0.0.39
[   15.477887] IP-Config: Complete:
[   15.481330]      device=swp3, hwaddr=00:04:9f:05:de:0a, ipaddr=10.0.0.39, mask=255.255.255.0, gw=10.0.0.1
[   15.491846]      host=10.0.0.39, domain=(none), nis-domain=(none)
[   15.498429]      bootserver=10.0.0.1, rootserver=10.0.0.1, rootpath=
[   15.498481]      nameserver0=8.8.8.8
[   15.627542] fsl_enetc 0000:00:00.0 eth0: Link is Down
[   15.690903] mscc_felix 0000:00:00.5 swp0: Link is Down
[   15.745216] mscc_felix 0000:00:00.5 swp1: Link is Down
[   15.800498] mscc_felix 0000:00:00.5 swp2: Link is Down
[   15.858143] ALSA device list:
[   15.861420]   No soundcards found.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 net/ipv4/ipconfig.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

Comments

Andrew Lunn Jan. 28, 2021, 12:56 a.m. UTC | #1
On Wed, Jan 27, 2021 at 03:00:28AM +0200, Vladimir Oltean wrote:
> From: Vladimir Oltean <vladimir.oltean@nxp.com>

> 

> This reverts commit 728c02089a0e3eefb02e9927bfae50490f40e72e.

> 

> Since 2015 DSA has gained more integration with the network stack, we

> can now have the same functionality without explicitly open-coding for

> it:

> - It now opens the DSA master netdevice automatically whenever a user

>   netdevice is opened.

> - The master and switch interfaces are coupled in an upper/lower

>   hierarchy using the netdev adjacency lists.

> 

> In the nfsroot example below, the interface chosen by autoconfig was

> swp3, and every interface except that and the DSA master, eth1, was

> brought down afterwards:

> 

> [    8.714215] mscc_felix 0000:00:00.5 swp0 (uninitialized): PHY [0000:00:00.3:10] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)

> [    8.978041] mscc_felix 0000:00:00.5 swp1 (uninitialized): PHY [0000:00:00.3:11] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)

> [    9.246134] mscc_felix 0000:00:00.5 swp2 (uninitialized): PHY [0000:00:00.3:12] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)

> [    9.486203] mscc_felix 0000:00:00.5 swp3 (uninitialized): PHY [0000:00:00.3:13] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)

> [    9.512827] mscc_felix 0000:00:00.5: configuring for fixed/internal link mode

> [    9.521047] mscc_felix 0000:00:00.5: Link is Up - 2.5Gbps/Full - flow control off

> [    9.530382] device eth1 entered promiscuous mode

> [    9.535452] DSA: tree 0 setup

> [    9.539777] printk: console [netcon0] enabled

> [    9.544504] netconsole: network logging started

> [    9.555047] fsl_enetc 0000:00:00.2 eth1: configuring for fixed/internal link mode

> [    9.562790] fsl_enetc 0000:00:00.2 eth1: Link is Up - 1Gbps/Full - flow control off

> [    9.564661] 8021q: adding VLAN 0 to HW filter on device bond0

> [    9.637681] fsl_enetc 0000:00:00.0 eth0: PHY [0000:00:00.0:02] driver [Qualcomm Atheros AR8031/AR8033] (irq=POLL)

> [    9.655679] fsl_enetc 0000:00:00.0 eth0: configuring for inband/sgmii link mode

> [    9.666611] mscc_felix 0000:00:00.5 swp0: configuring for inband/qsgmii link mode

> [    9.676216] 8021q: adding VLAN 0 to HW filter on device swp0

> [    9.682086] mscc_felix 0000:00:00.5 swp1: configuring for inband/qsgmii link mode

> [    9.690700] 8021q: adding VLAN 0 to HW filter on device swp1

> [    9.696538] mscc_felix 0000:00:00.5 swp2: configuring for inband/qsgmii link mode

> [    9.705131] 8021q: adding VLAN 0 to HW filter on device swp2

> [    9.710964] mscc_felix 0000:00:00.5 swp3: configuring for inband/qsgmii link mode

> [    9.719548] 8021q: adding VLAN 0 to HW filter on device swp3

> [    9.747811] Sending DHCP requests ..

> [   12.742899] mscc_felix 0000:00:00.5 swp1: Link is Up - 1Gbps/Full - flow control rx/tx

> [   12.743828] mscc_felix 0000:00:00.5 swp0: Link is Up - 1Gbps/Full - flow control off

> [   12.747062] IPv6: ADDRCONF(NETDEV_CHANGE): swp1: link becomes ready

> [   12.755216] fsl_enetc 0000:00:00.0 eth0: Link is Up - 1Gbps/Full - flow control rx/tx

> [   12.766603] IPv6: ADDRCONF(NETDEV_CHANGE): swp0: link becomes ready

> [   12.783188] mscc_felix 0000:00:00.5 swp2: Link is Up - 1Gbps/Full - flow control rx/tx

> [   12.785354] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

> [   12.799535] IPv6: ADDRCONF(NETDEV_CHANGE): swp2: link becomes ready

> [   13.803141] mscc_felix 0000:00:00.5 swp3: Link is Up - 1Gbps/Full - flow control rx/tx

> [   13.811646] IPv6: ADDRCONF(NETDEV_CHANGE): swp3: link becomes ready

> [   15.452018] ., OK

> [   15.470336] IP-Config: Got DHCP answer from 10.0.0.1, my address is 10.0.0.39

> [   15.477887] IP-Config: Complete:

> [   15.481330]      device=swp3, hwaddr=00:04:9f:05:de:0a, ipaddr=10.0.0.39, mask=255.255.255.0, gw=10.0.0.1

> [   15.491846]      host=10.0.0.39, domain=(none), nis-domain=(none)

> [   15.498429]      bootserver=10.0.0.1, rootserver=10.0.0.1, rootpath=

> [   15.498481]      nameserver0=8.8.8.8

> [   15.627542] fsl_enetc 0000:00:00.0 eth0: Link is Down

> [   15.690903] mscc_felix 0000:00:00.5 swp0: Link is Down

> [   15.745216] mscc_felix 0000:00:00.5 swp1: Link is Down

> [   15.800498] mscc_felix 0000:00:00.5 swp2: Link is Down

> [   15.858143] ALSA device list:

> [   15.861420]   No soundcards found.

> 

> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>


Reviewed-by: Andrew Lunn <andrew@lunn.ch>


    Andrew
Florian Fainelli Jan. 28, 2021, 1:43 a.m. UTC | #2
On 1/26/2021 5:00 PM, Vladimir Oltean wrote:
> From: Vladimir Oltean <vladimir.oltean@nxp.com>

> 

> This reverts commit 728c02089a0e3eefb02e9927bfae50490f40e72e.

> 

> Since 2015 DSA has gained more integration with the network stack, we

> can now have the same functionality without explicitly open-coding for

> it:

> - It now opens the DSA master netdevice automatically whenever a user

>   netdevice is opened.

> - The master and switch interfaces are coupled in an upper/lower

>   hierarchy using the netdev adjacency lists.

> 

> In the nfsroot example below, the interface chosen by autoconfig was

> swp3, and every interface except that and the DSA master, eth1, was

> brought down afterwards:

> 

> [    8.714215] mscc_felix 0000:00:00.5 swp0 (uninitialized): PHY [0000:00:00.3:10] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)

> [    8.978041] mscc_felix 0000:00:00.5 swp1 (uninitialized): PHY [0000:00:00.3:11] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)

> [    9.246134] mscc_felix 0000:00:00.5 swp2 (uninitialized): PHY [0000:00:00.3:12] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)

> [    9.486203] mscc_felix 0000:00:00.5 swp3 (uninitialized): PHY [0000:00:00.3:13] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)

> [    9.512827] mscc_felix 0000:00:00.5: configuring for fixed/internal link mode

> [    9.521047] mscc_felix 0000:00:00.5: Link is Up - 2.5Gbps/Full - flow control off

> [    9.530382] device eth1 entered promiscuous mode

> [    9.535452] DSA: tree 0 setup

> [    9.539777] printk: console [netcon0] enabled

> [    9.544504] netconsole: network logging started

> [    9.555047] fsl_enetc 0000:00:00.2 eth1: configuring for fixed/internal link mode

> [    9.562790] fsl_enetc 0000:00:00.2 eth1: Link is Up - 1Gbps/Full - flow control off

> [    9.564661] 8021q: adding VLAN 0 to HW filter on device bond0

> [    9.637681] fsl_enetc 0000:00:00.0 eth0: PHY [0000:00:00.0:02] driver [Qualcomm Atheros AR8031/AR8033] (irq=POLL)

> [    9.655679] fsl_enetc 0000:00:00.0 eth0: configuring for inband/sgmii link mode

> [    9.666611] mscc_felix 0000:00:00.5 swp0: configuring for inband/qsgmii link mode

> [    9.676216] 8021q: adding VLAN 0 to HW filter on device swp0

> [    9.682086] mscc_felix 0000:00:00.5 swp1: configuring for inband/qsgmii link mode

> [    9.690700] 8021q: adding VLAN 0 to HW filter on device swp1

> [    9.696538] mscc_felix 0000:00:00.5 swp2: configuring for inband/qsgmii link mode

> [    9.705131] 8021q: adding VLAN 0 to HW filter on device swp2

> [    9.710964] mscc_felix 0000:00:00.5 swp3: configuring for inband/qsgmii link mode

> [    9.719548] 8021q: adding VLAN 0 to HW filter on device swp3

> [    9.747811] Sending DHCP requests ..

> [   12.742899] mscc_felix 0000:00:00.5 swp1: Link is Up - 1Gbps/Full - flow control rx/tx

> [   12.743828] mscc_felix 0000:00:00.5 swp0: Link is Up - 1Gbps/Full - flow control off

> [   12.747062] IPv6: ADDRCONF(NETDEV_CHANGE): swp1: link becomes ready

> [   12.755216] fsl_enetc 0000:00:00.0 eth0: Link is Up - 1Gbps/Full - flow control rx/tx

> [   12.766603] IPv6: ADDRCONF(NETDEV_CHANGE): swp0: link becomes ready

> [   12.783188] mscc_felix 0000:00:00.5 swp2: Link is Up - 1Gbps/Full - flow control rx/tx

> [   12.785354] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

> [   12.799535] IPv6: ADDRCONF(NETDEV_CHANGE): swp2: link becomes ready

> [   13.803141] mscc_felix 0000:00:00.5 swp3: Link is Up - 1Gbps/Full - flow control rx/tx

> [   13.811646] IPv6: ADDRCONF(NETDEV_CHANGE): swp3: link becomes ready

> [   15.452018] ., OK

> [   15.470336] IP-Config: Got DHCP answer from 10.0.0.1, my address is 10.0.0.39

> [   15.477887] IP-Config: Complete:

> [   15.481330]      device=swp3, hwaddr=00:04:9f:05:de:0a, ipaddr=10.0.0.39, mask=255.255.255.0, gw=10.0.0.1

> [   15.491846]      host=10.0.0.39, domain=(none), nis-domain=(none)

> [   15.498429]      bootserver=10.0.0.1, rootserver=10.0.0.1, rootpath=

> [   15.498481]      nameserver0=8.8.8.8

> [   15.627542] fsl_enetc 0000:00:00.0 eth0: Link is Down

> [   15.690903] mscc_felix 0000:00:00.5 swp0: Link is Down

> [   15.745216] mscc_felix 0000:00:00.5 swp1: Link is Down

> [   15.800498] mscc_felix 0000:00:00.5 swp2: Link is Down

> [   15.858143] ALSA device list:

> [   15.861420]   No soundcards found.

> 

> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>


Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

-- 
Florian
diff mbox series

Patch

diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 3cd13e1bc6a7..f9ab1fb219ec 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -61,7 +61,6 @@ 
 #include <linux/export.h>
 #include <net/net_namespace.h>
 #include <net/arp.h>
-#include <net/dsa.h>
 #include <net/ip.h>
 #include <net/ipconfig.h>
 #include <net/route.h>
@@ -218,9 +217,9 @@  static int __init ic_open_devs(void)
 	last = &ic_first_dev;
 	rtnl_lock();
 
-	/* bring loopback and DSA master network devices up first */
+	/* bring loopback device up first */
 	for_each_netdev(&init_net, dev) {
-		if (!(dev->flags & IFF_LOOPBACK) && !netdev_uses_dsa(dev))
+		if (!(dev->flags & IFF_LOOPBACK))
 			continue;
 		if (dev_change_flags(dev, dev->flags | IFF_UP, NULL) < 0)
 			pr_err("IP-Config: Failed to open %s\n", dev->name);
@@ -305,6 +304,9 @@  static int __init ic_open_devs(void)
 	return 0;
 }
 
+/* Close all network interfaces except the one we've autoconfigured, and its
+ * lowers, in case it's a stacked virtual interface.
+ */
 static void __init ic_close_devs(void)
 {
 	struct ic_device *d, *next;
@@ -313,9 +315,20 @@  static void __init ic_close_devs(void)
 	rtnl_lock();
 	next = ic_first_dev;
 	while ((d = next)) {
+		bool bring_down = (d != ic_dev);
+		struct net_device *lower_dev;
+		struct list_head *iter;
+
 		next = d->next;
 		dev = d->dev;
-		if (d != ic_dev && !netdev_uses_dsa(dev)) {
+
+		netdev_for_each_lower_dev(ic_dev->dev, lower_dev, iter) {
+			if (dev == lower_dev) {
+				bring_down = false;
+				break;
+			}
+		}
+		if (bring_down) {
 			pr_debug("IP-Config: Downing %s\n", dev->name);
 			dev_change_flags(dev, d->flags, NULL);
 		}