Message ID | 20210127010028.1619443-5-olteanv@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Automatically manage DSA master interface state | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | success | CCed 4 of 4 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 1 this patch: 1 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 48 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 1 this patch: 1 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
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
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>
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); }