<div dir="ltr"><div>Hi Alvin,<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Nov 18, 2021 at 5:48 PM Alvin Šipraga <<a href="mailto:ALSI@bang-olufsen.dk">ALSI@bang-olufsen.dk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 11/18/21 23:25, Brian Hutchinson wrote:<br>
> Hi Alvin,<br>
> <br>
> <br>
> On Thu, Nov 18, 2021 at 4:20 PM Alvin Šipraga <<a href="mailto:ALSI@bang-olufsen.dk" target="_blank">ALSI@bang-olufsen.dk</a> <br>
> <mailto:<a href="mailto:ALSI@bang-olufsen.dk" target="_blank">ALSI@bang-olufsen.dk</a>>> wrote:<br>
> <br>
>     Hi Brian,<br>
> <br>
>     On 11/18/21 01:20, Brian Hutchinson wrote:<br>
>       > Yet another update, I was able to get it working .. but feel<br>
>     like it is<br>
>       > a hack so comments welcome ... see below:<br>
>       ><br>
> <br>
>     <snip><br>
> <br>
>       ><br>
>       > I tried and tried to get eth0 to come up before the bond was brought<br>
>       > up.  I had everything named in lexical order but didn't appear to<br>
>       > matter.  I added a eth0.network file and in it specified<br>
>       > |ActivationPolicy=|always-up and other things but could not get<br>
>     eth0 to<br>
>       > come up.<br>
> <br>
>     What kernel version are you using? Since Linux 5.11 we have the<br>
> <br>
> <br>
> I'm using linux-fslc-imx 5.10.69<br>
> <br>
>     following two changes ([1] and [2]) which should automatically bring<br>
>     up/down the master (eth0) whenever user ports (lan1, lan2) are brought<br>
>     up/down. Please confirm whether or not you are using 5.11 or later.<br>
> <br>
> <br>
> I don't think that will work either.  eth0 has to be up and stay up or <br>
> DSA driver won't work at all.  eth0 has to be up or the slaves can't be <br>
> added to the bond.<br>
<br>
This use-case is also addressed in the newer kernels (>=5.11), see the <br>
below commit. It is not only when a user port is brought up (as I <br>
summarized it), but rather when it is opened.<br>
<br>
commit 9d5ef190e5615a7b63af89f88c4106a5bc127974<br>
Author: Vladimir Oltean <<a href="mailto:vladimir.oltean@nxp.com" target="_blank">vladimir.oltean@nxp.com</a>><br>
Date:   Fri Feb 5 15:37:10 2021 +0200<br>
<br>
     net: dsa: automatically bring up DSA master when opening user port<br>
<br>
     DSA wants the master interface to be open before the user port is <br>
due to<br>
     historical reasons. The promiscuity of interfaces that are down used to<br>
     have issues, as referenced Lennert Buytenhek in commit df02c6ff2e39<br>
     ("dsa: fix master interface allmulti/promisc handling").<br>
<br>
     The bugfix mentioned there, commit b6c40d68ff64 ("net: only invoke<br>
     dev->change_rx_flags when device is UP"), was basically a "don't do<br>
     that" approach to working around the promiscuity while down issue.<br>
<br>
     Further work done by Vlad Yasevich in commit d2615bf45069 ("net: core:<br>
     Always propagate flag changes to interfaces") has resolved the<br>
     underlying issue, and it is strictly up to the DSA and 8021q drivers<br>
     now, it is no longer mandated by the networking core that the master<br>
     interface must be up when changing its promiscuity.<br>
<br>
     From DSA's point of view, deciding to error out in dsa_slave_open<br>
     because the master isn't up is<br>
     (a) a bad user experience and<br>
     (b) knocking at an open door.<br>
     Even if there still was an issue with promiscuity while down, DSA could<br>
     still just open the master and avoid it.<br>
<br>
     Doing it this way has the additional benefit that user space can now<br>
     remove DSA-specific workarounds, like systemd-networkd with <br>
BindCarrier:<br>
     <a href="https://github.com/systemd/systemd/issues/7478" rel="noreferrer" target="_blank">https://github.com/systemd/systemd/issues/7478</a><br>
<br>
     And we can finally remove one of the 2 bullets in the "Common pitfalls<br>
     using DSA setups" chapter.<br>
<br>
     Tested with two cascaded DSA switches:<br>
<br>
     $ ip link set sw0p2 up<br>
     fsl_enetc 0000:00:00.2 eno2: configuring for fixed/internal link mode<br>
     fsl_enetc 0000:00:00.2 eno2: Link is Up - 1Gbps/Full - flow control <br>
rx/tx<br>
     mscc_felix 0000:00:00.5 swp0: configuring for fixed/sgmii link mode<br>
     mscc_felix 0000:00:00.5 swp0: Link is Up - 1Gbps/Full - flow <br>
control off<br>
     8021q: adding VLAN 0 to HW filter on device swp0<br>
     sja1105 spi2.0 sw0p2: configuring for phy/rgmii-id link mode<br>
     IPv6: ADDRCONF(NETDEV_CHANGE): eno2: link becomes ready<br>
     IPv6: ADDRCONF(NETDEV_CHANGE): swp0: link becomes ready<br>
<br>
     Signed-off-by: Vladimir Oltean <<a href="mailto:vladimir.oltean@nxp.com" target="_blank">vladimir.oltean@nxp.com</a>><br>
     Reviewed-by: Andrew Lunn <<a href="mailto:andrew@lunn.ch" target="_blank">andrew@lunn.ch</a>><br>
     Reviewed-by: Florian Fainelli <<a href="mailto:f.fainelli@gmail.com" target="_blank">f.fainelli@gmail.com</a>><br>
     Signed-off-by: Jakub Kicinski <<a href="mailto:kuba@kernel.org" target="_blank">kuba@kernel.org</a>><br>
<br></blockquote><div><br></div><div>Hmm, looks like I might just have to wait a bit until we can step up to 5.11.  We just stepped up to 5.10.69.  IMX8 Freescale yocto lags a bit.  And too bleeding edge hurts.<br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> <br>
> If you look back up the thread where I'm doing the commands manually <br>
> (I'll re-copy below) ... the first thing is to bring eth0 up.  If that <br>
> doesn't happen, nothing else works.<br>
<br>
I forgot about the bond in my reply. Does it work if you do <br>
BindCarrier=eth0 from the bond's .network file? You might be out of luck <br></blockquote><div><br></div><div>No.  Trying it in my 10-bond1.network doesn't work either :(</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
depending on how networkd implements BindCarrier=, but hopefully <br>
something like that works. Remember also that you need a .network file <br>
covering eth0, even though it's just a conduit and you don't want to <br></blockquote><div><br></div><div>So I tried having a pretty bare 05-eth0.network file and tried everything I could think of to get eth0 up with systemd and nothing worked.</div><div>I'm currently running without a .network file for eth0 and it appears to work just fine.  Maybe my board will burst into flames at any moment.  Which might make me happy.<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
give it an IP. You can do that by omitting the [Network] section and <br>
just having a [Match] on eth0.<br></blockquote><div><br></div><div>That's pretty much what I did.  Tried "always-up" and all kinds of stuff.  Nothing worked.  That's when I decided to do a .service hack and that worked.  It's ugly.  Don't like it ... but hey, after two days of trying to figure out how to bring an interface up with systemd to get DSA to work ... I didn't care anymore.</div><div><br></div><div>I appreciate the info.  I see Vladimir's name on it so I'm going to harass him some.  He likes it! ;)</div><div><br></div><div>Regards,</div><div><br></div><div>Brian<br></div><br></div></div>