<div dir="auto">Most of this looks like it could be done with systemd-networkd to create a bond .netdev, with a small oneshot service for i2c. (What's the exact criteria for when it should be run? Does it depend on bond0 being there, does it need to be last, etc?)</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 16, 2021, 02:58 Brian Hutchinson <<a href="mailto:b.hutchman@gmail.com">b.hutchman@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi,</div><div><br></div><div>I'm on a IMX8 platform and have a Microchip KSZ9567 Ethernet switch.  I can use IP commands to manually bring lan1 and lan2 interfaces up and then create a redundant/failover bond ... but I'm having difficulty figuring out how to do this the "systemd" way.</div><div><br></div><div>My first attempt was to just have systemd run a script of all the commands I do manually but during system startup there appears to be race conditions so I have to set my service type to "Idle" and sometimes even that doesn't work. So I want to exploit any systemd support for DSA and bonding.</div><div><br></div><div>Here is script my manual steps which is what I want systemd to ultimately do:</div><div><br></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">#!/bin/bash
</span><br>
<br># Create a redundant bond between ksz9567 DSA lan1 and lan2 interfaces <br>
<br></span></div><div><span style="font-family:monospace"># Load bonding kernel module
<br>modprobe bonding
<br>
<br># Bring up CPU interface (cpu to switch port 7 - the RGMII link)
<br>ip link set eth0 up
<br>
<br># Create a bond
<br>echo +bond0 > /sys/class/net/bonding_masters
<br>
<br># Set mode to active-backup (redundancy failover)
<br>echo active-backup > /sys/class/net/bond0/bonding/mode
<br>
<br># Set time it takes (in ms) for slave to move when a link goes down
<br>echo 1000 > /sys/class/net/bond0/bonding/miimon
<br>
<br># Add slaves to bond
<br>
<br>echo +lan1 > /sys/class/net/bond0/bonding/slaves
<br>echo +lan2 > /sys/class/net/bond0/bonding/slaves
<br>
<br># Set IP and netmask of the bond
<br>ip addr add <a href="http://192.168.0.4/24" target="_blank" rel="noreferrer">192.168.0.4/24</a> dev bond0
<br>
<br># And bring bond up.  Pings and network connectivity should work now
<br>ip link set bond0 up
<br>
<br># For a board that doesn't have Ethernet switch hardware strapped to enable at boot .. enable it now
<br>i2cset -f -y 0 0x5f 0x03 0x00 0x01 i<br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Thanks for any information, pointers etc.</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Regards,</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Brian<br></span></div></div>
</blockquote></div>